<?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>67680</bug_id>
          
          <creation_ts>2011-09-06 15:48:14 -0700</creation_ts>
          <short_desc>WebVTTParser/Tokenizer introduce layering violation in WebCore/platform</short_desc>
          <delta_ts>2011-09-07 12:36:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Anna Cavender">annacc</assigned_to>
          <cc>abarth</cc>
    
    <cc>levin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>462955</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-06 15:48:14 -0700</bug_when>
    <thetext>The files in WebCore/platform/track/ introduce a layering violation by referencing files out side of WebCore/platform in WebCore, such as HTMLElement.h, Document.h, ProcessingInstruction.h, MarkupTokenizerBase.h, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463078</commentid>
    <comment_count>1</comment_count>
      <attachid>106533</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-09-06 19:13:10 -0700</bug_when>
    <thetext>Created attachment 106533
moving files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463081</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-06 19:16:31 -0700</bug_when>
    <thetext>Attachment 106533 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/html/track/WebVTTTokenizer.cpp:86:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Source/WebCore/html/track/CueParserPrivate.h:49:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463099</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-06 19:55:30 -0700</bug_when>
    <thetext>Sorry for leading you astray earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463348</commentid>
    <comment_count>4</comment_count>
      <attachid>106533</attachid>
    <who name="Anna Cavender">annacc</who>
    <bug_when>2011-09-07 07:54:41 -0700</bug_when>
    <thetext>Comment on attachment 106533
moving files

No worries, thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463532</commentid>
    <comment_count>5</comment_count>
      <attachid>106533</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-07 11:49:43 -0700</bug_when>
    <thetext>Comment on attachment 106533
moving files

Clearing flags on attachment: 106533

Committed r94694: &lt;http://trac.webkit.org/changeset/94694&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463534</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-07 11:50:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463562</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-07 12:10:45 -0700</bug_when>
    <thetext>This patch broke Mac builds :(  Why did you not edit xcodeproj?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463581</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-09-07 12:36:53 -0700</bug_when>
    <thetext>Fixed Mac build in http://trac.webkit.org/changeset/94699.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106533</attachid>
            <date>2011-09-06 19:13:10 -0700</date>
            <delta_ts>2011-09-07 11:49:42 -0700</delta_ts>
            <desc>moving files</desc>
            <filename>bug-67680-20110906191309.patch</filename>
            <type>text/plain</type>
            <size>101154</size>
            <attacher name="Anna Cavender">annacc</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ2MjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTRlZGNk
ZGQzN2VkNDMyYjQxOTc5NThkOGYwMGZiODQ3Y2EzMjY4OC4uMTZmZTYwY2JmZGY2NzI0NWMwMGUy
MGUzMGFjZjYzNjgzODBmNmRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE1LDYgKzE1LDcg
QEAgU0VUKFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9o
dG1sL2NhbnZhcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vaHRtbC9wYXJzZXIiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L2h0bWwvc2hhZG93IgorICAgICIke1dFQkNPUkVfRElSfS9odG1sL3RyYWNrIgog
ICAgICIke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2xvYWRl
ciIKICAgICAiJHtXRUJDT1JFX0RJUn0vbG9hZGVyL2FwcGNhY2hlIgpAQCAtNDYsNyArNDcsNiBA
QCBTRVQoV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL3NxbCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dCIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyIgotICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS90cmFjayIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGx1Z2lucyIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcmVuZGVyaW5nIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvbWF0
aG1sIgpAQCAtMjAzOSwxMCArMjAzOSwxMCBAQCBJRiAoRU5BQkxFX1ZJREVPX1RSQUNLKQogICAg
ICAgICBodG1sL1RleHRUcmFjay5jcHAKICAgICAgICAgaHRtbC9UZXh0VHJhY2tDdWUuY3BwCiAg
ICAgICAgIGh0bWwvVGV4dFRyYWNrQ3VlTGlzdC5jcHAKKyAgICAgICAgaHRtbC90cmFjay9DdWVQ
YXJzZXIuY3BwCisgICAgICAgIGh0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcAorICAgICAgICBo
dG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAKICAgICAgICAgbG9hZGVyL0N1ZUxvYWRlci5j
cHAKLSAgICAgICAgcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcAotICAgICAgICBwbGF0Zm9y
bS90cmFjay9XZWJWVFRQYXJzZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL3RyYWNrL1dlYlZUVFRv
a2VuaXplci5jcHAKICAgICApCiBFTkRJRigpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3NGI3NDQ2MTk2MzUy
Yzk1OGRlMGY3MDgwNmMxMjc2ZDM1OTI0NmQ5Li45ZmQ4MTFkMjM5NzFjYWY0MDg5MTNhNTA0YmNi
OWRlNWFmYTEyMDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDktMDYgIEFu
bmEgQ2F2ZW5kZXIgIDxhbm5hY2NAY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1vdmluZyBwbGF0
Zm9ybS90cmFjayB0byBodG1sL3RyYWNrIHRvIGF2b2lkIGxheWVyaW5nIHZpb2xhdGlvbi4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NjgwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBObyBuZXcgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUucHJpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAg
ICAqIGh0bWwvdHJhY2svQ3VlUGFyc2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAuCisgICAgICAgICogaHRtbC90cmFjay9DdWVQ
YXJzZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL0N1ZVBh
cnNlci5oLgorICAgICAgICAqIGh0bWwvdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oLgor
ICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFBhcnNlci5jcHAuCisgICAgICAgICogaHRt
bC90cmFjay9XZWJWVFRQYXJzZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RyYWNrL1dlYlZUVFBhcnNlci5oLgorICAgICAgICAqIGh0bWwvdHJhY2svV2ViVlRUVG9r
ZW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRv
a2VuLmguCisgICAgICAgICogaHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcC4K
KyAgICAgICAgKiBodG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmguCisKIDIwMTEtMDkt
MDYgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAg
ICAgW1F0XSBNb3ZlIGF3YXkgZnJvbSBRUG9pbnRlciBhcyBpdCBpcyBzbG93IGFuZCBpdCBoYXMg
YSByZXBsYWNlbWVudCBRV2Vha1BvaW50ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGM2OThh
MThhZTI0NWNmMmY5OGZhZmFhYTU2YTcwYzY3ODM3OWI1OTguLjdhMDM5MWVhNGQxZjViOWFkNzEw
NzNlZTY0N2QyZGZkMmQ0NmEwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0zMCw2ICszMCw3
IEBAIHdlYmNvcmVfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlciBcCiAJ
LUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cgXAorCS1JJChzcmNkaXIpL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3RvciBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvbG9hZGVyIFwKIAktSSQoc3Jj
ZGlyKS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUgXApAQCAtNjQsNyArNjUsNiBAQCB3
ZWJjb3JlX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQgXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvdHJhbnNjb2RlciBcCi0JLUkk
KHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2sgXAogCS1JJChzcmNkaXIpL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbiBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
cGx1Z2lucyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4gXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggOTVjZDUzOTVmYTMxNWNiZTAxZDdlODY2ZTky
NzhmOTZjYjViMWE0OC4uYzJkNGYwZDQ0OTg4M2E5MTRjMTFjYmUwM2E5ZWI3ZGRlYWRjYjZmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xOTI1LDYgKzE5MjUsMTQgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVJbnB1dFR5cGUuaCBc
CiAJU291cmNlL1dlYkNvcmUvaHRtbC9UaW1lUmFuZ2VzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
aHRtbC9UaW1lUmFuZ2VzLmggXAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQ3VlUGFyc2Vy
LmggXAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svQ3VlUGFyc2VyLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9DdWVQYXJzZXJQcml2YXRlLmggXAorCVNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9XZWJWVFRQYXJzZXIuaCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRUb2tl
bi5oIFwKKwlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIFwKKwlT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL2h0bWwvVVJMSW5wdXRUeXBlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9VUkxJ
bnB1dFR5cGUuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2FnZS5jcHAg
XApAQCAtMjg3MiwxNCArMjg4MCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVGhyZWFkVGltZXJzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RpbWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGltZXIuaCBcCi0JU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmggXAotCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RyYWNrL0N1ZVBhcnNlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL0N1ZVBhcnNlclByaXZhdGUuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2sv
V2ViVlRUUGFyc2VyLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRU
UGFyc2VyLmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuLmgg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6ZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9UcmVlU2hhcmVkLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1VSTFN0cmluZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VVUlELmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDhhYmRiOGQzMWJhOTk1MDQx
OThkZGVmNzM0NTNiMGEyZGM3OWQ2M2MuLjdjMWQyYTNmY2UyMWM0MzJmNDUzNGYwY2ExYjMxM2Qw
ZTQ3ZGMxOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0xNTgs
NiArMTU4LDcgQEAKICAgICAgICcuLi9odG1sL2NhbnZhcycsCiAgICAgICAnLi4vaHRtbC9wYXJz
ZXInLAogICAgICAgJy4uL2h0bWwvc2hhZG93JywKKyAgICAgICcuLi9odG1sL3RyYWNrJywKICAg
ICAgICcuLi9pbnNwZWN0b3InLAogICAgICAgJy4uL2xvYWRlcicsCiAgICAgICAnLi4vbG9hZGVy
L2FwcGNhY2hlJywKQEAgLTIwMiw3ICsyMDMsNiBAQAogICAgICAgJy4uL3BsYXRmb3JtL3NxbCcs
CiAgICAgICAnLi4vcGxhdGZvcm0vdGV4dCcsCiAgICAgICAnLi4vcGxhdGZvcm0vdGV4dC90cmFu
c2NvZGVyJywKLSAgICAgICcuLi9wbGF0Zm9ybS90cmFjaycsCiAgICAgICAnLi4vcGx1Z2lucycs
CiAgICAgICAnLi4vcGx1Z2lucy9jaHJvbWl1bScsCiAgICAgICAnLi4vcmVuZGVyaW5nJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBjZDVmOGNlNGFiMDYzMTU1YWU3NGI0YmFlMmQzM2UzMzMwYTRlMzRj
Li41MjY2ZDVmZTZlYjY1NWY3ZGE2ZjAwNTIxMWE4NmQyMTE3MTdlNzY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC00NDAxLDE0ICs0NDAxLDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L3dp
bmNlL1RleHRCcmVha0l0ZXJhdG9yV2luQ0UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90
ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4
dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9D
dWVQYXJzZXIuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaCcs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuY3BwJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vdHJh
Y2svV2ViVlRUVG9rZW4uaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svV2ViVlRUVG9r
ZW5pemVyLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3dpbi9CU3RyaW5nLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vd2luL0JTdHJpbmcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vd2luL0Jp
dG1hcEluZm8uY3BwJywKQEAgLTU4MjMsNiArNTgxNSwxNCBAQAogICAgICAgICAgICAgJ2h0bWwv
c2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwJywKICAgICAgICAgICAgICdodG1sL3NoYWRvdy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCcsCisgICAgICAgICAgICAnaHRtbC90cmFjay9DdWVQ
YXJzZXIuY3BwJywKKyAgICAgICAgICAgICdodG1sL3RyYWNrL0N1ZVBhcnNlci5oJywKKyAgICAg
ICAgICAgICdodG1sL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaCcsCisgICAgICAgICAgICAnaHRt
bC90cmFjay9XZWJWVFRQYXJzZXIuY3BwJywKKyAgICAgICAgICAgICdodG1sL3RyYWNrL1dlYlZU
VFBhcnNlci5oJywKKyAgICAgICAgICAgICdodG1sL3RyYWNrL1dlYlZUVFRva2VuLmgnLAorICAg
ICAgICAgICAgJ2h0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmNwcCcsCisgICAgICAgICAgICAn
aHRtbC90cmFjay9XZWJWVFRUb2tlbml6ZXIuaCcsCiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJj
b3JlX3N2Z19maWxlcyc6IFsKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVy
U3R5bGUuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKaW5kZXggYjU3ODVhMjVhNmE3OGQzN2I5ZGRjMjA4YWNk
YzUzYjdlOTZhNGY3ZS4uZDc5MTM5Mzk2NmFlMzk3ZmFjZTEwN2M5MWY5Y2EwYzlhYjhjMTZjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5wcmkKQEAgLTc2LDYgKzc2LDcgQEAgV0VCQ09SRV9JTkNMVURFUEFUSCA9IFwK
ICAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS9odG1sL2NhbnZhcyBcCiAgICAgJCRTT1VSQ0VfRElS
L1dlYkNvcmUvaHRtbC9wYXJzZXIgXAogICAgICQkU09VUkNFX0RJUi9XZWJDb3JlL2h0bWwvc2hh
ZG93IFwKKyAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS9odG1sL3RyYWNrIFwKICAgICAkJFNPVVJD
RV9ESVIvV2ViQ29yZS9pbnNwZWN0b3IgXAogICAgICQkU09VUkNFX0RJUi9XZWJDb3JlL2xvYWRl
ciBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlIFwKQEAgLTEwMSw3
ICsxMDIsNiBAQCBXRUJDT1JFX0lOQ0xVREVQQVRIID0gXAogICAgICQkU09VUkNFX0RJUi9XZWJD
b3JlL3BsYXRmb3JtL3NxbCBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dCBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyIFwK
LSAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS9wbGF0Zm9ybS90cmFjayBcCiAgICAgJCRTT1VSQ0Vf
RElSL1dlYkNvcmUvcGx1Z2lucyBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYkNvcmUvcmVuZGVyaW5n
IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8KaW5kZXggN2ViNWUwYjlkYTliZTJlNWM4MzM1N2FmZjkxZDNjN2VmY2RhZGJhOC4uNTcxNTll
YjhkYmQ2NjI0ODdmNWY2NTM0YWU2ZjlmMDY0YzNjNmZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTE3
ODgsNiArMTc4OCwxMSBAQCBIRUFERVJTICs9IFwKICAgICBodG1sL3BhcnNlci9YU1NBdWRpdG9y
LmggXAogICAgIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmggXAogICAgIGh0bWwv
c2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmggXAorICAgIGh0bWwvdHJhY2svQ3VlUGFyc2Vy
LmggXAorICAgIGh0bWwvdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oIFwKKyAgICBodG1sL3RyYWNr
L1dlYlZUVFBhcnNlci5oIFwKKyAgICBodG1sL3RyYWNrL1dlYlZUVFRva2VuLmggXAorICAgIGh0
bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmggXAogICAgIGluc3BlY3Rvci9Db25zb2xlTWVzc2Fn
ZS5oIFwKICAgICBpbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmggXAogICAgIGluc3BlY3Rv
ci9JZGVudGlmaWVyc0ZhY3RvcnkuaCBcCkBAIC0yMTI1LDExICsyMTMwLDYgQEAgSEVBREVSUyAr
PSBcCiAgICAgcGxhdGZvcm0vVGhyZWFkR2xvYmFsRGF0YS5oIFwKICAgICBwbGF0Zm9ybS9UaHJl
YWRUaW1lcnMuaCBcCiAgICAgcGxhdGZvcm0vVGltZXIuaCBcCi0gICAgcGxhdGZvcm0vdHJhY2sv
Q3VlUGFyc2VyLmggXAotICAgIHBsYXRmb3JtL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaCBcCi0g
ICAgcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggXAotICAgIHBsYXRmb3JtL3RyYWNrL1dl
YlZUVFRva2VuLmggXAotICAgIHBsYXRmb3JtL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIFwKICAg
ICBwbGF0Zm9ybS9XaWRnZXQuaCBcCiAgICAgcGxhdGZvcm0vUGxhdGZvcm1TdHJhdGVnaWVzLmgg
XAogICAgIHBsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL0N1ZVBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL0N1ZVBhcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODFkNWM4NzFhYjJiZDhiZDllZmRkMDMwMzE5
ZjhlYTIwNWY4NGFlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svQ3VlUGFyc2VyLmNwcApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJDdWVQYXJzZXIuaCIKKworI2lu
Y2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIK
KyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Q3VlUGFyc2VyOjpDdWVQYXJzZXIoKQoreworICAgIC8vIEZJWE1FKDYyODkzKTogSW1wbGVtZW50
LgorfQorCitDdWVQYXJzZXI6On5DdWVQYXJzZXIoKQoreworICAgIGlmIChtX2xvYWRlcikKKyAg
ICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOworICAgIG1fbG9hZGVyID0gMDsKK30KKwordm9pZCBD
dWVQYXJzZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIEN1ZVBhcnNlckNsaWVudCogY2xpZW50KQoreworICAgIFJlc291cmNlUmVxdWVz
dCByZXF1ZXN0KHVybCk7CisKKyAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOwor
ICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSBTZW5kQ2FsbGJhY2tzOworICAgIG9wdGlv
bnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gQWxsb3dDcm9zc09yaWdpblJlcXVlc3RzOwor
CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0g
Y29udGV4dDsKKworICAgIG1fbG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKGNvbnRl
eHQsIHRoaXMsIHJlcXVlc3QsIG9wdGlvbnMpOworfQorCitib29sIEN1ZVBhcnNlcjo6c3VwcG9y
dHNUeXBlKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIC8vIEZJWE1FKDYyODkzKTogY2hlY2sg
YWdhaW5zdCBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHR5cGVzCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIEN1ZVBhcnNlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgLyppZGVu
dGlmaWVyKi8sIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlmIChy
ZXNwb25zZS5taW1lVHlwZSgpID09ICJ0ZXh0L3Z0dCIpCisgICAgICAgIGNyZWF0ZVdlYlZUVFBh
cnNlcigpOworfQorCit2b2lkIEN1ZVBhcnNlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICAvLyBJZiBtaW1lIHR5cGUgZnJvbSBkaWRSZWNlaXZl
UmVzcG9uc2Ugd2FzIG5vdCBpbmZvcm1hdGl2ZSwgc25pZmYgZmlsZSBjb250ZW50LgorICAgIGlm
ICghbV9wcml2YXRlICYmIFdlYlZUVFBhcnNlcjo6aGFzUmVxdWlyZWRGaWxlSWRlbnRpZmllcihk
YXRhLCBsZW5ndGgpKQorICAgICAgICBjcmVhdGVXZWJWVFRQYXJzZXIoKTsKKworICAgIGlmICht
X3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+cGFyc2VCeXRlcyhkYXRhLCBsZW5ndGgpOwor
fQorCit2b2lkIEN1ZVBhcnNlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQorewor
ICAgIG1fY2xpZW50LT50cmFja0xvYWRDb21wbGV0ZWQoKTsKK30KKwordm9pZCBDdWVQYXJzZXI6
OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgbV9jbGllbnQtPnRyYWNrTG9h
ZEVycm9yKCk7Cit9CisKK3ZvaWQgQ3VlUGFyc2VyOjpmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJl
ZlB0cjxUZXh0VHJhY2tDdWU+ID4mKQoreworICAgIC8vIEZJWE1FKDYyODkzKTogSW1wbGVtZW50
LgorfQorCit2b2lkIEN1ZVBhcnNlcjo6bmV3Q3Vlc1BhcnNlZCgpCit7CisgICAgbV9jbGllbnQt
Pm5ld0N1ZXNQYXJzZWQoKTsKK30KKwordm9pZCBDdWVQYXJzZXI6OmNyZWF0ZVdlYlZUVFBhcnNl
cigpCit7CisgICAgaWYgKCFtX3ByaXZhdGUpIHsKKyAgICAgICAgbV9wcml2YXRlID0gV2ViVlRU
UGFyc2VyOjpjcmVhdGUodGhpcywgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICAgICAg
bV9jbGllbnQtPnRyYWNrTG9hZFN0YXJ0ZWQoKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0N1ZVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9DdWVQYXJzZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43ODFmMDU4MGJlZGMwNjhmZmEwNDYyZWZjYmQxYWYzZjY1OTNkNzQzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9DdWVQYXJzZXIuaApAQCAtMCww
ICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ3VlUGFyc2VyX2gKKyNkZWZpbmUgQ3VlUGFyc2VyX2gKKworI2lm
IEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKyNp
bmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVlRUUGFyc2Vy
LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFRleHRUcmFja0N1ZTsKKwor
Y2xhc3MgQ3VlUGFyc2VyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbmV3Q3Vl
c1BhcnNlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhY2tMb2FkU3RhcnRlZCgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdHJhY2tMb2FkRXJyb3IoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHRyYWNrTG9hZENvbXBsZXRlZCgpID0gMDsKK307CisKK2NsYXNzIEN1ZVBhcnNlciA6IHB1Ymxp
YyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LCBDdWVQYXJzZXJQcml2YXRlQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICBDdWVQYXJzZXIoKTsKKyAgICB2aXJ0dWFsIH5DdWVQYXJzZXIoKTsKKworICAgIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAgIHZv
aWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKTsKKyAgICB2b2lkIGRpZEZhaWwoY29u
c3QgUmVzb3VyY2VFcnJvciYpOworCisgICAgdm9pZCBsb2FkKGNvbnN0IFN0cmluZyYsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBDdWVQYXJzZXJDbGllbnQqKTsKKyAgICBib29sIHN1cHBvcnRz
VHlwZShjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxS
ZWZQdHI8VGV4dFRyYWNrQ3VlPiA+Jik7CisgICAgdm9pZCBuZXdDdWVzUGFyc2VkKCk7CisKK3By
b3RlY3RlZDoKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjcmVhdGVXZWJWVFRQYXJzZXIoKTsKKyAKKyAg
ICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gbV9sb2FkZXI7CisgICAgT3duUHRyPEN1ZVBhcnNl
clByaXZhdGVJbnRlcmZhY2U+IG1fcHJpdmF0ZTsKKyAgICBDdWVQYXJzZXJDbGllbnQqIG1fY2xp
ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9DdWVQYXJzZXJQcml2YXRlLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0N1ZVBhcnNlclByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
NjRmNDc3MzY3YWRkNjc2YWEyMzg4ZWZlMjc5OTlkYWIwOTdiZjZkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9DdWVQYXJzZXJQcml2YXRlLmgKQEAgLTAsMCAr
MSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEN1ZVBhcnNlclByaXZhdGVfaAorI2RlZmluZSBDdWVQYXJzZVByaXZh
dGVfaAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiVGV4dFRyYWNrQ3Vl
LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIG5l
d0N1ZXNQYXJzZWQoKSA9IDA7Cit9OworCitjbGFzcyBDdWVQYXJzZXJQcml2YXRlSW50ZXJmYWNl
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdWVQYXJzZXJQcml2YXRlSW50ZXJmYWNlKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q3VlUGFyc2Vy
UHJpdmF0ZUludGVyZmFjZSgpIHsgfQorCisgICAgLy8gSW5wdXQgZGF0YSB0byB0aGUgcGFyc2Vy
IHRvIHBhcnNlLgorICAgIHZpcnR1YWwgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqLCB1bnNp
Z25lZCkgPSAwOworCisgICAgLy8gVHJhbnNmZXJzIG93bmVyc2hpcCBvZiBsYXN0IHBhcnNlZCBj
dWVzIHRvIGNhbGxlci4KKyAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxS
ZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgQ3VlUGFyc2Vy
UHJpdmF0ZUludGVyZmFjZSgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJW
VFRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjk5NjQ2ZmNhZjIyZjFiMzc0ODU1ZGQ4OGU1ZTYwZDczMGVkYjI2YWIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFBhcnNlci5j
cHAKQEAgLTAsMCArMSwzOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorCisjaW5jbHVkZSAiV2ViVlRUUGFyc2VyLmgiCisKKyNpbmNsdWRlICJIVE1M
RWxlbWVudC5oIgorI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgorI2luY2x1ZGUg
IlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFdlYlZUVFBhcnNl
cjo6aGFzUmVxdWlyZWRGaWxlSWRlbnRpZmllcihjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgLy8gQSBXZWJWVFQgZmlsZSBpZGVudGlmaWVyIGNvbnNpc3RzIG9mIGFu
IG9wdGlvbmFsIEJPTSBjaGFyYWN0ZXIsCisgICAgLy8gdGhlIHN0cmluZyAiV0VCVlRUIiBmb2xs
b3dlZCBieSBhbiBvcHRpb25hbCBzcGFjZSBvciB0YWIgY2hhcmFjdGVyLAorICAgIC8vIGFuZCBh
bnkgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGxpbmUgdGVybWluYXRvcnMgLi4u
CisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworICAgIGlmIChsZW5ndGggPj0gMyAmJiBkYXRh
WzBdID09ICdceEVGJyAmJiBkYXRhWzFdID09ICdceEJCJyAmJiBkYXRhWzJdID09ICdceEJGJykK
KyAgICAgICAgcG9zaXRpb24gKz0gMzsKKyAgICBTdHJpbmcgbGluZSA9IGNvbGxlY3ROZXh0TGlu
ZShkYXRhLCBsZW5ndGgsICZwb3NpdGlvbik7CisgICAgICAgIAorICAgIGlmIChsaW5lLmxlbmd0
aCgpIDwgNikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChsaW5lLmxlbmd0aCgpID09
IDYgJiYgbGluZSAhPSAiV0VCVlRUIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
SWYgbGluZSBpcyBtb3JlIHRoYW4gc2l4IGNoYXJhY3RlcnMKKyAgICAvLyBidXQgdGhlIGZpcnN0
IHNpeCBjaGFyYWN0ZXJzIGRvIG5vdCBleGFjdGx5IGVxdWFsICJXRUJWVFQiLAorICAgIC8vIG9y
IHRoZSBzZXZlbnRoIGNoYXJhY3RlciBpcyBuZWl0aGVyIGEgc3BhY2Ugbm9yIGEgdGFiIGNoYXJh
Y3RlciwgdGhlbiBhYm9ydC4KKyAgICBpZiAobGluZS5sZW5ndGgoKSA+IDYgJiYgKGxpbmUuc3Vi
c3RyaW5nKDAsIDYpICE9ICJXRUJWVFQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCAobGluZVs2XSAhPSAnICcgJiYgbGluZVs2XSAhPSAnXHQnKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3RyaW5nIFdlYlZUVFBhcnNlcjo6Y29sbGVj
dERpZ2l0cyhjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCogcG9zaXRpb24pCit7CisgICAg
U3RyaW5nQnVpbGRlciBkaWdpdHM7CisgICAgd2hpbGUgKCpwb3NpdGlvbiA8IGlucHV0Lmxlbmd0
aCgpICYmIGlzQVNDSUlEaWdpdChpbnB1dFsqcG9zaXRpb25dKSkKKyAgICAgICAgZGlnaXRzLmFw
cGVuZChpbnB1dFsoKnBvc2l0aW9uKSsrXSk7CisgICAgcmV0dXJuIGRpZ2l0cy50b1N0cmluZygp
OworfQorCitTdHJpbmcgV2ViVlRUUGFyc2VyOjpjb2xsZWN0V29yZChjb25zdCBTdHJpbmcmIGlu
cHV0LCB1bnNpZ25lZCogcG9zaXRpb24pCit7CisgICAgU3RyaW5nQnVpbGRlciBzdHJpbmc7Cisg
ICAgd2hpbGUgKCpwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCgpICYmICFpc0FTcGFjZShpbnB1dFsq
cG9zaXRpb25dKSkKKyAgICAgICAgc3RyaW5nLmFwcGVuZChpbnB1dFsoKnBvc2l0aW9uKSsrXSk7
CisgICAgcmV0dXJuIHN0cmluZy50b1N0cmluZygpOworfQorCitXZWJWVFRQYXJzZXI6OldlYlZU
VFBhcnNlcihDdWVQYXJzZXJQcml2YXRlQ2xpZW50KiBjbGllbnQsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkK
KyAgICAsIG1fc3RhdGUoSW5pdGlhbCkKKyAgICAsIG1fdG9rZW5pemVyKFdlYlZUVFRva2VuaXpl
cjo6Y3JlYXRlKCkpCit7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7Cit9CisKK3ZvaWQgV2ViVlRU
UGFyc2VyOjpmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4mIG91
dHB1dEN1ZXMpCit7CisgICAgb3V0cHV0Q3VlcyA9IG1fY3VlbGlzdDsKKyAgICBtX2N1ZWxpc3Qu
Y2xlYXIoKTsKK30KKwordm9pZCBXZWJWVFRQYXJzZXI6OnBhcnNlQnl0ZXMoY29uc3QgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIDQuOC4xMC4xMy4zIFdIQVRXRyBXZWJW
VFQgUGFyc2VyIGFsZ29yaXRobS4KKyAgICAvLyAxLTMgLSBJbml0aWFsIHNldHVwLgorICAgIHVu
c2lnbmVkIHBvc2l0aW9uID0gMDsKKworICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewor
ICAgICAgICBTdHJpbmcgbGluZSA9IGNvbGxlY3ROZXh0TGluZShkYXRhLCBsZW5ndGgsICZwb3Np
dGlvbik7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAgICAgY2Fz
ZSBJbml0aWFsOgorICAgICAgICAgICAgLy8gNC0xMiAtIENvbGxlY3QgdGhlIGZpcnN0IGxpbmUg
YW5kIGNoZWNrIGZvciAiV0VCVlRUIi4KKyAgICAgICAgICAgIGlmICghaGFzUmVxdWlyZWRGaWxl
SWRlbnRpZmllcihkYXRhLCBsZW5ndGgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIG1fc3RhdGUgPSBIZWFkZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgICAgIGNhc2UgSGVhZGVyOgorICAgICAgICAgICAgLy8gMTMtMTggLSBBbGxvdyBhIGhlYWRl
ciAoY29tbWVudCBhcmVhKSB1bmRlciB0aGUgV0VCVlRUIGxpbmUuCisgICAgICAgICAgICBpZiAo
bGluZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IElkOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIElkOgorICAgICAgICAgICAgLy8gMTkt
MjkgLSBBbGxvdyBhbnkgbnVtYmVyIG9mIGxpbmUgdGVybWluYXRvcnMsIHRoZW4gaW5pdGlhbGl6
ZSBuZXcgY3VlIHZhbHVlcy4KKyAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlc2V0Q3VlVmFsdWVzKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIDMwLTM5IC0gQ2hlY2sgaWYgdGhpcyBsaW5lIGNvbnRhaW5z
IGFuIG9wdGlvbmFsIGlkZW50aWZpZXIgb3IgdGltaW5nIGRhdGEuCisgICAgICAgICAgICBtX3N0
YXRlID0gY29sbGVjdEN1ZUlkKGxpbmUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAor
ICAgICAgICBjYXNlIFRpbWluZ3NBbmRTZXR0aW5nczoKKyAgICAgICAgICAgIC8vIDQwIC0gQ29s
bGVjdCBjdWUgdGltaW5ncyBhbmQgc2V0dGluZ3MuCisgICAgICAgICAgICBtX3N0YXRlID0gY29s
bGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhsaW5lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICAgICAgY2FzZSBDdWVUZXh0OgorICAgICAgICAgICAgLy8gNDEtNTMgLSBDb2xsZWN0
IHRoZSBjdWUgdGV4dCwgY3JlYXRlIGEgY3VlLCBhbmQgYWRkIGl0IHRvIHRoZSBvdXRwdXQuCisg
ICAgICAgICAgICBtX3N0YXRlID0gY29sbGVjdEN1ZVRleHQobGluZSwgbGVuZ3RoLCBwb3NpdGlv
bik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJhZEN1ZToKKyAgICAgICAg
ICAgIC8vIDU0LTYyIC0gQ29sbGVjdCBhbmQgZGlzY2FyZCB0aGUgcmVtYWluaW5nIGN1ZS4KKyAg
ICAgICAgICAgIG1fc3RhdGUgPSBpZ25vcmVCYWRDdWUobGluZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KK30KKworV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZU
VFBhcnNlcjo6Y29sbGVjdEN1ZUlkKGNvbnN0IFN0cmluZyYgbGluZSkKK3sKKyAgICBpZiAobGlu
ZS5jb250YWlucygiLS0+IikpCisgICAgICAgIHJldHVybiBjb2xsZWN0VGltaW5nc0FuZFNldHRp
bmdzKGxpbmUpOworICAgIG1fY3VycmVudElkID0gbGluZTsKKyAgICByZXR1cm4gVGltaW5nc0Fu
ZFNldHRpbmdzOworfQorCitXZWJWVFRQYXJzZXI6OlBhcnNlU3RhdGUgV2ViVlRUUGFyc2VyOjpj
b2xsZWN0VGltaW5nc0FuZFNldHRpbmdzKGNvbnN0IFN0cmluZyYgbGluZSkKK3sKKyAgICAvLyA0
LjguMTAuMTMuMyBDb2xsZWN0IFdlYlZUVCBjdWUgdGltaW5ncyBhbmQgc2V0dGluZ3MuCisgICAg
Ly8gMS0zIC0gTGV0IGlucHV0IGJlIHRoZSBzdHJpbmcgYmVpbmcgcGFyc2VkIGFuZCBwb3NpdGlv
biBiZSBhIHBvaW50ZXIgaW50byBpbnB1dAorICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAg
ICBza2lwV2hpdGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOworCisgICAgLy8gNC01IC0gQ29sbGVj
dCBhIFdlYlZUVCB0aW1lc3RhbXAuIElmIHRoYXQgZmFpbHMsIHRoZW4gYWJvcnQgYW5kIHJldHVy
biBmYWlsdXJlLiBPdGhlcndpc2UsIGxldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBzdGFydCB0aW1l
IGJlIHRoZSBjb2xsZWN0ZWQgdGltZS4KKyAgICBtX2N1cnJlbnRTdGFydFRpbWUgPSBjb2xsZWN0
VGltZVN0YW1wKGxpbmUsICZwb3NpdGlvbik7CisgICAgaWYgKG1fY3VycmVudFN0YXJ0VGltZSA9
PSBtYWxmb3JtZWRUaW1lKQorICAgICAgICByZXR1cm4gQmFkQ3VlOworICAgIHNraXBXaGl0ZVNw
YWNlKGxpbmUsICZwb3NpdGlvbik7CisKKyAgICAvLyA2LTkgLSBJZiB0aGUgbmV4dCB0aHJlZSBj
aGFyYWN0ZXJzIGFyZSBub3QgIi0tPiIsIGFib3J0IGFuZCByZXR1cm4gZmFpbHVyZS4KKyAgICBp
ZiAobGluZS5maW5kKCItLT4iLCBwb3NpdGlvbikgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVy
biBCYWRDdWU7CisgICAgcG9zaXRpb24gKz0gMzsKKyAgICBza2lwV2hpdGVTcGFjZShsaW5lLCAm
cG9zaXRpb24pOworCisgICAgLy8gMTAtMTEgLSBDb2xsZWN0IGEgV2ViVlRUIHRpbWVzdGFtcC4g
SWYgdGhhdCBmYWlscywgdGhlbiBhYm9ydCBhbmQgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwg
bGV0IGN1ZSdzIHRleHQgdHJhY2sgY3VlIGVuZCB0aW1lIGJlIHRoZSBjb2xsZWN0ZWQgdGltZS4K
KyAgICBtX2N1cnJlbnRFbmRUaW1lID0gY29sbGVjdFRpbWVTdGFtcChsaW5lLCAmcG9zaXRpb24p
OworICAgIGlmIChtX2N1cnJlbnRFbmRUaW1lID09IG1hbGZvcm1lZFRpbWUpCisgICAgICAgIHJl
dHVybiBCYWRDdWU7CisgICAgc2tpcFdoaXRlU3BhY2UobGluZSwgJnBvc2l0aW9uKTsKKworICAg
IC8vIDEyIC0gUGFyc2UgdGhlIFdlYlZUVCBzZXR0aW5ncyBmb3IgdGhlIGN1ZSAoY29uZHVjdGVk
IGluIFRleHRUcmFja0N1ZSkuCisgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBsaW5lLnN1YnN0cmlu
Zyhwb3NpdGlvbiwgbGluZS5sZW5ndGgoKS0xKTsKKyAgICByZXR1cm4gQ3VlVGV4dDsKK30KKwor
V2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdEN1ZVRleHQoY29u
c3QgU3RyaW5nJiBsaW5lLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHBvc2l0aW9uKQorewor
ICAgIGlmIChsaW5lLmlzRW1wdHkoKSkgeworICAgICAgICBwcm9jZXNzQ3VlVGV4dCgpOworICAg
ICAgICByZXR1cm4gSWQ7CisgICAgfQorICAgIGlmICghbV9jdXJyZW50Q29udGVudC5pc0VtcHR5
KCkpCisgICAgICAgIG1fY3VycmVudENvbnRlbnQuYXBwZW5kKCJcbiIpOworICAgIG1fY3VycmVu
dENvbnRlbnQuYXBwZW5kKGxpbmUpOworCisgICAgaWYgKHBvc2l0aW9uID49IGxlbmd0aCkKKyAg
ICAgICAgcHJvY2Vzc0N1ZVRleHQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICByZXR1cm4gQ3Vl
VGV4dDsKK30KKworV2ViVlRUUGFyc2VyOjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6aWdub3Jl
QmFkQ3VlKGNvbnN0IFN0cmluZyYgbGluZSkKK3sKKyAgICBpZiAoIWxpbmUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gQmFkQ3VlOworICAgIHJldHVybiBJZDsKK30KKwordm9pZCBXZWJWVFRQ
YXJzZXI6OnByb2Nlc3NDdWVUZXh0KCkKK3sKKyAgICAvLyA1MSAtIEN1ZSB0ZXh0IHByb2Nlc3Np
bmcgYmFzZWQgb24KKyAgICAvLyA0LjguMTAuMTMuNCBXZWJWVFQgY3VlIHRleHQgcGFyc2luZyBy
dWxlcyBhbmQKKyAgICAvLyA0LjguMTAuMTMuNSBXZWJWVFQgY3VlIHRleHQgRE9NIGNvbnN0cnVj
dGlvbiBydWxlcy4KKyAgICBpZiAobV9jdXJyZW50Q29udGVudC5sZW5ndGgoKSA8PSAwKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0Rv
Y3VtZW50KCkpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50
Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKworICAgIG1fYXR0YWNobWVudFJvb3QgPSBE
b2N1bWVudEZyYWdtZW50OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIG1fY3VycmVudE5vZGUgPSBt
X2F0dGFjaG1lbnRSb290OworICAgIG1fdG9rZW5pemVyLT5yZXNldCgpOworICAgIG1fdG9rZW4u
Y2xlYXIoKTsKKworICAgIFNlZ21lbnRlZFN0cmluZyBjb250ZW50KG1fY3VycmVudENvbnRlbnQu
dG9TdHJpbmcoKSk7CisgICAgd2hpbGUgKG1fdG9rZW5pemVyLT5uZXh0VG9rZW4oY29udGVudCwg
bV90b2tlbikpCisgICAgICAgIGNvbnN0cnVjdFRyZWVGcm9tVG9rZW4oZG9jdW1lbnQpOworICAg
IAorICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IFRleHRUcmFja0N1ZTo6Y3JlYXRlKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbV9jdXJyZW50SWQsIG1fY3VycmVudFN0YXJ0VGltZSwg
bV9jdXJyZW50RW5kVGltZSwgbV9jdXJyZW50Q29udGVudC50b1N0cmluZygpLCBtX2N1cnJlbnRT
ZXR0aW5ncywgZmFsc2UpOworICAgIGN1ZS0+c2V0Q3VlSFRNTChtX2F0dGFjaG1lbnRSb290KTsK
KyAgICBtX2N1ZWxpc3QuYXBwZW5kKGN1ZSk7CisgICAgbV9jbGllbnQtPm5ld0N1ZXNQYXJzZWQo
KTsKK30KKwordm9pZCBXZWJWVFRQYXJzZXI6OnJlc2V0Q3VlVmFsdWVzKCkKK3sKKyAgICBtX2N1
cnJlbnRJZCA9IGVtcHR5U3RyaW5nKCk7CisgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBlbXB0eVN0
cmluZygpOworICAgIG1fY3VycmVudFN0YXJ0VGltZSA9IDA7CisgICAgbV9jdXJyZW50RW5kVGlt
ZSA9IDA7CisgICAgbV9jdXJyZW50Q29udGVudC5jbGVhcigpOworfQorCitkb3VibGUgV2ViVlRU
UGFyc2VyOjpjb2xsZWN0VGltZVN0YW1wKGNvbnN0IFN0cmluZyYgbGluZSwgdW5zaWduZWQqIHBv
c2l0aW9uKQoreworICAgIC8vIDQuOC4xMC4xMy4zIENvbGxlY3QgYSBXZWJWVFQgdGltZXN0YW1w
LgorICAgIC8vIDEtNCAtIEluaXRpYWwgY2hlY2tzLCBsZXQgbW9zdCBzaWduaWZpY2FudCB1bml0
cyBiZSBtaW51dGVzLgorICAgIGVudW0gTW9kZSB7IG1pbnV0ZXMsIGhvdXJzIH07CisgICAgTW9k
ZSBtb2RlID0gbWludXRlczsKKyAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwg
IWlzQVNDSUlEaWdpdChsaW5lWypwb3NpdGlvbl0pKQorICAgICAgICByZXR1cm4gbWFsZm9ybWVk
VGltZTsKKworICAgIC8vIDUtNiAtIENvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRo
YXQgYXJlIDAtOS4KKyAgICBTdHJpbmcgZGlnaXRzMSA9IGNvbGxlY3REaWdpdHMobGluZSwgcG9z
aXRpb24pOworICAgIGludCB2YWx1ZTEgPSBkaWdpdHMxLnRvSW50KCk7CisKKyAgICAvLyA3IC0g
SWYgbm90IDIgY2hhcmFjdGVycyBvciB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gNTksIGludGVycHJl
dCBhcyBob3Vycy4KKyAgICBpZiAoZGlnaXRzMS5sZW5ndGgoKSAhPSAyIHx8IHZhbHVlMSA+IDU5
KQorICAgICAgICBtb2RlID0gaG91cnM7CisKKyAgICAvLyA4LTEyIC0gQ29sbGVjdCB0aGUgbmV4
dCBzZXF1ZW5jZSBvZiAwLTkgYWZ0ZXIgJzonIChtdXN0IGJlIDIgY2hhcnMpLgorICAgIGlmICgq
cG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBsaW5lWygqcG9zaXRpb24pKytdICE9ICc6JykK
KyAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgaWYgKCpwb3NpdGlvbiA+PSBsaW5l
Lmxlbmd0aCgpIHx8ICFpc0FTQ0lJRGlnaXQobGluZVsoKnBvc2l0aW9uKV0pKQorICAgICAgICBy
ZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICBTdHJpbmcgZGlnaXRzMiA9IGNvbGxlY3REaWdpdHMo
bGluZSwgcG9zaXRpb24pOworICAgIGludCB2YWx1ZTIgPSBkaWdpdHMyLnRvSW50KCk7CisgICAg
aWYgKGRpZ2l0czIubGVuZ3RoKCkgIT0gMikgCisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1l
OworCisgICAgLy8gMTMgLSBEZXRlY3Qgd2hldGhlciB0aGlzIHRpbWVzdGFtcCBpbmNsdWRlcyBo
b3Vycy4KKyAgICBpbnQgdmFsdWUzOworICAgIGlmIChtb2RlID09IGhvdXJzIHx8ICgqcG9zaXRp
b24gPCBsaW5lLmxlbmd0aCgpICYmIGxpbmVbKnBvc2l0aW9uXSA9PSAnOicpKSB7CisgICAgICAg
IGlmICgqcG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBsaW5lWygqcG9zaXRpb24pKytdICE9
ICc6JykKKyAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1lOworICAgICAgICBpZiAoKnBv
c2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgIWlzQVNDSUlEaWdpdChsaW5lWypwb3NpdGlvbl0p
KQorICAgICAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7CisgICAgICAgIFN0cmluZyBkaWdp
dHMzID0gY29sbGVjdERpZ2l0cyhsaW5lLCBwb3NpdGlvbik7CisgICAgICAgIGlmIChkaWdpdHMz
Lmxlbmd0aCgpICE9IDIpCisgICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKyAgICAg
ICAgdmFsdWUzID0gZGlnaXRzMy50b0ludCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVl
MyA9IHZhbHVlMjsKKyAgICAgICAgdmFsdWUyID0gdmFsdWUxOworICAgICAgICB2YWx1ZTEgPSAw
OworICAgIH0KKworICAgIC8vIDE0LTE5IC0gQ29sbGVjdCBuZXh0IHNlcXVlbmNlIG9mIDAtOSBh
ZnRlciAnLicgKG11c3QgYmUgMyBjaGFycykuCisgICAgaWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxl
bmd0aCgpIHx8IGxpbmVbKCpwb3NpdGlvbikrK10gIT0gJy4nKQorICAgICAgICByZXR1cm4gbWFs
Zm9ybWVkVGltZTsKKyAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwgIWlzQVND
SUlEaWdpdChsaW5lWypwb3NpdGlvbl0pKQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsK
KyAgICBTdHJpbmcgZGlnaXRzNCA9IGNvbGxlY3REaWdpdHMobGluZSwgcG9zaXRpb24pOworICAg
IGlmIChkaWdpdHM0Lmxlbmd0aCgpICE9IDMpCisgICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1l
OworICAgIGludCB2YWx1ZTQgPSBkaWdpdHM0LnRvSW50KCk7CisgICAgaWYgKHZhbHVlMiA+IDU5
IHx8IHZhbHVlMyA+IDU5KQorICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKKworICAgIC8v
IDIwLTIxIC0gQ2FsY3VsYXRlIHJlc3VsdC4KKyAgICByZXR1cm4gKHZhbHVlMSAqIHNlY29uZHNQ
ZXJIb3VyKSArICh2YWx1ZTIgKiBzZWNvbmRzUGVyTWludXRlKSArIHZhbHVlMyArICgoZG91Ymxl
KXZhbHVlNCAvIDEwMDApOworfQorCit2b2lkIFdlYlZUVFBhcnNlcjo6Y29uc3RydWN0VHJlZUZy
b21Ub2tlbihEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQXRvbWljU3RyaW5nIHRva2VuVGFn
TmFtZShtX3Rva2VuLm5hbWUoKS5kYXRhKCksIG1fdG9rZW4ubmFtZSgpLnNpemUoKSk7CisgICAg
UXVhbGlmaWVkTmFtZSB0YWdOYW1lKG51bGxBdG9tLCB0b2tlblRhZ05hbWUsIHhodG1sTmFtZXNw
YWNlVVJJKTsKKworICAgIHN3aXRjaCAobV90b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIFdlYlZU
VFRva2VuVHlwZXM6OkNoYXJhY3RlcjogeworICAgICAgICBTdHJpbmcgY29udGVudChtX3Rva2Vu
LmNoYXJhY3RlcnMoKS5kYXRhKCksIG1fdG9rZW4uY2hhcmFjdGVycygpLnNpemUoKSk7CisgICAg
ICAgIFJlZlB0cjxUZXh0PiBjaGlsZCA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgY29udGVudCk7
CisgICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgV2ViVlRUVG9rZW5UeXBlczo6U3RhcnRUYWc6IHsKKyAg
ICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBjaGlsZDsKKyAgICAgICAgaWYgKGlzUmVjb2duaXpl
ZFRhZyh0b2tlblRhZ05hbWUpKQorICAgICAgICAgICAgY2hpbGQgPSBIVE1MRWxlbWVudDo6Y3Jl
YXRlKHRhZ05hbWUsIGRvY3VtZW50KTsKKyAgICAgICAgZWxzZSBpZiAobV90b2tlbi5uYW1lKCku
c2l6ZSgpID09IDEgJiYgbV90b2tlbi5uYW1lKClbMF0gPT0gJ2MnKQorICAgICAgICAgICAgY2hp
bGQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKHNwYW5UYWcsIGRvY3VtZW50KTsKKyAgICAgICAgZWxz
ZSBpZiAobV90b2tlbi5uYW1lKCkuc2l6ZSgpID09IDEgJiYgbV90b2tlbi5uYW1lKClbMF0gPT0g
J3YnKQorICAgICAgICAgICAgY2hpbGQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKHFUYWcsIGRvY3Vt
ZW50KTsKKworICAgICAgICBpZiAoY2hpbGQpIHsKKyAgICAgICAgICAgIGlmIChtX3Rva2VuLmNs
YXNzZXMoKS5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPE5hbWVkTm9kZU1h
cD4gYXR0cmlidXRlTWFwID0gTmFtZWROb2RlTWFwOjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGVNYXAtPmFkZEF0dHJpYnV0ZShBdHRyaWJ1dGU6OmNyZWF0ZU1hcHBlZChjbGFz
c0F0dHIsIEF0b21pY1N0cmluZyhtX3Rva2VuLmNsYXNzZXMoKS5kYXRhKCksIG1fdG9rZW4uY2xh
c3NlcygpLnNpemUoKSkpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+c2V0QXR0cmlidXRlTWFw
KGF0dHJpYnV0ZU1hcC5yZWxlYXNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGNoaWxkLT5oYXNUYWdOYW1lKHFUYWcpKQorICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRBdHRy
aWJ1dGUodGl0bGVBdHRyLCBTdHJpbmcobV90b2tlbi5hbm5vdGF0aW9uKCkuZGF0YSgpLCBtX3Rv
a2VuLmFubm90YXRpb24oKS5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPnBh
cnNlckFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBjaGlsZDsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJWVFRUb2tlblR5
cGVzOjpFbmRUYWc6CisgICAgICAgIGlmIChpc1JlY29nbml6ZWRUYWcodG9rZW5UYWdOYW1lKQor
ICAgICAgICAgICAgfHwgbV90b2tlbi5uYW1lKCkuc2l6ZSgpID09IDEgJiYgbV90b2tlbi5uYW1l
KClbMF0gPT0gJ2MnCisgICAgICAgICAgICB8fCBtX3Rva2VuLm5hbWUoKS5zaXplKCkgPT0gMSAm
JiBtX3Rva2VuLm5hbWUoKVswXSA9PSAndicpCisgICAgICAgICAgICBpZiAobV9jdXJyZW50Tm9k
ZS0+cGFyZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBtX2N1cnJl
bnROb2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViVlRUVG9r
ZW5UeXBlczo6VGltZXN0YW1wVGFnOiB7CisgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsK
KyAgICAgICAgZG91YmxlIHRpbWUgPSBjb2xsZWN0VGltZVN0YW1wKG1fdG9rZW4uY2hhcmFjdGVy
cygpLmRhdGEoKSwgJnBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHRpbWUgIT0gbWFsZm9ybWVkVGlt
ZSkKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPnBhcnNlckFkZENoaWxkKFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjo6Y3JlYXRlKGRvY3VtZW50LCAidGltZXN0YW1wIiwgU3RyaW5nKG1fdG9rZW4u
Y2hhcmFjdGVycygpLmRhdGEoKSwgbV90b2tlbi5jaGFyYWN0ZXJzKCkuc2l6ZSgpKSkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIG1fdG9rZW4uY2xlYXIoKTsKK30KKwordm9pZCBXZWJWVFRQYXJzZXI6OnNraXBXaGl0ZVNw
YWNlKGNvbnN0IFN0cmluZyYgbGluZSwgdW5zaWduZWQqIHBvc2l0aW9uKQoreworICAgIHdoaWxl
ICgqcG9zaXRpb24gPCBsaW5lLmxlbmd0aCgpICYmIGlzQVNwYWNlKGxpbmVbKnBvc2l0aW9uXSkp
CisgICAgICAgICgqcG9zaXRpb24pKys7Cit9CisKK3ZvaWQgV2ViVlRUUGFyc2VyOjpza2lwTGlu
ZVRlcm1pbmF0b3IoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCog
cG9zaXRpb24pCit7CisgICAgaWYgKCpwb3NpdGlvbiA+PSBsZW5ndGgpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoZGF0YVsqcG9zaXRpb25dID09ICdccicpCisgICAgICAgICgqcG9zaXRpb24p
Kys7CisgICAgaWYgKCpwb3NpdGlvbiA+PSBsZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoZGF0YVsqcG9zaXRpb25dID09ICdcbicpCisgICAgICAgICgqcG9zaXRpb24pKys7Cit9CisK
K1N0cmluZyBXZWJWVFRQYXJzZXI6OmNvbGxlY3ROZXh0TGluZShjb25zdCBjaGFyKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKiBwb3NpdGlvbikKK3sKKyAgICB1bnNpZ25lZCBvbGRQ
b3NpdGlvbiA9ICpwb3NpdGlvbjsKKyAgICB3aGlsZSAoKnBvc2l0aW9uIDwgbGVuZ3RoICYmIGRh
dGFbKnBvc2l0aW9uXSAhPSAnXHInICYmIGRhdGFbKnBvc2l0aW9uXSAhPSAnXG4nKQorICAgICAg
ICAoKnBvc2l0aW9uKSsrOworICAgIFN0cmluZyBsaW5lID0gU3RyaW5nOjpmcm9tVVRGOChkYXRh
ICsgb2xkUG9zaXRpb24sICpwb3NpdGlvbiAtIG9sZFBvc2l0aW9uKTsKKyAgICBza2lwTGluZVRl
cm1pbmF0b3IoZGF0YSwgbGVuZ3RoLCBwb3NpdGlvbik7CisgICAgcmV0dXJuIGxpbmU7Cit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZU
VFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wMmJkOGI3Y2FkMmVhMTQ2ZWRmMzdmNTYwMDgxOTg1ZTg1ODM4NDFiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJWVFRQYXJzZXIuaApAQCAt
MCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZUVFBhcnNlcl9oCisjZGVmaW5lIFdlYlZUVFBhcnNl
cl9oCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJDdWVQYXJzZXJQcml2
YXRlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiV2ViVlRUVG9rZW5pemVyLmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKKworc3RhdGljIGNvbnN0IGludCBzZWNvbmRzUGVySG91ciA9IDM2MDA7CitzdGF0aWMg
Y29uc3QgaW50IHNlY29uZHNQZXJNaW51dGUgPSA2MDsKK3N0YXRpYyBjb25zdCBkb3VibGUgbWFs
Zm9ybWVkVGltZSA9IC0xOworCitjbGFzcyBXZWJWVFRQYXJzZXIgOiBwdWJsaWMgQ3VlUGFyc2Vy
UHJpdmF0ZUludGVyZmFjZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+V2ViVlRUUGFyc2VyKCkg
eyB9CisgICAgCisgICAgZW51bSBQYXJzZVN0YXRlIHsgSW5pdGlhbCwgSGVhZGVyLCBJZCwgVGlt
aW5nc0FuZFNldHRpbmdzLCBDdWVUZXh0LCBCYWRDdWUgfTsKKworICAgIHN0YXRpYyBQYXNzT3du
UHRyPFdlYlZUVFBhcnNlcj4gY3JlYXRlKEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIGNsaWVudCwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgV2ViVlRUUGFyc2VyKGNsaWVudCwgY29udGV4dCkpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgYm9vbCBoYXNSZXF1aXJlZEZpbGVJZGVudGlmaWVyKGNvbnN0IGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNSZWNvZ25p
emVkVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0YWdOYW1lID09IGlUYWcKKyAgICAgICAgICAgIHx8IHRhZ05hbWUgPT0gYlRhZworICAgICAg
ICAgICAgfHwgdGFnTmFtZSA9PSB1VGFnCisgICAgICAgICAgICB8fCB0YWdOYW1lID09IHJ1YnlU
YWcKKyAgICAgICAgICAgIHx8IHRhZ05hbWUgPT0gcnRUYWc7CisgICAgfQorCisgICAgc3RhdGlj
IGlubGluZSBib29sIGlzQVNwYWNlKGNoYXIgYykKKyAgICB7CisgICAgICAgIC8vIFdlYlZUVCBz
cGFjZSBjaGFyYWN0ZXJzIGFyZSBVKzAwMjAgU1BBQ0UsIFUrMDAwOSBDSEFSQUNURVIgVEFCVUxB
VElPTiAodGFiKSwgVSswMDBBIExJTkUgRkVFRCAoTEYpLCBVKzAwMEMgRk9STSBGRUVEIChGRiks
IGFuZCBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOICAgIChDUikuCisgICAgICAgIHJldHVybiBjID09
ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xmJyB8fCBjID09ICdccic7
CisgICAgfQorICAgIHN0YXRpYyBTdHJpbmcgY29sbGVjdERpZ2l0cyhjb25zdCBTdHJpbmcmLCB1
bnNpZ25lZCopOworICAgIHN0YXRpYyBTdHJpbmcgY29sbGVjdFdvcmQoY29uc3QgU3RyaW5nJiwg
dW5zaWduZWQqKTsKKworICAgIHZpcnR1YWwgdm9pZCBmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJl
ZlB0cjxUZXh0VHJhY2tDdWU+ID4mKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VCeXRl
cyhjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpOworCitwcm90ZWN0ZWQ6CisgICAg
V2ViVlRUUGFyc2VyKEN1ZVBhcnNlclByaXZhdGVDbGllbnQqLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kik7CisgICAgCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0OworICAgIFBhcnNlU3RhdGUgbV9zdGF0ZTsKKworcHJpdmF0ZToKKyAgICBQYXJz
ZVN0YXRlIGNvbGxlY3RDdWVJZChjb25zdCBTdHJpbmcmKTsKKyAgICBQYXJzZVN0YXRlIGNvbGxl
Y3RUaW1pbmdzQW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJik7CisgICAgUGFyc2VTdGF0ZSBjb2xs
ZWN0Q3VlVGV4dChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKTsKKyAg
ICBQYXJzZVN0YXRlIGlnbm9yZUJhZEN1ZShjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgcHJv
Y2Vzc0N1ZVRleHQoKTsKKyAgICB2b2lkIHJlc2V0Q3VlVmFsdWVzKCk7CisgICAgZG91YmxlIGNv
bGxlY3RUaW1lU3RhbXAoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQqKTsKKyAgICB2b2lkIHNraXBX
aGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkKik7CisgICAgc3RhdGljIHZvaWQgc2tp
cExpbmVUZXJtaW5hdG9yKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQqKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3ROZXh0TGluZShjb25zdCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkKik7CisgICAgCisgICAgdm9pZCBjb25zdHJ1Y3RU
cmVlRnJvbVRva2VuKERvY3VtZW50Kik7CisKKyAgICBTdHJpbmcgbV9jdXJyZW50SWQ7CisgICAg
ZG91YmxlIG1fY3VycmVudFN0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9jdXJyZW50RW5kVGltZTsK
KyAgICBTdHJpbmdCdWlsZGVyIG1fY3VycmVudENvbnRlbnQ7CisgICAgU3RyaW5nIG1fY3VycmVu
dFNldHRpbmdzOworICAgIAorICAgIFdlYlZUVFRva2VuIG1fdG9rZW47CisgICAgT3duUHRyPFdl
YlZUVFRva2VuaXplcj4gbV90b2tlbml6ZXI7CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gbV9hdHRhY2htZW50Um9vdDsKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbV9jdXJyZW50
Tm9kZTsKKworICAgIEN1ZVBhcnNlclByaXZhdGVDbGllbnQqIG1fY2xpZW50OworCisgICAgVmVj
dG9yPFJlZlB0cjxUZXh0VHJhY2tDdWU+ID4gbV9jdWVsaXN0OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9XZWJWVFRUb2tlbi5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9XZWJW
VFRUb2tlbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4NjhmY2ViM2JiMTk2YTMzZmM2ZGUyYTkzMjBiNDMyNmJk
N2QxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZU
VFRva2VuLmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWVFRUb2tlbl9oCisjZGVmaW5l
IFdlYlZUVFRva2VuX2gKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIk1h
cmt1cFRva2VuQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdlYlZUVFRv
a2VuVHlwZXMgeworcHVibGljOgorICAgIGVudW0gVHlwZSB7CisgICAgICAgIFVuaW5pdGlhbGl6
ZWQsCisgICAgICAgIENoYXJhY3RlciwKKyAgICAgICAgU3RhcnRUYWcsCisgICAgICAgIEVuZFRh
ZywKKyAgICAgICAgVGltZXN0YW1wVGFnLAorICAgICAgICBFbmRPZkZpbGUsCisgICAgfTsKK307
CisKK2NsYXNzIFdlYlZUVFRva2VuIDogcHVibGljIE1hcmt1cFRva2VuQmFzZTxXZWJWVFRUb2tl
blR5cGVzPiB7CitwdWJsaWM6CisgICAgdm9pZCBhcHBlbmRUb05hbWUoVUNoYXIgY2hhcmFjdGVy
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBXZWJWVFRUb2tlblR5cGVzOjpTdGFy
dFRhZyB8fCBtX3R5cGUgPT0gV2ViVlRUVG9rZW5UeXBlczo6RW5kVGFnKTsKKyAgICAgICAgTWFy
a3VwVG9rZW5CYXNlPFdlYlZUVFRva2VuVHlwZXM+OjphcHBlbmRUb05hbWUoY2hhcmFjdGVyKTsK
KyAgICB9CisgICAgCisgICAgY29uc3QgRGF0YVZlY3RvciYgbmFtZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gTWFya3VwVG9rZW5CYXNlPFdlYlZUVFRva2VuVHlwZXM+OjpuYW1lKCk7
CisgICAgfQorICAgIAorICAgIGNvbnN0IERhdGFWZWN0b3ImIGNoYXJhY3RlcnMoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpDaGFyYWN0ZXIgfHwgbV90eXBl
ID09IFR5cGU6OlRpbWVzdGFtcFRhZyk7CisgICAgICAgIHJldHVybiBtX2RhdGE7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYmVnaW5FbXB0eVN0YXJ0VGFnKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3R5cGUgPT0gVHlwZTo6VW5pbml0aWFsaXplZCk7CisgICAgICAgIG1fdHlwZSA9IFR5cGU6
OlN0YXJ0VGFnOworICAgICAgICBtX2N1cnJlbnRBdHRyaWJ1dGUgPSAwOworICAgICAgICBtX2F0
dHJpYnV0ZXMuY2xlYXIoKTsKKyAgICAgICAgbV9kYXRhLmNsZWFyKCk7CisgICAgfQorIAorICAg
IHZvaWQgYmVnaW5UaW1lc3RhbXBUYWcoVUNoYXIgY2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGNoYXJhY3Rlcik7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6VW5pbml0
aWFsaXplZCk7CisgICAgICAgIG1fdHlwZSA9IFR5cGU6OlRpbWVzdGFtcFRhZzsKKyAgICAgICAg
bV9zZWxmQ2xvc2luZyA9IHRydWU7CisgICAgICAgIG1fZGF0YS5hcHBlbmQoY2hhcmFjdGVyKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRUb1RpbWVzdGFtcChVQ2hhciBjaGFyYWN0ZXIp
CisgICAgeworICAgICAgICBBU1NFUlQoY2hhcmFjdGVyKTsKKyAgICAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBUeXBlOjpUaW1lc3RhbXBUYWcpOworICAgICAgICBtX2RhdGEuYXBwZW5kKGNoYXJhY3Rl
cik7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRUb0NsYXNzKFVDaGFyIGNoYXJhY3RlcikKKyAg
ICB7CisgICAgICAgIGFwcGVuZFRvU3RhcnRUeXBlKGNoYXJhY3Rlcik7CisgICAgfQorCisgICAg
dm9pZCBhZGROZXdDbGFzcygpCisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6
OlN0YXJ0VGFnKTsKKyAgICAgICAgaWYgKCFtX2NsYXNzZXMuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgbV9jbGFzc2VzLmFwcGVuZCgnICcpOworICAgICAgICBtX2NsYXNzZXMuYXBwZW5kKG1fY3Vy
cmVudEJ1ZmZlcik7CisgICAgICAgIG1fY3VycmVudEJ1ZmZlci5jbGVhcigpOworICAgIH0KKyAg
ICAKKyAgICBjb25zdCBEYXRhVmVjdG9yJiBjbGFzc2VzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2NsYXNzZXM7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRUb0Fubm90YXRpb24o
VUNoYXIgY2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgYXBwZW5kVG9TdGFydFR5cGUoY2hhcmFj
dGVyKTsKKyAgICB9CisgICAgICAgIAorICAgIHZvaWQgYWRkTmV3QW5ub3RhdGlvbigpCisgICAg
eworICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0YXJ0VGFnKTsKKyAgICAgICAgbV9h
bm5vdGF0aW9uLmNsZWFyKCk7CisgICAgICAgIG1fYW5ub3RhdGlvbi5hcHBlbmQobV9jdXJyZW50
QnVmZmVyKTsKKyAgICAgICAgbV9jdXJyZW50QnVmZmVyLmNsZWFyKCk7CisgICAgfQorICAgIAor
ICAgIGNvbnN0IERhdGFWZWN0b3ImIGFubm90YXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYW5ub3RhdGlvbjsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAg
eworICAgICAgICBtX2Fubm90YXRpb24uY2xlYXIoKTsKKyAgICAgICAgbV9jbGFzc2VzLmNsZWFy
KCk7CisgICAgICAgIG1fY3VycmVudEJ1ZmZlci5jbGVhcigpOworICAgICAgICBNYXJrdXBUb2tl
bkJhc2U8V2ViVlRUVG9rZW5UeXBlcz46OmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IHZvaWQgYXBwZW5kVG9TdGFydFR5cGUoVUNoYXIgY2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGNoYXJhY3Rlcik7CisgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6U3RhcnRU
YWcpOworICAgICAgICBtX2N1cnJlbnRCdWZmZXIuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgfQor
CisgICAgRGF0YVZlY3RvciBtX2Fubm90YXRpb247CisgICAgRGF0YVZlY3RvciBtX2NsYXNzZXM7
CisgICAgRGF0YVZlY3RvciBtX2N1cnJlbnRCdWZmZXI7Cit9OworCit9CisKKyNlbmRpZgorI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXpl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTQ2MThhYjYzOTAzYzFjMzIxOTk3NTA1MDBjYWMxYzNmYjg0NTY4NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svV2ViVlRUVG9rZW5pemVyLmNw
cApAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisKKyNpbmNsdWRlICJXZWJWVFRUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIk1h
cmt1cFRva2VuaXplcklubGluZU1ldGhvZHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisj
ZGVmaW5lIFdFQlZUVF9CRUdJTl9TVEFURShzdGF0ZU5hbWUpIEJFR0lOX1NUQVRFKFdlYlZUVFRv
a2VuaXplclN0YXRlLCBzdGF0ZU5hbWUpCisjZGVmaW5lIFdFQlZUVF9BRFZBTkNFX1RPKHN0YXRl
TmFtZSkgQURWQU5DRV9UTyhXZWJWVFRUb2tlbml6ZXJTdGF0ZSwgc3RhdGVOYW1lKQorCitXZWJW
VFRUb2tlbml6ZXI6OldlYlZUVFRva2VuaXplcigpCit7CisgICAgcmVzZXQoKTsKK30KKwordGVt
cGxhdGU8PgoraW5saW5lIGJvb2wgTWFya3VwVG9rZW5pemVyQmFzZTxXZWJWVFRUb2tlbiwgV2Vi
VlRUVG9rZW5pemVyU3RhdGU+OjpzaG91bGRTa2lwTnVsbENoYXJhY3RlcnMoKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCB2ZWN0b3JFcXVhbHNTdHJpbmcoY29u
c3QgVmVjdG9yPFVDaGFyLCAzMj4mIHZlY3RvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7Cisg
ICAgaWYgKHZlY3Rvci5zaXplKCkgIT0gc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgY29uc3QgVUNoYXIqIHN0cmluZ0RhdGEgPSBzdHJpbmcuY2hhcmFjdGVycygp
OworICAgIGNvbnN0IFVDaGFyKiB2ZWN0b3JEYXRhID0gdmVjdG9yLmRhdGEoKTsKKyAgICByZXR1
cm4gIW1lbWNtcChzdHJpbmdEYXRhLCB2ZWN0b3JEYXRhLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9m
KFVDaGFyKSk7Cit9CisKK3ZvaWQgV2ViVlRUVG9rZW5pemVyOjpyZXNldCgpCit7CisgICAgbV9z
dGF0ZSA9IFdlYlZUVFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGU7CisgICAgbV90b2tlbiA9IDA7
CisgICAgbV9saW5lTnVtYmVyID0gMDsKKyAgICBtX2J1ZmZlci5jbGVhcigpOworfQorICAgIAor
Ym9vbCBXZWJWVFRUb2tlbml6ZXI6Om5leHRUb2tlbihTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwg
V2ViVlRUVG9rZW4mIHRva2VuKQoreworICAgIC8vIElmIHdlIGhhdmUgYSB0b2tlbiBpbiBwcm9n
cmVzcywgdGhlbiB3ZSdyZSBzdXBwb3NlZCB0byBiZSBjYWxsZWQgYmFjaworICAgIC8vIHdpdGgg
dGhlIHNhbWUgdG9rZW4gc28gd2UgY2FuIGZpbmlzaCBpdC4KKyAgICBBU1NFUlQoIW1fdG9rZW4g
fHwgbV90b2tlbiA9PSAmdG9rZW4gfHwgdG9rZW4udHlwZSgpID09IFdlYlZUVFRva2VuVHlwZXM6
OlVuaW5pdGlhbGl6ZWQpOworICAgIG1fdG9rZW4gPSAmdG9rZW47CisKKyAgICBpZiAoc291cmNl
LmlzRW1wdHkoKSB8fCAhbV9pbnB1dFN0cmVhbVByZXByb2Nlc3Nvci5wZWVrKHNvdXJjZSwgbV9s
aW5lTnVtYmVyKSkKKyAgICAgICAgcmV0dXJuIGhhdmVCdWZmZXJlZENoYXJhY3RlclRva2VuKCk7
CisKKyAgICBVQ2hhciBjYyA9IG1faW5wdXRTdHJlYW1QcmVwcm9jZXNzb3IubmV4dElucHV0Q2hh
cmFjdGVyKCk7CisKKyAgICAvLyA0LjguMTAuMTMuNCBXZWJWVFQgY3VlIHRleHQgdG9rZW5pemVy
CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgV0VCVlRUX0JFR0lOX1NUQVRFKERhdGFTdGF0
ZSkgeworICAgICAgICBpZiAoY2MgPT0gJyYnKSB7CisgICAgICAgICAgICBtX2J1ZmZlci5hcHBl
bmQoY2MpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRXNjYXBlU3RhdGUpOworICAg
ICAgICB9IGVsc2UgaWYgKGNjID09ICc8JykgeworICAgICAgICAgICAgaWYgKG1fdG9rZW4tPnR5
cGUoKSA9PSBXZWJWVFRUb2tlblR5cGVzOjpVbmluaXRpYWxpemVkCisgICAgICAgICAgICAgICAg
fHwgdmVjdG9yRXF1YWxzU3RyaW5nKG1fdG9rZW4tPmNoYXJhY3RlcnMoKSwgZW1wdHlTdHJpbmco
KSkpCisgICAgICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oVGFnU3RhdGUpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW4oc291cmNl
LCBXZWJWVFRUb2tlbml6ZXJTdGF0ZTo6VGFnU3RhdGUpOworICAgICAgICB9IGVsc2UgaWYgKGNj
ID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpCisgICAgICAgICAg
ICByZXR1cm4gZW1pdEVuZE9mRmlsZShzb3VyY2UpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGJ1ZmZlckNoYXJhY3RlcihjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhE
YXRhU3RhdGUpOworICAgICAgICB9CisgICAgfQorICAgIEVORF9TVEFURSgpCisKKyAgICBXRUJW
VFRfQkVHSU5fU1RBVEUoRXNjYXBlU3RhdGUpIHsKKyAgICAgICAgaWYgKGNjID09ICc7Jykgewor
ICAgICAgICAgICAgaWYgKHZlY3RvckVxdWFsc1N0cmluZyhtX2J1ZmZlciwgIiZhbXAiKSkKKyAg
ICAgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIoJyYnKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KHZlY3RvckVxdWFsc1N0cmluZyhtX2J1ZmZlciwgIiZsdCIpKQorICAgICAgICAgICAgICAgIGJ1
ZmZlckNoYXJhY3RlcignPCcpOworICAgICAgICAgICAgZWxzZSBpZiAodmVjdG9yRXF1YWxzU3Ry
aW5nKG1fYnVmZmVyLCAiJmd0IikpCisgICAgICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCc+
Jyk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQo
Y2MpOworICAgICAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQ2hhcmFjdGVyKG1fYnVmZmVy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgICAg
ICAgICBXRUJWVFRfQURWQU5DRV9UTyhEYXRhU3RhdGUpOworICAgICAgICB9IGVsc2UgaWYgKGlz
QVNDSUlBbHBoYW51bWVyaWMoY2MpKSB7CisgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoY2Mp
OworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRXNjYXBlU3RhdGUpOworICAgICAgICB9
IGVsc2UgaWYgKGNjID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIp
IHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvQ2hhcmFjdGVyKG1fYnVmZmVyKTsKKyAg
ICAgICAgICAgIHJldHVybiBlbWl0RW5kT2ZGaWxlKHNvdXJjZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoIXZlY3RvckVxdWFsc1N0cmluZyhtX2J1ZmZlciwgIiYiKSkKKyAg
ICAgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0NoYXJhY3RlcihtX2J1ZmZlcik7CisgICAg
ICAgICAgICBtX2J1ZmZlci5jbGVhcigpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8o
RGF0YVN0YXRlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBFTkRfU1RBVEUoKQorCisgICAgV0VC
VlRUX0JFR0lOX1NUQVRFKFRhZ1N0YXRlKSB7CisgICAgICAgIGlmIChpc1Rva2VuaXplcldoaXRl
c3BhY2UoY2MpKSB7CisgICAgICAgICAgICBtX3Rva2VuLT5iZWdpbkVtcHR5U3RhcnRUYWcoKTsK
KyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKTsK
KyAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnLicpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmJl
Z2luRW1wdHlTdGFydFRhZygpOworICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRU
YWdDbGFzc1N0YXRlKTsKKyAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnLycpIHsKKyAgICAgICAg
ICAgIFdFQlZUVF9BRFZBTkNFX1RPKEVuZFRhZ09wZW5TdGF0ZSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoV1RGOjppc0FTQ0lJRGlnaXQoY2MpKSB7CisgICAgICAgICAgICBtX3Rva2VuLT5iZWdpblRp
bWVzdGFtcFRhZyhjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhUaW1lc3RhbXBU
YWdTdGF0ZSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJz4nIHx8IGNjID09IElucHV0U3Ry
ZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgICAgIG1fdG9rZW4t
PmJlZ2luRW1wdHlTdGFydFRhZygpOworICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJ
bihzb3VyY2UsIFdlYlZUVFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGUpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV90b2tlbi0+YmVnaW5TdGFydFRhZyhjYyk7CisgICAgICAgICAg
ICBXRUJWVFRfQURWQU5DRV9UTyhTdGFydFRhZ1N0YXRlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBFTkRfU1RBVEUoKQorCisgICAgV0VCVlRUX0JFR0lOX1NUQVRFKFN0YXJ0VGFnU3RhdGUpIHsK
KyAgICAgICAgaWYgKGlzVG9rZW5pemVyV2hpdGVzcGFjZShjYykpCisgICAgICAgICAgICBXRUJW
VFRfQURWQU5DRV9UTyhTdGFydFRhZ0Fubm90YXRpb25TdGF0ZSk7CisgICAgICAgIGVsc2UgaWYg
KGNjID09ICcuJykKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKFN0YXJ0VGFnQ2xhc3NT
dGF0ZSk7CisgICAgICAgIGVsc2UgaWYgKGNjID09ICc+JyB8fCBjYyA9PSBJbnB1dFN0cmVhbVBy
ZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKQorICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRS
ZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGUpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvTmFtZShjYyk7CisgICAgICAg
ICAgICBXRUJWVFRfQURWQU5DRV9UTyhTdGFydFRhZ1N0YXRlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBFTkRfU1RBVEUoKQorCisgICAgV0VCVlRUX0JFR0lOX1NUQVRFKFN0YXJ0VGFnQ2xhc3NT
dGF0ZSkgeworICAgICAgICBpZiAoaXNUb2tlbml6ZXJXaGl0ZXNwYWNlKGNjKSkgeworICAgICAg
ICAgICAgbV90b2tlbi0+YWRkTmV3Q2xhc3MoKTsKKyAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNF
X1RPKFN0YXJ0VGFnQW5ub3RhdGlvblN0YXRlKTsKKyAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAn
LicpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmFkZE5ld0NsYXNzKCk7CisgICAgICAgICAgICBX
RUJWVFRfQURWQU5DRV9UTyhTdGFydFRhZ0NsYXNzU3RhdGUpOworICAgICAgICB9IGVsc2UgaWYg
KGNjID09ICc+JyB8fCBjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFy
a2VyKSB7CisgICAgICAgICAgICBtX3Rva2VuLT5hZGROZXdDbGFzcygpOworICAgICAgICAgICAg
cmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3VyY2UsIFdlYlZUVFRva2VuaXplclN0YXRlOjpEYXRh
U3RhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9D
bGFzcyhjYyk7CisgICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhTdGFydFRhZ0NsYXNzU3Rh
dGUpOworICAgICAgICB9CisKKyAgICB9CisgICAgRU5EX1NUQVRFKCkKKworICAgIFdFQlZUVF9C
RUdJTl9TVEFURShTdGFydFRhZ0Fubm90YXRpb25TdGF0ZSkgeworICAgICAgICBpZiAoY2MgPT0g
Jz4nIHx8IGNjID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpIHsK
KyAgICAgICAgICAgIG1fdG9rZW4tPmFkZE5ld0Fubm90YXRpb24oKTsKKyAgICAgICAgICAgIHJl
dHVybiBlbWl0QW5kUmVzdW1lSW4oc291cmNlLCBXZWJWVFRUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0
YXRlKTsKKyAgICAgICAgfQorICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0Fubm90YXRpb24oY2Mp
OworICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhTdGFydFRhZ0Fubm90YXRpb25TdGF0ZSk7Cisg
ICAgfQorICAgIEVORF9TVEFURSgpCisgICAgCisgICAgV0VCVlRUX0JFR0lOX1NUQVRFKEVuZFRh
Z09wZW5TdGF0ZSkgeworICAgICAgICBpZiAoY2MgPT0gJz4nIHx8IGNjID09IElucHV0U3RyZWFt
UHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpIHsKKyAgICAgICAgICAgIG1fdG9rZW4tPmJl
Z2luRW5kVGFnKCdcMCcpOworICAgICAgICAgICAgcmV0dXJuIGVtaXRBbmRSZXN1bWVJbihzb3Vy
Y2UsIFdlYlZUVFRva2VuaXplclN0YXRlOjpEYXRhU3RhdGUpOworICAgICAgICB9CisgICAgICAg
IG1fdG9rZW4tPmJlZ2luRW5kVGFnKGNjKTsKKyAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRW5k
VGFnU3RhdGUpOworICAgIH0KKyAgICBFTkRfU1RBVEUoKQorCisgICAgV0VCVlRUX0JFR0lOX1NU
QVRFKEVuZFRhZ1N0YXRlKSB7CisgICAgICAgIGlmIChjYyA9PSAnPicgfHwgY2MgPT0gSW5wdXRT
dHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikKKyAgICAgICAgICAgIHJldHVybiBl
bWl0QW5kUmVzdW1lSW4oc291cmNlLCBXZWJWVFRUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0YXRlKTsK
KyAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9OYW1lKGNjKTsKKyAgICAgICAgV0VCVlRUX0FEVkFO
Q0VfVE8oRW5kVGFnU3RhdGUpOworICAgIH0KKyAgICBFTkRfU1RBVEUoKQorCisgICAgV0VCVlRU
X0JFR0lOX1NUQVRFKFRpbWVzdGFtcFRhZ1N0YXRlKSB7CisgICAgICAgIGlmIChjYyA9PSAnPicg
fHwgY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikKKyAgICAg
ICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW4oc291cmNlLCBXZWJWVFRUb2tlbml6ZXJTdGF0
ZTo6RGF0YVN0YXRlKTsKKyAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9UaW1lc3RhbXAoY2MpOwor
ICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhUaW1lc3RhbXBUYWdTdGF0ZSk7CisgICAgfQorICAg
IEVORF9TVEFURSgpCisKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1dlYlZUVFRva2VuaXplci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9XZWJWVFRUb2tlbml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNmQ0NWY3ZmY3ZWJmMzdmNzVhYjcwMjdh
YTg3ZmI2MjU0OTNhNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9XZWJWVFRUb2tlbml6ZXIuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVlRUVG9r
ZW5pemVyX2gKKyNkZWZpbmUgV2ViVlRUVG9rZW5pemVyX2gKKworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKworI2luY2x1ZGUgIk1hcmt1cFRva2VuaXplckJhc2UuaCIKKyNpbmNsdWRlICJTZWdt
ZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJWVFRUb2tlbi5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFdlYlZUVFRva2VuaXplclN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVt
IFN0YXRlIHsKKyAgICAgICAgRGF0YVN0YXRlLAorICAgICAgICBFc2NhcGVTdGF0ZSwKKyAgICAg
ICAgVGFnU3RhdGUsCisgICAgICAgIFN0YXJ0VGFnU3RhdGUsCisgICAgICAgIFN0YXJ0VGFnQ2xh
c3NTdGF0ZSwKKyAgICAgICAgU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGUsCisgICAgICAgIEVuZFRh
Z1N0YXRlLAorICAgICAgICBFbmRUYWdPcGVuU3RhdGUsCisgICAgICAgIFRpbWVzdGFtcFRhZ1N0
YXRlLAorICAgIH07Cit9OworCitjbGFzcyBXZWJWVFRUb2tlbml6ZXIgOiBNYXJrdXBUb2tlbml6
ZXJCYXNlPFdlYlZUVFRva2VuLCBXZWJWVFRUb2tlbml6ZXJTdGF0ZT4geworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFdlYlZUVFRva2VuaXplcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVlRUVG9rZW5pemVyPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgV2ViVlRUVG9rZW5pemVyKTsgfQorCisgICAgdm9p
ZCByZXNldCgpOworICAgIAorICAgIGJvb2wgbmV4dFRva2VuKFNlZ21lbnRlZFN0cmluZyYsIFdl
YlZUVFRva2VuJik7CisKK3ByaXZhdGU6CisgICAgV2ViVlRUVG9rZW5pemVyKCk7CisgICAgCisg
ICAgVmVjdG9yPFVDaGFyLCAzMj4gbV9idWZmZXI7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggODFkNWM4NzFhYjJiZDhiZDllZmRkMDMwMzE5ZjhlYTIwNWY4
NGFlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQotCi0jaW5jbHVkZSAiQ3VlUGFyc2VyLmgiCi0KLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiVGhyZWFkYWJs
ZUxvYWRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUN1ZVBhcnNlcjo6Q3VlUGFyc2Vy
KCkKLXsKLSAgICAvLyBGSVhNRSg2Mjg5Myk6IEltcGxlbWVudC4KLX0KLQotQ3VlUGFyc2VyOjp+
Q3VlUGFyc2VyKCkKLXsKLSAgICBpZiAobV9sb2FkZXIpCi0gICAgICAgIG1fbG9hZGVyLT5jYW5j
ZWwoKTsKLSAgICBtX2xvYWRlciA9IDA7Ci19Ci0KLXZvaWQgQ3VlUGFyc2VyOjpsb2FkKGNvbnN0
IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBDdWVQYXJzZXJD
bGllbnQqIGNsaWVudCkKLXsKLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotCi0g
ICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKLSAgICBvcHRpb25zLnNlbmRMb2Fk
Q2FsbGJhY2tzID0gU2VuZENhbGxiYWNrczsKLSAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVz
dFBvbGljeSA9IEFsbG93Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKLQotICAgIG1fY2xpZW50ID0gY2xp
ZW50OwotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGNvbnRleHQ7Ci0KLSAgICBtX2xv
YWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShjb250ZXh0LCB0aGlzLCByZXF1ZXN0LCBv
cHRpb25zKTsKLX0KLQotYm9vbCBDdWVQYXJzZXI6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcm
IHVybCkKLXsKLSAgICAvLyBGSVhNRSg2Mjg5Myk6IGNoZWNrIGFnYWluc3QgYSBsaXN0IG9mIHN1
cHBvcnRlZCB0eXBlcwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDdWVQYXJzZXI6OmRp
ZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBpZiAocmVzcG9uc2UubWltZVR5cGUoKSA9
PSAidGV4dC92dHQiKQotICAgICAgICBjcmVhdGVXZWJWVFRQYXJzZXIoKTsKLX0KLQotdm9pZCBD
dWVQYXJzZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17
Ci0gICAgLy8gSWYgbWltZSB0eXBlIGZyb20gZGlkUmVjZWl2ZVJlc3BvbnNlIHdhcyBub3QgaW5m
b3JtYXRpdmUsIHNuaWZmIGZpbGUgY29udGVudC4KLSAgICBpZiAoIW1fcHJpdmF0ZSAmJiBXZWJW
VFRQYXJzZXI6Omhhc1JlcXVpcmVkRmlsZUlkZW50aWZpZXIoZGF0YSwgbGVuZ3RoKSkKLSAgICAg
ICAgY3JlYXRlV2ViVlRUUGFyc2VyKCk7Ci0KLSAgICBpZiAobV9wcml2YXRlKQotICAgICAgICBt
X3ByaXZhdGUtPnBhcnNlQnl0ZXMoZGF0YSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBDdWVQYXJzZXI6
OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZykKLXsKLSAgICBtX2NsaWVudC0+dHJhY2tM
b2FkQ29tcGxldGVkKCk7Ci19Ci0KLXZvaWQgQ3VlUGFyc2VyOjpkaWRGYWlsKGNvbnN0IFJlc291
cmNlRXJyb3ImKQotewotICAgIG1fY2xpZW50LT50cmFja0xvYWRFcnJvcigpOwotfQotCi12b2lk
IEN1ZVBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+
JikKLXsKLSAgICAvLyBGSVhNRSg2Mjg5Myk6IEltcGxlbWVudC4KLX0KLQotdm9pZCBDdWVQYXJz
ZXI6Om5ld0N1ZXNQYXJzZWQoKQotewotICAgIG1fY2xpZW50LT5uZXdDdWVzUGFyc2VkKCk7Ci19
Ci0KLXZvaWQgQ3VlUGFyc2VyOjpjcmVhdGVXZWJWVFRQYXJzZXIoKQotewotICAgIGlmICghbV9w
cml2YXRlKSB7Ci0gICAgICAgIG1fcHJpdmF0ZSA9IFdlYlZUVFBhcnNlcjo6Y3JlYXRlKHRoaXMs
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgICAgIG1fY2xpZW50LT50cmFja0xvYWRT
dGFydGVkKCk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNzgxZjA1ODBiZWRjMDY4ZmZhMDQ2MmVmY2JkMWFmM2Y2NTkzZDc0My4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBDdWVQYXJzZXJfaAotI2RlZmluZSBDdWVQYXJzZXJfaAotCi0jaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQotCi0jaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgotI2luY2x1
ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJWVFRQYXJzZXIuaCIK
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotY2xhc3MgVGV4dFRyYWNrQ3VlOwotCi1jbGFz
cyBDdWVQYXJzZXJDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBuZXdDdWVzUGFy
c2VkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0cmFja0xvYWRTdGFydGVkKCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCB0cmFja0xvYWRFcnJvcigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdHJh
Y2tMb2FkQ29tcGxldGVkKCkgPSAwOwotfTsKLQotY2xhc3MgQ3VlUGFyc2VyIDogcHVibGljIFRo
cmVhZGFibGVMb2FkZXJDbGllbnQsIEN1ZVBhcnNlclByaXZhdGVDbGllbnQgewotcHVibGljOgot
ICAgIEN1ZVBhcnNlcigpOwotICAgIHZpcnR1YWwgfkN1ZVBhcnNlcigpOwotCi0gICAgdm9pZCBk
aWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OwotICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCk7Ci0gICAgdm9pZCBk
aWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcpOwotICAgIHZvaWQgZGlkRmFpbChjb25zdCBS
ZXNvdXJjZUVycm9yJik7Ci0KLSAgICB2b2lkIGxvYWQoY29uc3QgU3RyaW5nJiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIEN1ZVBhcnNlckNsaWVudCopOwotICAgIGJvb2wgc3VwcG9ydHNUeXBl
KGNvbnN0IFN0cmluZyYpOwotCi0gICAgdm9pZCBmZXRjaFBhcnNlZEN1ZXMoVmVjdG9yPFJlZlB0
cjxUZXh0VHJhY2tDdWU+ID4mKTsKLSAgICB2b2lkIG5ld0N1ZXNQYXJzZWQoKTsKLQotcHJvdGVj
dGVkOgotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNyZWF0ZVdlYlZUVFBhcnNlcigpOwotIAotICAgIFJl
ZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBtX2xvYWRlcjsKLSAgICBPd25QdHI8Q3VlUGFyc2VyUHJp
dmF0ZUludGVyZmFjZT4gbV9wcml2YXRlOwotICAgIEN1ZVBhcnNlckNsaWVudCogbV9jbGllbnQ7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9DdWVQYXJzZXJQcml2YXRlLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NGY0NzczNjdhZGQ2NzZhYTIzODhlZmUyNzk5OWRhYjA5
N2JmNmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svQ3VlUGFyc2VyUHJpdmF0ZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEN1ZVBhcnNlclByaXZhdGVfaAotI2RlZmluZSBD
dWVQYXJzZVByaXZhdGVfaAotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotCi0jaW5jbHVkZSAi
VGV4dFRyYWNrQ3VlLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIG5ld0N1ZXNQYXJzZWQoKSA9IDA7Ci19OwotCi1jbGFzcyBDdWVQYXJzZXJQcml2
YXRlSW50ZXJmYWNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdWVQYXJzZXJQcml2YXRl
SW50ZXJmYWNlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+Q3VlUGFyc2VyUHJpdmF0ZUludGVyZmFjZSgpIHsgfQotCi0gICAgLy8gSW5wdXQgZGF0YSB0
byB0aGUgcGFyc2VyIHRvIHBhcnNlLgotICAgIHZpcnR1YWwgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0
IGNoYXIqLCB1bnNpZ25lZCkgPSAwOwotCi0gICAgLy8gVHJhbnNmZXJzIG93bmVyc2hpcCBvZiBs
YXN0IHBhcnNlZCBjdWVzIHRvIGNhbGxlci4KLSAgICB2aXJ0dWFsIHZvaWQgZmV0Y2hQYXJzZWRD
dWVzKFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JikgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgQ3VlUGFyc2VyUHJpdmF0ZUludGVyZmFjZSgpIHsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Ry
YWNrL1dlYlZUVFBhcnNlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NjQ2
ZmNhZjIyZjFiMzc0ODU1ZGQ4OGU1ZTYwZDczMGVkYjI2YWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2sv
V2ViVlRUUGFyc2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM5MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLQotI2luY2x1ZGUgIldlYlZU
VFBhcnNlci5oIgotCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24uaCIKLSNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKLSNpbmNsdWRl
ICJUZXh0LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotYm9vbCBXZWJWVFRQYXJzZXI6Omhhc1JlcXVpcmVkRmlsZUlkZW50aWZpZXIo
Y29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIC8vIEEgV2ViVlRUIGZp
bGUgaWRlbnRpZmllciBjb25zaXN0cyBvZiBhbiBvcHRpb25hbCBCT00gY2hhcmFjdGVyLAotICAg
IC8vIHRoZSBzdHJpbmcgIldFQlZUVCIgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgc3BhY2Ugb3Ig
dGFiIGNoYXJhY3RlciwKLSAgICAvLyBhbmQgYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQg
YXJlIG5vdCBsaW5lIHRlcm1pbmF0b3JzIC4uLgotICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsK
LSAgICBpZiAobGVuZ3RoID49IDMgJiYgZGF0YVswXSA9PSAnXHhFRicgJiYgZGF0YVsxXSA9PSAn
XHhCQicgJiYgZGF0YVsyXSA9PSAnXHhCRicpCi0gICAgICAgIHBvc2l0aW9uICs9IDM7Ci0gICAg
U3RyaW5nIGxpbmUgPSBjb2xsZWN0TmV4dExpbmUoZGF0YSwgbGVuZ3RoLCAmcG9zaXRpb24pOwot
ICAgICAgICAKLSAgICBpZiAobGluZS5sZW5ndGgoKSA8IDYpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAobGluZS5sZW5ndGgoKSA9PSA2ICYmIGxpbmUgIT0gIldFQlZUVCIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElmIGxpbmUgaXMgbW9yZSB0aGFuIHNpeCBjaGFy
YWN0ZXJzCi0gICAgLy8gYnV0IHRoZSBmaXJzdCBzaXggY2hhcmFjdGVycyBkbyBub3QgZXhhY3Rs
eSBlcXVhbCAiV0VCVlRUIiwKLSAgICAvLyBvciB0aGUgc2V2ZW50aCBjaGFyYWN0ZXIgaXMgbmVp
dGhlciBhIHNwYWNlIG5vciBhIHRhYiBjaGFyYWN0ZXIsIHRoZW4gYWJvcnQuCi0gICAgaWYgKGxp
bmUubGVuZ3RoKCkgPiA2ICYmIChsaW5lLnN1YnN0cmluZygwLCA2KSAhPSAiV0VCVlRUIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGxpbmVbNl0gIT0gJyAnICYmIGxpbmVbNl0g
IT0gJ1x0JykpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LVN0cmluZyBXZWJWVFRQYXJzZXI6OmNvbGxlY3REaWdpdHMoY29uc3QgU3RyaW5nJiBpbnB1dCwg
dW5zaWduZWQqIHBvc2l0aW9uKQotewotICAgIFN0cmluZ0J1aWxkZXIgZGlnaXRzOwotICAgIHdo
aWxlICgqcG9zaXRpb24gPCBpbnB1dC5sZW5ndGgoKSAmJiBpc0FTQ0lJRGlnaXQoaW5wdXRbKnBv
c2l0aW9uXSkpCi0gICAgICAgIGRpZ2l0cy5hcHBlbmQoaW5wdXRbKCpwb3NpdGlvbikrK10pOwot
ICAgIHJldHVybiBkaWdpdHMudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIFdlYlZUVFBhcnNlcjo6
Y29sbGVjdFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQqIHBvc2l0aW9uKQotewot
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nOwotICAgIHdoaWxlICgqcG9zaXRpb24gPCBpbnB1dC5s
ZW5ndGgoKSAmJiAhaXNBU3BhY2UoaW5wdXRbKnBvc2l0aW9uXSkpCi0gICAgICAgIHN0cmluZy5h
cHBlbmQoaW5wdXRbKCpwb3NpdGlvbikrK10pOwotICAgIHJldHVybiBzdHJpbmcudG9TdHJpbmco
KTsKLX0KLQotV2ViVlRUUGFyc2VyOjpXZWJWVFRQYXJzZXIoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVu
dCogY2xpZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDogbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3N0YXRlKEluaXRpYWwpCi0gICAg
LCBtX3Rva2VuaXplcihXZWJWVFRUb2tlbml6ZXI6OmNyZWF0ZSgpKQotewotICAgIG1fY2xpZW50
ID0gY2xpZW50OwotfQotCi12b2lkIFdlYlZUVFBhcnNlcjo6ZmV0Y2hQYXJzZWRDdWVzKFZlY3Rv
cjxSZWZQdHI8VGV4dFRyYWNrQ3VlPiA+JiBvdXRwdXRDdWVzKQotewotICAgIG91dHB1dEN1ZXMg
PSBtX2N1ZWxpc3Q7Ci0gICAgbV9jdWVsaXN0LmNsZWFyKCk7Ci19Ci0KLXZvaWQgV2ViVlRUUGFy
c2VyOjpwYXJzZUJ5dGVzKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICAvLyA0LjguMTAuMTMuMyBXSEFUV0cgV2ViVlRUIFBhcnNlciBhbGdvcml0aG0uCi0gICAgLy8g
MS0zIC0gSW5pdGlhbCBzZXR1cC4KLSAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7Ci0KLSAgICB3
aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsKLSAgICAgICAgU3RyaW5nIGxpbmUgPSBjb2xsZWN0
TmV4dExpbmUoZGF0YSwgbGVuZ3RoLCAmcG9zaXRpb24pOwotICAgICAgICAKLSAgICAgICAgc3dp
dGNoIChtX3N0YXRlKSB7Ci0gICAgICAgIGNhc2UgSW5pdGlhbDoKLSAgICAgICAgICAgIC8vIDQt
MTIgLSBDb2xsZWN0IHRoZSBmaXJzdCBsaW5lIGFuZCBjaGVjayBmb3IgIldFQlZUVCIuCi0gICAg
ICAgICAgICBpZiAoIWhhc1JlcXVpcmVkRmlsZUlkZW50aWZpZXIoZGF0YSwgbGVuZ3RoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX3N0YXRlID0gSGVhZGVyOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIEhlYWRlcjoKLSAgICAgICAg
ICAgIC8vIDEzLTE4IC0gQWxsb3cgYSBoZWFkZXIgKGNvbW1lbnQgYXJlYSkgdW5kZXIgdGhlIFdF
QlZUVCBsaW5lLgotICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgIG1fc3RhdGUgPSBJZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAg
Y2FzZSBJZDoKLSAgICAgICAgICAgIC8vIDE5LTI5IC0gQWxsb3cgYW55IG51bWJlciBvZiBsaW5l
IHRlcm1pbmF0b3JzLCB0aGVuIGluaXRpYWxpemUgbmV3IGN1ZSB2YWx1ZXMuCi0gICAgICAgICAg
ICBpZiAobGluZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICByZXNldEN1ZVZhbHVlcygpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyAzMC0zOSAt
IENoZWNrIGlmIHRoaXMgbGluZSBjb250YWlucyBhbiBvcHRpb25hbCBpZGVudGlmaWVyIG9yIHRp
bWluZyBkYXRhLgotICAgICAgICAgICAgbV9zdGF0ZSA9IGNvbGxlY3RDdWVJZChsaW5lKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY2FzZSBUaW1pbmdzQW5kU2V0dGlu
Z3M6Ci0gICAgICAgICAgICAvLyA0MCAtIENvbGxlY3QgY3VlIHRpbWluZ3MgYW5kIHNldHRpbmdz
LgotICAgICAgICAgICAgbV9zdGF0ZSA9IGNvbGxlY3RUaW1pbmdzQW5kU2V0dGluZ3MobGluZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGNhc2UgQ3VlVGV4dDoKLSAg
ICAgICAgICAgIC8vIDQxLTUzIC0gQ29sbGVjdCB0aGUgY3VlIHRleHQsIGNyZWF0ZSBhIGN1ZSwg
YW5kIGFkZCBpdCB0byB0aGUgb3V0cHV0LgotICAgICAgICAgICAgbV9zdGF0ZSA9IGNvbGxlY3RD
dWVUZXh0KGxpbmUsIGxlbmd0aCwgcG9zaXRpb24pOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBCYWRDdWU6Ci0gICAgICAgICAgICAvLyA1NC02MiAtIENvbGxlY3QgYW5kIGRp
c2NhcmQgdGhlIHJlbWFpbmluZyBjdWUuCi0gICAgICAgICAgICBtX3N0YXRlID0gaWdub3JlQmFk
Q3VlKGxpbmUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdl
YlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJWVFRQYXJzZXI6OmNvbGxlY3RDdWVJZChjb25zdCBT
dHJpbmcmIGxpbmUpCi17Ci0gICAgaWYgKGxpbmUuY29udGFpbnMoIi0tPiIpKQotICAgICAgICBy
ZXR1cm4gY29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhsaW5lKTsKLSAgICBtX2N1cnJlbnRJZCA9
IGxpbmU7Ci0gICAgcmV0dXJuIFRpbWluZ3NBbmRTZXR0aW5nczsKLX0KLQotV2ViVlRUUGFyc2Vy
OjpQYXJzZVN0YXRlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFRpbWluZ3NBbmRTZXR0aW5ncyhjb25z
dCBTdHJpbmcmIGxpbmUpCi17Ci0gICAgLy8gNC44LjEwLjEzLjMgQ29sbGVjdCBXZWJWVFQgY3Vl
IHRpbWluZ3MgYW5kIHNldHRpbmdzLgotICAgIC8vIDEtMyAtIExldCBpbnB1dCBiZSB0aGUgc3Ry
aW5nIGJlaW5nIHBhcnNlZCBhbmQgcG9zaXRpb24gYmUgYSBwb2ludGVyIGludG8gaW5wdXQKLSAg
ICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7Ci0gICAgc2tpcFdoaXRlU3BhY2UobGluZSwgJnBvc2l0
aW9uKTsKLQotICAgIC8vIDQtNSAtIENvbGxlY3QgYSBXZWJWVFQgdGltZXN0YW1wLiBJZiB0aGF0
IGZhaWxzLCB0aGVuIGFib3J0IGFuZCByZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBsZXQgY3Vl
J3MgdGV4dCB0cmFjayBjdWUgc3RhcnQgdGltZSBiZSB0aGUgY29sbGVjdGVkIHRpbWUuCi0gICAg
bV9jdXJyZW50U3RhcnRUaW1lID0gY29sbGVjdFRpbWVTdGFtcChsaW5lLCAmcG9zaXRpb24pOwot
ICAgIGlmIChtX2N1cnJlbnRTdGFydFRpbWUgPT0gbWFsZm9ybWVkVGltZSkKLSAgICAgICAgcmV0
dXJuIEJhZEN1ZTsKLSAgICBza2lwV2hpdGVTcGFjZShsaW5lLCAmcG9zaXRpb24pOwotCi0gICAg
Ly8gNi05IC0gSWYgdGhlIG5leHQgdGhyZWUgY2hhcmFjdGVycyBhcmUgbm90ICItLT4iLCBhYm9y
dCBhbmQgcmV0dXJuIGZhaWx1cmUuCi0gICAgaWYgKGxpbmUuZmluZCgiLS0+IiwgcG9zaXRpb24p
ID09IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gQmFkQ3VlOwotICAgIHBvc2l0aW9uICs9IDM7
Ci0gICAgc2tpcFdoaXRlU3BhY2UobGluZSwgJnBvc2l0aW9uKTsKLQotICAgIC8vIDEwLTExIC0g
Q29sbGVjdCBhIFdlYlZUVCB0aW1lc3RhbXAuIElmIHRoYXQgZmFpbHMsIHRoZW4gYWJvcnQgYW5k
IHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2UsIGxldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBlbmQg
dGltZSBiZSB0aGUgY29sbGVjdGVkIHRpbWUuCi0gICAgbV9jdXJyZW50RW5kVGltZSA9IGNvbGxl
Y3RUaW1lU3RhbXAobGluZSwgJnBvc2l0aW9uKTsKLSAgICBpZiAobV9jdXJyZW50RW5kVGltZSA9
PSBtYWxmb3JtZWRUaW1lKQotICAgICAgICByZXR1cm4gQmFkQ3VlOwotICAgIHNraXBXaGl0ZVNw
YWNlKGxpbmUsICZwb3NpdGlvbik7Ci0KLSAgICAvLyAxMiAtIFBhcnNlIHRoZSBXZWJWVFQgc2V0
dGluZ3MgZm9yIHRoZSBjdWUgKGNvbmR1Y3RlZCBpbiBUZXh0VHJhY2tDdWUpLgotICAgIG1fY3Vy
cmVudFNldHRpbmdzID0gbGluZS5zdWJzdHJpbmcocG9zaXRpb24sIGxpbmUubGVuZ3RoKCktMSk7
Ci0gICAgcmV0dXJuIEN1ZVRleHQ7Ci19Ci0KLVdlYlZUVFBhcnNlcjo6UGFyc2VTdGF0ZSBXZWJW
VFRQYXJzZXI6OmNvbGxlY3RDdWVUZXh0KGNvbnN0IFN0cmluZyYgbGluZSwgdW5zaWduZWQgbGVu
Z3RoLCB1bnNpZ25lZCBwb3NpdGlvbikKLXsKLSAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgcHJvY2Vzc0N1ZVRleHQoKTsKLSAgICAgICAgcmV0dXJuIElkOwotICAgIH0KLSAgICBp
ZiAoIW1fY3VycmVudENvbnRlbnQuaXNFbXB0eSgpKQotICAgICAgICBtX2N1cnJlbnRDb250ZW50
LmFwcGVuZCgiXG4iKTsKLSAgICBtX2N1cnJlbnRDb250ZW50LmFwcGVuZChsaW5lKTsKLQotICAg
IGlmIChwb3NpdGlvbiA+PSBsZW5ndGgpCi0gICAgICAgIHByb2Nlc3NDdWVUZXh0KCk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgcmV0dXJuIEN1ZVRleHQ7Ci19Ci0KLVdlYlZUVFBhcnNlcjo6UGFy
c2VTdGF0ZSBXZWJWVFRQYXJzZXI6Omlnbm9yZUJhZEN1ZShjb25zdCBTdHJpbmcmIGxpbmUpCi17
Ci0gICAgaWYgKCFsaW5lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEJhZEN1ZTsKLSAgICBy
ZXR1cm4gSWQ7Ci19Ci0KLXZvaWQgV2ViVlRUUGFyc2VyOjpwcm9jZXNzQ3VlVGV4dCgpCi17Ci0g
ICAgLy8gNTEgLSBDdWUgdGV4dCBwcm9jZXNzaW5nIGJhc2VkIG9uCi0gICAgLy8gNC44LjEwLjEz
LjQgV2ViVlRUIGN1ZSB0ZXh0IHBhcnNpbmcgcnVsZXMgYW5kCi0gICAgLy8gNC44LjEwLjEzLjUg
V2ViVlRUIGN1ZSB0ZXh0IERPTSBjb25zdHJ1Y3Rpb24gcnVsZXMuCi0gICAgaWYgKG1fY3VycmVu
dENvbnRlbnQubGVuZ3RoKCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKTsKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7
Ci0KLSAgICBtX2F0dGFjaG1lbnRSb290ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KTsKLSAgICBtX2N1cnJlbnROb2RlID0gbV9hdHRhY2htZW50Um9vdDsKLSAgICBtX3Rva2Vu
aXplci0+cmVzZXQoKTsKLSAgICBtX3Rva2VuLmNsZWFyKCk7Ci0KLSAgICBTZWdtZW50ZWRTdHJp
bmcgY29udGVudChtX2N1cnJlbnRDb250ZW50LnRvU3RyaW5nKCkpOwotICAgIHdoaWxlIChtX3Rv
a2VuaXplci0+bmV4dFRva2VuKGNvbnRlbnQsIG1fdG9rZW4pKQotICAgICAgICBjb25zdHJ1Y3RU
cmVlRnJvbVRva2VuKGRvY3VtZW50KTsKLSAgICAKLSAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBj
dWUgPSBUZXh0VHJhY2tDdWU6OmNyZWF0ZShtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fY3Vy
cmVudElkLCBtX2N1cnJlbnRTdGFydFRpbWUsIG1fY3VycmVudEVuZFRpbWUsIG1fY3VycmVudENv
bnRlbnQudG9TdHJpbmcoKSwgbV9jdXJyZW50U2V0dGluZ3MsIGZhbHNlKTsKLSAgICBjdWUtPnNl
dEN1ZUhUTUwobV9hdHRhY2htZW50Um9vdCk7Ci0gICAgbV9jdWVsaXN0LmFwcGVuZChjdWUpOwot
ICAgIG1fY2xpZW50LT5uZXdDdWVzUGFyc2VkKCk7Ci19Ci0KLXZvaWQgV2ViVlRUUGFyc2VyOjpy
ZXNldEN1ZVZhbHVlcygpCi17Ci0gICAgbV9jdXJyZW50SWQgPSBlbXB0eVN0cmluZygpOwotICAg
IG1fY3VycmVudFNldHRpbmdzID0gZW1wdHlTdHJpbmcoKTsKLSAgICBtX2N1cnJlbnRTdGFydFRp
bWUgPSAwOwotICAgIG1fY3VycmVudEVuZFRpbWUgPSAwOwotICAgIG1fY3VycmVudENvbnRlbnQu
Y2xlYXIoKTsKLX0KLQotZG91YmxlIFdlYlZUVFBhcnNlcjo6Y29sbGVjdFRpbWVTdGFtcChjb25z
dCBTdHJpbmcmIGxpbmUsIHVuc2lnbmVkKiBwb3NpdGlvbikKLXsKLSAgICAvLyA0LjguMTAuMTMu
MyBDb2xsZWN0IGEgV2ViVlRUIHRpbWVzdGFtcC4KLSAgICAvLyAxLTQgLSBJbml0aWFsIGNoZWNr
cywgbGV0IG1vc3Qgc2lnbmlmaWNhbnQgdW5pdHMgYmUgbWludXRlcy4KLSAgICBlbnVtIE1vZGUg
eyBtaW51dGVzLCBob3VycyB9OwotICAgIE1vZGUgbW9kZSA9IG1pbnV0ZXM7Ci0gICAgaWYgKCpw
b3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8ICFpc0FTQ0lJRGlnaXQobGluZVsqcG9zaXRpb25d
KSkKLSAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7Ci0KLSAgICAvLyA1LTYgLSBDb2xsZWN0
IGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSAwLTkuCi0gICAgU3RyaW5nIGRpZ2l0
czEgPSBjb2xsZWN0RGlnaXRzKGxpbmUsIHBvc2l0aW9uKTsKLSAgICBpbnQgdmFsdWUxID0gZGln
aXRzMS50b0ludCgpOwotCi0gICAgLy8gNyAtIElmIG5vdCAyIGNoYXJhY3RlcnMgb3IgdmFsdWUg
aXMgZ3JlYXRlciB0aGFuIDU5LCBpbnRlcnByZXQgYXMgaG91cnMuCi0gICAgaWYgKGRpZ2l0czEu
bGVuZ3RoKCkgIT0gMiB8fCB2YWx1ZTEgPiA1OSkKLSAgICAgICAgbW9kZSA9IGhvdXJzOwotCi0g
ICAgLy8gOC0xMiAtIENvbGxlY3QgdGhlIG5leHQgc2VxdWVuY2Ugb2YgMC05IGFmdGVyICc6JyAo
bXVzdCBiZSAyIGNoYXJzKS4KLSAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUubGVuZ3RoKCkgfHwg
bGluZVsoKnBvc2l0aW9uKSsrXSAhPSAnOicpCi0gICAgICAgIHJldHVybiBtYWxmb3JtZWRUaW1l
OwotICAgIGlmICgqcG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCAhaXNBU0NJSURpZ2l0KGxp
bmVbKCpwb3NpdGlvbildKSkKLSAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7Ci0gICAgU3Ry
aW5nIGRpZ2l0czIgPSBjb2xsZWN0RGlnaXRzKGxpbmUsIHBvc2l0aW9uKTsKLSAgICBpbnQgdmFs
dWUyID0gZGlnaXRzMi50b0ludCgpOwotICAgIGlmIChkaWdpdHMyLmxlbmd0aCgpICE9IDIpIAot
ICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKLQotICAgIC8vIDEzIC0gRGV0ZWN0IHdoZXRo
ZXIgdGhpcyB0aW1lc3RhbXAgaW5jbHVkZXMgaG91cnMuCi0gICAgaW50IHZhbHVlMzsKLSAgICBp
ZiAobW9kZSA9PSBob3VycyB8fCAoKnBvc2l0aW9uIDwgbGluZS5sZW5ndGgoKSAmJiBsaW5lWypw
b3NpdGlvbl0gPT0gJzonKSkgewotICAgICAgICBpZiAoKnBvc2l0aW9uID49IGxpbmUubGVuZ3Ro
KCkgfHwgbGluZVsoKnBvc2l0aW9uKSsrXSAhPSAnOicpCi0gICAgICAgICAgICByZXR1cm4gbWFs
Zm9ybWVkVGltZTsKLSAgICAgICAgaWYgKCpwb3NpdGlvbiA+PSBsaW5lLmxlbmd0aCgpIHx8ICFp
c0FTQ0lJRGlnaXQobGluZVsqcG9zaXRpb25dKSkKLSAgICAgICAgICAgIHJldHVybiBtYWxmb3Jt
ZWRUaW1lOwotICAgICAgICBTdHJpbmcgZGlnaXRzMyA9IGNvbGxlY3REaWdpdHMobGluZSwgcG9z
aXRpb24pOwotICAgICAgICBpZiAoZGlnaXRzMy5sZW5ndGgoKSAhPSAyKQotICAgICAgICAgICAg
cmV0dXJuIG1hbGZvcm1lZFRpbWU7Ci0gICAgICAgIHZhbHVlMyA9IGRpZ2l0czMudG9JbnQoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICB2YWx1ZTMgPSB2YWx1ZTI7Ci0gICAgICAgIHZhbHVlMiA9
IHZhbHVlMTsKLSAgICAgICAgdmFsdWUxID0gMDsKLSAgICB9Ci0KLSAgICAvLyAxNC0xOSAtIENv
bGxlY3QgbmV4dCBzZXF1ZW5jZSBvZiAwLTkgYWZ0ZXIgJy4nIChtdXN0IGJlIDMgY2hhcnMpLgot
ICAgIGlmICgqcG9zaXRpb24gPj0gbGluZS5sZW5ndGgoKSB8fCBsaW5lWygqcG9zaXRpb24pKytd
ICE9ICcuJykKLSAgICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7Ci0gICAgaWYgKCpwb3NpdGlv
biA+PSBsaW5lLmxlbmd0aCgpIHx8ICFpc0FTQ0lJRGlnaXQobGluZVsqcG9zaXRpb25dKSkKLSAg
ICAgICAgcmV0dXJuIG1hbGZvcm1lZFRpbWU7Ci0gICAgU3RyaW5nIGRpZ2l0czQgPSBjb2xsZWN0
RGlnaXRzKGxpbmUsIHBvc2l0aW9uKTsKLSAgICBpZiAoZGlnaXRzNC5sZW5ndGgoKSAhPSAzKQot
ICAgICAgICByZXR1cm4gbWFsZm9ybWVkVGltZTsKLSAgICBpbnQgdmFsdWU0ID0gZGlnaXRzNC50
b0ludCgpOwotICAgIGlmICh2YWx1ZTIgPiA1OSB8fCB2YWx1ZTMgPiA1OSkKLSAgICAgICAgcmV0
dXJuIG1hbGZvcm1lZFRpbWU7Ci0KLSAgICAvLyAyMC0yMSAtIENhbGN1bGF0ZSByZXN1bHQuCi0g
ICAgcmV0dXJuICh2YWx1ZTEgKiBzZWNvbmRzUGVySG91cikgKyAodmFsdWUyICogc2Vjb25kc1Bl
ck1pbnV0ZSkgKyB2YWx1ZTMgKyAoKGRvdWJsZSl2YWx1ZTQgLyAxMDAwKTsKLX0KLQotdm9pZCBX
ZWJWVFRQYXJzZXI6OmNvbnN0cnVjdFRyZWVGcm9tVG9rZW4oRG9jdW1lbnQqIGRvY3VtZW50KQot
ewotICAgIEF0b21pY1N0cmluZyB0b2tlblRhZ05hbWUobV90b2tlbi5uYW1lKCkuZGF0YSgpLCBt
X3Rva2VuLm5hbWUoKS5zaXplKCkpOwotICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZShudWxsQXRv
bSwgdG9rZW5UYWdOYW1lLCB4aHRtbE5hbWVzcGFjZVVSSSk7Ci0KLSAgICBzd2l0Y2ggKG1fdG9r
ZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBXZWJWVFRUb2tlblR5cGVzOjpDaGFyYWN0ZXI6IHsKLSAg
ICAgICAgU3RyaW5nIGNvbnRlbnQobV90b2tlbi5jaGFyYWN0ZXJzKCkuZGF0YSgpLCBtX3Rva2Vu
LmNoYXJhY3RlcnMoKS5zaXplKCkpOwotICAgICAgICBSZWZQdHI8VGV4dD4gY2hpbGQgPSBUZXh0
OjpjcmVhdGUoZG9jdW1lbnQsIGNvbnRlbnQpOwotICAgICAgICBtX2N1cnJlbnROb2RlLT5wYXJz
ZXJBZGRDaGlsZChjaGlsZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdlYlZU
VFRva2VuVHlwZXM6OlN0YXJ0VGFnOiB7Ci0gICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gY2hp
bGQ7Ci0gICAgICAgIGlmIChpc1JlY29nbml6ZWRUYWcodG9rZW5UYWdOYW1lKSkKLSAgICAgICAg
ICAgIGNoaWxkID0gSFRNTEVsZW1lbnQ6OmNyZWF0ZSh0YWdOYW1lLCBkb2N1bWVudCk7Ci0gICAg
ICAgIGVsc2UgaWYgKG1fdG9rZW4ubmFtZSgpLnNpemUoKSA9PSAxICYmIG1fdG9rZW4ubmFtZSgp
WzBdID09ICdjJykKLSAgICAgICAgICAgIGNoaWxkID0gSFRNTEVsZW1lbnQ6OmNyZWF0ZShzcGFu
VGFnLCBkb2N1bWVudCk7Ci0gICAgICAgIGVsc2UgaWYgKG1fdG9rZW4ubmFtZSgpLnNpemUoKSA9
PSAxICYmIG1fdG9rZW4ubmFtZSgpWzBdID09ICd2JykKLSAgICAgICAgICAgIGNoaWxkID0gSFRN
TEVsZW1lbnQ6OmNyZWF0ZShxVGFnLCBkb2N1bWVudCk7Ci0KLSAgICAgICAgaWYgKGNoaWxkKSB7
Ci0gICAgICAgICAgICBpZiAobV90b2tlbi5jbGFzc2VzKCkuc2l6ZSgpID4gMCkgewotICAgICAg
ICAgICAgICAgIFJlZlB0cjxOYW1lZE5vZGVNYXA+IGF0dHJpYnV0ZU1hcCA9IE5hbWVkTm9kZU1h
cDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgYXR0cmlidXRlTWFwLT5hZGRBdHRyaWJ1dGUo
QXR0cmlidXRlOjpjcmVhdGVNYXBwZWQoY2xhc3NBdHRyLCBBdG9taWNTdHJpbmcobV90b2tlbi5j
bGFzc2VzKCkuZGF0YSgpLCBtX3Rva2VuLmNsYXNzZXMoKS5zaXplKCkpKSk7Ci0gICAgICAgICAg
ICAgICAgY2hpbGQtPnNldEF0dHJpYnV0ZU1hcChhdHRyaWJ1dGVNYXAucmVsZWFzZSgpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShxVGFnKSkKLSAg
ICAgICAgICAgICAgICBjaGlsZC0+c2V0QXR0cmlidXRlKHRpdGxlQXR0ciwgU3RyaW5nKG1fdG9r
ZW4uYW5ub3RhdGlvbigpLmRhdGEoKSwgbV90b2tlbi5hbm5vdGF0aW9uKCkuc2l6ZSgpKSk7Ci0g
ICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5wYXJzZXJBZGRDaGlsZChjaGlsZCk7Ci0gICAgICAg
ICAgICBtX2N1cnJlbnROb2RlID0gY2hpbGQ7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgV2ViVlRUVG9rZW5UeXBlczo6RW5kVGFnOgotICAgICAgICBpZiAoaXNS
ZWNvZ25pemVkVGFnKHRva2VuVGFnTmFtZSkKLSAgICAgICAgICAgIHx8IG1fdG9rZW4ubmFtZSgp
LnNpemUoKSA9PSAxICYmIG1fdG9rZW4ubmFtZSgpWzBdID09ICdjJwotICAgICAgICAgICAgfHwg
bV90b2tlbi5uYW1lKCkuc2l6ZSgpID09IDEgJiYgbV90b2tlbi5uYW1lKClbMF0gPT0gJ3YnKQot
ICAgICAgICAgICAgaWYgKG1fY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgICAg
ICAgICBtX2N1cnJlbnROb2RlID0gbV9jdXJyZW50Tm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFdlYlZUVFRva2VuVHlwZXM6OlRpbWVzdGFtcFRhZzogewotICAg
ICAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7Ci0gICAgICAgIGRvdWJsZSB0aW1lID0gY29sbGVj
dFRpbWVTdGFtcChtX3Rva2VuLmNoYXJhY3RlcnMoKS5kYXRhKCksICZwb3NpdGlvbik7Ci0gICAg
ICAgIGlmICh0aW1lICE9IG1hbGZvcm1lZFRpbWUpCi0gICAgICAgICAgICBtX2N1cnJlbnROb2Rl
LT5wYXJzZXJBZGRDaGlsZChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNyZWF0ZShkb2N1bWVudCwg
InRpbWVzdGFtcCIsIFN0cmluZyhtX3Rva2VuLmNoYXJhY3RlcnMoKS5kYXRhKCksIG1fdG9rZW4u
Y2hhcmFjdGVycygpLnNpemUoKSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtX3Rva2VuLmNsZWFyKCk7Ci19Ci0KLXZv
aWQgV2ViVlRUUGFyc2VyOjpza2lwV2hpdGVTcGFjZShjb25zdCBTdHJpbmcmIGxpbmUsIHVuc2ln
bmVkKiBwb3NpdGlvbikKLXsKLSAgICB3aGlsZSAoKnBvc2l0aW9uIDwgbGluZS5sZW5ndGgoKSAm
JiBpc0FTcGFjZShsaW5lWypwb3NpdGlvbl0pKQotICAgICAgICAoKnBvc2l0aW9uKSsrOwotfQot
Ci12b2lkIFdlYlZUVFBhcnNlcjo6c2tpcExpbmVUZXJtaW5hdG9yKGNvbnN0IGNoYXIqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQqIHBvc2l0aW9uKQotewotICAgIGlmICgqcG9zaXRp
b24gPj0gbGVuZ3RoKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGRhdGFbKnBvc2l0aW9uXSA9
PSAnXHInKQotICAgICAgICAoKnBvc2l0aW9uKSsrOwotICAgIGlmICgqcG9zaXRpb24gPj0gbGVu
Z3RoKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGRhdGFbKnBvc2l0aW9uXSA9PSAnXG4nKQot
ICAgICAgICAoKnBvc2l0aW9uKSsrOwotfQotCi1TdHJpbmcgV2ViVlRUUGFyc2VyOjpjb2xsZWN0
TmV4dExpbmUoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCogcG9z
aXRpb24pCi17Ci0gICAgdW5zaWduZWQgb2xkUG9zaXRpb24gPSAqcG9zaXRpb247Ci0gICAgd2hp
bGUgKCpwb3NpdGlvbiA8IGxlbmd0aCAmJiBkYXRhWypwb3NpdGlvbl0gIT0gJ1xyJyAmJiBkYXRh
Wypwb3NpdGlvbl0gIT0gJ1xuJykKLSAgICAgICAgKCpwb3NpdGlvbikrKzsKLSAgICBTdHJpbmcg
bGluZSA9IFN0cmluZzo6ZnJvbVVURjgoZGF0YSArIG9sZFBvc2l0aW9uLCAqcG9zaXRpb24gLSBv
bGRQb3NpdGlvbik7Ci0gICAgc2tpcExpbmVUZXJtaW5hdG9yKGRhdGEsIGxlbmd0aCwgcG9zaXRp
b24pOwotICAgIHJldHVybiBsaW5lOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDJiZDhiN2NhZDJlYTE0NmVkZjM3ZjU2MDA4MTk4NWU4NTgzODQxYi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90cmFjay9XZWJWVFRQYXJzZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgV2ViVlRUUGFyc2VyX2gKLSNkZWZpbmUgV2ViVlRUUGFyc2VyX2gKLQotI2lmIEVO
QUJMRShWSURFT19UUkFDSykKLQotI2luY2x1ZGUgIkN1ZVBhcnNlclByaXZhdGUuaCIKLSNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJXZWJWVFRUb2tlbml6ZXIuaCIKLSNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1zdGF0
aWMgY29uc3QgaW50IHNlY29uZHNQZXJIb3VyID0gMzYwMDsKLXN0YXRpYyBjb25zdCBpbnQgc2Vj
b25kc1Blck1pbnV0ZSA9IDYwOwotc3RhdGljIGNvbnN0IGRvdWJsZSBtYWxmb3JtZWRUaW1lID0g
LTE7Ci0KLWNsYXNzIFdlYlZUVFBhcnNlciA6IHB1YmxpYyBDdWVQYXJzZXJQcml2YXRlSW50ZXJm
YWNlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5XZWJWVFRQYXJzZXIoKSB7IH0KLSAgICAKLSAg
ICBlbnVtIFBhcnNlU3RhdGUgeyBJbml0aWFsLCBIZWFkZXIsIElkLCBUaW1pbmdzQW5kU2V0dGlu
Z3MsIEN1ZVRleHQsIEJhZEN1ZSB9OwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8V2ViVlRUUGFy
c2VyPiBjcmVhdGUoQ3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogY2xpZW50LCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBX
ZWJWVFRQYXJzZXIoY2xpZW50LCBjb250ZXh0KSk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBi
b29sIGhhc1JlcXVpcmVkRmlsZUlkZW50aWZpZXIoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKTsKLQotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1JlY29nbml6ZWRUYWcoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT0g
aVRhZwotICAgICAgICAgICAgfHwgdGFnTmFtZSA9PSBiVGFnCi0gICAgICAgICAgICB8fCB0YWdO
YW1lID09IHVUYWcKLSAgICAgICAgICAgIHx8IHRhZ05hbWUgPT0gcnVieVRhZwotICAgICAgICAg
ICAgfHwgdGFnTmFtZSA9PSBydFRhZzsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW5saW5lIGJvb2wg
aXNBU3BhY2UoY2hhciBjKQotICAgIHsKLSAgICAgICAgLy8gV2ViVlRUIHNwYWNlIGNoYXJhY3Rl
cnMgYXJlIFUrMDAyMCBTUEFDRSwgVSswMDA5IENIQVJBQ1RFUiBUQUJVTEFUSU9OICh0YWIpLCBV
KzAwMEEgTElORSBGRUVEIChMRiksIFUrMDAwQyBGT1JNIEZFRUQgKEZGKSwgYW5kIFUrMDAwRCBD
QVJSSUFHRSBSRVRVUk4gICAgKENSKS4KLSAgICAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0g
J1x0JyB8fCBjID09ICdcbicgfHwgYyA9PSAnXGYnIHx8IGMgPT0gJ1xyJzsKLSAgICB9Ci0gICAg
c3RhdGljIFN0cmluZyBjb2xsZWN0RGlnaXRzKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkKik7Ci0g
ICAgc3RhdGljIFN0cmluZyBjb2xsZWN0V29yZChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOwot
Ci0gICAgdmlydHVhbCB2b2lkIGZldGNoUGFyc2VkQ3VlcyhWZWN0b3I8UmVmUHRyPFRleHRUcmFj
a0N1ZT4gPiYpOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCBwYXJzZUJ5dGVzKGNvbnN0IGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLXByb3RlY3RlZDoKLSAgICBXZWJWVFRQYXJzZXIo
Q3VlUGFyc2VyUHJpdmF0ZUNsaWVudCosIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICAK
LSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0g
ICAgUGFyc2VTdGF0ZSBtX3N0YXRlOwotCi1wcml2YXRlOgotICAgIFBhcnNlU3RhdGUgY29sbGVj
dEN1ZUlkKGNvbnN0IFN0cmluZyYpOwotICAgIFBhcnNlU3RhdGUgY29sbGVjdFRpbWluZ3NBbmRT
ZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKLSAgICBQYXJzZVN0YXRlIGNvbGxlY3RDdWVUZXh0KGNv
bnN0IFN0cmluZyYsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQpOwotICAgIFBhcnNlU3RhdGUg
aWdub3JlQmFkQ3VlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgdm9pZCBwcm9jZXNzQ3VlVGV4dCgp
OwotICAgIHZvaWQgcmVzZXRDdWVWYWx1ZXMoKTsKLSAgICBkb3VibGUgY29sbGVjdFRpbWVTdGFt
cChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCopOwotICAgIHZvaWQgc2tpcFdoaXRlU3BhY2UoY29u
c3QgU3RyaW5nJiwgdW5zaWduZWQqKTsKLSAgICBzdGF0aWMgdm9pZCBza2lwTGluZVRlcm1pbmF0
b3IoY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCopOwotICAgIHN0
YXRpYyBTdHJpbmcgY29sbGVjdE5leHRMaW5lKGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxl
bmd0aCwgdW5zaWduZWQqKTsKLSAgICAKLSAgICB2b2lkIGNvbnN0cnVjdFRyZWVGcm9tVG9rZW4o
RG9jdW1lbnQqKTsKLQotICAgIFN0cmluZyBtX2N1cnJlbnRJZDsKLSAgICBkb3VibGUgbV9jdXJy
ZW50U3RhcnRUaW1lOwotICAgIGRvdWJsZSBtX2N1cnJlbnRFbmRUaW1lOwotICAgIFN0cmluZ0J1
aWxkZXIgbV9jdXJyZW50Q29udGVudDsKLSAgICBTdHJpbmcgbV9jdXJyZW50U2V0dGluZ3M7Ci0g
ICAgCi0gICAgV2ViVlRUVG9rZW4gbV90b2tlbjsKLSAgICBPd25QdHI8V2ViVlRUVG9rZW5pemVy
PiBtX3Rva2VuaXplcjsKLQotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBtX2F0dGFjaG1l
bnRSb290OwotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX2N1cnJlbnROb2RlOwotCi0gICAg
Q3VlUGFyc2VyUHJpdmF0ZUNsaWVudCogbV9jbGllbnQ7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFRl
eHRUcmFja0N1ZT4gPiBtX2N1ZWxpc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFj
ay9XZWJWVFRUb2tlbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9r
ZW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg2OGZjZWIzYmIxOTZhMzNmYzZk
ZTJhOTMyMGI0MzI2YmQ3ZDFhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbi5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJWVFRUb2tlbl9oCi0jZGVm
aW5lIFdlYlZUVFRva2VuX2gKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLQotI2luY2x1ZGUg
Ik1hcmt1cFRva2VuQmFzZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdlYlZU
VFRva2VuVHlwZXMgewotcHVibGljOgotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIFVuaW5pdGlh
bGl6ZWQsCi0gICAgICAgIENoYXJhY3RlciwKLSAgICAgICAgU3RhcnRUYWcsCi0gICAgICAgIEVu
ZFRhZywKLSAgICAgICAgVGltZXN0YW1wVGFnLAotICAgICAgICBFbmRPZkZpbGUsCi0gICAgfTsK
LX07Ci0KLWNsYXNzIFdlYlZUVFRva2VuIDogcHVibGljIE1hcmt1cFRva2VuQmFzZTxXZWJWVFRU
b2tlblR5cGVzPiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBhcHBlbmRUb05hbWUoVUNoYXIgY2hhcmFj
dGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBXZWJWVFRUb2tlblR5cGVzOjpT
dGFydFRhZyB8fCBtX3R5cGUgPT0gV2ViVlRUVG9rZW5UeXBlczo6RW5kVGFnKTsKLSAgICAgICAg
TWFya3VwVG9rZW5CYXNlPFdlYlZUVFRva2VuVHlwZXM+OjphcHBlbmRUb05hbWUoY2hhcmFjdGVy
KTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgRGF0YVZlY3RvciYgbmFtZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gTWFya3VwVG9rZW5CYXNlPFdlYlZUVFRva2VuVHlwZXM+OjpuYW1l
KCk7Ci0gICAgfQotICAgIAotICAgIGNvbnN0IERhdGFWZWN0b3ImIGNoYXJhY3RlcnMoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpDaGFyYWN0ZXIgfHwgbV90
eXBlID09IFR5cGU6OlRpbWVzdGFtcFRhZyk7Ci0gICAgICAgIHJldHVybiBtX2RhdGE7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgYmVnaW5FbXB0eVN0YXJ0VGFnKCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX3R5cGUgPT0gVHlwZTo6VW5pbml0aWFsaXplZCk7Ci0gICAgICAgIG1fdHlwZSA9IFR5
cGU6OlN0YXJ0VGFnOwotICAgICAgICBtX2N1cnJlbnRBdHRyaWJ1dGUgPSAwOwotICAgICAgICBt
X2F0dHJpYnV0ZXMuY2xlYXIoKTsKLSAgICAgICAgbV9kYXRhLmNsZWFyKCk7Ci0gICAgfQotIAot
ICAgIHZvaWQgYmVnaW5UaW1lc3RhbXBUYWcoVUNoYXIgY2hhcmFjdGVyKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGNoYXJhY3Rlcik7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6VW5p
bml0aWFsaXplZCk7Ci0gICAgICAgIG1fdHlwZSA9IFR5cGU6OlRpbWVzdGFtcFRhZzsKLSAgICAg
ICAgbV9zZWxmQ2xvc2luZyA9IHRydWU7Ci0gICAgICAgIG1fZGF0YS5hcHBlbmQoY2hhcmFjdGVy
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhcHBlbmRUb1RpbWVzdGFtcChVQ2hhciBjaGFyYWN0
ZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoY2hhcmFjdGVyKTsKLSAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBUeXBlOjpUaW1lc3RhbXBUYWcpOwotICAgICAgICBtX2RhdGEuYXBwZW5kKGNoYXJh
Y3Rlcik7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRUb0NsYXNzKFVDaGFyIGNoYXJhY3RlcikK
LSAgICB7Ci0gICAgICAgIGFwcGVuZFRvU3RhcnRUeXBlKGNoYXJhY3Rlcik7Ci0gICAgfQotCi0g
ICAgdm9pZCBhZGROZXdDbGFzcygpCi0gICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IFR5
cGU6OlN0YXJ0VGFnKTsKLSAgICAgICAgaWYgKCFtX2NsYXNzZXMuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgbV9jbGFzc2VzLmFwcGVuZCgnICcpOwotICAgICAgICBtX2NsYXNzZXMuYXBwZW5kKG1f
Y3VycmVudEJ1ZmZlcik7Ci0gICAgICAgIG1fY3VycmVudEJ1ZmZlci5jbGVhcigpOwotICAgIH0K
LSAgICAKLSAgICBjb25zdCBEYXRhVmVjdG9yJiBjbGFzc2VzKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2NsYXNzZXM7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRUb0Fubm90YXRp
b24oVUNoYXIgY2hhcmFjdGVyKQotICAgIHsKLSAgICAgICAgYXBwZW5kVG9TdGFydFR5cGUoY2hh
cmFjdGVyKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHZvaWQgYWRkTmV3QW5ub3RhdGlvbigpCi0g
ICAgewotICAgICAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OlN0YXJ0VGFnKTsKLSAgICAgICAg
bV9hbm5vdGF0aW9uLmNsZWFyKCk7Ci0gICAgICAgIG1fYW5ub3RhdGlvbi5hcHBlbmQobV9jdXJy
ZW50QnVmZmVyKTsKLSAgICAgICAgbV9jdXJyZW50QnVmZmVyLmNsZWFyKCk7Ci0gICAgfQotICAg
IAotICAgIGNvbnN0IERhdGFWZWN0b3ImIGFubm90YXRpb24oKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fYW5ub3RhdGlvbjsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhcigpCi0g
ICAgewotICAgICAgICBtX2Fubm90YXRpb24uY2xlYXIoKTsKLSAgICAgICAgbV9jbGFzc2VzLmNs
ZWFyKCk7Ci0gICAgICAgIG1fY3VycmVudEJ1ZmZlci5jbGVhcigpOwotICAgICAgICBNYXJrdXBU
b2tlbkJhc2U8V2ViVlRUVG9rZW5UeXBlcz46OmNsZWFyKCk7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHZvaWQgYXBwZW5kVG9TdGFydFR5cGUoVUNoYXIgY2hhcmFjdGVyKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGNoYXJhY3Rlcik7Ci0gICAgICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6U3Rh
cnRUYWcpOwotICAgICAgICBtX2N1cnJlbnRCdWZmZXIuYXBwZW5kKGNoYXJhY3Rlcik7Ci0gICAg
fQotCi0gICAgRGF0YVZlY3RvciBtX2Fubm90YXRpb247Ci0gICAgRGF0YVZlY3RvciBtX2NsYXNz
ZXM7Ci0gICAgRGF0YVZlY3RvciBtX2N1cnJlbnRCdWZmZXI7Ci19OwotCi19Ci0KLSNlbmRpZgot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRU
b2tlbml6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5p
emVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ2MThhYjYzOTAzYzFjMzIx
OTk3NTA1MDBjYWMxYzNmYjg0NTY4Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6
ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotCi0jaW5jbHVkZSAiV2ViVlRUVG9rZW5pemVy
LmgiCi0KLSNpbmNsdWRlICJNYXJrdXBUb2tlbml6ZXJJbmxpbmVNZXRob2RzLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotI2RlZmluZSBXRUJWVFRfQkVHSU5fU1RBVEUoc3RhdGVOYW1lKSBC
RUdJTl9TVEFURShXZWJWVFRUb2tlbml6ZXJTdGF0ZSwgc3RhdGVOYW1lKQotI2RlZmluZSBXRUJW
VFRfQURWQU5DRV9UTyhzdGF0ZU5hbWUpIEFEVkFOQ0VfVE8oV2ViVlRUVG9rZW5pemVyU3RhdGUs
IHN0YXRlTmFtZSkKLQotV2ViVlRUVG9rZW5pemVyOjpXZWJWVFRUb2tlbml6ZXIoKQotewotICAg
IHJlc2V0KCk7Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBib29sIE1hcmt1cFRva2VuaXplckJh
c2U8V2ViVlRUVG9rZW4sIFdlYlZUVFRva2VuaXplclN0YXRlPjo6c2hvdWxkU2tpcE51bGxDaGFy
YWN0ZXJzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgdmVj
dG9yRXF1YWxzU3RyaW5nKGNvbnN0IFZlY3RvcjxVQ2hhciwgMzI+JiB2ZWN0b3IsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQotewotICAgIGlmICh2ZWN0b3Iuc2l6ZSgpICE9IHN0cmluZy5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFVDaGFyKiBzdHJpbmdEYXRhID0g
c3RyaW5nLmNoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogdmVjdG9yRGF0YSA9IHZlY3Rv
ci5kYXRhKCk7Ci0gICAgcmV0dXJuICFtZW1jbXAoc3RyaW5nRGF0YSwgdmVjdG9yRGF0YSwgdmVj
dG9yLnNpemUoKSAqIHNpemVvZihVQ2hhcikpOwotfQotCi12b2lkIFdlYlZUVFRva2VuaXplcjo6
cmVzZXQoKQotewotICAgIG1fc3RhdGUgPSBXZWJWVFRUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0YXRl
OwotICAgIG1fdG9rZW4gPSAwOwotICAgIG1fbGluZU51bWJlciA9IDA7Ci0gICAgbV9idWZmZXIu
Y2xlYXIoKTsKLX0KLSAgICAKLWJvb2wgV2ViVlRUVG9rZW5pemVyOjpuZXh0VG9rZW4oU2VnbWVu
dGVkU3RyaW5nJiBzb3VyY2UsIFdlYlZUVFRva2VuJiB0b2tlbikKLXsKLSAgICAvLyBJZiB3ZSBo
YXZlIGEgdG9rZW4gaW4gcHJvZ3Jlc3MsIHRoZW4gd2UncmUgc3VwcG9zZWQgdG8gYmUgY2FsbGVk
IGJhY2sKLSAgICAvLyB3aXRoIHRoZSBzYW1lIHRva2VuIHNvIHdlIGNhbiBmaW5pc2ggaXQuCi0g
ICAgQVNTRVJUKCFtX3Rva2VuIHx8IG1fdG9rZW4gPT0gJnRva2VuIHx8IHRva2VuLnR5cGUoKSA9
PSBXZWJWVFRUb2tlblR5cGVzOjpVbmluaXRpYWxpemVkKTsKLSAgICBtX3Rva2VuID0gJnRva2Vu
OwotCi0gICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkgfHwgIW1faW5wdXRTdHJlYW1QcmVwcm9jZXNz
b3IucGVlayhzb3VyY2UsIG1fbGluZU51bWJlcikpCi0gICAgICAgIHJldHVybiBoYXZlQnVmZmVy
ZWRDaGFyYWN0ZXJUb2tlbigpOwotCi0gICAgVUNoYXIgY2MgPSBtX2lucHV0U3RyZWFtUHJlcHJv
Y2Vzc29yLm5leHRJbnB1dENoYXJhY3RlcigpOwotCi0gICAgLy8gNC44LjEwLjEzLjQgV2ViVlRU
IGN1ZSB0ZXh0IHRva2VuaXplcgotICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgIFdFQlZUVF9C
RUdJTl9TVEFURShEYXRhU3RhdGUpIHsKLSAgICAgICAgaWYgKGNjID09ICcmJykgewotICAgICAg
ICAgICAgbV9idWZmZXIuYXBwZW5kKGNjKTsKLSAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RP
KEVzY2FwZVN0YXRlKTsKLSAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPCcpIHsKLSAgICAgICAg
ICAgIGlmIChtX3Rva2VuLT50eXBlKCkgPT0gV2ViVlRUVG9rZW5UeXBlczo6VW5pbml0aWFsaXpl
ZAotICAgICAgICAgICAgICAgIHx8IHZlY3RvckVxdWFsc1N0cmluZyhtX3Rva2VuLT5jaGFyYWN0
ZXJzKCksIGVtcHR5U3RyaW5nKCkpKQotICAgICAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RP
KFRhZ1N0YXRlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gZW1p
dEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVyU3RhdGU6OlRhZ1N0YXRlKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxl
TWFya2VyKQotICAgICAgICAgICAgcmV0dXJuIGVtaXRFbmRPZkZpbGUoc291cmNlKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIoY2MpOwotICAgICAgICAgICAg
V0VCVlRUX0FEVkFOQ0VfVE8oRGF0YVN0YXRlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBFTkRf
U1RBVEUoKQotCi0gICAgV0VCVlRUX0JFR0lOX1NUQVRFKEVzY2FwZVN0YXRlKSB7Ci0gICAgICAg
IGlmIChjYyA9PSAnOycpIHsKLSAgICAgICAgICAgIGlmICh2ZWN0b3JFcXVhbHNTdHJpbmcobV9i
dWZmZXIsICImYW1wIikpCi0gICAgICAgICAgICAgICAgYnVmZmVyQ2hhcmFjdGVyKCcmJyk7Ci0g
ICAgICAgICAgICBlbHNlIGlmICh2ZWN0b3JFcXVhbHNTdHJpbmcobV9idWZmZXIsICImbHQiKSkK
LSAgICAgICAgICAgICAgICBidWZmZXJDaGFyYWN0ZXIoJzwnKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKHZlY3RvckVxdWFsc1N0cmluZyhtX2J1ZmZlciwgIiZndCIpKQotICAgICAgICAgICAgICAg
IGJ1ZmZlckNoYXJhY3RlcignPicpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgbV9idWZmZXIuYXBwZW5kKGNjKTsKLSAgICAgICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRU
b0NoYXJhY3RlcihtX2J1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2J1ZmZl
ci5jbGVhcigpOwotICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oRGF0YVN0YXRlKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChpc0FTQ0lJQWxwaGFudW1lcmljKGNjKSkgewotICAgICAgICAgICAg
bV9idWZmZXIuYXBwZW5kKGNjKTsKLSAgICAgICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKEVzY2Fw
ZVN0YXRlKTsKLSAgICAgICAgfSBlbHNlIGlmIChjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nv
cjo6ZW5kT2ZGaWxlTWFya2VyKSB7Ci0gICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRUb0NoYXJh
Y3RlcihtX2J1ZmZlcik7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEVuZE9mRmlsZShzb3VyY2Up
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCF2ZWN0b3JFcXVhbHNTdHJpbmco
bV9idWZmZXIsICImIikpCi0gICAgICAgICAgICAgICAgbV90b2tlbi0+YXBwZW5kVG9DaGFyYWN0
ZXIobV9idWZmZXIpOwotICAgICAgICAgICAgbV9idWZmZXIuY2xlYXIoKTsKLSAgICAgICAgICAg
IFdFQlZUVF9BRFZBTkNFX1RPKERhdGFTdGF0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgRU5E
X1NUQVRFKCkKLQotICAgIFdFQlZUVF9CRUdJTl9TVEFURShUYWdTdGF0ZSkgewotICAgICAgICBp
ZiAoaXNUb2tlbml6ZXJXaGl0ZXNwYWNlKGNjKSkgewotICAgICAgICAgICAgbV90b2tlbi0+YmVn
aW5FbXB0eVN0YXJ0VGFnKCk7Ci0gICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhTdGFydFRh
Z0Fubm90YXRpb25TdGF0ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJy4nKSB7Ci0gICAg
ICAgICAgICBtX3Rva2VuLT5iZWdpbkVtcHR5U3RhcnRUYWcoKTsKLSAgICAgICAgICAgIFdFQlZU
VF9BRFZBTkNFX1RPKFN0YXJ0VGFnQ2xhc3NTdGF0ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2Mg
PT0gJy8nKSB7Ci0gICAgICAgICAgICBXRUJWVFRfQURWQU5DRV9UTyhFbmRUYWdPcGVuU3RhdGUp
OwotICAgICAgICB9IGVsc2UgaWYgKFdURjo6aXNBU0NJSURpZ2l0KGNjKSkgewotICAgICAgICAg
ICAgbV90b2tlbi0+YmVnaW5UaW1lc3RhbXBUYWcoY2MpOwotICAgICAgICAgICAgV0VCVlRUX0FE
VkFOQ0VfVE8oVGltZXN0YW1wVGFnU3RhdGUpOwotICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc+
JyB8fCBjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKSB7Ci0g
ICAgICAgICAgICBtX3Rva2VuLT5iZWdpbkVtcHR5U3RhcnRUYWcoKTsKLSAgICAgICAgICAgIHJl
dHVybiBlbWl0QW5kUmVzdW1lSW4oc291cmNlLCBXZWJWVFRUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0
YXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fdG9rZW4tPmJlZ2luU3RhcnRU
YWcoY2MpOwotICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdTdGF0ZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgRU5EX1NUQVRFKCkKLQotICAgIFdFQlZUVF9CRUdJTl9TVEFU
RShTdGFydFRhZ1N0YXRlKSB7Ci0gICAgICAgIGlmIChpc1Rva2VuaXplcldoaXRlc3BhY2UoY2Mp
KQotICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGUp
OwotICAgICAgICBlbHNlIGlmIChjYyA9PSAnLicpCi0gICAgICAgICAgICBXRUJWVFRfQURWQU5D
RV9UTyhTdGFydFRhZ0NsYXNzU3RhdGUpOwotICAgICAgICBlbHNlIGlmIChjYyA9PSAnPicgfHwg
Y2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9jZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikKLSAgICAgICAg
ICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW4oc291cmNlLCBXZWJWVFRUb2tlbml6ZXJTdGF0ZTo6
RGF0YVN0YXRlKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX3Rva2VuLT5hcHBlbmRU
b05hbWUoY2MpOwotICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdTdGF0ZSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgRU5EX1NUQVRFKCkKLQotICAgIFdFQlZUVF9CRUdJTl9T
VEFURShTdGFydFRhZ0NsYXNzU3RhdGUpIHsKLSAgICAgICAgaWYgKGlzVG9rZW5pemVyV2hpdGVz
cGFjZShjYykpIHsKLSAgICAgICAgICAgIG1fdG9rZW4tPmFkZE5ld0NsYXNzKCk7Ci0gICAgICAg
ICAgICBXRUJWVFRfQURWQU5DRV9UTyhTdGFydFRhZ0Fubm90YXRpb25TdGF0ZSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoY2MgPT0gJy4nKSB7Ci0gICAgICAgICAgICBtX3Rva2VuLT5hZGROZXdDbGFz
cygpOwotICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdDbGFzc1N0YXRlKTsK
LSAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicgfHwgY2MgPT0gSW5wdXRTdHJlYW1QcmVwcm9j
ZXNzb3I6OmVuZE9mRmlsZU1hcmtlcikgewotICAgICAgICAgICAgbV90b2tlbi0+YWRkTmV3Q2xh
c3MoKTsKLSAgICAgICAgICAgIHJldHVybiBlbWl0QW5kUmVzdW1lSW4oc291cmNlLCBXZWJWVFRU
b2tlbml6ZXJTdGF0ZTo6RGF0YVN0YXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IG1fdG9rZW4tPmFwcGVuZFRvQ2xhc3MoY2MpOwotICAgICAgICAgICAgV0VCVlRUX0FEVkFOQ0Vf
VE8oU3RhcnRUYWdDbGFzc1N0YXRlKTsKLSAgICAgICAgfQotCi0gICAgfQotICAgIEVORF9TVEFU
RSgpCi0KLSAgICBXRUJWVFRfQkVHSU5fU1RBVEUoU3RhcnRUYWdBbm5vdGF0aW9uU3RhdGUpIHsK
LSAgICAgICAgaWYgKGNjID09ICc+JyB8fCBjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6
ZW5kT2ZGaWxlTWFya2VyKSB7Ci0gICAgICAgICAgICBtX3Rva2VuLT5hZGROZXdBbm5vdGF0aW9u
KCk7Ci0gICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9r
ZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV90b2tlbi0+YXBw
ZW5kVG9Bbm5vdGF0aW9uKGNjKTsKLSAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oU3RhcnRUYWdB
bm5vdGF0aW9uU3RhdGUpOwotICAgIH0KLSAgICBFTkRfU1RBVEUoKQotICAgIAotICAgIFdFQlZU
VF9CRUdJTl9TVEFURShFbmRUYWdPcGVuU3RhdGUpIHsKLSAgICAgICAgaWYgKGNjID09ICc+JyB8
fCBjYyA9PSBJbnB1dFN0cmVhbVByZXByb2Nlc3Nvcjo6ZW5kT2ZGaWxlTWFya2VyKSB7Ci0gICAg
ICAgICAgICBtX3Rva2VuLT5iZWdpbkVuZFRhZygnXDAnKTsKLSAgICAgICAgICAgIHJldHVybiBl
bWl0QW5kUmVzdW1lSW4oc291cmNlLCBXZWJWVFRUb2tlbml6ZXJTdGF0ZTo6RGF0YVN0YXRlKTsK
LSAgICAgICAgfQotICAgICAgICBtX3Rva2VuLT5iZWdpbkVuZFRhZyhjYyk7Ci0gICAgICAgIFdF
QlZUVF9BRFZBTkNFX1RPKEVuZFRhZ1N0YXRlKTsKLSAgICB9Ci0gICAgRU5EX1NUQVRFKCkKLQot
ICAgIFdFQlZUVF9CRUdJTl9TVEFURShFbmRUYWdTdGF0ZSkgewotICAgICAgICBpZiAoY2MgPT0g
Jz4nIHx8IGNjID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRPZkZpbGVNYXJrZXIpCi0g
ICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwgV2ViVlRUVG9rZW5pemVy
U3RhdGU6OkRhdGFTdGF0ZSk7Ci0gICAgICAgIG1fdG9rZW4tPmFwcGVuZFRvTmFtZShjYyk7Ci0g
ICAgICAgIFdFQlZUVF9BRFZBTkNFX1RPKEVuZFRhZ1N0YXRlKTsKLSAgICB9Ci0gICAgRU5EX1NU
QVRFKCkKLQotICAgIFdFQlZUVF9CRUdJTl9TVEFURShUaW1lc3RhbXBUYWdTdGF0ZSkgewotICAg
ICAgICBpZiAoY2MgPT0gJz4nIHx8IGNjID09IElucHV0U3RyZWFtUHJlcHJvY2Vzc29yOjplbmRP
ZkZpbGVNYXJrZXIpCi0gICAgICAgICAgICByZXR1cm4gZW1pdEFuZFJlc3VtZUluKHNvdXJjZSwg
V2ViVlRUVG9rZW5pemVyU3RhdGU6OkRhdGFTdGF0ZSk7Ci0gICAgICAgIG1fdG9rZW4tPmFwcGVu
ZFRvVGltZXN0YW1wKGNjKTsKLSAgICAgICAgV0VCVlRUX0FEVkFOQ0VfVE8oVGltZXN0YW1wVGFn
U3RhdGUpOwotICAgIH0KLSAgICBFTkRfU1RBVEUoKQotCi0gICAgfQotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdHJhY2svV2ViVlRUVG9rZW5pemVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6ZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTZkNDVmN2ZmN2ViZjM3Zjc1YWI3MDI3YWE4N2ZiNjI1NDkz
YTU3OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90cmFjay9XZWJWVFRUb2tlbml6ZXIuaAorKysgL2Rldi9udWxs
CkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJWVFRUb2tlbml6ZXJfaAotI2RlZmluZSBXZWJW
VFRUb2tlbml6ZXJfaAotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotCi0jaW5jbHVkZSAiTWFy
a3VwVG9rZW5pemVyQmFzZS5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgotI2luY2x1
ZGUgIldlYlZUVFRva2VuLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViVlRU
VG9rZW5pemVyU3RhdGUgewotcHVibGljOgotICAgIGVudW0gU3RhdGUgewotICAgICAgICBEYXRh
U3RhdGUsCi0gICAgICAgIEVzY2FwZVN0YXRlLAotICAgICAgICBUYWdTdGF0ZSwKLSAgICAgICAg
U3RhcnRUYWdTdGF0ZSwKLSAgICAgICAgU3RhcnRUYWdDbGFzc1N0YXRlLAotICAgICAgICBTdGFy
dFRhZ0Fubm90YXRpb25TdGF0ZSwKLSAgICAgICAgRW5kVGFnU3RhdGUsCi0gICAgICAgIEVuZFRh
Z09wZW5TdGF0ZSwKLSAgICAgICAgVGltZXN0YW1wVGFnU3RhdGUsCi0gICAgfTsKLX07Ci0KLWNs
YXNzIFdlYlZUVFRva2VuaXplciA6IE1hcmt1cFRva2VuaXplckJhc2U8V2ViVlRUVG9rZW4sIFdl
YlZUVFRva2VuaXplclN0YXRlPiB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViVlRUVG9r
ZW5pemVyKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxXZWJWVFRUb2tlbml6ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRy
KG5ldyBXZWJWVFRUb2tlbml6ZXIpOyB9Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0gICAgCi0gICAg
Ym9vbCBuZXh0VG9rZW4oU2VnbWVudGVkU3RyaW5nJiwgV2ViVlRUVG9rZW4mKTsKLQotcHJpdmF0
ZToKLSAgICBXZWJWVFRUb2tlbml6ZXIoKTsKLSAgICAKLSAgICBWZWN0b3I8VUNoYXIsIDMyPiBt
X2J1ZmZlcjsKLX07Ci0KLX0KLQotI2VuZGlmCi0jZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>