<?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>181083</bug_id>
          
          <creation_ts>2017-12-21 03:46:01 -0800</creation_ts>
          <short_desc>[DFG] Unify bunch of DFG 32bit code into 64bit code</short_desc>
          <delta_ts>2017-12-22 01:09:07 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1384081</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-12-21 03:46:01 -0800</bug_when>
    <thetext>[DFG] Unify bunch of DFG 32bit code into 64bit code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384084</commentid>
    <comment_count>1</comment_count>
      <attachid>330027</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-12-21 03:50:17 -0800</bug_when>
    <thetext>Created attachment 330027
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384085</commentid>
    <comment_count>2</comment_count>
      <attachid>330027</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-12-21 04:52:33 -0800</bug_when>
    <thetext>Comment on attachment 330027
Patch

Attachment 330027 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/5787915

New failing tests:
microbenchmarks/super-get-by-val-with-this-monomorphic.js.dfg-maximal-flush-validate-no-cjit
microbenchmarks/super-get-by-val-with-this-monomorphic.js.default
stress/super-property-access-exceptions.js.dfg-eager
microbenchmarks/super-get-by-val-with-this-polymorphic.js.ftl-no-cjit-validate-sampling-profiler
microbenchmarks/super-get-by-val-with-this-monomorphic.js.no-cjit-validate-phases
microbenchmarks/super-get-by-val-with-this-polymorphic.js.ftl-no-cjit-b3o1
stress/super-property-access-exceptions.js.ftl-eager-no-cjit-b3o1
microbenchmarks/super-get-by-val-with-this-monomorphic.js.ftl-eager
stress/super-property-access.js.no-cjit-validate-phases
stress/super-property-access-exceptions.js.default
stress/super-property-access-exceptions.js.no-llint
stress/super-property-access-exceptions.js.ftl-no-cjit-no-inline-validate
microbenchmarks/super-get-by-val-with-this-polymorphic.js.ftl-no-cjit-no-put-stack-validate
microbenchmarks/super-get-by-val-with-this-monomorphic.js.ftl-no-cjit-b3o1
stress/super-property-access-exceptions.js.dfg-maximal-flush-validate-no-cjit
microbenchmarks/super-get-by-val-with-this-monomorphic.js.no-ftl
microbenchmarks/super-get-by-val-with-this-polymorphic.js.default
stress/super-property-access-exceptions.js.ftl-no-cjit-b3o1
stress/super-property-access.js.no-cjit-collect-continuously
microbenchmarks/super-get-by-val-with-this-polymorphic.js.no-ftl
microbenchmarks/super-get-by-val-with-this-monomorphic.js.no-cjit-collect-continuously
microbenchmarks/super-get-by-val-with-this-monomorphic.js.ftl-no-cjit-small-pool
stress/super-property-access-exceptions.js.ftl-no-cjit-validate-sampling-profiler
stress/super-property-access.js.ftl-no-cjit-no-put-stack-validate
microbenchmarks/super-get-by-val-with-this-polymorphic.js.ftl-no-cjit-no-inline-validate
stress/super-property-access.js.ftl-eager-no-cjit-b3o1
stress/super-property-access.js.ftl-no-cjit-b3o1
microbenchmarks/super-get-by-val-with-this-monomorphic.js.dfg-eager-no-cjit-validate
microbenchmarks/super-get-by-val-with-this-monomorphic.js.dfg-eager
stress/super-property-access-exceptions.js.no-cjit-collect-continuously
stress/super-property-access.js.default
microbenchmarks/super-get-by-val-with-this-monomorphic.js.ftl-no-cjit-validate-sampling-profiler
microbenchmarks/super-get-by-val-with-this-polymorphic.js.dfg-maximal-flush-validate-no-cjit
microbenchmarks/super-get-by-val-with-this-monomorphic.js.ftl-no-cjit-no-put-stack-validate
microbenchmarks/super-get-by-val-with-this-polymorphic.js.no-cjit-validate-phases
stress/super-property-access-exceptions.js.ftl-no-cjit-no-put-stack-validate
microbenchmarks/super-get-by-val-with-this-monomorphic.js.ftl-eager-no-cjit
microbenchmarks/super-get-by-val-with-this-polymorphic.js.dfg-eager
stress/super-property-access.js.ftl-eager
microbenchmarks/super-get-by-val-with-this-polymorphic.js.no-cjit-collect-continuously
stress/super-property-access.js.dfg-maximal-flush-validate-no-cjit
microbenchmarks/super-get-by-val-with-this-monomorphic.js.no-llint
stress/super-property-access.js.ftl-no-cjit-no-inline-validate
microbenchmarks/super-get-by-val-with-this-polymorphic.js.dfg-eager-no-cjit-validate
stress/super-property-access.js.ftl-no-cjit-validate-sampling-profiler
stress/super-property-access.js.no-llint
microbenchmarks/super-get-by-val-with-this-polymorphic.js.ftl-no-cjit-small-pool
microbenchmarks/super-get-by-val-with-this-monomorphic.js.ftl-no-cjit-no-inline-validate
stress/super-property-access-exceptions.js.no-ftl
stress/super-property-access-exceptions.js.no-cjit-validate-phases
stress/super-property-access.js.dfg-eager
microbenchmarks/super-get-by-val-with-this-monomorphic.js.ftl-eager-no-cjit-b3o1
stress/super-property-access.js.ftl-eager-no-cjit
stress/super-property-access.js.no-ftl
microbenchmarks/super-get-by-val-with-this-polymorphic.js.ftl-eager-no-cjit
microbenchmarks/super-get-by-val-with-this-polymorphic.js.no-llint
stress/super-property-access.js.dfg-eager-no-cjit-validate
microbenchmarks/super-get-by-val-with-this-polymorphic.js.ftl-eager
stress/super-property-access-exceptions.js.ftl-eager
stress/super-property-access-exceptions.js.dfg-eager-no-cjit-validate
microbenchmarks/super-get-by-val-with-this-polymorphic.js.ftl-eager-no-cjit-b3o1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384086</commentid>
    <comment_count>3</comment_count>
      <attachid>330028</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-12-21 05:00:33 -0800</bug_when>
    <thetext>Created attachment 330028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384245</commentid>
    <comment_count>4</comment_count>
      <attachid>330028</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-12-21 13:57:28 -0800</bug_when>
    <thetext>Comment on attachment 330028
Patch

r=me.  Nice job.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384412</commentid>
    <comment_count>5</comment_count>
      <attachid>330028</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-12-22 00:01:05 -0800</bug_when>
    <thetext>Comment on attachment 330028
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384422</commentid>
    <comment_count>6</comment_count>
      <attachid>330028</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-22 00:22:02 -0800</bug_when>
    <thetext>Comment on attachment 330028
Patch

Rejecting attachment 330028 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 330028, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
.webkit.org/git/WebKit
   78b6594..83443c9  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 226259 = 78b659443ebc2bae756a59e6bed5056c27a8a0bc
r226260 = 83443c9dda1e7109aa3cf48afd9b16b21dc63056
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: http://webkit-queues.webkit.org/results/5799419</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384424</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-12-22 01:07:41 -0800</bug_when>
    <thetext>Committed r226261: &lt;https://trac.webkit.org/changeset/226261&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384425</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-22 01:09:07 -0800</bug_when>
    <thetext>&lt;rdar://problem/36192906&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330027</attachid>
            <date>2017-12-21 03:50:17 -0800</date>
            <delta_ts>2017-12-21 05:00:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181083-20171221205016.patch</filename>
            <type>text/plain</type>
            <size>54046</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MjEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWUzMDViNDcwMjA1NmRiYzViYmU5OTdmOWVlOTQzNjRkNWQwZmFhLi42ZDZhZDhjY2E4MjkzYWZk
M2RjZWY5NWQwMGFlYzJkMzhkNjlmODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NyBAQAorMjAxOC0xMi0yMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBVbmlmeSBidW5jaCBvZiBERkcgMzJiaXQgY29kZSBpbnRv
IDY0Yml0IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MTA4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZXJlIGFyZSBidW5jaCBvZiB0aGUgY29tcGxldGVseSBzYW1lIGNvZGUgaW4gMzJiaXQg
YW5kIDY0Yml0IERGRy4KKyAgICAgICAgVGhpcyBpcyBsYXJnZWx5IGJlY2F1c2Ugb2YgdGhlIG9s
ZCBERkcgY29kZS4gQXQgdGhhdCB0aW1lLCB3ZSBkbyBub3QKKyAgICAgICAgaGF2ZSBlbm91Z2gg
YWJzdHJhY3Rpb24gdG8gZGVzY3JpYmUgdGhlbSBpbiBvbmUgY29kZS4gQnV0IG5vdywgd2UgaGF2
ZQorICAgICAgICBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgZXRjLiBUaGV5IGFs
bG93IERGRyB0byB3cml0ZSAzMmJpdCBhbmQKKyAgICAgICAgNjRiaXQgaGFuZGxpbmcgaW4gb25l
IGNvZGUuCisKKyAgICAgICAgVGhpcyBwYXRjaCB1bmlmaWVzIGVhc3kgb25lcy4gVGhpcyBpcyBu
aWNlIHNpbmNlIGJhc2ljYWxseSAzMmJpdCBjb2RlIGlzCisgICAgICAgIGEgYml0IG9sZCBhbmQg
bm90IG1haW50YWluZWQgc28gbXVjaCBjb21wYXJlZCB0byA2NGJpdC4gSWYgd2UgY2FuIGRyb3AK
KyAgICAgICAgMzJiaXQgc3BlY2lmaWMgY29kZSBhcyBtdWNoIGFzIHBvc3NpYmxlLCBpdCB3b3Vs
ZCBiZSBuaWNlLiBGdXJ0aGVybW9yZSwKKyAgICAgICAgd2UgY2FuIGZpbmQgdmFyaW91cyBtaXN0
YWtlcyBpbiAzMmJpdDogRm9yIGV4YW1wbGUsIE5ld09iamVjdCBkb2VzIG5vdCBoYXZlCisgICAg
ICAgIG11dGF0b3JGZW5jZSBpbiAzMmJpdCB3aGlsZSA2NGJpdCBoYXMgaXQuIFRoaXMgdW5pZmlj
YXRpb24gaXMgYSBjaGFuY2UKKyAgICAgICAgdG8gZml4IG1pc2NlbGxhbmVvdXMgYnVncyBpbiAz
MmJpdCB3aGlsZSByZWR1Y2luZyBtYWludGVuYW5jZSBidXJkZW4uCisKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3VHlwZWRBcnJheVdpdGhTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9JbmRleFN0cmluZyk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkV2l0aFRoaXMpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvcGVydHlFbnVt
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVu
dW1lcmF0b3JQbmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRHZXR0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0U2V0dGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dENhbGxlZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVTdHJDYXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3T2JqZWN0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorCiAyMDE3LTEyLTE5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29t
PgogCiAgICAgICAgIFtKU0NdIERvIG5vdCBjaGVjayBpc1ZhbGlkKCkgaW4gb3BfbmV3X3JlZ2V4
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApp
bmRleCBhNjYwNWY3M2ZiNTJhZDUwMzJjNGViMTk0YmUzMmM1MjU4MTA3OTJjLi5lYzYzYjZhNDg3
ZTAwNTY3Yzg3NTY3NDE0YTA2MjgxNWY5N2VjMzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1
ZGUgIkpTRml4ZWRBcnJheS5oIgogI2luY2x1ZGUgIkpTR2VuZXJhdG9yRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJSZWdFeHBD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgpAQCAtOTA0Miw3ICs5
MDQzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1N0cmluZ09iamVjdChOb2Rl
KiBub2RlKQogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYXkoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5V2l0aFNpemUoTm9kZSogbm9kZSkKIHsKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0g
bm9kZS0+dHlwZWRBcnJheVR5cGUoKTsKQEAgLTEwOTc3LDYgKzEwOTc4LDMzOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlVGhyb3dTdGF0aWNFcnJvcihOb2RlKiBub2RlKQogICAgIG5v
UmVzdWx0KG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVy
YWJsZUxlbmd0aChOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1l
cmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3ByKCksIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKKyAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0
ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEdQUkZs
dXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9JbmRleFN0cmluZywgcmVz
dWx0R1BSLCBpbmRleEdQUik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICBjZWxs
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeUlkV2l0aFRoaXMoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2Uu
anNWYWx1ZVJlZ3MoKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOworICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzID0gdGhpc1ZhbHVlLmpzVmFsdWVS
ZWdzKCk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwor
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisKKyAgICBm
bHVzaFJlZ2lzdGVycygpOworICAgIGNhbGxPcGVyYXRpb24obV9qaXQuaXNTdHJpY3RNb2RlRm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBvcGVyYXRpb25QdXRCeUlkV2l0aFRoaXNTdHJpY3Qg
OiBvcGVyYXRpb25QdXRCeUlkV2l0aFRoaXMsCisgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVncywg
dGhpc1JlZ3MsIHZhbHVlUmVncywgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVy
KCkpKTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgbm9SZXN1bHQobm9kZSk7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShO
b2RlKiBub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNo
aWxkMygpKTsKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICBK
U1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
cmVzdWx0LnJlZ3MoKTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgd3JvbmdTdHJ1Y3R1
cmU7CisKKyAgICB3cm9uZ1N0cnVjdHVyZS5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJh
c2VSZWdzKSk7CisKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSk7CisgICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgcmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3ByKCks
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
KworICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBkb25lLmxpbmsoJm1faml0
KTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVy
ZSwgdGhpcywgb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRSZWdzLCBiYXNlUmVn
cywgcHJvcGVydHlHUFIpKTsKKyAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQ
cm9wZXJ0eUVudW1lcmF0b3IoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBHUFJGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJh
dG9yQ2VsbCwgcmVzdWx0R1BSLCBiYXNlR1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7CisKKyAg
ICBmbHVzaFJlZ2lzdGVycygpOworICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlz
KTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yLCByZXN1bHRHUFIsIGJhc2VSZWdzKTsK
KyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVudW1lcmF0b3JQbmFt
ZShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldEVudW1lcmF0b3JT
dHJ1Y3R1cmVQbmFtZSB8fCBub2RlLT5vcCgpID09IEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUp
OworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBl
bnVtZXJhdG9yLmdwcigpOworICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluQm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBpbmRleEdQUiwKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgKG5vZGUtPm9wKCkg
PT0gR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKQorICAgICAgICAgICAgPyBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKQorICAgICAg
ICAgICAgOiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpKTsKKworICAgIG1faml0Lm1vdmVWYWx1ZShqc051bGwoKSwgcmVzdWx0UmVncyk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIGlu
Qm91bmRzLmxpbmsoJm1faml0KTsKKworICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQ
cm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgaW5kZXhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYKKworICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRHZXR0ZXIoTm9kZSogbm9kZSkK
K3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7CisKKyAgICBHUFJSZWcg
b3AxR1BSID0gb3AxLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMUdQUiwgR2V0dGVy
U2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwgcmVzdWx0R1BSKTsKKworICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFNl
dHRlcihOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3Ax
KTsKKworICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3Mob3AxR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLCByZXN1bHRHUFIpOwor
CisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0Q2FsbGVlKE5vZGUqIG5vZGUpCit7CisgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSksIHJlc3VsdC5ncHIoKSk7CisgICAgY2VsbFJlc3VsdChyZXN1
bHQuZ3ByKCksIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKK3sKKyAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVzdWx0LmdwcigpKTsKKyAgICBpbnQzMlJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlU3RyQ2F0KE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEpTVmFsdWVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
KyAgICBKU1ZhbHVlT3BlcmFuZCBvcDModGhpcywgbm9kZS0+Y2hpbGQzKCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CisKKyAgICBKU1ZhbHVlUmVncyBvcDFSZWdzID0gb3AxLmpzVmFsdWVS
ZWdzKCk7CisgICAgSlNWYWx1ZVJlZ3Mgb3AyUmVncyA9IG9wMi5qc1ZhbHVlUmVncygpOworICAg
IEpTVmFsdWVSZWdzIG9wM1JlZ3M7CisKKyAgICBpZiAobm9kZS0+Y2hpbGQzKCkpCisgICAgICAg
IG9wM1JlZ3MgPSBvcDMuanNWYWx1ZVJlZ3MoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisK
KyAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgaWYgKG5vZGUtPmNo
aWxkMygpKQorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDMsIHJlc3VsdC5n
cHIoKSwgb3AxUmVncywgb3AyUmVncywgb3AzUmVncyk7CisgICAgZWxzZQorICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDIsIHJlc3VsdC5ncHIoKSwgb3AxUmVncywgb3AyUmVn
cyk7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgIGNlbGxSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5
V2l0aFNpemUoTm9kZSogbm9kZSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
KyAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJh
eVN0b3JhZ2Uobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNpemUuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
Y29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZShnbG9iYWxPYmplY3QsIHJlc3VsdEdQUiwg
c2l6ZUdQUiwgbm9kZS0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSUmVnIHNp
emVHUFIgPSBzaXplLmdwcigpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgR1BSRmx1c2hl
ZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHNlbGVjdFNjcmF0Y2hHUFIoc2l6ZUdQ
Uik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmlnTGVuZ3RoID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKE1JTl9B
UlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGlu
Z1R5cGUoKSkpKSwgc3RydWN0dXJlR1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOworICAgIGJpZ0xlbmd0aC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKSkpLCBzdHJ1Y3R1cmVHUFIpOworICAgIGRvbmUubGluaygmbV9q
aXQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0
R1BSLCBzdHJ1Y3R1cmVHUFIsIHNpemVHUFIsIG51bGxwdHIpOworICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJheShOb2RlKiBub2RlKQoreworICAgIHN3
aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZToKKyAg
ICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXlXaXRoU2l6ZShub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRSZWdz
ID0gYXJndW1lbnQuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwor
CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgIG9wZXJhdGlv
bk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKG5vZGUtPnR5cGVkQXJyYXlUeXBl
KCkpLAorICAgICAgICAgICAgcmVzdWx0R1BSLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0
dXJlKGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZUNvbmN1cnJlbnRseShub2RlLT50
eXBlZEFycmF5VHlwZSgpKSksIGFyZ3VtZW50UmVncyk7CisgICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CisKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlVGhpcyhOb2RlKiBub2RlKQoreworICAgIC8vIE5vdGUgdGhhdCB0
aGVyZSBpcyBub3Qgc28gbXVjaCBwcm9maXQgdG8gc3BlY3VsYXRlIGhlcmUuIFRoZSBvbmx5IHRo
aW5ncyB3ZQorICAgIC8vIHNwZWN1bGF0ZSBvbiBhcmUgKDEpIHRoYXQgaXQncyBhIGNlbGwsIHNp
bmNlIHRoYXQgZWxpbWluYXRlcyBjZWxsIGNoZWNrcworICAgIC8vIGxhdGVyIGlmIHRoZSBwcm90
byBpcyByZXVzZWQsIGFuZCAoMikgaWYgd2UgaGF2ZSBhIEZpbmFsT2JqZWN0IHByZWRpY3Rpb24K
KyAgICAvLyB0aGVuIHdlIHNwZWN1bGF0ZSBiZWNhdXNlIHdlIHdhbnQgdG8gZ2V0IHJlY29tcGls
ZWQgaWYgaXQgaXNuJ3QgKHNpbmNlCisgICAgLy8gb3RoZXJ3aXNlIHdlJ2Qgc3RhcnQgdGFraW5n
IHNsb3cgcGF0aCBhIGxvdCkuCisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
R1BSVGVtcG9yYXJ5IGFsbG9jYXRvcih0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJl
KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgR1BSUmVnIGNh
bGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgIEdQUlJlZyBhbGxvY2F0b3JHUFIgPSBhbGxvY2F0b3IuZ3ByKCk7CisgICAgR1BS
UmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgLy8gUmFyZSBkYXRhIGlzIG9ubHkgdXNlZCB0byBhY2Nl
c3MgdGhlIGFsbG9jYXRvciAmIHN0cnVjdHVyZQorICAgIC8vIFdlIGNhbiBhdm9pZCB1c2luZyBh
biBhZGRpdGlvbmFsIEdQUiB0aGlzIHdheQorICAgIEdQUlJlZyByYXJlRGF0YUdQUiA9IHN0cnVj
dHVyZUdQUjsKKyAgICBHUFJSZWcgaW5saW5lQ2FwYWNpdHlHUFIgPSByYXJlRGF0YUdQUjsKKwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgSklUQ29t
cGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOworICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkp
LCByYXJlRGF0YUdQUik7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSKSk7CisgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOworICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKKworICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsK
KworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBhdXRv
IG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
R1BSLCBudWxscHRyLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgYnV0dGVyZmx5LCBtYXNr
LCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFy
ZURhdGFHUFIpOworICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0
YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
ICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIGlu
bGluZUNhcGFjaXR5R1BSKTsKKyAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2Uo
cmVzdWx0R1BSLCBpbmxpbmVDYXBhY2l0eUdQUik7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKCpt
X2ppdC52bSgpKTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93
UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBjYWxsZWVHUFIsIG5v
ZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKKworICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld09iamVjdChOb2RlKiBub2Rl
KQoreworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGFs
bG9jYXRvcih0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSUmVnIGFsbG9jYXRvckdQUiA9
IGFsbG9jYXRvci5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOworICAgIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSBz
dWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZp
cnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKKworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0
b3JHUFIpOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAg
ICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKKyAgICBtX2pp
dC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisKKyAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbk5ld09iamVjdCwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUpKTsKKworICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFk
ZChOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNldCh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKaW5kZXggNDk3YzI4OWJkY2VlNGU1MTJhZDFjMmFkMTU4NTJkZjg5YWEwYzlmMy4uNzRj
N2IxZDRhY2Q1OWFkYzlmNDM5NzdkZjJiY2I0MjZlNTJkZjllNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMTQ1OCw5ICsxNDU4LDkgQEAg
Y2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpbXBsKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkpKSSBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
SkpKSSBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIEpTVmFs
dWVSZWdzIGFyZzMsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiAgICAgewotICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMywgVHJ1c3RlZElt
bVB0cih1aWQpKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEucGF5bG9hZEdQUigpLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMy5wYXlsb2FkR1BSKCksIFRy
dXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7
CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRp
b25fRUpKSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmcz
LCBHUFJSZWcgYXJnNCkKQEAgLTE2MjAsMTEgKzE2MjAsMTYgQEAgY2xhc3MgU3BlY3VsYXRpdmVK
SVQgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FSkMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
SkMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBHUFJSZWcgYXJn
MikKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEu
cGF5bG9hZEdQUigpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwg
SlNWYWx1ZVJlZ3MgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMS5wYXlsb2FkR1BSKCksIGFyZzIpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdC5wYXlsb2FkR1BS
KCkpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyKTsKQEAgLTE2ODMsOSArMTY4OCw5IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRp
b25fRVN0SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3Ry
dWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfSklUT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBSZWdpc3RlcmVk
U3RydWN0dXJlIHN0cnVjdHVyZSwgSlNWYWx1ZVJlZ3MgYXJnMikKICAgICB7Ci0gICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IGFyZzIpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyLnBheWxvYWRHUFIoKSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTE3MjYs
OSArMTczMSw5IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEuZ3ByKCkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKICAgICB7Ci0gICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEucGF5bG9hZEdQUigpLCBhcmcyLnBh
eWxvYWRHUFIoKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihD
X0pJVE9wZXJhdGlvbl9FSkpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKQEAgLTE3MzYsOSArMTc0MSw5IEBAIGNsYXNzIFNw
ZWN1bGF0aXZlSklUIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19KSVRPcGVyYXRpb25fRUpKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSkpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgSlNWYWx1ZVJlZ3MgYXJnMykK
ICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBh
cmcyLCBhcmczKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEucGF5bG9hZEdQUigpLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMy5wYXlsb2FkR1BSKCkpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25f
RUpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQpA
QCAtMjg3Miw3ICsyODc3LDcgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIHZvaWQgY29t
cGlsZU51bWJlclRvU3RyaW5nV2l0aFZhbGlkUmFkaXhDb25zdGFudChOb2RlKiwgaW50MzJfdCBy
YWRpeCk7CiAgICAgdm9pZCBjb21waWxlTmV3U3RyaW5nT2JqZWN0KE5vZGUqKTsKICAgICAKLSAg
ICB2b2lkIGNvbXBpbGVOZXdUeXBlZEFycmF5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVOZXdU
eXBlZEFycmF5V2l0aFNpemUoTm9kZSopOwogICAgIAogICAgIHZvaWQgY29tcGlsZUludDMyQ29t
cGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgIHZv
aWQgY29tcGlsZUludDUyQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24pOwpAQCAtMzA0Miw2ICszMDQ3LDIxIEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsK
ICAgICB2b2lkIGNvbXBpbGVUb0xvd2VyQ2FzZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVGhy
b3coTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRocm93U3RhdGljRXJyb3IoTm9kZSopOworICAg
IHZvaWQgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZVRvSW5kZXhTdHJpbmcoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVB1dEJ5SWRXaXRoVGhpcyhO
b2RlKik7CisgICAgdm9pZCBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOworICAg
IHZvaWQgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKik7CisgICAgdm9pZCBjb21w
aWxlR2V0RW51bWVyYXRvclBuYW1lKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRHZXR0ZXIo
Tm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldFNldHRlcihOb2RlKik7CisgICAgdm9pZCBjb21w
aWxlR2V0Q2FsbGVlKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlU3RyQ2F0KE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVOZXdBcnJheVdpdGhTaXplKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVOZXdU
eXBlZEFycmF5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDcmVhdGVUaGlzKE5vZGUqKTsKKyAg
ICB2b2lkIGNvbXBpbGVOZXdPYmplY3QoTm9kZSopOwogCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQ
UlJlZyk7CiAgICAgdm9pZCBtb3ZlRmFsc2VUbyhHUFJSZWcpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggOGVhMWM2
Y2VlZTA0ZDE3ZjA0NmI4ZDU1YzRhN2RjMjY3NGYwMzNjYS4uNGUxN2ZhM2RlYzRhOGM3ZGI5YzIx
NTE0YmM0ZmFkMGQ4ZmFhOWE5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0yMzI4LDI3ICsyMzI4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgU3RyQ2F0OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDModGhpcywgbm9kZS0+Y2hpbGQzKCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlUmVncyBvcDFS
ZWdzID0gb3AxLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIG9wMlJlZ3MgPSBv
cDIuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3Mgb3AzUmVnczsKLQotICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQzKCkpCi0gICAgICAgICAgICBvcDNSZWdzID0gb3AzLmpzVmFsdWVS
ZWdzKCk7Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIEdQ
UkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdHJDYXQzLCByZXN1bHQu
Z3ByKCksIG9wMVJlZ3MsIG9wMlJlZ3MsIG9wM1JlZ3MpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDIsIHJlc3VsdC5ncHIoKSwgb3AxUmVn
cywgb3AyUmVncyk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIAot
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVT
dHJDYXQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzg5NywzNCArMzg3Nyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAg
ICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7Ci0gICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYg
IWhhc0FueUFycmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICAgICAgICAgIEdQ
UlJlZyBzaXplR1BSID0gc2l6ZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0
aFNpemUoZ2xvYmFsT2JqZWN0LCByZXN1bHRHUFIsIHNpemVHUFIsIG5vZGUtPmluZGV4aW5nVHlw
ZSgpKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyBz
aXplR1BSID0gc2l6ZS5ncHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc2VsZWN0
U2NyYXRjaEdQUihzaXplR1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmlnTGVu
Z3RoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQ
UiwgVHJ1c3RlZEltbTMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKTsK
LSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJT
dHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSksIHN0cnVjdHVyZUdQUik7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIGJp
Z0xlbmd0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0ciht
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkp
KSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLCBzdHJ1Y3R1
cmVHUFIsIHNpemVHUFIsIG51bGxwdHIpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVO
ZXdBcnJheVdpdGhTaXplKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApA
QCAtMzk3MiwzMiArMzkyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTmV3VHlwZWRBcnJheTogewotICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMy
VXNlOgotICAgICAgICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXkobm9kZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBKU1Zh
bHVlUmVncyBhcmd1bWVudFJlZ3MgPSBhcmd1bWVudC5qc1ZhbHVlUmVncygpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCi0g
ICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZvclR5
cGUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSksCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBt
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0
cnVjdHVyZUNvbmN1cnJlbnRseShub2RlLT50eXBlZEFycmF5VHlwZSgpKSksIGFyZ3VtZW50UmVn
cyk7Ci0gICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAg
IGNvbXBpbGVOZXdUeXBlZEFycmF5KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIApAQCAtNDA0Niw4OSArMzk3NCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBDcmVhdGVUaGlzOiB7Ci0gICAgICAgIC8v
IE5vdGUgdGhhdCB0aGVyZSBpcyBub3Qgc28gbXVjaCBwcm9maXQgdG8gc3BlY3VsYXRlIGhlcmUu
IFRoZSBvbmx5IHRoaW5ncyB3ZQotICAgICAgICAvLyBzcGVjdWxhdGUgb24gYXJlICgxKSB0aGF0
IGl0J3MgYSBjZWxsLCBzaW5jZSB0aGF0IGVsaW1pbmF0ZXMgY2VsbCBjaGVja3MKLSAgICAgICAg
Ly8gbGF0ZXIgaWYgdGhlIHByb3RvIGlzIHJldXNlZCwgYW5kICgyKSBpZiB3ZSBoYXZlIGEgRmlu
YWxPYmplY3QgcHJlZGljdGlvbgotICAgICAgICAvLyB0aGVuIHdlIHNwZWN1bGF0ZSBiZWNhdXNl
IHdlIHdhbnQgdG8gZ2V0IHJlY29tcGlsZWQgaWYgaXQgaXNuJ3QgKHNpbmNlCi0gICAgICAgIC8v
IG90aGVyd2lzZSB3ZSdkIHN0YXJ0IHRha2luZyBzbG93IHBhdGggYSBsb3QpLgotICAgICAgICAK
LSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IGFsbG9jYXRvcih0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlz
KTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIAotICAgICAg
ICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgYWxsb2NhdG9yR1BSID0gYWxsb2Nh
dG9yLmdwcigpOwotICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigp
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIC8v
IFJhcmUgZGF0YSBpcyBvbmx5IHVzZWQgdG8gYWNjZXNzIHRoZSBhbGxvY2F0b3IgJiBzdHJ1Y3R1
cmUKLSAgICAgICAgLy8gV2UgY2FuIGF2b2lkIHVzaW5nIGFuIGFkZGl0aW9uYWwgR1BSIHRoaXMg
d2F5Ci0gICAgICAgIEdQUlJlZyByYXJlRGF0YUdQUiA9IHN0cnVjdHVyZUdQUjsKLSAgICAgICAg
R1BSUmVnIGlubGluZUNhcGFjaXR5R1BSID0gcmFyZURhdGFHUFI7Ci0gICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKG1faml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwotICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZS
YXJlRGF0YSgpKSwgcmFyZURhdGFHUFIpOwotICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmFyZURhdGFHUFIpKTsKLSAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rp
b25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOwotICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5j
dGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZUdQUik7Ci0g
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpOwotICAgICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0g
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgbnVsbHB0ciwgYWxsb2NhdG9y
R1BSLCBzdHJ1Y3R1cmVHUFIsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1BhdGgp
OwotCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BS
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YUdQUik7Ci0gICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25S
YXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIGlubGluZUNhcGFjaXR5R1BS
KTsKLSAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwg
aW5saW5lQ2FwYWNpdHlHUFIpOwotCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBj
YWxsZWVHUFIsIG5vZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKLSAgICAgICAgCi0gICAgICAgIGNl
bGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUNyZWF0ZVRoaXMobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTmV3T2JqZWN0OiB7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBhbGxv
Y2F0b3IodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAg
ICAKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgR1BS
UmVnIGFsbG9jYXRvckdQUiA9IGFsbG9jYXRvci5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgICAgICAKLSAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVy
ZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgc2l6ZV90IGFsbG9jYXRp
b25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVD
YXBhY2l0eSgpKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSBzdWJz
cGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
LQotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2Nh
dG9yR1BSKTsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OwotICAgICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgICAgIGVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBhbGxvY2F0b3JHUFIsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBzbG93UGF0
aCk7Ci0gICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIs
IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0KLSAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJl
c3VsdEdQUiwgc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVOZXdPYmplY3Qobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0Q2FsbGVlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OnBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBjb21waWxlR2V0Q2FsbGVlKG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXM6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBpbnQzMlJlc3Vs
dChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBjb21waWxlR2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00
NDYxLDI4ICs0MzIyLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVyOiB7Ci0gICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7Ci0gICAgICAgIAotICAgICAgICBHUFJS
ZWcgb3AxR1BSID0gb3AxLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksIHJlc3VsdEdQUik7
Ci0gICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAg
IGNvbXBpbGVHZXRHZXR0ZXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBSZXVzZSwgb3AxKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMUdQUiwgR2V0dGVy
U2V0dGVyOjpvZmZzZXRPZlNldHRlcigpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAg
IGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldFNldHRlcihu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQ1NTUsMTkgKzQ0MDAs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBQdXRCeUlkV2l0aFRoaXM6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFz
ZS5qc1ZhbHVlUmVncygpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyA9IHRoaXNWYWx1
ZS5qc1ZhbHVlUmVncygpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LT5jaGlsZDMoKSk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFs
dWVSZWdzKCk7Ci0KLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihtX2ppdC5pc1N0cmljdE1vZGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSA/IG9wZXJh
dGlvblB1dEJ5SWRXaXRoVGhpc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5SWRXaXRoVGhpcywKLSAg
ICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVncywgdGhpc1JlZ3MsIHZhbHVlUmVncywgaWRlbnRp
ZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZVB1
dEJ5SWRXaXRoVGhpcyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01MTUzLDEy
ICs0OTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IH0KIAogICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BS
Rmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhlbnVtZXJhdG9yLmdwcigpLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmluZGV4
ZWRMZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGludDMyUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6IHsKQEAg
LTUxNzcsMzEgKzUwMDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5
OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgYmFz
ZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiA9
IGJhc2UucGF5bG9hZEdQUigpOwotICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2Fk
LmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwot
Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUGF5bG9h
ZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3R1cmUgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgcmVzdWx0VGFnR1BSLAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvci5ncHIoKSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7Ci0KLSAgICAg
ICAgbW92ZVRydWVUbyhyZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
LQotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1
cmUsIHRoaXMsIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgCi0gICAgICAgICAgICBKU1Zh
bHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBKU1ZhbHVlUmVncyhiYXNl
VGFnR1BSLCBiYXNlUGF5bG9hZEdQUiksIHByb3BlcnR5R1BSKSk7Ci0gICAgICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzSW5k
ZXhlZFByb3BlcnR5OiB7CkBAIC01MzU4LDY5ICs1MTYyLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
R2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gQ2VsbFVzZSkgewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3Vs
dCByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwotCi0gICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCByZXN1bHRHUFIsIGJh
c2UuZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAg
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLQotICAgICAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVt
ZXJhdG9yLCByZXN1bHRHUFIsIGJhc2UuanNWYWx1ZVJlZ3MoKSk7Ci0gICAgICAgICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwotICAgICAgICB9CisgICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Iobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZToKICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKLSAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0
aGlzKTsKLQotICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7
Ci0gICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIg
PSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVz
dWx0UGF5bG9hZC5ncHIoKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgaW5kZXhHUFIsCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCAob3AgPT0gR2V0
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKQotICAgICAgICAgICAgICAgID8gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkKLSAgICAgICAg
ICAgICAgICA6IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5k
ZXhPZmZzZXQoKSkpOwotCi0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsK
LQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAg
ICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwg
aW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFBheWxvYWRHUFIpOwot
ICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIHJlc3VsdFRhZ0dQUik7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0g
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2Rl
KTsKKyAgICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICBTcGVjdWxhdGVJ
bnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJGbHVz
aGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCByZXN1bHRHUFIsIGluZGV4LmdwcigpKTsK
LSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDIzMWRkOWUw
ZjE2ODRkOGRiYTYxMWRhZTA1MjJjOTgwNTg3N2JhNmUuLmY0MDc3ZWI1OWQ2MzY0MjJjOTAwMGVk
YTI1MDdjMDFhMzJmOThmZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjQ3NCwyOCArMjQ3NCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IFN0ckNhdDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3AzKHRoaXMsIG5vZGUtPmNoaWxkMygpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIo
KTsKLSAgICAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKLSAgICAgICAgR1BSUmVnIG9w
M0dQUjsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMygpKQotICAgICAgICAgICAgb3AzR1BSID0g
b3AzLmdwcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcDNHUFIgPSBJbnZhbGlkR1BS
UmVnOwotICAgICAgICAKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgICAgICBHUFJG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDMo
KSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0MywgcmVzdWx0Lmdw
cigpLCBvcDFHUFIsIG9wMkdQUiwgb3AzR1BSKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdHJDYXQyLCByZXN1bHQuZ3ByKCksIG9wMUdQUiwgb3Ay
R1BSKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgCi0gICAgICAg
IGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgY29tcGlsZVN0ckNhdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MTE3LDMyICs0MDk2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOiB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwotICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYm
ICFoYXNBbnlBcnJheVN0b3JhZ2Uobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BS
UmVnIHNpemVHUFIgPSBzaXplLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIGNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNp
emUoZ2xvYmFsT2JqZWN0LCByZXN1bHRHUFIsIHNpemVHUFIsIG5vZGUtPmluZGV4aW5nVHlwZSgp
KTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyBzaXpl
R1BSID0gc2l6ZS5ncHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgR1BS
Rmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc2VsZWN0U2Ny
YXRjaEdQUihzaXplR1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmlnTGVuZ3Ro
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQUiwg
VHJ1c3RlZEltbTMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKTsKLSAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIGJpZ0xl
bmd0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2pp
dC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKSwg
c3RydWN0dXJlR1BSKTsKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmVH
UFIsIHNpemVHUFIsIG51bGxwdHIpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwot
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVOZXdB
cnJheVdpdGhTaXplKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAt
NDE4OSwzMyArNDE0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTmV3VHlwZWRBcnJheTogewotICAgICAgICBz
d2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNl
OgotICAgICAgICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXkobm9kZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBHUFJSZWcg
YXJndW1lbnRHUFIgPSBhcmd1bWVudC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSRmx1c2hlZENh
bGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKG5vZGUtPnR5cGVkQXJy
YXlUeXBlKCkpLAotICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgbV9qaXQuZ3JhcGgoKS5yZWdp
c3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25jdXJyZW50
bHkobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpLAotICAgICAgICAgICAgICAgIGFyZ3VtZW50R1BS
KTsKLSAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9q
aXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KKyAgICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXkobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MjU4LDkzICs0MTg2LDIyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRo
aXM6IHsKLSAgICAgICAgLy8gTm90ZSB0aGF0IHRoZXJlIGlzIG5vdCBzbyBtdWNoIHByb2ZpdCB0
byBzcGVjdWxhdGUgaGVyZS4gVGhlIG9ubHkgdGhpbmdzIHdlCi0gICAgICAgIC8vIHNwZWN1bGF0
ZSBvbiBhcmUgKDEpIHRoYXQgaXQncyBhIGNlbGwsIHNpbmNlIHRoYXQgZWxpbWluYXRlcyBjZWxs
IGNoZWNrcwotICAgICAgICAvLyBsYXRlciBpZiB0aGUgcHJvdG8gaXMgcmV1c2VkLCBhbmQgKDIp
IGlmIHdlIGhhdmUgYSBGaW5hbE9iamVjdCBwcmVkaWN0aW9uCi0gICAgICAgIC8vIHRoZW4gd2Ug
c3BlY3VsYXRlIGJlY2F1c2Ugd2Ugd2FudCB0byBnZXQgcmVjb21waWxlZCBpZiBpdCBpc24ndCAo
c2luY2UKLSAgICAgICAgLy8gb3RoZXJ3aXNlIHdlJ2Qgc3RhcnQgdGFraW5nIHNsb3cgcGF0aCBh
IGxvdCkuCi0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgYWxsb2NhdG9yKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgc3RydWN0dXJlKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
LSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Ci0gICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBhbGxv
Y2F0b3JHUFIgPSBhbGxvY2F0b3IuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIg
PSBzdHJ1Y3R1cmUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKLSAgICAgICAgLy8gUmFyZSBkYXRhIGlzIG9ubHkgdXNlZCB0byBhY2Nlc3MgdGhlIGFs
bG9jYXRvciAmIHN0cnVjdHVyZQotICAgICAgICAvLyBXZSBjYW4gYXZvaWQgdXNpbmcgYW4gYWRk
aXRpb25hbCBHUFIgdGhpcyB3YXkKLSAgICAgICAgR1BSUmVnIHJhcmVEYXRhR1BSID0gc3RydWN0
dXJlR1BSOwotICAgICAgICBHUFJSZWcgaW5saW5lQ2FwYWNpdHlHUFIgPSByYXJlRGF0YUdQUjsK
LQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAgICAgICAg
c2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAg
ICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwotICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFHUFIpOwotICAgICAgICBzbG93UGF0aC5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmFyZURhdGFHUFIp
KTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQ
UiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JH
UFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRh
R1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVy
ZUdQUik7Ci0KLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIGFsbG9jYXRvckdQUikpOwotCi0gICAgICAgIGF1dG8gYnV0dGVy
Zmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgYXV0byBtYXNrID0gVHJ1c3Rl
ZEltbTMyKDApOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIG51bGxw
dHIsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hH
UFIsIHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCBy
YXJlRGF0YUdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhy
YXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHko
KSksIGlubGluZUNhcGFjaXR5R1BSKTsKLSAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxp
bmVTdG9yYWdlKHJlc3VsdEdQUiwgaW5saW5lQ2FwYWNpdHlHUFIpOwotICAgICAgICBtX2ppdC5t
dXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwotCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0
R1BSLCBjYWxsZWVHUFIsIG5vZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKLSAgICAgICAgCi0gICAg
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUNyZWF0ZVRo
aXMobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBOZXdP
YmplY3Q6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IGFsbG9jYXRvcih0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICBHUFJSZWcgYWxsb2NhdG9yR1BSID0gYWxsb2NhdG9yLmdwcigpOwotICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgc2l6ZV90IGFs
bG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIg
PSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhp
c3RzKTsKLQotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwg
YWxsb2NhdG9yR1BSKTsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51
bGxwdHIpOwotICAgICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBhbGxvY2F0b3JHUFIs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBz
bG93UGF0aCk7Ci0gICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRHUFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG1faml0Lm11dGF0
b3JGZW5jZSgqbV9qaXQudm0oKSk7Ci0KLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUiwg
c3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CisgICAgICAgIGNvbXBpbGVOZXdPYmplY3Qobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGNhc2UgR2V0Q2FsbGVlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgY2VsbFJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBjb21waWxlR2V0Q2FsbGVlKG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOworICAgICAgICBjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDY2NCwyOCArNDUyMSwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIEdldEdldHRlcjogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIFJldXNlLCBvcDEpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAg
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBHZXR0
ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAg
ICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlR2V0R2V0dGVy
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0U2V0
dGVyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7Ci0g
ICAgICAgIAotICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwotICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZT
ZXR0ZXIoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVHZXRTZXR0ZXIobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00NzM4LDIyICs0NTc5LDEyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5SWRX
aXRoVGhpczogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBHUFJS
ZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwotICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOwotCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24obV9qaXQuaXNTdHJpY3RNb2RlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBv
cGVyYXRpb25QdXRCeUlkV2l0aFRoaXNTdHJpY3QgOiBvcGVyYXRpb25QdXRCeUlkV2l0aFRoaXMs
IE5vUmVzdWx0LCBiYXNlR1BSLCB0aGlzVmFsdWVHUFIsIHZhbHVlR1BSLCBpZGVudGlmaWVyVUlE
KG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOwotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlUHV0QnlJZFdp
dGhUaGlzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFB1dEJ5VmFs
V2l0aFRoaXM6IHsKKyAgICAgICAgY29tcGlsZVB1dEJ5SWRXaXRoVGhpcyhub2RlKTsKICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCAxKSk7CkBAIC01NjE4LDQ4ICs1NDQ5LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0RW51bWVyYWJs
ZUxlbmd0aDogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRo
aXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yLmdwcigpLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBp
bGVHZXRFbnVtZXJhYmxlTGVuZ3RoKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBIYXNHZW5lcmljUHJvcGVydHk6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQg
cmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOworICAg
ICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQ
cm9wZXJ0eSwgcmVzdWx0R1BSLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSk7CisgICAgICAg
IEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNH
ZW5lcmljUHJvcGVydHksIHJlc3VsdEdQUiwgYmFzZVJlZ3MsIHByb3BlcnR5R1BSKTsKICAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRH
UFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
Ci0gICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZXN1bHRHUFIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVj
dHVyZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAg
ICAgICByZXN1bHRHUFIsIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51
bWVyYXRvci5ncHIoKSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSk7Ci0KLSAgICAgICAgbW92ZVRydWVUbyhyZXN1bHRHUFIpOwotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOwotCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2Fs
bCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1
bHRHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgY29tcGlsZUhhc1N0
cnVjdHVyZVByb3BlcnR5KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBI
YXNJbmRleGVkUHJvcGVydHk6IHsKQEAgLTU4MDIsNjEgKzU2MTEsMTYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7Ci0KLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKQot
ICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChub2RlLT5jaGlsZDEoKSk7Ci0KLSAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBD
ZWxsVXNlKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRQcm9wZXJ0eUVu
dW1lcmF0b3JDZWxsLCByZXN1bHRHUFIsIGJhc2VHUFIpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgcmVzdWx0
R1BSLCBiYXNlR1BSKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlR2V0UHJvcGVydHlF
bnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRFbnVt
ZXJhdG9yU3RydWN0dXJlUG5hbWU6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
OiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICAgICAgR1BSUmVnIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOwotICAgICAgICBHUFJSZWcgaW5kZXhHUFIg
PSBpbmRleC5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIGluZGV4R1BSLAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoZW51bWVyYXRvckdQUiwgKG9wID09IEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSkKLSAg
ICAgICAgICAgICAgICA/IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJv
cGVydHlJbmRleE9mZnNldCgpCi0gICAgICAgICAgICAgICAgOiBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSksIHJlc3VsdEdQUik7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKLSAgICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOwotCi0gICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkp
LCBzY3JhdGNoMUdQUik7Ci0gICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHNjcmF0Y2gxR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCByZXN1bHRHUFIpOwotCi0gICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9y
UG5hbWUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFRvSW5kZXhTdHJp
bmc6IHsKLSAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9JbmRleFN0cmluZywg
cmVzdWx0R1BSLCBpbmRleC5ncHIoKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZVRv
SW5kZXhTdHJpbmcobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFByb2Zp
bGVUeXBlOiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330028</attachid>
            <date>2017-12-21 05:00:33 -0800</date>
            <delta_ts>2017-12-22 00:22:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181083-20171221220032.patch</filename>
            <type>text/plain</type>
            <size>53789</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MjE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWUzMDViNDcwMjA1NmRiYzViYmU5OTdmOWVlOTQzNjRkNWQwZmFhLi5lNjI2MThmZWVmOGVjYjJi
YmMxZTBkM2U1OGZlMmFjMjlhYTIwY2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NyBAQAorMjAxNy0xMi0yMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBVbmlmeSBidW5jaCBvZiBERkcgMzJiaXQgY29kZSBpbnRv
IDY0Yml0IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MTA4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZXJlIGFyZSBidW5jaCBvZiB0aGUgY29tcGxldGVseSBzYW1lIGNvZGUgaW4gMzJiaXQg
YW5kIDY0Yml0IERGRy4KKyAgICAgICAgVGhpcyBpcyBsYXJnZWx5IGJlY2F1c2Ugb2YgdGhlIG9s
ZCBERkcgY29kZS4gQXQgdGhhdCB0aW1lLCB3ZSBkbyBub3QKKyAgICAgICAgaGF2ZSBlbm91Z2gg
YWJzdHJhY3Rpb24gdG8gZGVzY3JpYmUgdGhlbSBpbiBvbmUgY29kZS4gQnV0IG5vdywgd2UgaGF2
ZQorICAgICAgICBKU1ZhbHVlUmVncywgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgZXRjLiBUaGV5IGFs
bG93IERGRyB0byB3cml0ZSAzMmJpdCBhbmQKKyAgICAgICAgNjRiaXQgaGFuZGxpbmcgaW4gb25l
IGNvZGUuCisKKyAgICAgICAgVGhpcyBwYXRjaCB1bmlmaWVzIGVhc3kgb25lcy4gVGhpcyBpcyBu
aWNlIHNpbmNlIGJhc2ljYWxseSAzMmJpdCBjb2RlIGlzCisgICAgICAgIGEgYml0IG9sZCBhbmQg
bm90IG1haW50YWluZWQgc28gbXVjaCBjb21wYXJlZCB0byA2NGJpdC4gSWYgd2UgY2FuIGRyb3AK
KyAgICAgICAgMzJiaXQgc3BlY2lmaWMgY29kZSBhcyBtdWNoIGFzIHBvc3NpYmxlLCBpdCB3b3Vs
ZCBiZSBuaWNlLiBGdXJ0aGVybW9yZSwKKyAgICAgICAgd2UgY2FuIGZpbmQgdmFyaW91cyBtaXN0
YWtlcyBpbiAzMmJpdDogRm9yIGV4YW1wbGUsIE5ld09iamVjdCBkb2VzIG5vdCBoYXZlCisgICAg
ICAgIG11dGF0b3JGZW5jZSBpbiAzMmJpdCB3aGlsZSA2NGJpdCBoYXMgaXQuIFRoaXMgdW5pZmlj
YXRpb24gaXMgYSBjaGFuY2UKKyAgICAgICAgdG8gZml4IG1pc2NlbGxhbmVvdXMgYnVncyBpbiAz
MmJpdCB3aGlsZSByZWR1Y2luZyBtYWludGVuYW5jZSBidXJkZW4uCisKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3VHlwZWRBcnJheVdpdGhTaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9JbmRleFN0cmluZyk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkV2l0aFRoaXMpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvcGVydHlFbnVt
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVu
dW1lcmF0b3JQbmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRHZXR0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0U2V0dGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dENhbGxlZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRB
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVTdHJDYXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZVRoaXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV3T2JqZWN0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorCiAyMDE3LTEyLTE5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29t
PgogCiAgICAgICAgIFtKU0NdIERvIG5vdCBjaGVjayBpc1ZhbGlkKCkgaW4gb3BfbmV3X3JlZ2V4
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApp
bmRleCBhNjYwNWY3M2ZiNTJhZDUwMzJjNGViMTk0YmUzMmM1MjU4MTA3OTJjLi5lYzYzYjZhNDg3
ZTAwNTY3Yzg3NTY3NDE0YTA2MjgxNWY5N2VjMzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1
ZGUgIkpTRml4ZWRBcnJheS5oIgogI2luY2x1ZGUgIkpTR2VuZXJhdG9yRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJSZWdFeHBD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgpAQCAtOTA0Miw3ICs5
MDQzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1N0cmluZ09iamVjdChOb2Rl
KiBub2RlKQogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYXkoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5V2l0aFNpemUoTm9kZSogbm9kZSkKIHsKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0g
bm9kZS0+dHlwZWRBcnJheVR5cGUoKTsKQEAgLTEwOTc3LDYgKzEwOTc4LDMzOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlVGhyb3dTdGF0aWNFcnJvcihOb2RlKiBub2RlKQogICAgIG5v
UmVzdWx0KG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVy
YWJsZUxlbmd0aChOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1l
cmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3ByKCksIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSwgcmVzdWx0R1BS
KTsKKyAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0
ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEdQUkZs
dXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9JbmRleFN0cmluZywgcmVz
dWx0R1BSLCBpbmRleEdQUik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICBjZWxs
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeUlkV2l0aFRoaXMoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2Uu
anNWYWx1ZVJlZ3MoKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOworICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzID0gdGhpc1ZhbHVlLmpzVmFsdWVS
ZWdzKCk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwor
ICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7CisKKyAgICBm
bHVzaFJlZ2lzdGVycygpOworICAgIGNhbGxPcGVyYXRpb24obV9qaXQuaXNTdHJpY3RNb2RlRm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykgPyBvcGVyYXRpb25QdXRCeUlkV2l0aFRoaXNTdHJpY3Qg
OiBvcGVyYXRpb25QdXRCeUlkV2l0aFRoaXMsCisgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVncywg
dGhpc1JlZ3MsIHZhbHVlUmVncywgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVy
KCkpKTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgbm9SZXN1bHQobm9kZSk7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShO
b2RlKiBub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNo
aWxkMygpKTsKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICBK
U1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcHJv
cGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
cmVzdWx0LnJlZ3MoKTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgd3JvbmdTdHJ1Y3R1
cmU7CisKKyAgICB3cm9uZ1N0cnVjdHVyZS5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJh
c2VSZWdzKSk7CisKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSk7CisgICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgcmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3ByKCks
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
KworICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBkb25lLmxpbmsoJm1faml0
KTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVy
ZSwgdGhpcywgb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRSZWdzLCBiYXNlUmVn
cywgcHJvcGVydHlHUFIpKTsKKyAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRQ
cm9wZXJ0eUVudW1lcmF0b3IoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBHUFJGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJh
dG9yQ2VsbCwgcmVzdWx0R1BSLCBiYXNlR1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7CisKKyAg
ICBmbHVzaFJlZ2lzdGVycygpOworICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlz
KTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yLCByZXN1bHRHUFIsIGJhc2VSZWdzKTsK
KyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVudW1lcmF0b3JQbmFt
ZShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldEVudW1lcmF0b3JT
dHJ1Y3R1cmVQbmFtZSB8fCBub2RlLT5vcCgpID09IEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUp
OworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBl
bnVtZXJhdG9yLmdwcigpOworICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluQm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBpbmRleEdQUiwKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgKG5vZGUtPm9wKCkg
PT0gR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKQorICAgICAgICAgICAgPyBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKQorICAgICAg
ICAgICAgOiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpKTsKKworICAgIG1faml0Lm1vdmVWYWx1ZShqc051bGwoKSwgcmVzdWx0UmVncyk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIGlu
Qm91bmRzLmxpbmsoJm1faml0KTsKKworICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQ
cm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgaW5kZXhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYKKworICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRHZXR0ZXIoTm9kZSogbm9kZSkK
K3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7CisKKyAgICBHUFJSZWcg
b3AxR1BSID0gb3AxLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMUdQUiwgR2V0dGVy
U2V0dGVyOjpvZmZzZXRPZkdldHRlcigpKSwgcmVzdWx0R1BSKTsKKworICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFNl
dHRlcihOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3Ax
KTsKKworICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3Mob3AxR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mU2V0dGVyKCkpLCByZXN1bHRHUFIpOwor
CisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0Q2FsbGVlKE5vZGUqIG5vZGUpCit7CisgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSksIHJlc3VsdC5ncHIoKSk7CisgICAgY2VsbFJlc3VsdChyZXN1
bHQuZ3ByKCksIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoTm9kZSogbm9kZSkKK3sKKyAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVzdWx0LmdwcigpKTsKKyAgICBpbnQzMlJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlU3RyQ2F0KE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEpTVmFsdWVPcGVy
YW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
KyAgICBKU1ZhbHVlT3BlcmFuZCBvcDModGhpcywgbm9kZS0+Y2hpbGQzKCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CisKKyAgICBKU1ZhbHVlUmVncyBvcDFSZWdzID0gb3AxLmpzVmFsdWVS
ZWdzKCk7CisgICAgSlNWYWx1ZVJlZ3Mgb3AyUmVncyA9IG9wMi5qc1ZhbHVlUmVncygpOworICAg
IEpTVmFsdWVSZWdzIG9wM1JlZ3M7CisKKyAgICBpZiAobm9kZS0+Y2hpbGQzKCkpCisgICAgICAg
IG9wM1JlZ3MgPSBvcDMuanNWYWx1ZVJlZ3MoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisK
KyAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgaWYgKG5vZGUtPmNo
aWxkMygpKQorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDMsIHJlc3VsdC5n
cHIoKSwgb3AxUmVncywgb3AyUmVncywgb3AzUmVncyk7CisgICAgZWxzZQorICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDIsIHJlc3VsdC5ncHIoKSwgb3AxUmVncywgb3AyUmVn
cyk7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgIGNlbGxSZXN1bHQocmVzdWx0
LmdwcigpLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0FycmF5
V2l0aFNpemUoTm9kZSogbm9kZSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
KyAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJh
eVN0b3JhZ2Uobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgc2l6ZUdQUiA9IHNpemUuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
Y29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZShnbG9iYWxPYmplY3QsIHJlc3VsdEdQUiwg
c2l6ZUdQUiwgbm9kZS0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSUmVnIHNp
emVHUFIgPSBzaXplLmdwcigpOworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgR1BSRmx1c2hl
ZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgR1BSUmVnIHN0cnVjdHVyZUdQUiA9IHNlbGVjdFNjcmF0Y2hHUFIoc2l6ZUdQ
Uik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmlnTGVuZ3RoID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKE1JTl9B
UlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGlu
Z1R5cGUoKSkpKSwgc3RydWN0dXJlR1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOworICAgIGJpZ0xlbmd0aC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKSkpLCBzdHJ1Y3R1cmVHUFIpOworICAgIGRvbmUubGluaygmbV9q
aXQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0
R1BSLCBzdHJ1Y3R1cmVHUFIsIHNpemVHUFIsIG51bGxwdHIpOworICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJheShOb2RlKiBub2RlKQoreworICAgIHN3
aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBJbnQzMlVzZToKKyAg
ICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXlXaXRoU2l6ZShub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYXJndW1lbnRSZWdz
ID0gYXJndW1lbnQuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwor
CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgIG9wZXJhdGlv
bk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKG5vZGUtPnR5cGVkQXJyYXlUeXBl
KCkpLAorICAgICAgICAgICAgcmVzdWx0R1BSLCBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0
dXJlKGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZUNvbmN1cnJlbnRseShub2RlLT50
eXBlZEFycmF5VHlwZSgpKSksIGFyZ3VtZW50UmVncyk7CisgICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CisKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlVGhpcyhOb2RlKiBub2RlKQoreworICAgIC8vIE5vdGUgdGhhdCB0
aGVyZSBpcyBub3Qgc28gbXVjaCBwcm9maXQgdG8gc3BlY3VsYXRlIGhlcmUuIFRoZSBvbmx5IHRo
aW5ncyB3ZQorICAgIC8vIHNwZWN1bGF0ZSBvbiBhcmUgKDEpIHRoYXQgaXQncyBhIGNlbGwsIHNp
bmNlIHRoYXQgZWxpbWluYXRlcyBjZWxsIGNoZWNrcworICAgIC8vIGxhdGVyIGlmIHRoZSBwcm90
byBpcyByZXVzZWQsIGFuZCAoMikgaWYgd2UgaGF2ZSBhIEZpbmFsT2JqZWN0IHByZWRpY3Rpb24K
KyAgICAvLyB0aGVuIHdlIHNwZWN1bGF0ZSBiZWNhdXNlIHdlIHdhbnQgdG8gZ2V0IHJlY29tcGls
ZWQgaWYgaXQgaXNuJ3QgKHNpbmNlCisgICAgLy8gb3RoZXJ3aXNlIHdlJ2Qgc3RhcnQgdGFraW5n
IHNsb3cgcGF0aCBhIGxvdCkuCisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
R1BSVGVtcG9yYXJ5IGFsbG9jYXRvcih0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJl
KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgR1BSUmVnIGNh
bGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgIEdQUlJlZyBhbGxvY2F0b3JHUFIgPSBhbGxvY2F0b3IuZ3ByKCk7CisgICAgR1BS
UmVnIHN0cnVjdHVyZUdQUiA9IHN0cnVjdHVyZS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgLy8gUmFyZSBkYXRhIGlzIG9ubHkgdXNlZCB0byBhY2Nl
c3MgdGhlIGFsbG9jYXRvciAmIHN0cnVjdHVyZQorICAgIC8vIFdlIGNhbiBhdm9pZCB1c2luZyBh
biBhZGRpdGlvbmFsIEdQUiB0aGlzIHdheQorICAgIEdQUlJlZyByYXJlRGF0YUdQUiA9IHN0cnVj
dHVyZUdQUjsKKyAgICBHUFJSZWcgaW5saW5lQ2FwYWNpdHlHUFIgPSByYXJlRGF0YUdQUjsKKwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgSklUQ29t
cGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOworICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkp
LCByYXJlRGF0YUdQUik7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJhcmVEYXRhR1BSKSk7CisgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOworICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9m
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZz
ZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKKworICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsK
KworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBhdXRv
IG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
R1BSLCBudWxscHRyLCBhbGxvY2F0b3JHUFIsIHN0cnVjdHVyZUdQUiwgYnV0dGVyZmx5LCBtYXNr
LCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFy
ZURhdGFHUFIpOworICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0
YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
ICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIGlu
bGluZUNhcGFjaXR5R1BSKTsKKyAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2Uo
cmVzdWx0R1BSLCBpbmxpbmVDYXBhY2l0eUdQUik7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKCpt
X2ppdC52bSgpKTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93
UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBjYWxsZWVHUFIsIG5v
ZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKKworICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld09iamVjdChOb2RlKiBub2Rl
KQoreworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGFs
bG9jYXRvcih0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSUmVnIGFsbG9jYXRvckdQUiA9
IGFsbG9jYXRvci5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICBSZWdpc3Rl
cmVkU3RydWN0dXJlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpOworICAgIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSBz
dWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZp
cnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKKworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0
b3JHUFIpOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAg
ICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKKyAgICBtX2pp
dC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSgqbV9qaXQudm0oKSk7CisKKyAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbk5ld09iamVjdCwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUpKTsKKworICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldEFk
ZChOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNldCh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKaW5kZXggNDk3YzI4OWJkY2VlNGU1MTJhZDFjMmFkMTU4NTJkZjg5YWEwYzlmMy4uNzRj
N2IxZDRhY2Q1OWFkYzlmNDM5NzdkZjJiY2I0MjZlNTJkZjllNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMTQ1OCw5ICsxNDU4LDkgQEAg
Y2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpbXBsKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FSkpKSSBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
SkpKSSBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIEpTVmFs
dWVSZWdzIGFyZzMsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiAgICAgewotICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMywgVHJ1c3RlZElt
bVB0cih1aWQpKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEucGF5bG9hZEdQUigpLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMy5wYXlsb2FkR1BSKCksIFRy
dXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7
CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRp
b25fRUpKSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmcz
LCBHUFJSZWcgYXJnNCkKQEAgLTE2MjAsMTEgKzE2MjAsMTYgQEAgY2xhc3MgU3BlY3VsYXRpdmVK
SVQgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FSkMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
SkMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBHUFJSZWcgYXJn
MikKICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEu
cGF5bG9hZEdQUigpLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwg
SlNWYWx1ZVJlZ3MgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMS5wYXlsb2FkR1BSKCksIGFyZzIpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdC5wYXlsb2FkR1BS
KCkpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3Bl
cmF0aW9uX0VKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyKTsKQEAgLTE2ODMsOSArMTY4OCw5IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9KSVRPcGVyYXRp
b25fRVN0SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3Ry
dWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFBfSklUT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBSZWdpc3RlcmVk
U3RydWN0dXJlIHN0cnVjdHVyZSwgSlNWYWx1ZVJlZ3MgYXJnMikKICAgICB7Ci0gICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IGFyZzIpOworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBhcmcyLnBheWxvYWRHUFIoKSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTE3MjYs
OSArMTczMSw5IEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEuZ3ByKCkpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMikKICAgICB7Ci0gICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEucGF5bG9hZEdQUigpLCBhcmcyLnBh
eWxvYWRHUFIoKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihD
X0pJVE9wZXJhdGlvbl9FSkpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKQEAgLTE3MzYsOSArMTc0MSw5IEBAIGNsYXNzIFNw
ZWN1bGF0aXZlSklUIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIGFyZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19KSVRPcGVyYXRpb25fRUpKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSkpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgSlNWYWx1ZVJlZ3MgYXJnMykK
ICAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBh
cmcyLCBhcmczKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEucGF5bG9hZEdQUigpLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMy5wYXlsb2FkR1BSKCkpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAg
ICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25f
RUpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQpA
QCAtMjg3Miw3ICsyODc3LDcgQEAgY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIHZvaWQgY29t
cGlsZU51bWJlclRvU3RyaW5nV2l0aFZhbGlkUmFkaXhDb25zdGFudChOb2RlKiwgaW50MzJfdCBy
YWRpeCk7CiAgICAgdm9pZCBjb21waWxlTmV3U3RyaW5nT2JqZWN0KE5vZGUqKTsKICAgICAKLSAg
ICB2b2lkIGNvbXBpbGVOZXdUeXBlZEFycmF5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVOZXdU
eXBlZEFycmF5V2l0aFNpemUoTm9kZSopOwogICAgIAogICAgIHZvaWQgY29tcGlsZUludDMyQ29t
cGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgIHZv
aWQgY29tcGlsZUludDUyQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24pOwpAQCAtMzA0Miw2ICszMDQ3LDIxIEBAIGNsYXNzIFNwZWN1bGF0aXZlSklUIHsK
ICAgICB2b2lkIGNvbXBpbGVUb0xvd2VyQ2FzZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVGhy
b3coTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRocm93U3RhdGljRXJyb3IoTm9kZSopOworICAg
IHZvaWQgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZVRvSW5kZXhTdHJpbmcoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVB1dEJ5SWRXaXRoVGhpcyhO
b2RlKik7CisgICAgdm9pZCBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOworICAg
IHZvaWQgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKik7CisgICAgdm9pZCBjb21w
aWxlR2V0RW51bWVyYXRvclBuYW1lKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRHZXR0ZXIo
Tm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldFNldHRlcihOb2RlKik7CisgICAgdm9pZCBjb21w
aWxlR2V0Q2FsbGVlKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlU3RyQ2F0KE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVOZXdBcnJheVdpdGhTaXplKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVOZXdU
eXBlZEFycmF5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDcmVhdGVUaGlzKE5vZGUqKTsKKyAg
ICB2b2lkIGNvbXBpbGVOZXdPYmplY3QoTm9kZSopOwogCiAgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQ
UlJlZyk7CiAgICAgdm9pZCBtb3ZlRmFsc2VUbyhHUFJSZWcpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggOGVhMWM2
Y2VlZTA0ZDE3ZjA0NmI4ZDU1YzRhN2RjMjY3NGYwMzNjYS4uNGUxN2ZhM2RlYzRhOGM3ZGI5YzIx
NTE0YmM0ZmFkMGQ4ZmFhOWE5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0yMzI4LDI3ICsyMzI4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgU3RyQ2F0OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDModGhpcywgbm9kZS0+Y2hpbGQzKCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBKU1ZhbHVlUmVncyBvcDFS
ZWdzID0gb3AxLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIG9wMlJlZ3MgPSBv
cDIuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3Mgb3AzUmVnczsKLQotICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQzKCkpCi0gICAgICAgICAgICBvcDNSZWdzID0gb3AzLmpzVmFsdWVS
ZWdzKCk7Ci0gICAgICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIEdQ
UkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdHJDYXQzLCByZXN1bHQu
Z3ByKCksIG9wMVJlZ3MsIG9wMlJlZ3MsIG9wM1JlZ3MpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDIsIHJlc3VsdC5ncHIoKSwgb3AxUmVn
cywgb3AyUmVncyk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIAot
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVT
dHJDYXQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzg5NywzNCArMzg3Nyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAg
ICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7Ci0gICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYg
IWhhc0FueUFycmF5U3RvcmFnZShub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBzaXplKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICAgICAgICAgIEdQ
UlJlZyBzaXplR1BSID0gc2l6ZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0
aFNpemUoZ2xvYmFsT2JqZWN0LCByZXN1bHRHUFIsIHNpemVHUFIsIG5vZGUtPmluZGV4aW5nVHlw
ZSgpKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyBz
aXplR1BSID0gc2l6ZS5ncHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc2VsZWN0
U2NyYXRjaEdQUihzaXplR1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmlnTGVu
Z3RoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQ
UiwgVHJ1c3RlZEltbTMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKTsK
LSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJT
dHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSksIHN0cnVjdHVyZUdQUik7Ci0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIGJp
Z0xlbmd0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0ciht
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkp
KSwgc3RydWN0dXJlR1BSKTsKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLCBzdHJ1Y3R1
cmVHUFIsIHNpemVHUFIsIG51bGxwdHIpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVO
ZXdBcnJheVdpdGhTaXplKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApA
QCAtMzk3MiwzMiArMzkyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTmV3VHlwZWRBcnJheTogewotICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMy
VXNlOgotICAgICAgICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXkobm9kZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBKU1Zh
bHVlUmVncyBhcmd1bWVudFJlZ3MgPSBhcmd1bWVudC5qc1ZhbHVlUmVncygpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCi0g
ICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZvclR5
cGUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSksCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBt
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0
cnVjdHVyZUNvbmN1cnJlbnRseShub2RlLT50eXBlZEFycmF5VHlwZSgpKSksIGFyZ3VtZW50UmVn
cyk7Ci0gICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAg
IGNvbXBpbGVOZXdUeXBlZEFycmF5KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIApAQCAtNDA0Niw4OSArMzk3NCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBDcmVhdGVUaGlzOiB7Ci0gICAgICAgIC8v
IE5vdGUgdGhhdCB0aGVyZSBpcyBub3Qgc28gbXVjaCBwcm9maXQgdG8gc3BlY3VsYXRlIGhlcmUu
IFRoZSBvbmx5IHRoaW5ncyB3ZQotICAgICAgICAvLyBzcGVjdWxhdGUgb24gYXJlICgxKSB0aGF0
IGl0J3MgYSBjZWxsLCBzaW5jZSB0aGF0IGVsaW1pbmF0ZXMgY2VsbCBjaGVja3MKLSAgICAgICAg
Ly8gbGF0ZXIgaWYgdGhlIHByb3RvIGlzIHJldXNlZCwgYW5kICgyKSBpZiB3ZSBoYXZlIGEgRmlu
YWxPYmplY3QgcHJlZGljdGlvbgotICAgICAgICAvLyB0aGVuIHdlIHNwZWN1bGF0ZSBiZWNhdXNl
IHdlIHdhbnQgdG8gZ2V0IHJlY29tcGlsZWQgaWYgaXQgaXNuJ3QgKHNpbmNlCi0gICAgICAgIC8v
IG90aGVyd2lzZSB3ZSdkIHN0YXJ0IHRha2luZyBzbG93IHBhdGggYSBsb3QpLgotICAgICAgICAK
LSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IGFsbG9jYXRvcih0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlz
KTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIAotICAgICAg
ICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgYWxsb2NhdG9yR1BSID0gYWxsb2Nh
dG9yLmdwcigpOwotICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigp
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIC8v
IFJhcmUgZGF0YSBpcyBvbmx5IHVzZWQgdG8gYWNjZXNzIHRoZSBhbGxvY2F0b3IgJiBzdHJ1Y3R1
cmUKLSAgICAgICAgLy8gV2UgY2FuIGF2b2lkIHVzaW5nIGFuIGFkZGl0aW9uYWwgR1BSIHRoaXMg
d2F5Ci0gICAgICAgIEdQUlJlZyByYXJlRGF0YUdQUiA9IHN0cnVjdHVyZUdQUjsKLSAgICAgICAg
R1BSUmVnIGlubGluZUNhcGFjaXR5R1BSID0gcmFyZURhdGFHUFI7Ci0gICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKG1faml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwotICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZS
YXJlRGF0YSgpKSwgcmFyZURhdGFHUFIpOwotICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmFyZURhdGFHUFIpKTsKLSAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rp
b25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JHUFIpOwotICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5j
dGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZUdQUik7Ci0g
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVk
SW1tUHRyKG51bGxwdHIpOwotICAgICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0g
ICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgbnVsbHB0ciwgYWxsb2NhdG9y
R1BSLCBzdHJ1Y3R1cmVHUFIsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaEdQUiwgc2xvd1BhdGgp
OwotCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BS
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YUdQUik7Ci0gICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25S
YXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIGlubGluZUNhcGFjaXR5R1BS
KTsKLSAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwg
aW5saW5lQ2FwYWNpdHlHUFIpOwotCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBj
YWxsZWVHUFIsIG5vZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKLSAgICAgICAgCi0gICAgICAgIGNl
bGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUNyZWF0ZVRoaXMobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTmV3T2JqZWN0OiB7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBhbGxv
Y2F0b3IodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAg
ICAKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgR1BS
UmVnIGFsbG9jYXRvckdQUiA9IGFsbG9jYXRvci5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgICAgICAKLSAgICAgICAgUmVnaXN0ZXJlZFN0cnVjdHVy
ZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgc2l6ZV90IGFsbG9jYXRp
b25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVD
YXBhY2l0eSgpKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIgPSBzdWJz
cGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1
YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsK
LQotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2Nh
dG9yR1BSKTsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OwotICAgICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgICAgIGVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBhbGxvY2F0b3JHUFIsIFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBzbG93UGF0
aCk7Ci0gICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIs
IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0KLSAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJl
c3VsdEdQUiwgc3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVOZXdPYmplY3Qobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAogICAgIGNhc2UgR2V0Q2FsbGVlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OnBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBjb21waWxlR2V0Q2FsbGVlKG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXM6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBpbnQzMlJlc3Vs
dChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBjb21waWxlR2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00
NDYxLDI4ICs0MzIyLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVyOiB7Ci0gICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7Ci0gICAgICAgIAotICAgICAgICBHUFJS
ZWcgb3AxR1BSID0gb3AxLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIoKSksIHJlc3VsdEdQUik7
Ci0gICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAg
IGNvbXBpbGVHZXRHZXR0ZXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBSZXVzZSwgb3AxKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIAot
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMUdQUiwgR2V0dGVy
U2V0dGVyOjpvZmZzZXRPZlNldHRlcigpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAg
IGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUdldFNldHRlcihu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQ1NTUsMTkgKzQ0MDAs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBQdXRCeUlkV2l0aFRoaXM6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFz
ZS5qc1ZhbHVlUmVncygpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyA9IHRoaXNWYWx1
ZS5qc1ZhbHVlUmVncygpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LT5jaGlsZDMoKSk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZhbHVlLmpzVmFs
dWVSZWdzKCk7Ci0KLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihtX2ppdC5pc1N0cmljdE1vZGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSA/IG9wZXJh
dGlvblB1dEJ5SWRXaXRoVGhpc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5SWRXaXRoVGhpcywKLSAg
ICAgICAgICAgIE5vUmVzdWx0LCBiYXNlUmVncywgdGhpc1JlZ3MsIHZhbHVlUmVncywgaWRlbnRp
ZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZVB1
dEJ5SWRXaXRoVGhpcyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01MTUzLDEy
ICs0OTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IH0KIAogICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BS
Rmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhlbnVtZXJhdG9yLmdwcigpLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmluZGV4
ZWRMZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIGludDMyUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6IHsKQEAg
LTUxNzcsMzEgKzUwMDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5
OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgYmFz
ZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiA9
IGJhc2UucGF5bG9hZEdQUigpOwotICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2Fk
LmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwot
Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUGF5bG9h
ZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3R1cmUgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgcmVzdWx0VGFnR1BSLAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvci5ncHIoKSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7Ci0KLSAgICAg
ICAgbW92ZVRydWVUbyhyZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
LQotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1
cmUsIHRoaXMsIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgCi0gICAgICAgICAgICBKU1Zh
bHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCBKU1ZhbHVlUmVncyhiYXNl
VGFnR1BSLCBiYXNlUGF5bG9hZEdQUiksIHByb3BlcnR5R1BSKSk7Ci0gICAgICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzSW5k
ZXhlZFByb3BlcnR5OiB7CkBAIC01MzU4LDY5ICs1MTYyLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
R2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gQ2VsbFVzZSkgewotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3Vs
dCByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwotCi0gICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCByZXN1bHRHUFIsIGJh
c2UuZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAg
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLQotICAgICAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVt
ZXJhdG9yLCByZXN1bHRHUFIsIGJhc2UuanNWYWx1ZVJlZ3MoKSk7Ci0gICAgICAgICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwotICAgICAgICB9CisgICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Iobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZToKICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKLSAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0
aGlzKTsKLQotICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7
Ci0gICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIg
PSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVz
dWx0UGF5bG9hZC5ncHIoKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgaW5kZXhHUFIsCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCAob3AgPT0gR2V0
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKQotICAgICAgICAgICAgICAgID8gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkKLSAgICAgICAg
ICAgICAgICA6IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5k
ZXhPZmZzZXQoKSkpOwotCi0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsK
LQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAg
ICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwg
aW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFBheWxvYWRHUFIpOwot
ICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIHJlc3VsdFRhZ0dQUik7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0g
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2Rl
KTsKKyAgICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICBTcGVjdWxhdGVJ
bnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJGbHVz
aGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCByZXN1bHRHUFIsIGluZGV4LmdwcigpKTsK
LSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDIzMWRkOWUw
ZjE2ODRkOGRiYTYxMWRhZTA1MjJjOTgwNTg3N2JhNmUuLmEwODAyNTAwMWZmZjE2OTU4MWZiMjIw
M2FhZTMzZjYzZTViZGQ3NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjQ3NCwyOCArMjQ3NCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IFN0ckNhdDogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3AzKHRoaXMsIG5vZGUtPmNoaWxkMygpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIo
KTsKLSAgICAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKLSAgICAgICAgR1BSUmVnIG9w
M0dQUjsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMygpKQotICAgICAgICAgICAgb3AzR1BSID0g
b3AzLmdwcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcDNHUFIgPSBJbnZhbGlkR1BS
UmVnOwotICAgICAgICAKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgICAgICBHUFJG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDMo
KSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0MywgcmVzdWx0Lmdw
cigpLCBvcDFHUFIsIG9wMkdQUiwgb3AzR1BSKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdHJDYXQyLCByZXN1bHQuZ3ByKCksIG9wMUdQUiwgb3Ay
R1BSKTsKLSAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgCi0gICAgICAg
IGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgY29tcGlsZVN0ckNhdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MTE3LDMyICs0MDk2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOiB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwotICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYm
ICFoYXNBbnlBcnJheVN0b3JhZ2Uobm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BS
UmVnIHNpemVHUFIgPSBzaXplLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIGNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNp
emUoZ2xvYmFsT2JqZWN0LCByZXN1bHRHUFIsIHNpemVHUFIsIG5vZGUtPmluZGV4aW5nVHlwZSgp
KTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyBzaXpl
R1BSID0gc2l6ZS5ncHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgR1BS
Rmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwotICAgICAgICBHUFJSZWcgc3RydWN0dXJlR1BSID0gc2VsZWN0U2Ny
YXRjaEdQUihzaXplR1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmlnTGVuZ3Ro
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2l6ZUdQUiwg
VHJ1c3RlZEltbTMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKTsKLSAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKSksIHN0cnVjdHVyZUdQUik7Ci0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIGJpZ0xl
bmd0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihtX2pp
dC5ncmFwaCgpLnJlZ2lzdGVyU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKSwg
c3RydWN0dXJlR1BSKTsKLSAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmVH
UFIsIHNpemVHUFIsIG51bGxwdHIpOwotICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwot
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVOZXdB
cnJheVdpdGhTaXplKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAt
NDE4OSwzMyArNDE0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTmV3VHlwZWRBcnJheTogewotICAgICAgICBz
d2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNl
OgotICAgICAgICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXkobm9kZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBHUFJSZWcg
YXJndW1lbnRHUFIgPSBhcmd1bWVudC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSRmx1c2hlZENh
bGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKG5vZGUtPnR5cGVkQXJy
YXlUeXBlKCkpLAotICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgbV9qaXQuZ3JhcGgoKS5yZWdp
c3RlclN0cnVjdHVyZShnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmVDb25jdXJyZW50
bHkobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpLAotICAgICAgICAgICAgICAgIGFyZ3VtZW50R1BS
KTsKLSAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9q
aXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KKyAgICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXkobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00MjU4LDkzICs0MTg2LDIyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRo
aXM6IHsKLSAgICAgICAgLy8gTm90ZSB0aGF0IHRoZXJlIGlzIG5vdCBzbyBtdWNoIHByb2ZpdCB0
byBzcGVjdWxhdGUgaGVyZS4gVGhlIG9ubHkgdGhpbmdzIHdlCi0gICAgICAgIC8vIHNwZWN1bGF0
ZSBvbiBhcmUgKDEpIHRoYXQgaXQncyBhIGNlbGwsIHNpbmNlIHRoYXQgZWxpbWluYXRlcyBjZWxs
IGNoZWNrcwotICAgICAgICAvLyBsYXRlciBpZiB0aGUgcHJvdG8gaXMgcmV1c2VkLCBhbmQgKDIp
IGlmIHdlIGhhdmUgYSBGaW5hbE9iamVjdCBwcmVkaWN0aW9uCi0gICAgICAgIC8vIHRoZW4gd2Ug
c3BlY3VsYXRlIGJlY2F1c2Ugd2Ugd2FudCB0byBnZXQgcmVjb21waWxlZCBpZiBpdCBpc24ndCAo
c2luY2UKLSAgICAgICAgLy8gb3RoZXJ3aXNlIHdlJ2Qgc3RhcnQgdGFraW5nIHNsb3cgcGF0aCBh
IGxvdCkuCi0gICAgICAgIAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgYWxsb2NhdG9yKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgc3RydWN0dXJlKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
LSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Ci0gICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBhbGxv
Y2F0b3JHUFIgPSBhbGxvY2F0b3IuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVHUFIg
PSBzdHJ1Y3R1cmUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKLSAgICAgICAgLy8gUmFyZSBkYXRhIGlzIG9ubHkgdXNlZCB0byBhY2Nlc3MgdGhlIGFs
bG9jYXRvciAmIHN0cnVjdHVyZQotICAgICAgICAvLyBXZSBjYW4gYXZvaWQgdXNpbmcgYW4gYWRk
aXRpb25hbCBHUFIgdGhpcyB3YXkKLSAgICAgICAgR1BSUmVnIHJhcmVEYXRhR1BSID0gc3RydWN0
dXJlR1BSOwotICAgICAgICBHUFJSZWcgaW5saW5lQ2FwYWNpdHlHUFIgPSByYXJlRGF0YUdQUjsK
LQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAgICAgICAg
c2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAg
ICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwotICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFHUFIpOwotICAgICAgICBzbG93UGF0aC5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmFyZURhdGFHUFIp
KTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQ
UiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JH
UFIpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRh
R1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVy
ZUdQUik7Ci0KLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIGFsbG9jYXRvckdQUikpOwotCi0gICAgICAgIGF1dG8gYnV0dGVy
Zmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgYXV0byBtYXNrID0gVHJ1c3Rl
ZEltbTMyKDApOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIG51bGxw
dHIsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hH
UFIsIHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCBy
YXJlRGF0YUdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhy
YXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHko
KSksIGlubGluZUNhcGFjaXR5R1BSKTsKLSAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxp
bmVTdG9yYWdlKHJlc3VsdEdQUiwgaW5saW5lQ2FwYWNpdHlHUFIpOwotICAgICAgICBtX2ppdC5t
dXRhdG9yRmVuY2UoKm1faml0LnZtKCkpOwotCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0
R1BSLCBjYWxsZWVHUFIsIG5vZGUtPmlubGluZUNhcGFjaXR5KCkpKTsKLSAgICAgICAgCi0gICAg
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgY29tcGlsZUNyZWF0ZVRo
aXMobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBOZXdP
YmplY3Q6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IGFsbG9jYXRvcih0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwotICAgICAgICBHUFJSZWcgYWxsb2NhdG9yR1BSID0gYWxsb2NhdG9yLmdwcigpOwotICAgICAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAgICAgICAgUmVnaXN0ZXJlZFN0
cnVjdHVyZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgc2l6ZV90IGFs
bG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIg
PSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5v
blZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhp
c3RzKTsKLQotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwg
YWxsb2NhdG9yR1BSKTsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51
bGxwdHIpOwotICAgICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBhbGxvY2F0b3JHUFIs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNrLCBzY3JhdGNoR1BSLCBz
bG93UGF0aCk7Ci0gICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRHUFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG1faml0Lm11dGF0
b3JGZW5jZSgqbV9qaXQudm0oKSk7Ci0KLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdPYmplY3QsIHJlc3VsdEdQUiwg
c3RydWN0dXJlKSk7Ci0gICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CisgICAgICAgIGNvbXBpbGVOZXdPYmplY3Qobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGNhc2UgR2V0Q2FsbGVlOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgY2VsbFJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBjb21waWxlR2V0Q2FsbGVlKG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOworICAgICAgICBjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDY2NCwyOCArNDUyMSwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIEdldEdldHRlcjogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIFJldXNlLCBvcDEpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAg
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBHZXR0
ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAg
ICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlR2V0R2V0dGVy
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0U2V0
dGVyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7Ci0g
ICAgICAgIAotICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwotICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZT
ZXR0ZXIoKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVHZXRTZXR0ZXIobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC00NzM4LDE4ICs0NTc5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUHV0QnlJZFdp
dGhUaGlzOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIEdQUlJl
ZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7Ci0KLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihtX2ppdC5pc1N0cmljdE1vZGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSA/IG9w
ZXJhdGlvblB1dEJ5SWRXaXRoVGhpc1N0cmljdCA6IG9wZXJhdGlvblB1dEJ5SWRXaXRoVGhpcywg
Tm9SZXN1bHQsIGJhc2VHUFIsIHRoaXNWYWx1ZUdQUiwgdmFsdWVHUFIsIGlkZW50aWZpZXJVSUQo
bm9kZS0+aWRlbnRpZmllck51bWJlcigpKSk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7Ci0KLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVQdXRCeUlkV2l0
aFRoaXMobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNTYxOCw0OCArNTQ0OCwy
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQ
UkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKLQotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZW51bWVyYXRvci5ncHIoKSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjppbmRl
eGVkTGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAgICAgICBpbnQzMlJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOworICAgICAgICBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7CiAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0g
ICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyBiYXNlUmVn
cyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJv
cGVydHkuZ3ByKCk7CiAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHksIHJlc3VsdEdQUiwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCkpOworICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQo
dGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRHUFIsIGJh
c2VSZWdzLCBwcm9wZXJ0eUdQUik7CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6
IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5j
aGlsZDMoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKLQotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3R1cmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgcmVzdWx0R1BSLCAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3ByKCksIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOwotCi0gICAgICAgIG1vdmVU
cnVlVG8ocmVzdWx0R1BSKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKLQotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLQotICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9wZXJh
dGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgcmVzdWx0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikp
OwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CisgICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CkBAIC01ODAy
LDYxICs1NjEwLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7
Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotCi0gICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwobm9k
ZS0+Y2hpbGQxKCkpOwotCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgcmVzdWx0R1BSLCBiYXNl
R1BSKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25H
ZXRQcm9wZXJ0eUVudW1lcmF0b3IsIHJlc3VsdEdQUiwgYmFzZUdQUik7Ci0gICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
KyAgICAgICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgogICAgIGNh
c2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZTogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIo
KTsKLSAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgIEdQUlJl
ZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluQm91bmRz
ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBpbmRleEdQUiwKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIChvcCA9PSBHZXRF
bnVtZXJhdG9yU3RydWN0dXJlUG5hbWUpCi0gICAgICAgICAgICAgICAgPyBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKQotICAgICAgICAg
ICAgICAgIDogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRl
eE9mZnNldCgpKSk7Ci0KLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZXN1bHRHUFIpOwotCi0gICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIGluQm91
bmRzLmxpbmsoJm1faml0KTsKLQotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOwotICAgICAgICBtX2pp
dC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMUdQUiwgaW5kZXhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKLQotICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwor
ICAgICAgICBjb21waWxlR2V0RW51bWVyYXRvclBuYW1lKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUkZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLQotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIHJlc3VsdEdQUiwgaW5kZXguZ3ByKCkpOwotICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBQcm9maWxlVHlwZTogewo=
</data>
<flag name="review"
          id="349062"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="349151"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>