<?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>136331</bug_id>
          
          <creation_ts>2014-08-27 21:35:49 -0700</creation_ts>
          <short_desc>DFG should have a reusable SSA builder</short_desc>
          <delta_ts>2014-09-08 17:35:51 -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>JavaScriptCore</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>
          <dependson>93361</dependson>
    
    <dependson>136520</dependson>
          <blocked>136610</blocked>
    
    <blocked>136639</blocked>
    
    <blocked>136641</blocked>
    
    <blocked>136330</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1031904</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-27 21:35:49 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032827</commentid>
    <comment_count>1</comment_count>
      <attachid>237543</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-02 19:55:14 -0700</bug_when>
    <thetext>Created attachment 237543
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033071</commentid>
    <comment_count>2</comment_count>
      <attachid>237595</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-03 15:56:24 -0700</bug_when>
    <thetext>Created attachment 237595
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033115</commentid>
    <comment_count>3</comment_count>
      <attachid>237595</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-03 19:44:00 -0700</bug_when>
    <thetext>Comment on attachment 237595
more

Obsoleted by https://bugs.webkit.org/attachment.cgi?id=237606&amp;action=review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033604</commentid>
    <comment_count>4</comment_count>
      <attachid>237725</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-05 17:10:17 -0700</bug_when>
    <thetext>Created attachment 237725
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033680</commentid>
    <comment_count>5</comment_count>
      <attachid>237741</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-06 12:10:58 -0700</bug_when>
    <thetext>Created attachment 237741
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033685</commentid>
    <comment_count>6</comment_count>
      <attachid>237743</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-06 13:59:43 -0700</bug_when>
    <thetext>Created attachment 237743
pretty close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033714</commentid>
    <comment_count>7</comment_count>
      <attachid>237750</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-06 20:19:38 -0700</bug_when>
    <thetext>Created attachment 237750
it is written!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033729</commentid>
    <comment_count>8</comment_count>
      <attachid>237754</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-07 09:43:09 -0700</bug_when>
    <thetext>Created attachment 237754
it compiles!

It instacrashes though.  I&apos;ll try to fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033730</commentid>
    <comment_count>9</comment_count>
      <attachid>237755</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-07 10:33:07 -0700</bug_when>
    <thetext>Created attachment 237755
it ran something without crashing!

It can now SSA convert marsaglia.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033908</commentid>
    <comment_count>10</comment_count>
      <attachid>237799</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-08 11:32:50 -0700</bug_when>
    <thetext>Created attachment 237799
it can run bigger programs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033922</commentid>
    <comment_count>11</comment_count>
      <attachid>237802</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-08 12:26:29 -0700</bug_when>
    <thetext>Created attachment 237802
the patch

I&apos;m still going to do some perf tests for sanity but I don&apos;t expect to see any difference since these changes are engineered to not be observable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033923</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-08 12:27:53 -0700</bug_when>
    <thetext>Attachment 237802 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSSACalculator.h:250:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 24 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>1033926</commentid>
    <comment_count>13</comment_count>
      <attachid>237804</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-08 12:31:51 -0700</bug_when>
    <thetext>Created attachment 237804
the patch

Fix style, add more comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1034007</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-08 17:35:51 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/173413</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237543</attachid>
            <date>2014-09-02 19:55:14 -0700</date>
            <delta_ts>2014-09-03 15:56:24 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17826</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNzMxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4Niw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPE5v
ZGUqLCA4PiBtX25vZGVzOwogfTsKIAordHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDU+IEJs
b2NrTGlzdDsKKwogc3RydWN0IFVubGlua2VkQmxvY2sgewogICAgIEJhc2ljQmxvY2sqIG1fYmxv
Y2s7CiAgICAgYm9vbCBtX25lZWRzTm9ybWFsTGlua2luZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQmxvY2tTZXQuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgQmxvY2tT
ZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBDb21tYVByaW50ZXIgY29t
bWEoIiAiKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fc2V0LmZpbmRCaXQo
MCwgdHJ1ZSk7IGJsb2NrSW5kZXggPCBtX3NldC5zaXplKCk7IGJsb2NrSW5kZXggPSBtX3NldC5m
aW5kQml0KGJsb2NrSW5kZXggKyAxLCB0cnVlKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
IyIsIGJsb2NrSW5kZXgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmxvY2tTZXQuaAkocmV2aXNpb24gMTczMTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC00OSwxMCAr
NTAsMTAxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc2V0LmdldChibG9jay0+aW5kZXgp
OwogICAgIH0KICAgICAKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAg
ICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fZ3JhcGgobnVsbHB0cikKKyAgICAgICAgICAg
ICwgbV9zZXQobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9pbmRleCA9IG1fc2V0LT5tX3NldC5maW5kQml0KG1faW5kZXgg
KyAxLCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fZ3JhcGgtPmJsb2NrKG1faW5kZXgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEJsb2NrU2V0OworICAgICAgICAKKyAgICAgICAgR3JhcGgqIG1fZ3JhcGg7
CisgICAgICAgIGNvbnN0IEJsb2NrU2V0KiBtX3NldDsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7
CisgICAgfTsKKyAgICAKKyAgICBjbGFzcyBJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAg
ICBJdGVyYWJsZShHcmFwaCYgZ3JhcGgsIGNvbnN0IEJsb2NrU2V0JiBzZXQpCisgICAgICAgICAg
ICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICAgICAsIG1fc2V0KHNldCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC5t
X2dyYXBoID0gJm1fZ3JhcGg7CisgICAgICAgICAgICByZXN1bHQubV9zZXQgPSAmbV9zZXQ7Cisg
ICAgICAgICAgICByZXN1bHQubV9pbmRleCA9IG1fc2V0Lm1fc2V0LmZpbmRCaXQoMCwgdHJ1ZSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpdGVyYXRvciBy
ZXN1bHQ7CisgICAgICAgICAgICByZXN1bHQubV9ncmFwaCA9ICZtX2dyYXBoOworICAgICAgICAg
ICAgcmVzdWx0Lm1fc2V0ID0gJm1fc2V0OworICAgICAgICAgICAgcmVzdWx0Lm1faW5kZXggPSBt
X3NldC5tX3NldC5zaXplKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBoJiBtX2dyYXBoOworICAgICAg
ICBjb25zdCBCbG9ja1NldCYgbV9zZXQ7CisgICAgfTsKKyAgICAKKyAgICBJdGVyYWJsZSBpdGVy
YWJsZShHcmFwaCYgZ3JhcGgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSXRlcmFibGUo
Z3JhcGgsICp0aGlzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgCiBwcml2YXRlOgogICAgIEJpdFZlY3RvciBtX3NldDsKIH07CiAKK2NsYXNz
IEJsb2NrQWRkZXIgeworcHVibGljOgorICAgIEJsb2NrQWRkZXIoQmxvY2tTZXQmIHNldCkKKyAg
ICAgICAgOiBtX3NldChzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
KCkoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zZXQu
YWRkKGJsb2NrKTsKKyAgICB9Citwcml2YXRlOgorICAgIG11dGFibGUgQmxvY2tTZXQmIG1fc2V0
OworfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5j
cHAJKHJldmlzaW9uIDE3MzE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9t
aW5hdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMCw2ICs0MDAsNDggQEAgdm9pZCBEb21p
bmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAgICB9CiB9CiAKK0Jsb2NrU2V0IERvbWlu
YXRvcnM6OnN0cmljdERvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bykgY29uc3QKK3sKKyAgICBC
bG9ja1NldCByZXN1bHQ7CisgICAgZm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKHRvLCBCbG9ja0Fk
ZGVyKHJlc3VsdCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Jsb2NrU2V0IERvbWluYXRv
cnM6OmRvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bykgY29uc3QKK3sKKyAgICBCbG9ja1NldCBy
ZXN1bHQ7CisgICAgZm9yQWxsRG9taW5hdG9yc09mKHRvLCBCbG9ja0FkZGVyKHJlc3VsdCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Jsb2NrU2V0IERvbWluYXRvcnM6OmJsb2Nrc1N0cmlj
dGx5RG9taW5hdGVkQnkoQmFzaWNCbG9jayogZnJvbSkgY29uc3QKK3sKKyAgICBCbG9ja1NldCBy
ZXN1bHQ7CisgICAgZm9yQWxsQmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeShmcm9tLCBCbG9ja0Fk
ZGVyKHJlc3VsdCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Jsb2NrU2V0IERvbWluYXRv
cnM6OmJsb2Nrc0RvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZyb20pIGNvbnN0Cit7CisgICAgQmxv
Y2tTZXQgcmVzdWx0OworICAgIGZvckFsbEJsb2Nrc0RvbWluYXRlZEJ5KGZyb20sIEJsb2NrQWRk
ZXIocmVzdWx0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQmxvY2tTZXQgRG9taW5hdG9y
czo6ZG9taW5hbmNlRnJvbnRpZXJPZihCYXNpY0Jsb2NrKiBmcm9tKSBjb25zdAoreworICAgIEJs
b2NrU2V0IHJlc3VsdDsKKyAgICBmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBs
KGZyb20sIEJsb2NrQWRkZXIocmVzdWx0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQmxv
Y2tTZXQgRG9taW5hdG9yczo6aXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKGNvbnN0IEJsb2Nr
TGlzdCYgZnJvbSkgY29uc3QKK3sKKyAgICBCbG9ja1NldCByZXN1bHQ7CisgICAgZm9yQWxsQmxv
Y2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKGZyb20sIEJsb2NrQWRkZXIocmVz
dWx0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogYm9vbCBEb21pbmF0b3JzOjpuYWl2ZURv
bWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKIHsKICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrID0gdG87IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10u
aWRvbVBhcmVudCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0
b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0
b3JzLmgJKHJldmlzaW9uIDE3MzE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMSArNTcsMTE2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGZyb20gPT0gdG8gfHwgc3RyaWN0bHlEb21pbmF0ZXMoZnJvbSwgdG8p
OwogICAgIH0KICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA9IG1f
ZGF0YVt0b10uaWRvbVBhcmVudDsgYmxvY2s7IGJsb2NrID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFy
ZW50KQorICAgICAgICAgICAgZnVuY3RvcihibG9jayk7CisgICAgfQorICAgIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxEb21pbmF0b3JzT2YoQmFzaWNC
bG9jayogdG8sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrID0gdG87IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10u
aWRvbVBhcmVudCkKKyAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzU3RyaWN0
bHlEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBj
b25zdAorICAgIHsKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gd29ya2xpc3Q7Cisg
ICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3RvcihtX2RhdGFbZnJvbV0uaWRvbUtpZHMpOworICAg
ICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgZnVuY3RvcihibG9j
ayk7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmRWZWN0b3IobV9kYXRhW2Jsb2NrXS5pZG9t
S2lkcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckFsbEJsb2Nrc0RvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZyb20s
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBWZWN0b3I8QmFz
aWNCbG9jayosIDE2PiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kKGZyb20pOwor
ICAgICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgZnVuY3Rvcihi
bG9jayk7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmRWZWN0b3IobV9kYXRhW2Jsb2NrXS5p
ZG9tS2lkcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQmxvY2tTZXQgc3RyaWN0RG9t
aW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvKSBjb25zdDsKKyAgICBCbG9ja1NldCBkb21pbmF0b3Jz
T2YoQmFzaWNCbG9jayogdG8pIGNvbnN0OworICAgIEJsb2NrU2V0IGJsb2Nrc1N0cmljdGx5RG9t
aW5hdGVkQnkoQmFzaWNCbG9jayogZnJvbSkgY29uc3Q7CisgICAgQmxvY2tTZXQgYmxvY2tzRG9t
aW5hdGVkQnkoQmFzaWNCbG9jayogZnJvbSkgY29uc3Q7CisgICAgCisgICAgLy8gVmlzaXRzIGFs
bCBibG9ja3MgaW4gdGhlIGRvbWluYW5jZSBmcm9udGllciBvZiB0aGUgZ2l2ZW4gYmxvY2suIFRo
aXMgb2Z0ZW4KKyAgICAvLyB2aXNpdHMgdGhlIHNhbWUgYmxvY2sgbXVsdGlwbGUgdGltZXMsIHNv
IGl0J3MgdXAgdG8gdGhlIGNhbGxiYWNrIHRvIHBydW5lCisgICAgLy8gYWNjb3JkaW5nbHkuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbEJsb2Nrc0luRG9t
aW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgQmFzaWNCbG9jayogZnJvbSwgY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIEJsb2NrU2V0IHNldDsKKyAgICAgICAg
Zm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgICAgIGZyb20s
CisgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSB7CisgICAgICAgICAgICAgICAg
aWYgKHNldC5hZGQoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsK
KyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICBCbG9ja1NldCBkb21pbmFuY2VGcm9u
dGllck9mKEJhc2ljQmxvY2sqIGZyb20pIGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJv
bnRpZXJPZigKKyAgICAgICAgY29uc3QgQmxvY2tMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgQmxvY2tTZXQgc2V0OworICAgICAgICBmb3JBbGxCbG9j
a3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCisgICAgICAgICAgICBmcm9tLAor
ICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaykgLT4gYm9vbCB7CisgICAgICAgICAg
ICAgICAgaWYgKCFzZXQuYWRkKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIEJsb2NrU2V0IGl0
ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZihjb25zdCBCbG9ja0xpc3QmIGZyb20pIGNvbnN0Owor
ICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToK
ICAgICBib29sIG5haXZlRG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRv
KSBjb25zdDsKICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgQmFzaWNCbG9j
ayogZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvckFsbEJs
b2Nrc1N0cmljdGx5RG9taW5hdGVkQnkoZnJvbSwgWyZmdW5jdG9yXSAoQmFzaWNCbG9jayogYmxv
Y2spIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxv
Y2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogdG8gPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFkb21pbmF0ZXMoZnJvbSwgdG8pKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rvcih0byk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCisgICAg
ICAgIGNvbnN0IEJsb2NrTGlzdCYgZnJvbSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QK
KyAgICB7CisgICAgICAgIEJsb2NrTGlzdCB3b3JrbGlzdCA9IGZyb207CisgICAgICAgIHdoaWxl
ICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBmb3JBbGxCbG9ja3NJbkRvbWluYW5j
ZUZyb250aWVyT2ZJbXBsKGJsb2NrLCBbJl0gKEJhc2ljQmxvY2sqIG90aGVyQmxvY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0b3Iob3RoZXJCbG9jaykpCisgICAgICAgICAgICAg
ICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQob3RoZXJCbG9jayk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgc3RydWN0IEJsb2NrRGF0YSB7CiAgICAg
ICAgIEJsb2NrRGF0YSgpCiAgICAgICAgICAgICA6IGlkb21QYXJlbnQobnVsbHB0cikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZh
bGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTczMTgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTMgKzY5LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAKLSAgICAgICAgICAgIGlmICghYmxv
Y2tzVGhhdE5lZWRJbnZhbGlkYXRpb25Qb2ludHMuY29udGFpbnMoYmxvY2spKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50cy5pdGVyYWJsZShtX2dyYXBo
KSkgewogICAgICAgICAgICAgaW5zZXJ0SW52YWxpZGF0aW9uQ2hlY2soMCwgYmxvY2stPmF0KDAp
KTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAJKHJldmlzaW9uIDE3MzE4MSkKKysrIFNvdXJjZS9XVEYv
d3RmL0JpdFZlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsNTAgQEAgc2l6
ZV90IEJpdFZlY3Rvcjo6Yml0Q291bnRTbG93KCkgY29uc3QKIAogYm9vbCBCaXRWZWN0b3I6OmVx
dWFsc1Nsb3dDYXNlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0CiB7CisgICAgYm9vbCBy
ZXN1bHQgPSBlcXVhbHNTbG93Q2FzZUZhc3Qob3RoZXIpOworICAgIEFTU0VSVChyZXN1bHQgPT0g
ZXF1YWxzU2xvd0Nhc2VTaW1wbGUob3RoZXIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiti
b29sIEJpdFZlY3Rvcjo6ZXF1YWxzU2xvd0Nhc2VGYXN0KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIp
IGNvbnN0Cit7CisgICAgaWYgKGlzSW5saW5lKCkgIT0gb3RoZXIuaXNJbmxpbmUoKSkKKyAgICAg
ICAgcmV0dXJuIGVxdWFsc1Nsb3dDYXNlU2ltcGxlKG90aGVyKTsKKyAgICAKKyAgICBjb25zdCBP
dXRPZkxpbmVCaXRzKiBteUJpdHMgPSBvdXRPZkxpbmVCaXRzKCk7CisgICAgY29uc3QgT3V0T2ZM
aW5lQml0cyogb3RoZXJCaXRzID0gb3RoZXIub3V0T2ZMaW5lQml0cygpOworICAgIAorICAgIHNp
emVfdCBteU51bVdvcmRzID0gbXlCaXRzLT5udW1Xb3JkcygpOworICAgIHNpemVfdCBvdGhlck51
bVdvcmRzID0gb3RoZXJCaXRzLT5udW1Xb3JkcygpOworICAgIHNpemVfdCBtaW5OdW1Xb3JkczsK
KyAgICBzaXplX3QgbWF4TnVtV29yZHM7CisgICAgCisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyog
bG9uZ2VyQml0czsKKyAgICBpZiAobXlOdW1Xb3JkcyA8IG90aGVyTnVtV29yZHMpIHsKKyAgICAg
ICAgbWluTnVtV29yZHMgPSBteU51bVdvcmRzOworICAgICAgICBtYXhOdW1Xb3JkcyA9IG90aGVy
TnVtV29yZHM7CisgICAgICAgIGxvbmdlckJpdHMgPSBvdGhlckJpdHM7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbWluTnVtV29yZHMgPSBvdGhlck51bVdvcmRzOworICAgICAgICBtYXhOdW1Xb3Jk
cyA9IG15TnVtV29yZHM7CisgICAgICAgIGxvbmdlckJpdHMgPSBteUJpdHM7CisgICAgfQorICAg
IAorICAgIGZvciAoc2l6ZV90IGkgPSBtaW5OdW1Xb3JkczsgaSA8IG1heE51bVdvcmRzOyArK2kp
IHsKKyAgICAgICAgaWYgKGxvbmdlckJpdHMtPmJpdHMoKVtpXSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IG1pbk51bVdvcmRzOyBp
LS07KSB7CisgICAgICAgIGlmIChteUJpdHMtPmJpdHMoKVtpXSAhPSBvdGhlckJpdHMtPmJpdHMo
KVtpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQml0VmVjdG9yOjplcXVhbHNTbG93Q2FzZVNpbXBsZShjb25zdCBCaXRW
ZWN0b3ImIG90aGVyKSBjb25zdAorewogICAgIC8vIFRoaXMgaXMgcmVhbGx5IGNoZWVzeSwgYnV0
IHByb2JhYmx5IGdvb2QgZW5vdWdoIGZvciBub3cuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3Rk
OjptYXgoc2l6ZSgpLCBvdGhlci5zaXplKCkpOyBpLS07KSB7CiAgICAgICAgIGlmIChnZXQoaSkg
IT0gb3RoZXIuZ2V0KGkpKQpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDE3MzE4MSkKKysr
IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBA
IC0yMTUsNiArMjE2LDE5IEBAIHB1YmxpYzogCiAgICAgICAgIHJldHVybiBiaXRDb3VudFNsb3co
KTsKICAgICB9CiAgICAgCisgICAgc2l6ZV90IGZpbmRCaXQoc2l6ZV90IGluZGV4LCBib29sIHZh
bHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IGZpbmRCaXRGYXN0KGlu
ZGV4LCB2YWx1ZSk7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAg
ICBzaXplX3QgZXhwZWN0ZWRSZXN1bHQgPSBmaW5kQml0U2ltcGxlKGluZGV4LCB2YWx1ZSk7Cisg
ICAgICAgICAgICBpZiAocmVzdWx0ICE9IGV4cGVjdGVkUmVzdWx0KSB7CisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiZmluZEJpdCgiLCBpbmRleCwgIiwgIiwgdmFsdWUsICIpIG9uICIsICp0aGlz
LCAiIHNob3VsZCBoYXZlIGdvdHRlbiAiLCBleHBlY3RlZFJlc3VsdCwgIiBidXQgZ290ICIsIHJl
c3VsdCwgIlxuIik7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dDsKICAgICAKICAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CkBAIC0yODks
NiArMzAzLDY0IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBXVEY6OmJpdENvdW50KHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihiaXRzKSk7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBmaW5kQml0
RmFzdChzaXplX3Qgc3RhcnRJbmRleCwgYm9vbCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChpc0lubGluZSgpKSB7CisgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBzdGFydEluZGV4
OworICAgICAgICAgICAgZmluZEJpdEluV29yZChtX2JpdHNPclBvaW50ZXIsIGluZGV4LCBtYXhJ
bmxpbmVCaXRzKCksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogYml0cyA9IG91dE9mTGlu
ZUJpdHMoKTsKKyAgICAgICAgCisgICAgICAgIC8vIHZhbHVlID0gdHJ1ZTogY2FzdHMgdG8gMSwg
dGhlbiB4b3JzIHRvIDAsIHRoZW4gbmVnYXRlcyB0byAwLgorICAgICAgICAvLyB2YWx1ZSA9IGZh
bHNlOiBjYXN0cyB0byAwLCB0aGVuIHhvcnMgdG8gMSwgdGhlbiBuZWdhdGVzIHRvIC0xIChpLmUu
IGFsbCBvbmUgYml0cykuCisgICAgICAgIHVpbnRwdHJfdCBza2lwVmFsdWUgPSAtKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4odmFsdWUpIF4gMSk7CisgICAgICAgIHNpemVfdCBudW1Xb3JkcyA9IGJp
dHMtPm51bVdvcmRzKCk7CisgICAgICAgIAorICAgICAgICBzaXplX3Qgd29yZEluZGV4ID0gc3Rh
cnRJbmRleCAvIGJpdHNJblBvaW50ZXIoKTsKKyAgICAgICAgc2l6ZV90IHN0YXJ0SW5kZXhJbldv
cmQgPSBzdGFydEluZGV4IC0gd29yZEluZGV4ICogYml0c0luUG9pbnRlcigpOworICAgICAgICAK
KyAgICAgICAgd2hpbGUgKHdvcmRJbmRleCA8IG51bVdvcmRzKSB7CisgICAgICAgICAgICB1aW50
cHRyX3Qgd29yZCA9IGJpdHMtPmJpdHMoKVt3b3JkSW5kZXhdOworICAgICAgICAgICAgaWYgKHdv
cmQgIT0gc2tpcFZhbHVlKSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gc3RhcnRJ
bmRleEluV29yZDsKKyAgICAgICAgICAgICAgICBpZiAoZmluZEJpdEluV29yZCh3b3JkLCBpbmRl
eCwgYml0c0luUG9pbnRlcigpLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3
b3JkSW5kZXggKiBiaXRzSW5Qb2ludGVyKCkgKyBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgd29yZEluZGV4Kys7CisgICAgICAgICAgICBzdGFydEluZGV4
SW5Xb3JkID0gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGJpdHMtPm51
bUJpdHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGZpbmRCaXRTaW1wbGUoc2l6ZV90IGlu
ZGV4LCBib29sIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgc2l6
ZSgpKSB7CisgICAgICAgICAgICBpZiAoZ2V0KGluZGV4KSA9PSB2YWx1ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBzaXplKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGZpbmRCaXRJ
bldvcmQodWludHB0cl90IHdvcmQsIHNpemVfdCYgaW5kZXgsIHNpemVfdCBlbmRJbmRleCwgYm9v
bCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHdvcmQgPj49IGluZGV4OworICAgICAgICAKKyAgICAg
ICAgd2hpbGUgKGluZGV4IDwgZW5kSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICgod29yZCAmIDEp
ID09IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHdvcmQgPj49IDE7Cisg
ICAgICAgIH0KKworICAgICAgICBpbmRleCA9IGVuZEluZGV4OworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAogICAgIGNsYXNzIE91dE9mTGluZUJpdHMgewogICAgIHB1YmxpYzoK
ICAgICAgICAgc2l6ZV90IG51bUJpdHMoKSBjb25zdCB7IHJldHVybiBtX251bUJpdHM7IH0KQEAg
LTMyNCw2ICszOTYsOCBAQCBwcml2YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3Qg
Yml0Q291bnRTbG93KCkgY29uc3Q7CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
ZXF1YWxzU2xvd0Nhc2UoY29uc3QgQml0VmVjdG9yJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBl
cXVhbHNTbG93Q2FzZUZhc3QoY29uc3QgQml0VmVjdG9yJiBvdGhlcikgY29uc3Q7CisgICAgYm9v
bCBlcXVhbHNTbG93Q2FzZVNpbXBsZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBjb25zdDsKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdWludHB0cl90IGhhc2hTbG93Q2FzZSgpIGNvbnN0OwogICAg
IAogICAgIHVpbnRwdHJfdCogYml0cygpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgJKHJldmlzaW9uIDE3MzE4
MSkKKysrIFNvdXJjZS9XVEYvd3RmL1NwZWN0cnVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3
ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2
b2lkIHJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBtX21h
cC5yZW1vdmVJZihbZnVuY3Rvcl0gKHR5cGVuYW1lIEhhc2hNYXA8VCwgQ291bnRlclR5cGU+OjpL
ZXlWYWx1ZVBhaXJUeXBlJiBwYWlyKSB7CisgICAgICAgIG1fbWFwLnJlbW92ZUlmKFsmZnVuY3Rv
cl0gKHR5cGVuYW1lIEhhc2hNYXA8VCwgQ291bnRlclR5cGU+OjpLZXlWYWx1ZVBhaXJUeXBlJiBw
YWlyKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0b3IoS2V5QW5kQ291bnQocGFpci5r
ZXksIHBhaXIudmFsdWUpKTsKICAgICAgICAgICAgIH0pOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237595</attachid>
            <date>2014-09-03 15:56:24 -0700</date>
            <delta_ts>2014-09-03 19:44:00 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29718</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMjMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBA
CisyMDE0LTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBV
UkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEVkZ2VQ
cm9maWxlOjp3b3J0aERlc3BlY2lmeWluZyk6CisgICAgICAgIChKU0M6OkNhbGxFZGdlUHJvZmls
ZTo6dmlzaXRXZWFrKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAgICAq
IGRmZy9ERkdCbG9ja1NldC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrU2V0
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQmxvY2tTZXQuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpCbG9ja1NldDo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9j
a1NldDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrU2V0
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tTZXQ6Oml0
ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6SXRlcmFi
bGU6Okl0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6SXRlcmFibGU6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6SXRlcmFibGU6OmVuZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QmxvY2tTZXQ6Oml0ZXJhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpC
bG9ja0FkZGVyOjpCbG9ja0FkZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja0FkZGVyOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKiBkZmcvREZHQmxvY2tTZXRJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpERkc6OkJsb2NrU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKiBkZmcvREZHRG9taW5hdG9ycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9y
czo6c3RyaWN0RG9taW5hdG9yc09mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpk
b21pbmF0b3JzT2YpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmJsb2Nrc1N0cmlj
dGx5RG9taW5hdGVkQnkpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmJsb2Nrc0Rv
bWluYXRlZEJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpkb21pbmFuY2VGcm9u
dGllck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjppdGVyYXRlZERvbWluYW5j
ZUZyb250aWVyT2YpOgorICAgICAgICAqIGRmZy9ERkdEb21pbmF0b3JzLmg6CisgICAgICAgIChK
U0M6OkRGRzo6RG9taW5hdG9yczo6Zm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKToKKyAgICAgICAg
KEpTQzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxEb21pbmF0b3JzT2YpOgorICAgICAgICAoSlND
OjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkpOgorICAg
ICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0RvbWluYXRlZEJ5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250
aWVyT2YpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0luSXRl
cmF0ZWREb21pbmFuY2VGcm9udGllck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3Jz
Ojpmb3JBbGxCbG9ja3NJbkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKToKKyAgICAgICAgKEpTQzo6
REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJP
ZkltcGwpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgICogZGZnL0RGR0ludmFsaWRhdGlvblBv
aW50SW5qZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkludmFsaWRhdGlvblBv
aW50SW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisK
IDIwMTQtMDktMDMgIEJhbGF6cyBLaWx2YWR5ICA8a2lsdmFkeWJAaG9tZWppbm5pLmNvbT4KIAog
ICAgICAgICBbTUlQU10gV3JvbmcgcmVnaXN0ZXIgdXNhZ2UgaW4gTExJbnQgb3BfY2F0Y2guCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTczMjI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTQ4MSw2ICs0ODEsOCBAQAogCQkwRkJFMEY3NTE2QzFEQjBC
MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJFMEY2RTE2QzFEQjAxMDA4MkM1RTgg
LyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZCRTBGNkYxNkMxREIwMTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhh
c2UuY3BwICovOyB9OwogCQkwRkJFMEY3NzE2QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCRTBGNzAxNkMxREIwMTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkJGMTU4QzE5QjdB
NTMxMDA2OTVERDAgLyogREZHQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCRjE1OEExOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2Nr
U2V0LmNwcCAqLzsgfTsKKwkJMEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCRjE1OEIxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkZERDA0MTk2Qzky
QkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkZERDAyMTk2QzkyQkYwMDdBNUJGQSAv
KiBERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcCAqLzsgfTsKIAkJMEZCRkREMDUxOTZDOTJCRjAw
N0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQ
aGFudG9tUmVtb3ZhbFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzY4MTQ2
OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0MDYsNiArMjQwOCw4IEBACiAJCTBGQkUwRjZFMTZD
MURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmg7IHBh
dGggPSBkZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VuaWZpY2F0
aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJFMEY3MDE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5p
ZmljYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdVbmlm
aWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkJGMTU4QTE5QjdBNTMxMDA2OTVERDAgLyogREZHQmxv
Y2tTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmxvY2tT
ZXQuY3BwOyBwYXRoID0gZGZnL0RGR0Jsb2NrU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCRjE1OEIxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCbG9ja1NldElubGluZXMuaDsg
cGF0aCA9IGRmZy9ERkdCbG9ja1NldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZCRkREMDIxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUGhhbnRvbVJlbW92
YWxQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQ
aGFudG9tUmVtb3ZhbFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1BoYW50b21SZW1vdmFsUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0
MiAvKiBERkdPU1JFeGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09T
UkV4aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00ODI3LDcgKzQ4MzEsOSBAQAogCQkJCUE3RDg5Q0U1MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCbG9ja0luc2VydGlvblNldC5oICovLAogCQkJCTBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcy
QSAvKiBERkdCbG9ja01hcC5oICovLAogCQkJCTBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja01hcElubGluZXMuaCAqLywKKwkJCQkwRkJGMTU4QTE5QjdBNTMxMDA2OTVERDAgLyog
REZHQmxvY2tTZXQuY3BwICovLAogCQkJCTBGQzNDQ0Y3MTlBREE0MTAwMDZBQzcyQSAvKiBERkdC
bG9ja1NldC5oICovLAorCQkJCTBGQkYxNThCMTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1Nl
dElubGluZXMuaCAqLywKIAkJCQkwRkMzQ0NGODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tX
b3JrbGlzdC5jcHAgKi8sCiAJCQkJMEZDM0NDRjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
V29ya2xpc3QuaCAqLywKIAkJCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNo
RGlyZWN0aW9uLmggKi8sCkBAIC01OTIxLDYgKzU5MjcsNyBAQAogCQkJCTBGRDNDODI4MTQxMTVE
NEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZDMTRE
RjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NjE3
QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURvbWluYXRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc5ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VVc2VzU3RydWN0
dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZH
RXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc1MTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzQxNiw2ICs3NDIz
LDcgQEAKIAkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUNBMTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXpl
TExWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQgLyog
SW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZCRjE1OEMxOUI3QTUzMTAw
Njk1REQwIC8qIERGR0Jsb2NrU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1
QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTEzRTVDQTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE3MzIyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNiArMTg2
LDggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CiB9OwogCit0eXBl
ZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgNT4gQmxvY2tMaXN0OworCiBzdHJ1Y3QgVW5saW5rZWRC
bG9jayB7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBib29sIG1fbmVlZHNOb3JtYWxM
aW5raW5nOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdCbG9ja1NldC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordm9pZCBCbG9ja1NldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOworICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbV9zZXQuZmluZEJpdCgwLCB0cnVlKTsgYmxvY2tJbmRleCA8IG1fc2V0
LnNpemUoKTsgYmxvY2tJbmRleCA9IG1fc2V0LmZpbmRCaXQoYmxvY2tJbmRleCArIDEsIHRydWUp
KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICIjIiwgYmxvY2tJbmRleCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCShyZXZpc2lvbiAxNzMyMjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CitjbGFzcyBHcmFwaDsKKwogY2xhc3MgQmxvY2tTZXQgewogcHVibGljOgogICAgIEJsb2NrU2V0
KCkgeyB9CkBAIC00OSwxMCArNTEsOTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zZXQu
Z2V0KGJsb2NrLT5pbmRleCk7CiAgICAgfQogICAgIAorICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9ncmFwaChudWxs
cHRyKQorICAgICAgICAgICAgLCBtX3NldChudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4
KDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaXRlcmF0b3ImIG9w
ZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gbV9zZXQtPm1fc2V0
LmZpbmRCaXQobV9pbmRleCArIDEsIHRydWUpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKSBjb25z
dDsKKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVy
Lm1faW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBmcmllbmQgY2xhc3MgQmxvY2tTZXQ7CisgICAgICAgIAorICAgICAgICBHcmFwaCog
bV9ncmFwaDsKKyAgICAgICAgY29uc3QgQmxvY2tTZXQqIG1fc2V0OworICAgICAgICBzaXplX3Qg
bV9pbmRleDsKKyAgICB9OworICAgIAorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEl0ZXJhYmxlKEdyYXBoJiBncmFwaCwgY29uc3QgQmxvY2tTZXQmIHNldCkKKyAg
ICAgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0OworICAgICAgICAgICAg
cmVzdWx0Lm1fZ3JhcGggPSAmbV9ncmFwaDsKKyAgICAgICAgICAgIHJlc3VsdC5tX3NldCA9ICZt
X3NldDsKKyAgICAgICAgICAgIHJlc3VsdC5tX2luZGV4ID0gbV9zZXQubV9zZXQuZmluZEJpdCgw
LCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGl0
ZXJhdG9yIHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdC5tX2dyYXBoID0gJm1fZ3JhcGg7Cisg
ICAgICAgICAgICByZXN1bHQubV9zZXQgPSAmbV9zZXQ7CisgICAgICAgICAgICByZXN1bHQubV9p
bmRleCA9IG1fc2V0Lm1fc2V0LnNpemUoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgR3JhcGgmIG1fZ3JhcGg7
CisgICAgICAgIGNvbnN0IEJsb2NrU2V0JiBtX3NldDsKKyAgICB9OworICAgIAorICAgIEl0ZXJh
YmxlIGl0ZXJhYmxlKEdyYXBoJiBncmFwaCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJ
dGVyYWJsZShncmFwaCwgKnRoaXMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAKIHByaXZhdGU6CiAgICAgQml0VmVjdG9yIG1fc2V0OwogfTsK
IAorY2xhc3MgQmxvY2tBZGRlciB7CitwdWJsaWM6CisgICAgQmxvY2tBZGRlcihCbG9ja1NldCYg
c2V0KQorICAgICAgICA6IG1fc2V0KHNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3IoKShCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3NldC5hZGQoYmxvY2spOworICAgIH0KK3ByaXZhdGU6CisgICAgQmxvY2tTZXQmIG1fc2V0
OworfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tTZXRJ
bmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja1Nl
dElubGluZXNfaAorI2RlZmluZSBERkdCbG9ja1NldElubGluZXNfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdCbG9ja1NldC5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworaW5saW5lIEJhc2ljQmxvY2sq
IEJsb2NrU2V0OjppdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9n
cmFwaC0+YmxvY2sobV9pbmRleCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tTZXRJbmxpbmVz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuY3Bw
CShyZXZpc2lvbiAxNzMyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWlu
YXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAwLDQ4IEBAIHZvaWQgRG9taW5h
dG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiAgICAgfQogfQogCitCbG9ja1NldCBEb21pbmF0
b3JzOjpzdHJpY3REb21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8pIGNvbnN0Cit7CisgICAgQmxv
Y2tTZXQgcmVzdWx0OworICAgIGZvckFsbFN0cmljdERvbWluYXRvcnNPZih0bywgQmxvY2tBZGRl
cihyZXN1bHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitCbG9ja1NldCBEb21pbmF0b3Jz
Ojpkb21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8pIGNvbnN0Cit7CisgICAgQmxvY2tTZXQgcmVz
dWx0OworICAgIGZvckFsbERvbWluYXRvcnNPZih0bywgQmxvY2tBZGRlcihyZXN1bHQpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitCbG9ja1NldCBEb21pbmF0b3JzOjpibG9ja3NTdHJpY3Rs
eURvbWluYXRlZEJ5KEJhc2ljQmxvY2sqIGZyb20pIGNvbnN0Cit7CisgICAgQmxvY2tTZXQgcmVz
dWx0OworICAgIGZvckFsbEJsb2Nrc1N0cmljdGx5RG9taW5hdGVkQnkoZnJvbSwgQmxvY2tBZGRl
cihyZXN1bHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitCbG9ja1NldCBEb21pbmF0b3Jz
OjpibG9ja3NEb21pbmF0ZWRCeShCYXNpY0Jsb2NrKiBmcm9tKSBjb25zdAoreworICAgIEJsb2Nr
U2V0IHJlc3VsdDsKKyAgICBmb3JBbGxCbG9ja3NEb21pbmF0ZWRCeShmcm9tLCBCbG9ja0FkZGVy
KHJlc3VsdCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Jsb2NrU2V0IERvbWluYXRvcnM6
OmRvbWluYW5jZUZyb250aWVyT2YoQmFzaWNCbG9jayogZnJvbSkgY29uc3QKK3sKKyAgICBCbG9j
a1NldCByZXN1bHQ7CisgICAgZm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1wbChm
cm9tLCBCbG9ja0FkZGVyKHJlc3VsdCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Jsb2Nr
U2V0IERvbWluYXRvcnM6Oml0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZihjb25zdCBCbG9ja0xp
c3QmIGZyb20pIGNvbnN0Cit7CisgICAgQmxvY2tTZXQgcmVzdWx0OworICAgIGZvckFsbEJsb2Nr
c0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mSW1wbChmcm9tLCBCbG9ja0FkZGVyKHJlc3Vs
dCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIGJvb2wgRG9taW5hdG9yczo6bmFpdmVEb21p
bmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CiB7CiAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA9IHRvOyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmlk
b21QYXJlbnQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9y
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9y
cy5oCShyZXZpc2lvbiAxNzMyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
bWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgIkRG
R0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Js
b2NrTWFwLmgiCisjaW5jbHVkZSAiREZHQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdDb21tb24u
aCIKLSNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKQEAgLTU3LDExICs1NywxMTYgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gZnJvbSA9PSB0byB8fCBzdHJpY3RseURvbWluYXRlcyhmcm9tLCB0byk7CiAgICAgfQogICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxTdHJpY3RE
b21pbmF0b3JzT2YoQmFzaWNCbG9jayogdG8sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0
CisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrID0gbV9kYXRhW3RvXS5pZG9t
UGFyZW50OyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQpCisgICAgICAg
ICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbERvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bywgY29u
c3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgPSB0bzsgYmxvY2s7IGJsb2NrID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50KQor
ICAgICAgICAgICAgZnVuY3RvcihibG9jayk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NTdHJpY3RseURvbWluYXRlZEJ5
KEJhc2ljQmxvY2sqIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgewor
ICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xp
c3QuYXBwZW5kVmVjdG9yKG1fZGF0YVtmcm9tXS5pZG9tS2lkcyk7CisgICAgICAgIHdoaWxlICgh
d29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdv
cmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAg
ICAgIHdvcmtsaXN0LmFwcGVuZFZlY3RvcihtX2RhdGFbYmxvY2tdLmlkb21LaWRzKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgZm9yQWxsQmxvY2tzRG9taW5hdGVkQnkoQmFzaWNCbG9jayogZnJvbSwgY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+
IHdvcmtsaXN0OworICAgICAgICB3b3JrbGlzdC5hcHBlbmQoZnJvbSk7CisgICAgICAgIHdoaWxl
ICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAg
ICAgICAgIHdvcmtsaXN0LmFwcGVuZFZlY3RvcihtX2RhdGFbYmxvY2tdLmlkb21LaWRzKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBCbG9ja1NldCBzdHJpY3REb21pbmF0b3JzT2YoQmFz
aWNCbG9jayogdG8pIGNvbnN0OworICAgIEJsb2NrU2V0IGRvbWluYXRvcnNPZihCYXNpY0Jsb2Nr
KiB0bykgY29uc3Q7CisgICAgQmxvY2tTZXQgYmxvY2tzU3RyaWN0bHlEb21pbmF0ZWRCeShCYXNp
Y0Jsb2NrKiBmcm9tKSBjb25zdDsKKyAgICBCbG9ja1NldCBibG9ja3NEb21pbmF0ZWRCeShCYXNp
Y0Jsb2NrKiBmcm9tKSBjb25zdDsKKyAgICAKKyAgICAvLyBWaXNpdHMgYWxsIGJsb2NrcyBpbiB0
aGUgZG9taW5hbmNlIGZyb250aWVyIG9mIHRoZSBnaXZlbiBibG9jay4gVGhpcyBvZnRlbgorICAg
IC8vIHZpc2l0cyB0aGUgc2FtZSBibG9jayBtdWx0aXBsZSB0aW1lcywgc28gaXQncyB1cCB0byB0
aGUgY2FsbGJhY2sgdG8gcHJ1bmUKKyAgICAvLyBhY2NvcmRpbmdseS4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGll
ck9mKAorICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBj
b25zdAorICAgIHsKKyAgICAgICAgQmxvY2tTZXQgc2V0OworICAgICAgICBmb3JBbGxCbG9ja3NJ
bkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAgICAgICAgZnJvbSwKKyAgICAgICAgICAg
IFsmXSAoQmFzaWNCbG9jayogYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAoc2V0LmFkZChi
bG9jaykpCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOworICAgICAgICAgICAg
fSk7CisgICAgfQorICAgIAorICAgIEJsb2NrU2V0IGRvbWluYW5jZUZyb250aWVyT2YoQmFzaWNC
bG9jayogZnJvbSkgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKAorICAg
ICAgICBjb25zdCBCbG9ja0xpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBCbG9ja1NldCBzZXQ7CisgICAgICAgIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWRE
b21pbmFuY2VGcm9udGllck9mSW1wbCgKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBb
Jl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNl
dC5hZGQoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgZnVuY3RvcihibG9jayk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgQmxvY2tTZXQgaXRlcmF0ZWREb21pbmFu
Y2VGcm9udGllck9mKGNvbnN0IEJsb2NrTGlzdCYgZnJvbSkgY29uc3Q7CisgICAgCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogICAgIGJvb2wgbmFp
dmVEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0OwogICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJ
bkRvbWluYW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yQWxsQmxvY2tzU3Ry
aWN0bHlEb21pbmF0ZWRCeShmcm9tLCBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNz
b3JzKCk7IHN1Y2Nlc3NvckluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHRvID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghZG9taW5hdGVzKGZyb20sIHRvKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0b3IodG8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxv
Y2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKAorICAgICAgICBjb25zdCBCbG9j
a0xpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAg
ICBCbG9ja0xpc3Qgd29ya2xpc3QgPSBmcm9tOworICAgICAgICB3aGlsZSAoIXdvcmtsaXN0Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtl
TGFzdCgpOworICAgICAgICAgICAgZm9yQWxsQmxvY2tzSW5Eb21pbmFuY2VGcm9udGllck9mSW1w
bChibG9jaywgWyZdIChCYXNpY0Jsb2NrKiBvdGhlckJsb2NrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChmdW5jdG9yKG90aGVyQmxvY2spKQorICAgICAgICAgICAgICAgICAgICAgICAgd29y
a2xpc3QuYXBwZW5kKG90aGVyQmxvY2spOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9
CisgICAgfQorICAgIAogICAgIHN0cnVjdCBCbG9ja0RhdGEgewogICAgICAgICBCbG9ja0RhdGEo
KQogICAgICAgICAgICAgOiBpZG9tUGFyZW50KG51bGxwdHIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTczMjI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSwyNCArMzY5
LDEwIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKICAgICAgICAg
b3V0LnByaW50KCIgIiwgKmJsb2NrLT5wcmVkZWNlc3NvcnNbaV0pOwogICAgIG91dC5wcmludCgi
XG4iKTsKICAgICBpZiAobV9kb21pbmF0b3JzLmlzVmFsaWQoKSkgewotICAgICAgICBvdXQucHJp
bnQocHJlZml4LCAiICBEb21pbmF0ZWQgYnk6Iik7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghdGhpcy0+Ymxv
Y2soaSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIW1fZG9t
aW5hdG9ycy5kb21pbmF0ZXModGhpcy0+YmxvY2soaSksIGJsb2NrKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBpKTsKLSAgICAgICAgfQot
ICAgICAgICBvdXQucHJpbnQoIlxuIik7Ci0gICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERv
bWluYXRlczoiKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCF0aGlzLT5ibG9jayhpKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhi
bG9jaywgdGhpcy0+YmxvY2soaSkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgb3V0LnByaW50KCIgIyIsIGkpOwotICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgi
XG4iKTsKKyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiAiLCBtX2Rv
bWluYXRvcnMuZG9taW5hdG9yc09mKGJsb2NrKSwgIlxuIik7CisgICAgICAgIG91dC5wcmludChw
cmVmaXgsICIgIERvbWluYXRlczogIiwgbV9kb21pbmF0b3JzLmJsb2Nrc0RvbWluYXRlZEJ5KGJs
b2NrKSwgIlxuIik7CisgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYW5jZSBGcm9u
dGllcjogIiwgbV9kb21pbmF0b3JzLmRvbWluYW5jZUZyb250aWVyT2YoYmxvY2spLCAiXG4iKTsK
KyAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgSXRlcmF0ZWQgRG9taW5hbmNlIEZyb250aWVy
OiAiLCBtX2RvbWluYXRvcnMuaXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKEJsb2NrTGlzdCgx
LCBibG9jaykpLCAiXG4iKTsKICAgICB9CiAgICAgaWYgKG1fbmF0dXJhbExvb3BzLmlzVmFsaWQo
KSkgewogICAgICAgICBpZiAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX25hdHVyYWxMb29w
cy5oZWFkZXJPZihibG9jaykpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTczMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZh
bGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJERkdCbG9ja1NldC5oIgor
I2luY2x1ZGUgIkRGR0Jsb2NrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUu
aCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgpA
QCAtNjksMTMgKzY5LDggQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CiAKLSAgICAgICAgICAgIGlmICghYmxvY2tzVGhhdE5lZWRJbnZhbGlkYXRp
b25Qb2ludHMuY29udGFpbnMoYmxvY2spKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3NUaGF0TmVl
ZEludmFsaWRhdGlvblBvaW50cy5pdGVyYWJsZShtX2dyYXBoKSkgewogICAgICAgICAgICAgaW5z
ZXJ0SW52YWxpZGF0aW9uQ2hlY2soMCwgYmxvY2stPmF0KDApKTsKICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9CaXRWZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5j
cHAJKHJldmlzaW9uIDE3MzIyNikKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsNTAgQEAgc2l6ZV90IEJpdFZlY3Rvcjo6Yml0Q291
bnRTbG93KCkgY29uc3QKIAogYm9vbCBCaXRWZWN0b3I6OmVxdWFsc1Nsb3dDYXNlKGNvbnN0IEJp
dFZlY3RvciYgb3RoZXIpIGNvbnN0CiB7CisgICAgYm9vbCByZXN1bHQgPSBlcXVhbHNTbG93Q2Fz
ZUZhc3Qob3RoZXIpOworICAgIEFTU0VSVChyZXN1bHQgPT0gZXF1YWxzU2xvd0Nhc2VTaW1wbGUo
b3RoZXIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEJpdFZlY3Rvcjo6ZXF1YWxz
U2xvd0Nhc2VGYXN0KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGlz
SW5saW5lKCkgIT0gb3RoZXIuaXNJbmxpbmUoKSkKKyAgICAgICAgcmV0dXJuIGVxdWFsc1Nsb3dD
YXNlU2ltcGxlKG90aGVyKTsKKyAgICAKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBteUJpdHMg
PSBvdXRPZkxpbmVCaXRzKCk7CisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogb3RoZXJCaXRzID0g
b3RoZXIub3V0T2ZMaW5lQml0cygpOworICAgIAorICAgIHNpemVfdCBteU51bVdvcmRzID0gbXlC
aXRzLT5udW1Xb3JkcygpOworICAgIHNpemVfdCBvdGhlck51bVdvcmRzID0gb3RoZXJCaXRzLT5u
dW1Xb3JkcygpOworICAgIHNpemVfdCBtaW5OdW1Xb3JkczsKKyAgICBzaXplX3QgbWF4TnVtV29y
ZHM7CisgICAgCisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogbG9uZ2VyQml0czsKKyAgICBpZiAo
bXlOdW1Xb3JkcyA8IG90aGVyTnVtV29yZHMpIHsKKyAgICAgICAgbWluTnVtV29yZHMgPSBteU51
bVdvcmRzOworICAgICAgICBtYXhOdW1Xb3JkcyA9IG90aGVyTnVtV29yZHM7CisgICAgICAgIGxv
bmdlckJpdHMgPSBvdGhlckJpdHM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWluTnVtV29yZHMg
PSBvdGhlck51bVdvcmRzOworICAgICAgICBtYXhOdW1Xb3JkcyA9IG15TnVtV29yZHM7CisgICAg
ICAgIGxvbmdlckJpdHMgPSBteUJpdHM7CisgICAgfQorICAgIAorICAgIGZvciAoc2l6ZV90IGkg
PSBtaW5OdW1Xb3JkczsgaSA8IG1heE51bVdvcmRzOyArK2kpIHsKKyAgICAgICAgaWYgKGxvbmdl
ckJpdHMtPmJpdHMoKVtpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgZm9yIChzaXplX3QgaSA9IG1pbk51bVdvcmRzOyBpLS07KSB7CisgICAgICAgIGlmICht
eUJpdHMtPmJpdHMoKVtpXSAhPSBvdGhlckJpdHMtPmJpdHMoKVtpXSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQml0VmVj
dG9yOjplcXVhbHNTbG93Q2FzZVNpbXBsZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBjb25zdAor
ewogICAgIC8vIFRoaXMgaXMgcmVhbGx5IGNoZWVzeSwgYnV0IHByb2JhYmx5IGdvb2QgZW5vdWdo
IGZvciBub3cuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptYXgoc2l6ZSgpLCBvdGhlci5z
aXplKCkpOyBpLS07KSB7CiAgICAgICAgIGlmIChnZXQoaSkgIT0gb3RoZXIuZ2V0KGkpKQpJbmRl
eDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDE3MzIyNikKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZl
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxzdGRpby5o
PgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRz
Lmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBAIC0yMTUsNiArMjE2LDE5IEBAIHB1
YmxpYzogCiAgICAgICAgIHJldHVybiBiaXRDb3VudFNsb3coKTsKICAgICB9CiAgICAgCisgICAg
c2l6ZV90IGZpbmRCaXQoc2l6ZV90IGluZGV4LCBib29sIHZhbHVlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc2l6ZV90IHJlc3VsdCA9IGZpbmRCaXRGYXN0KGluZGV4LCB2YWx1ZSk7CisgICAgICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzaXplX3QgZXhwZWN0ZWRSZXN1
bHQgPSBmaW5kQml0U2ltcGxlKGluZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0
ICE9IGV4cGVjdGVkUmVzdWx0KSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiZmluZEJpdCgi
LCBpbmRleCwgIiwgIiwgdmFsdWUsICIpIG9uICIsICp0aGlzLCAiIHNob3VsZCBoYXZlIGdvdHRl
biAiLCBleHBlY3RlZFJlc3VsdCwgIiBidXQgZ290ICIsIHJlc3VsdCwgIlxuIik7CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKICAgICBlbnVtIEVt
cHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CkBAIC0yODksNiArMzAzLDY0IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiBXVEY6OmJpdENvdW50KHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXRz
KSk7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBmaW5kQml0RmFzdChzaXplX3Qgc3RhcnRJbmRl
eCwgYm9vbCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZSgpKSB7Cisg
ICAgICAgICAgICBzaXplX3QgaW5kZXggPSBzdGFydEluZGV4OworICAgICAgICAgICAgZmluZEJp
dEluV29yZChtX2JpdHNPclBvaW50ZXIsIGluZGV4LCBtYXhJbmxpbmVCaXRzKCksIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Y29uc3QgT3V0T2ZMaW5lQml0cyogYml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIHZhbHVlID0gdHJ1ZTogY2FzdHMgdG8gMSwgdGhlbiB4b3JzIHRvIDAsIHRoZW4g
bmVnYXRlcyB0byAwLgorICAgICAgICAvLyB2YWx1ZSA9IGZhbHNlOiBjYXN0cyB0byAwLCB0aGVu
IHhvcnMgdG8gMSwgdGhlbiBuZWdhdGVzIHRvIC0xIChpLmUuIGFsbCBvbmUgYml0cykuCisgICAg
ICAgIHVpbnRwdHJfdCBza2lwVmFsdWUgPSAtKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odmFsdWUp
IF4gMSk7CisgICAgICAgIHNpemVfdCBudW1Xb3JkcyA9IGJpdHMtPm51bVdvcmRzKCk7CisgICAg
ICAgIAorICAgICAgICBzaXplX3Qgd29yZEluZGV4ID0gc3RhcnRJbmRleCAvIGJpdHNJblBvaW50
ZXIoKTsKKyAgICAgICAgc2l6ZV90IHN0YXJ0SW5kZXhJbldvcmQgPSBzdGFydEluZGV4IC0gd29y
ZEluZGV4ICogYml0c0luUG9pbnRlcigpOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKHdvcmRJ
bmRleCA8IG51bVdvcmRzKSB7CisgICAgICAgICAgICB1aW50cHRyX3Qgd29yZCA9IGJpdHMtPmJp
dHMoKVt3b3JkSW5kZXhdOworICAgICAgICAgICAgaWYgKHdvcmQgIT0gc2tpcFZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gc3RhcnRJbmRleEluV29yZDsKKyAgICAgICAg
ICAgICAgICBpZiAoZmluZEJpdEluV29yZCh3b3JkLCBpbmRleCwgYml0c0luUG9pbnRlcigpLCB2
YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JkSW5kZXggKiBiaXRzSW5Qb2lu
dGVyKCkgKyBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
d29yZEluZGV4Kys7CisgICAgICAgICAgICBzdGFydEluZGV4SW5Xb3JkID0gMDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGJpdHMtPm51bUJpdHMoKTsKKyAgICB9CisgICAg
CisgICAgc2l6ZV90IGZpbmRCaXRTaW1wbGUoc2l6ZV90IGluZGV4LCBib29sIHZhbHVlKSBjb25z
dAorICAgIHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgc2l6ZSgpKSB7CisgICAgICAgICAgICBp
ZiAoZ2V0KGluZGV4KSA9PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Cisg
ICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzaXplKCk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGZpbmRCaXRJbldvcmQodWludHB0cl90IHdvcmQs
IHNpemVfdCYgaW5kZXgsIHNpemVfdCBlbmRJbmRleCwgYm9vbCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHdvcmQgPj49IGluZGV4OworICAgICAgICAKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgZW5k
SW5kZXgpIHsKKyAgICAgICAgICAgIGlmICgod29yZCAmIDEpID09IHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4odmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
aW5kZXgrKzsKKyAgICAgICAgICAgIHdvcmQgPj49IDE7CisgICAgICAgIH0KKworICAgICAgICBp
bmRleCA9IGVuZEluZGV4OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAogICAg
IGNsYXNzIE91dE9mTGluZUJpdHMgewogICAgIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG51bUJp
dHMoKSBjb25zdCB7IHJldHVybiBtX251bUJpdHM7IH0KQEAgLTMyNCw2ICszOTYsOCBAQCBwcml2
YXRlOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgYml0Q291bnRTbG93KCkgY29uc3Q7
CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZXF1YWxzU2xvd0Nhc2UoY29uc3Qg
Qml0VmVjdG9yJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBlcXVhbHNTbG93Q2FzZUZhc3QoY29u
c3QgQml0VmVjdG9yJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBlcXVhbHNTbG93Q2FzZVNpbXBs
ZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dWludHB0cl90IGhhc2hTbG93Q2FzZSgpIGNvbnN0OwogICAgIAogICAgIHVpbnRwdHJfdCogYml0
cygpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TcGVjdHJ1bS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1NwZWN0cnVtLmgJKHJldmlzaW9uIDE3MzIyNikKKysrIFNvdXJjZS9XVEYvd3Rm
L1NwZWN0cnVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHJlbW92ZUlmKGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBtX21hcC5yZW1vdmVJZihbZnVuY3Rvcl0g
KHR5cGVuYW1lIEhhc2hNYXA8VCwgQ291bnRlclR5cGU+OjpLZXlWYWx1ZVBhaXJUeXBlJiBwYWly
KSB7CisgICAgICAgIG1fbWFwLnJlbW92ZUlmKFsmZnVuY3Rvcl0gKHR5cGVuYW1lIEhhc2hNYXA8
VCwgQ291bnRlclR5cGU+OjpLZXlWYWx1ZVBhaXJUeXBlJiBwYWlyKSB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0b3IoS2V5QW5kQ291bnQocGFpci5rZXksIHBhaXIudmFsdWUpKTsKICAg
ICAgICAgICAgIH0pOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237725</attachid>
            <date>2014-09-05 17:10:17 -0700</date>
            <delta_ts>2014-09-06 12:10:58 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>5696</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCShyZXZpc2lv
biAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
ZnJvbSA9PSB0byB8fCBzdHJpY3RseURvbWluYXRlcyhmcm9tLCB0byk7CiAgICAgfQogICAgIAor
ICAgIEJhc2ljQmxvY2sqIGltbWVkaWF0ZURvbWluYXRvck9mKEJhc2ljQmxvY2sqIGJsb2NrKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVtibG9ja10uaWRvbVBhcmVudDsKKyAg
ICB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckFs
bFN0cmljdERvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bywgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNh
bGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ2FsY3VsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHU1NB
Q2FsY3VsYXRvcl9oCisjZGVmaW5lIERGR1NTQUNhbGN1bGF0b3JfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdEb21pbmF0b3IuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFNTQUNhbGN1bGF0
b3IgeworcHVibGljOgorICAgIFNTQUNhbGN1bGF0b3IoR3JhcGgmIGdyYXBoKQorICAgICAgICA6
IG1fZ3JhcGgoZ3JhcGgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBjbGFzcyBWYXJpYWJsZSB7
CisgICAgcHVibGljOgorICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXg7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmFyaWFibGUoKQorICAg
ICAgICAgICAgOiBtX2luZGV4KFVJTlRfTUFYKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIFZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCbG9ja0xpc3QgbV9i
bG9ja3NXaXRoRGVmczsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworICAgIAor
ICAgIGNsYXNzIERlZiB7CisgICAgcHVibGljOgorICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUo
KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpc1Vu
Y3JlYXRlZFBoaSgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgICAgIAorICAgICAg
ICBOb2RlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgdm9pZCBz
ZXRWYWx1ZShOb2RlKiBub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaXNVbmNy
ZWF0ZWRQaGkoKSk7CisgICAgICAgICAgICBtX3ZhbHVlID0gbm9kZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBEZWYoKQorICAgICAgICAgICAgOiBtX3Zhcmlh
YmxlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgICAg
ICwgbV92YWx1ZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIERlZihWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiB2YWx1
ZSkKKyAgICAgICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJsZSkKKyAgICAgICAgICAgICwgbV9i
bG9jayhibG9jaykKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZSogbV92YXJpYWJsZTsKKyAgICAgICAg
QmFzaWNCbG9jayogbV9ibG9jazsKKyAgICAgICAgTm9kZSogbV92YWx1ZTsKKyAgICB9OworICAg
IAorICAgIFZhcmlhYmxlKiBuZXdWYXJpYWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV92
YXJpYWJsZXMuYWxsb2MobV92YXJpYWJsZXMuc2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgRGVm
KiBuZXdEZWYoVmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogdmFs
dWUpCisgICAgeworICAgICAgICBEZWYqIGRlZiA9IG1fZGVmcy5hZGQodmFyaWFibGUsIGJsb2Nr
LCB2YWx1ZSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9kYXRhW2Jsb2NrXS5hZGQodmFyaWFi
bGUsIGRlZik7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIHZh
cmlhYmxlLT5tX2Jsb2Nrc1dpdGhEZWZzLmFwcGVuZChibG9jayk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBkZWY7CisgICAgICAgIHJldHVybiBk
ZWY7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcHV0ZVBoaXMoKTsKKyAgICAKKyAgICBWZWN0
b3I8RGVmKj4mIHBoaXNGb3IoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1
cm4gbV9kYXRhW2Jsb2NrXS5tX3BoaXM7CisgICAgfQorICAgIAorICAgIC8vIElnbm9yZXMgZGVm
cyB3aXRoaW4gdGhlIGdpdmVuIGJsb2NrOyBpdCBhc3N1bWVzIHRoYXQgeW91J3ZlIHRha2VuIGNh
cmUgb2YgdGhvc2UKKyAgICAvLyB5b3Vyc2VsZi4KKyAgICBEZWYqIHJlYWNoaW5nRGVmKEJhc2lj
QmxvY2sqIGJsb2NrLCBWYXJpYWJsZSogdmFyaWFibGUpCisgICAgeworICAgICAgICBmb3IgKGJs
b2NrID0gbV9ncmFwaC5tX2RvbWluYXRvcnMuaW1tZWRpYXRlRG9taW5hdG9yT2YoYmxvY2spOyBi
bG9jazsgYmxvY2sgPSBtX2dyYXBoLm1fZG9taW5hdG9ycy5pbW1lZGlhdGVEb21pbmF0b3JPZihi
bG9jaykpIHsKKyAgICAgICAgICAgIGlmIChEZWYqIGRlZiA9IG1fZGF0YVtibG9ja10ubV9kZWZz
W3ZhcmlhYmxlXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgU2VnbWVudGVk
VmVjdG9yPFZhcmlhYmxlPiBtX3ZhcmlhYmxlczsKKyAgICBCYWc8RGVmPiBtX2RlZnM7CisgICAg
CisgICAgQmFnPERlZj4gbV9waGlzOworICAgIAorICAgIHN0cnVjdCBCbG9ja0RhdGEgeworICAg
ICAgICBIYXNoTWFwPFZhcmlhYmxlKiwgRGVmKj4gbV9kZWZzOworICAgICAgICBWZWN0b3I8RGVm
Kj4gbV9waGlzOworICAgIH07CisgICAgICAgICAgICAKKyAgICBCbG9ja01hcDxCbG9ja0RhdGE+
IG1fZGF0YTsKKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
U1NBQ2FsY3VsYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NlZ21lbnRlZFZlY3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NlZ21lbnRlZFZlY3Rvci5oCShyZXZpc2lv
biAxNzMzMzcpCisrKyBTb3VyY2UvV1RGL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMTU3LDkgKzE1NywxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHNl
Z21lbnRGb3IobV9zaXplIC0gMSktPnVuY2hlY2tlZEFwcGVuZChzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKICAgICAgICAgfQogCi0gICAgICAgIFQmIGFsbG9jKCkKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgVCYgYWxsb2MoQXJncy4uLiBhcmdzKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBhcHBlbmQ8VD4oVCgpKTsKKyAgICAgICAgICAgIGFwcGVuZDxUPihU
KGFyZ3MuLi4pKTsKICAgICAgICAgICAgIHJldHVybiBsYXN0KCk7CiAgICAgICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237741</attachid>
            <date>2014-09-06 12:10:58 -0700</date>
            <delta_ts>2014-09-06 13:59:43 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>12456</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCShyZXZpc2lv
biAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
ZnJvbSA9PSB0byB8fCBzdHJpY3RseURvbWluYXRlcyhmcm9tLCB0byk7CiAgICAgfQogICAgIAor
ICAgIEJhc2ljQmxvY2sqIGltbWVkaWF0ZURvbWluYXRvck9mKEJhc2ljQmxvY2sqIGJsb2NrKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVtibG9ja10uaWRvbVBhcmVudDsKKyAg
ICB9CisgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIGZvckFs
bFN0cmljdERvbWluYXRvcnNPZihCYXNpY0Jsb2NrKiB0bywgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikgY29uc3QKICAgICB7CkBAIC0xMTksMTQgKzEyNCwyOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
b3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKICAgICAgICAgY29uc3Qg
QmxvY2tMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKKyAgICAgICAg
Zm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAg
ICAgICBmcm9tLAorICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaykgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgZnVuY3RvcihibG9jayk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBpcyBhIGNs
b3NlIHJlbGF0aXZlIG9mIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9m
KCksIHdoaWNoIGFsbG93cyB0aGUKKyAgICAvLyBnaXZlbiBmdW5jdG9yIHRvIHJldHVybiBmYWxz
ZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGRvbid0IHdpc2ggdG8gY29uc2lkZXIgdGhlIGdpdmVuIGJs
b2NrLgorICAgIC8vIFVzZWZ1bCBmb3IgY29tcHV0aW5nIHBydW5lZCBTU0EgZm9ybS4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5QcnVuZWRJ
dGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCisgICAgICAgIGNvbnN0IEJsb2NrTGlzdCYgZnJv
bSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CiAgICAgICAgIEJsb2NrU2V0IHNldDsK
ICAgICAgICAgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2ZJbXBsKAog
ICAgICAgICAgICAgZnJvbSwKICAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2spIC0+
IGJvb2wgewogICAgICAgICAgICAgICAgIGlmICghc2V0LmFkZChibG9jaykpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVu
Y3RvcihibG9jayk7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NTQUNh
bGN1bGF0b3IuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK1NTQUNhbGN1bGF0b3I6OlNTQUNhbGN1bGF0b3IoR3JhcGgmIGdyYXBo
KQorICAgIDogbV9ncmFwaChncmFwaCkKK3sKK30KKworU1NBQ2FsY3VsYXRvcjo6flNTQUNhbGN1
bGF0b3IoKQoreworfQorCitTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogU1NBQ2FsY3VsYXRvcjo6
bmV3VmFyaWFibGUoKQoreworICAgIHJldHVybiBtX3ZhcmlhYmxlcy5hbGxvYyhtX3ZhcmlhYmxl
cy5zaXplKCkpOworfQorCitTU0FDYWxjdWxhdG9yOjpEZWYqIFNTQUNhbGN1bGF0b3I6Om5ld0Rl
ZihWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBub2RlKQorewor
ICAgIERlZiogZGVmID0gbV9kZWZzLmFkZCh2YXJpYWJsZSwgYmxvY2ssIHZhbHVlKTsKKyAgICBh
dXRvIHJlc3VsdCA9IG1fZGF0YVtibG9ja10ubV9kZWZzLmFkZCh2YXJpYWJsZSwgZGVmKTsKKyAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHZhcmlhYmxlLT5tX2Jsb2Nrc1dpdGhE
ZWZzLmFwcGVuZChibG9jayk7CisgICAgZWxzZQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gZGVmOworICAgIHJldHVybiBkZWY7Cit9CisKK1NTQUNhbGN1bGF0b3I6OkRlZiogU1NB
Q2FsY3VsYXRvcjo6cmVhY2hpbmdEZWYoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiB2YXJp
YWJsZSkKK3sKKyAgICBmb3IgKGJsb2NrID0gbV9ncmFwaC5tX2RvbWluYXRvcnMuaW1tZWRpYXRl
RG9taW5hdG9yT2YoYmxvY2spOyBibG9jazsgYmxvY2sgPSBtX2dyYXBoLm1fZG9taW5hdG9ycy5p
bW1lZGlhdGVEb21pbmF0b3JPZihibG9jaykpIHsKKyAgICAgICAgaWYgKERlZiogZGVmID0gbV9k
YXRhW2Jsb2NrXS5tX2RlZnMuZ2V0KHZhcmlhYmxlKSkKKyAgICAgICAgICAgIHJldHVybiBkZWY7
CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR1NTQUNhbGN1bGF0b3JfaAorI2RlZmluZSBERkdTU0FDYWxjdWxhdG9y
X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRG9taW5hdG9yLmgiCisj
aW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CisvLyBTU0FDYWxjdWxhdG9yIHByb3ZpZGVzIGEgcmV1c2FibGUgdG9vbCBmb3IgdXNpbmcgdGhl
IEN5dHJvbiwgRmVycmFudGUsIFJvc2VuLCBXZWdtYW4sIGFuZAorLy8gWmFkZWNrICJFZmZpY2ll
bnRseSBDb21wdXRpbmcgU3RhdGljIFNpbmdsZSBBc3NpZ25tZW50IEZvcm0gYW5kIHRoZSBDb250
cm9sIERlcGVuZGVuY2UgR3JhcGgiCisvLyAoVE9QTEFTJzkxKSBhbGdvcml0aG0gZm9yIGNvbXB1
dGluZyBTU0EuIFNTQUNhbGN1bGF0b3IgZG9lc24ndCBtYWdpY2FsbHkgZG8gZXZlcnl0aGluZyBm
b3IgeW91CisvLyBidXQgaXQgbWFpbnRhaW5zIHRoZSBtYWpvciBkYXRhIHN0cnVjdHVyZXMgYW5k
IGhhbmRsZXMgbW9zdCBvZiB0aGUgbm9uLWxvY2wgcmVhc29uaW5nLiBIZXJlJ3MKKy8vIHRoZSB3
b3JrZmxvdyBvZiB1c2luZyBTU0FDYWxjdWxhdG9yIHRvIGV4ZWN1dGUgdGhpcyBhbGdvcml0aG06
CisvLworLy8gMCkgQ3JlYXRlIGEgZnJlc2ggU1NBQ2FsY3VsYXRvciBpbnN0YW5jZS4gWW91IHdp
bGwgbmVlZCB0aGlzIGluc3RhbmNlIG9ubHkgZm9yIGFzIGxvbmcgYXMKKy8vICAgIHlvdSdyZSBu
b3QgeWV0IGRvbmUgY29tcHV0aW5nIFNTQS4KKy8vCisvLyAxKSBDcmVhdGUgYW4gU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUgZm9yIGV2ZXJ5IHZhcmlhYmxlIHRoYXQgeW91IHdhbnQgdG8gZG8gUGhp
IGluc2VydGlvbgorLy8gICAgb24uIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlOjppbmRleCgpIGlz
IGEgZGVuc2UgaW5kZXhpbmcgb2YgdGhlIFZhcmlhYmxlcyB0aGF0IHlvdQorLy8gICAgY3JlYXRl
ZCwgc28geW91IGNhbiBlYXNpbHkgdXNlIGEgVmVjdG9yIHRvIG1hcCB0aGUgU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGVzIHRvIHlvdXIKKy8vICAgIHZhcmlhYmxlcy4KKy8vCisvLyAyKSBDcmVhdGUg
YSBTU0FDYWxjdWxhdG9yOjpEZWYgZm9yIGV2ZXJ5IGFzc2lnbm1lbnQgdG8gdGhvc2UgdmFyaWFi
bGVzLiBBIERlZiBrbm93cyBhYm91dCB0aGUKKy8vICAgIHZhcmlhYmxlLCB0aGUgYmxvY2ssIGFu
ZCB0aGUgREZHOjpOb2RlKiB0aGF0IGhhcyB0aGUgdmFsdWUgYmVpbmcgcHV0IGludG8gdGhlIHZh
cmlhYmxlLgorLy8KKy8vIDMpIENhbGwgU1NBQ2FsY3VsYXRvcjo6Y29tcHV0ZVBoaXMoKS4gVGhp
cyB0YWtlcyBhIGZ1bmN0b3IgdGhhdCB3aWxsIGluc2VydCB0aGUgUGhpIG5vZGVzLiBJdAorLy8g
ICAgd2lsbCBhbHNvIHJlY29yZCB0aG9zZSBQaGkgbm9kZXMgYXMgRGVmcy4gSXQncyBmaW5lIHRv
IHVzZSB0aGUgZnVuY3RvciB0byBzaW1wbHkgcmVjb3JkIHRoZQorLy8gICAgbG9jYXRpb25zIHdo
ZXJlIHRoZSBQaGlzIHdpbGwgYmUgaW5zZXJ0ZWQsIGV4Y2VwdCB0aGF0IHlvdSBoYXZlIHRvIGNy
ZWF0ZSB0aGUgREZHOjpOb2RlJ3MKKy8vICAgIGFuZCByZXR1cm4gdGhlbSBzbyB0aGF0IFNTQUNh
bGN1bGF0b3IgY2FuIHJlY29yZCB0aGVtLiBBIGNvbW1vbiBwYXR0ZXJuIGlzIHRvIGNyZWF0ZSB0
aGUKKy8vICAgIG5vZGVzIGJ1dCBwZXJmb3JtIHRoZSBpbnNlcnRpb25zIGluIGJ1bGsgYWZ0ZXIg
Y29tcHV0ZVBoaXMoKSBmaW5pc2hlcyBydW5uaW5nLgorLy8KKy8vIDQpIFRyYXZlcnNlIGVhY2gg
YmFzaWMgYmxvY2sgaW4gdGhlIGdyYXBoIHRvIHJlcGxhY2UgYWxsIHVzZXMgb2YgdmFyaWFibGVz
IHdpdGggdGhlIE5vZGUgdGhhdAorLy8gICAgaXMgdGhlIHJlYWNoaW5nIERlZi4gU1NBQ2FsY3Vs
YXRvciB3aWxsIGJlIGFibGUgdG8gdGVsbCB5b3UgdGhlIG5vbi1sb2NhbCByZWFjaGluZyBEZWYg
d2hlbgorLy8gICAgeW91IGNhbGwgU1NBQ2FsY3VsYXRvcjo6bm9uTG9jYWxSZWFjaGluZ0RlZigp
LiBIb3dldmVyLCBmb3IgdGhlIGJsb2NrLWxvY2FsIHJlYWNoaW5nIERlZiwKKy8vICAgIHlvdSBh
cmUgb24geW91ciBvd24uIFlvdSBwcm9iYWJseSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBibG9j
ay1sb2NhbCBtYXAgb2YgZGVmJ3MgeW91J3ZlCisvLyAgICBzZWVuIHNvIGZhci4gSXQncyBvbmx5
IHdoZW4gdGhlIGxvY2FsIG1hcCBsYWNrcyBhbiBlbnRyeSBmb3IgYSB2YXJpYWJsZSB0aGF0IHlv
dSBjYWxsCisvLyAgICBub25Mb2NhbFJlYWNoaW5nRGVmKCkuCisvLworLy8gVGhlIG1vc3Qgb2J2
aW91cyB1c2Ugb2YgU1NBQ2FsY3VsYXRvciBpcyBmb3IgdGhlIENQUy0+U1NBIGNvbnZlcnNpb24g
aXRzZWxmLCBidXQgaXQncyBtZWFudCB0bworLy8gYWxzbyBiZSB1c2VkIGZvciBTU0EgdXBkYXRl
IGFuZCBmb3IgdGhpbmdzIGxpa2UgdGhlIHByb21vdGlvbiBvZiBoZWFwIGZpZWxkcyB0byBsb2Nh
bCBTU0EKKy8vIHZhcmlhYmxlcy4KKworY2xhc3MgU1NBQ2FsY3VsYXRvciB7CitwdWJsaWM6Cisg
ICAgU1NBQ2FsY3VsYXRvcihHcmFwaCYpOworICAgIH5TU0FDYWxjdWxhdG9yKCk7CisgICAgCisg
ICAgY2xhc3MgVmFyaWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgdW5zaWduZWQgaW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIFZhcmlhYmxlKCkKKyAgICAgICAgICAgIDogbV9pbmRleChVSU5UX01BWCkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZSh1bnNpZ25lZCBpbmRleCkK
KyAgICAgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgQmxvY2tMaXN0IG1fYmxvY2tzV2l0aERlZnM7CisgICAgICAgIHVuc2lnbmVkIG1faW5k
ZXg7CisgICAgfTsKKyAgICAKKyAgICBjbGFzcyBEZWYgeworICAgIHB1YmxpYzoKKyAgICAgICAg
VmFyaWFibGUqIHZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZTsgfQorICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICAgICAg
CisgICAgICAgIGJvb2wgaXNVbmNyZWF0ZWRQaGkoKSBjb25zdCB7IHJldHVybiAhbV92YWx1ZTsg
fQorICAgICAgICAKKyAgICAgICAgTm9kZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisgICAgICAgIHZvaWQgc2V0VmFsdWUoTm9kZSogbm9kZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKGlzVW5jcmVhdGVkUGhpKCkpOworICAgICAgICAgICAgbV92YWx1ZSA9IG5v
ZGU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgRGVmKCkKKyAg
ICAgICAgICAgIDogbV92YXJpYWJsZShudWxscHRyKQorICAgICAgICAgICAgLCBtX2Jsb2NrKG51
bGxwdHIpCisgICAgICAgICAgICAsIG1fdmFsdWUobnVsbHB0cikKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBEZWYoVmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2Nr
KiBibG9jaywgTm9kZSogdmFsdWUpCisgICAgICAgICAgICA6IG1fdmFyaWFibGUodmFyaWFibGUp
CisgICAgICAgICAgICAsIG1fYmxvY2soYmxvY2spCisgICAgICAgICAgICAsIG1fdmFsdWUodmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmFyaWFibGUqIG1f
dmFyaWFibGU7CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgICAgIE5vZGUqIG1f
dmFsdWU7CisgICAgfTsKKyAgICAKKyAgICBWYXJpYWJsZSogbmV3VmFyaWFibGUoKTsKKyAgICBE
ZWYqIG5ld0RlZihWYXJpYWJsZSosIEJhc2ljQmxvY2sqLCBOb2RlKik7CisgICAgCisgICAgVmFy
aWFibGUqIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiAmbV92YXJpYWJsZXNbaW5k
ZXhdOyB9CisgICAgCisgICAgLy8gVGhlIFBoaUluc2VydGlvbkZ1bmN0b3IgdGFrZXMgYSBWYXJp
YWJsZSBhbmQgYSBCYXNpY0Jsb2NrIGFuZCBlaXRoZXIgaW5zZXJ0cyBhIFBoaSBhbmQKKyAgICAv
LyByZXR1cm5zIHRoZSBOb2RlIGZvciB0aGF0IFBoaSwgb3IgaXQgZGVjaWRlcyB0aGF0IGl0J3Mg
bm90IHdvcnRoIGl0IHRvIGluc2VydCBhIFBoaSBhdCB0aGF0CisgICAgLy8gYmxvY2sgYmVjYXVz
ZSBvZiBzb21lIGFkZGl0aW9uYWwgcHJ1bmluZyBjb25kaXRpb24gKHR5cGljYWxseSBsaXZlbmVz
cykgYW5kIHJldHVybnMKKyAgICAvLyBudWxscHRyLiBJZiBhIG5vbi1udWxsIE5vZGUqIGlzIHJl
dHVybmVkLCBhIG5ldyBEZWYgaXMgY3JlYXRlZCwgc28gdGhhdAorICAgIC8vIG5vbkxvY2FsUmVh
Y2hpbmdEZWYoKSB3aWxsIGZpbmQgaXQgbGF0ZXIuIE5vdGUgdGhhdCBpdCBpcyBnZW5lcmFsbHkg
YWx3YXlzIHNvdW5kIHRvIG5vdAorICAgIC8vIHBydW5lIGFueSBQaGlzICh0aGF0IGlzLCB0byBh
bHdheXMgaGF2ZSB0aGUgZnVuY3RvciBpbnNlcnQgYSBQaGkgYW5kIG5ldmVyIHJldHVybiBudWxs
cHRyKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQaGlJbnNlcnRpb25GdW5jdG9yPgorICAgIHZv
aWQgY29tcHV0ZVBoaXMoUGhpSW5zZXJ0aW9uRnVuY3RvciBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBtX3ZhcmlhYmxlcykgeworICAgICAgICAgICAg
bV9ncmFwaC5tX2RvbWluYXRvcnMuZm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5j
ZUZyb250aWVyT2YoCisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1fYmxvY2tzV2l0aERlZnMs
CisgICAgICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaykgLT4gYm9vbCB7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBmdW5jdG9yKHZhcmlhYmxlLCBibG9jayk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghcGhpTm9kZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIEJsb2NrRGF0YSogZGF0YSA9IG1fZGF0YVtibG9ja107CisgICAgICAgICAgICAgICAgICAg
IERlZiogcGhpRGVmID0gbV9waGlzLmFkZCh2YXJpYWJsZSwgYmxvY2ssIHBoaU5vZGUpOworICAg
ICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGRhdGEubV9kZWZzLmFkZCh2YXJpYWJsZSwg
cGhpRGVmKTsKKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRy
LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIElnbm9y
ZXMgZGVmcyB3aXRoaW4gdGhlIGdpdmVuIGJsb2NrOyBpdCBhc3N1bWVzIHRoYXQgeW91J3ZlIHRh
a2VuIGNhcmUgb2YgdGhvc2UKKyAgICAvLyB5b3Vyc2VsZi4KKyAgICBEZWYqIG5vbkxvY2FsUmVh
Y2hpbmdEZWYoQmFzaWNCbG9jayosIFZhcmlhYmxlKik7CisgICAgCitwcml2YXRlOgorICAgIFNl
Z21lbnRlZFZlY3RvcjxWYXJpYWJsZT4gbV92YXJpYWJsZXM7CisgICAgQmFnPERlZj4gbV9kZWZz
OworICAgIAorICAgIEJhZzxEZWY+IG1fcGhpczsKKyAgICAKKyAgICBzdHJ1Y3QgQmxvY2tEYXRh
IHsKKyAgICAgICAgSGFzaE1hcDxWYXJpYWJsZSosIERlZio+IG1fZGVmczsKKyAgICB9OworICAg
ICAgICAgICAgCisgICAgQmxvY2tNYXA8QmxvY2tEYXRhPiBtX2RhdGE7CisgICAgCisgICAgR3Jh
cGgmIG1fZ3JhcGg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1NTQUNhbGN1bGF0b3JfaAorCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL1dU
Ri93dGYvU2VnbWVudGVkVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw5ICsxNTcsMTAg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBzZWdtZW50Rm9yKG1fc2l6ZSAtIDEpLT51
bmNoZWNrZWRBcHBlbmQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBUJiBhbGxvYygpCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAg
ICAgIFQmIGFsbG9jKEFyZ3MuLi4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgYXBwZW5k
PFQ+KFQoKSk7CisgICAgICAgICAgICBhcHBlbmQ8VD4oVChhcmdzLi4uKSk7CiAgICAgICAgICAg
ICByZXR1cm4gbGFzdCgpOwogICAgICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237743</attachid>
            <date>2014-09-06 13:59:43 -0700</date>
            <delta_ts>2014-09-06 20:19:38 -0700</delta_ts>
            <desc>pretty close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17328</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FuYWx5c2lzLmgJKHJldmlzaW9uIDE3
MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHJl
dmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9y
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBmcm9tID09IHRvIHx8IHN0cmljdGx5RG9taW5hdGVzKGZyb20sIHRvKTsKICAgICB9CiAg
ICAgCisgICAgQmFzaWNCbG9jayogaW1tZWRpYXRlRG9taW5hdG9yT2YoQmFzaWNCbG9jayogYmxv
Y2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50
OworICAgIH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQg
Zm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKSBjb25zdAogICAgIHsKQEAgLTExOSwxNCArMTI0LDI4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKAogICAgICAgICBj
b25zdCBCbG9ja0xpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgeworICAg
ICAgICBmb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAg
ICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlz
IGEgY2xvc2UgcmVsYXRpdmUgb2YgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250
aWVyT2YoKSwgd2hpY2ggYWxsb3dzIHRoZQorICAgIC8vIGdpdmVuIGZ1bmN0b3IgdG8gcmV0dXJu
IGZhbHNlIHRvIGluZGljYXRlIHRoYXQgd2UgZG9uJ3Qgd2lzaCB0byBjb25zaWRlciB0aGUgZ2l2
ZW4gYmxvY2suCisgICAgLy8gVXNlZnVsIGZvciBjb21wdXRpbmcgcHJ1bmVkIFNTQSBmb3JtLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJblBy
dW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgY29uc3QgQmxvY2tMaXN0
JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKICAgICAgICAgQmxvY2tTZXQg
c2V0OwogICAgICAgICBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZklt
cGwoCiAgICAgICAgICAgICBmcm9tLAogICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9j
aykgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgaWYgKCFzZXQuYWRkKGJsb2NrKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGZ1bmN0b3IoYmxv
Y2spOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVy
biBmdW5jdG9yKGJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
U1NBQ2FsY3VsYXRvci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworU1NBQ2FsY3VsYXRvcjo6U1NBQ2FsY3VsYXRvcihHcmFwaCYg
Z3JhcGgpCisgICAgOiBtX2dyYXBoKGdyYXBoKQoreworfQorCitTU0FDYWxjdWxhdG9yOjp+U1NB
Q2FsY3VsYXRvcigpCit7Cit9CisKK1NTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBTU0FDYWxjdWxh
dG9yOjpuZXdWYXJpYWJsZSgpCit7CisgICAgcmV0dXJuIG1fdmFyaWFibGVzLmFsbG9jKG1fdmFy
aWFibGVzLnNpemUoKSk7Cit9CisKK1NTQUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3VsYXRvcjo6
bmV3RGVmKFZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIG5vZGUp
Cit7CisgICAgRGVmKiBkZWYgPSBtX2RlZnMuYWRkKHZhcmlhYmxlLCBibG9jaywgdmFsdWUpOwor
ICAgIGF1dG8gcmVzdWx0ID0gbV9kYXRhW2Jsb2NrXS5tX2RlZnMuYWRkKHZhcmlhYmxlLCBkZWYp
OworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgdmFyaWFibGUtPm1fYmxvY2tz
V2l0aERlZnMuYXBwZW5kKGJsb2NrKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBkZWY7CisgICAgcmV0dXJuIGRlZjsKK30KKworU1NBQ2FsY3VsYXRvcjo6RGVm
KiBTU0FDYWxjdWxhdG9yOjpyZWFjaGluZ0RlZihCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUq
IHZhcmlhYmxlKQoreworICAgIGZvciAoYmxvY2sgPSBtX2dyYXBoLm1fZG9taW5hdG9ycy5pbW1l
ZGlhdGVEb21pbmF0b3JPZihibG9jayk7IGJsb2NrOyBibG9jayA9IG1fZ3JhcGgubV9kb21pbmF0
b3JzLmltbWVkaWF0ZURvbWluYXRvck9mKGJsb2NrKSkgeworICAgICAgICBpZiAoRGVmKiBkZWYg
PSBtX2RhdGFbYmxvY2tdLm1fZGVmcy5nZXQodmFyaWFibGUpKQorICAgICAgICAgICAgcmV0dXJu
IGRlZjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHU1NBQ2FsY3VsYXRvcl9oCisjZGVmaW5lIERGR1NTQUNhbGN1
bGF0b3JfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdEb21pbmF0b3Iu
aCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKKy8vIFNTQUNhbGN1bGF0b3IgcHJvdmlkZXMgYSByZXVzYWJsZSB0b29sIGZvciB1c2lu
ZyB0aGUgQ3l0cm9uLCBGZXJyYW50ZSwgUm9zZW4sIFdlZ21hbiwgYW5kCisvLyBaYWRlY2sgIkVm
ZmljaWVudGx5IENvbXB1dGluZyBTdGF0aWMgU2luZ2xlIEFzc2lnbm1lbnQgRm9ybSBhbmQgdGhl
IENvbnRyb2wgRGVwZW5kZW5jZSBHcmFwaCIKKy8vIChUT1BMQVMnOTEpIGFsZ29yaXRobSBmb3Ig
Y29tcHV0aW5nIFNTQS4gU1NBQ2FsY3VsYXRvciBkb2Vzbid0IG1hZ2ljYWxseSBkbyBldmVyeXRo
aW5nIGZvciB5b3UKKy8vIGJ1dCBpdCBtYWludGFpbnMgdGhlIG1ham9yIGRhdGEgc3RydWN0dXJl
cyBhbmQgaGFuZGxlcyBtb3N0IG9mIHRoZSBub24tbG9jbCByZWFzb25pbmcuIEhlcmUncworLy8g
dGhlIHdvcmtmbG93IG9mIHVzaW5nIFNTQUNhbGN1bGF0b3IgdG8gZXhlY3V0ZSB0aGlzIGFsZ29y
aXRobToKKy8vCisvLyAwKSBDcmVhdGUgYSBmcmVzaCBTU0FDYWxjdWxhdG9yIGluc3RhbmNlLiBZ
b3Ugd2lsbCBuZWVkIHRoaXMgaW5zdGFuY2Ugb25seSBmb3IgYXMgbG9uZyBhcworLy8gICAgeW91
J3JlIG5vdCB5ZXQgZG9uZSBjb21wdXRpbmcgU1NBLgorLy8KKy8vIDEpIENyZWF0ZSBhbiBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSBmb3IgZXZlcnkgdmFyaWFibGUgdGhhdCB5b3Ugd2FudCB0byBk
byBQaGkgaW5zZXJ0aW9uCisvLyAgICBvbi4gU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGU6OmluZGV4
KCkgaXMgYSBkZW5zZSBpbmRleGluZyBvZiB0aGUgVmFyaWFibGVzIHRoYXQgeW91CisvLyAgICBj
cmVhdGVkLCBzbyB5b3UgY2FuIGVhc2lseSB1c2UgYSBWZWN0b3IgdG8gbWFwIHRoZSBTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZXMgdG8geW91cgorLy8gICAgdmFyaWFibGVzLgorLy8KKy8vIDIpIENy
ZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OkRlZiBmb3IgZXZlcnkgYXNzaWdubWVudCB0byB0aG9zZSB2
YXJpYWJsZXMuIEEgRGVmIGtub3dzIGFib3V0IHRoZQorLy8gICAgdmFyaWFibGUsIHRoZSBibG9j
aywgYW5kIHRoZSBERkc6Ok5vZGUqIHRoYXQgaGFzIHRoZSB2YWx1ZSBiZWluZyBwdXQgaW50byB0
aGUgdmFyaWFibGUuCisvLworLy8gMykgQ2FsbCBTU0FDYWxjdWxhdG9yOjpjb21wdXRlUGhpcygp
LiBUaGlzIHRha2VzIGEgZnVuY3RvciB0aGF0IHdpbGwgaW5zZXJ0IHRoZSBQaGkgbm9kZXMuIEl0
CisvLyAgICB3aWxsIGFsc28gcmVjb3JkIHRob3NlIFBoaSBub2RlcyBhcyBEZWZzLiBJdCdzIGZp
bmUgdG8gdXNlIHRoZSBmdW5jdG9yIHRvIHNpbXBseSByZWNvcmQgdGhlCisvLyAgICBsb2NhdGlv
bnMgd2hlcmUgdGhlIFBoaXMgd2lsbCBiZSBpbnNlcnRlZCwgZXhjZXB0IHRoYXQgeW91IGhhdmUg
dG8gY3JlYXRlIHRoZSBERkc6Ok5vZGUncworLy8gICAgYW5kIHJldHVybiB0aGVtIHNvIHRoYXQg
U1NBQ2FsY3VsYXRvciBjYW4gcmVjb3JkIHRoZW0uIEEgY29tbW9uIHBhdHRlcm4gaXMgdG8gY3Jl
YXRlIHRoZQorLy8gICAgbm9kZXMgYnV0IHBlcmZvcm0gdGhlIGluc2VydGlvbnMgaW4gYnVsayBh
ZnRlciBjb21wdXRlUGhpcygpIGZpbmlzaGVzIHJ1bm5pbmcuCisvLworLy8gICAgTm90ZSB0aGF0
IFNTQUNhbGN1bGF0b3IgbWFrZXMgaXQgZWFzeSB0byBkbyB0aGUgYWN0dWFsIGluc2VydGlvbiBv
ZiBQaGlzIGFmdGVyIHRoZSBjYWxsIHRvCisvLyAgICBjb21wdXRlUGhpcygpLCBiZWNhdXNlIGl0
IHdpbGwgcmVjb3JkIGEgbGlzdCBvZiBhbGwgUGhpcyBhdCBlYWNoIGJsb2NrIGFuZCB5b3UgY2Fu
IGdldCB0aGlzCisvLyAgICBsaXN0IHVzaW5nIFNTQUNhbGN1bGF0b3I6OnBoaXNGb3JCbG9jaygp
LiBUaHVzIGEgY29tbW9uIHBhdHRlcm4gaXMgdG8gYWxsb2NhdGUgdGhlIFBoaSBub2RlcworLy8g
ICAgaW4gdGhlIGZ1bmN0b3IgcGFzc2VkIHRvIGNvbXB1dGVQaGlzKCksIGFuZCB0aGVuIGxhdGVy
IGluc2VydCB0aGVtIGJ5IGNhbGxpbmcKKy8vICAgIHBoaXNGb3JCbG9jaygpLgorLy8KKy8vIDQp
IFRyYXZlcnNlIGVhY2ggYmFzaWMgYmxvY2sgaW4gdGhlIGdyYXBoIHRvIHJlcGxhY2UgYWxsIHVz
ZXMgb2YgdmFyaWFibGVzIHdpdGggdGhlIE5vZGUgdGhhdAorLy8gICAgaXMgdGhlIHJlYWNoaW5n
IERlZi4gU1NBQ2FsY3VsYXRvciB3aWxsIGJlIGFibGUgdG8gdGVsbCB5b3UgdGhlIG5vbi1sb2Nh
bCByZWFjaGluZyBEZWYgd2hlbgorLy8gICAgeW91IGNhbGwgU1NBQ2FsY3VsYXRvcjo6bm9uTG9j
YWxSZWFjaGluZ0RlZigpLiBIb3dldmVyLCBmb3IgdGhlIGJsb2NrLWxvY2FsIHJlYWNoaW5nIERl
ZiwKKy8vICAgIHlvdSBhcmUgb24geW91ciBvd24uIFlvdSBwcm9iYWJseSB3YW50IHRvIGNyZWF0
ZSB5b3VyIG93biBibG9jay1sb2NhbCBtYXAgb2YgZGVmJ3MgeW91J3ZlCisvLyAgICBzZWVuIHNv
IGZhci4gSXQncyBvbmx5IHdoZW4gdGhlIGxvY2FsIG1hcCBsYWNrcyBhbiBlbnRyeSBmb3IgYSB2
YXJpYWJsZSB0aGF0IHlvdSBjYWxsCisvLyAgICBub25Mb2NhbFJlYWNoaW5nRGVmKCkuCisvLwor
Ly8gVGhlIG1vc3Qgb2J2aW91cyB1c2Ugb2YgU1NBQ2FsY3VsYXRvciBpcyBmb3IgdGhlIENQUy0+
U1NBIGNvbnZlcnNpb24gaXRzZWxmLCBidXQgaXQncyBtZWFudCB0bworLy8gYWxzbyBiZSB1c2Vk
IGZvciBTU0EgdXBkYXRlIGFuZCBmb3IgdGhpbmdzIGxpa2UgdGhlIHByb21vdGlvbiBvZiBoZWFw
IGZpZWxkcyB0byBsb2NhbCBTU0EKKy8vIHZhcmlhYmxlcy4KKworY2xhc3MgU1NBQ2FsY3VsYXRv
ciB7CitwdWJsaWM6CisgICAgU1NBQ2FsY3VsYXRvcihHcmFwaCYpOworICAgIH5TU0FDYWxjdWxh
dG9yKCk7CisgICAgCisgICAgY2xhc3MgVmFyaWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgICAgIAorICAg
IHByaXZhdGU6CisgICAgICAgIFZhcmlhYmxlKCkKKyAgICAgICAgICAgIDogbV9pbmRleChVSU5U
X01BWCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZSh1
bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgQmxvY2tMaXN0IG1fYmxvY2tzV2l0aERlZnM7CisgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKyAgICAKKyAgICBjbGFzcyBEZWYgeworICAgIHB1
YmxpYzoKKyAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV92YXJp
YWJsZTsgfQorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2s7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNVbmNyZWF0ZWRQaGkoKSBjb25zdCB7IHJl
dHVybiAhbV92YWx1ZTsgfQorICAgICAgICAKKyAgICAgICAgTm9kZSogdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisgICAgICAgIHZvaWQgc2V0VmFsdWUoTm9kZSogbm9kZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGlzVW5jcmVhdGVkUGhpKCkpOworICAgICAgICAg
ICAgbV92YWx1ZSA9IG5vZGU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgRGVmKCkKKyAgICAgICAgICAgIDogbV92YXJpYWJsZShudWxscHRyKQorICAgICAgICAg
ICAgLCBtX2Jsb2NrKG51bGxwdHIpCisgICAgICAgICAgICAsIG1fdmFsdWUobnVsbHB0cikKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBEZWYoVmFyaWFibGUqIHZhcmlh
YmxlLCBCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogdmFsdWUpCisgICAgICAgICAgICA6IG1fdmFy
aWFibGUodmFyaWFibGUpCisgICAgICAgICAgICAsIG1fYmxvY2soYmxvY2spCisgICAgICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgVmFyaWFibGUqIG1fdmFyaWFibGU7CisgICAgICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cisg
ICAgICAgIE5vZGUqIG1fdmFsdWU7CisgICAgfTsKKyAgICAKKyAgICBWYXJpYWJsZSogbmV3VmFy
aWFibGUoKTsKKyAgICBEZWYqIG5ld0RlZihWYXJpYWJsZSosIEJhc2ljQmxvY2sqLCBOb2RlKik7
CisgICAgCisgICAgVmFyaWFibGUqIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiAm
bV92YXJpYWJsZXNbaW5kZXhdOyB9CisgICAgCisgICAgLy8gVGhlIFBoaUluc2VydGlvbkZ1bmN0
b3IgdGFrZXMgYSBWYXJpYWJsZSBhbmQgYSBCYXNpY0Jsb2NrIGFuZCBlaXRoZXIgaW5zZXJ0cyBh
IFBoaSBhbmQKKyAgICAvLyByZXR1cm5zIHRoZSBOb2RlIGZvciB0aGF0IFBoaSwgb3IgaXQgZGVj
aWRlcyB0aGF0IGl0J3Mgbm90IHdvcnRoIGl0IHRvIGluc2VydCBhIFBoaSBhdCB0aGF0CisgICAg
Ly8gYmxvY2sgYmVjYXVzZSBvZiBzb21lIGFkZGl0aW9uYWwgcHJ1bmluZyBjb25kaXRpb24gKHR5
cGljYWxseSBsaXZlbmVzcykgYW5kIHJldHVybnMKKyAgICAvLyBudWxscHRyLiBJZiBhIG5vbi1u
dWxsIE5vZGUqIGlzIHJldHVybmVkLCBhIG5ldyBEZWYgaXMgY3JlYXRlZCwgc28gdGhhdAorICAg
IC8vIG5vbkxvY2FsUmVhY2hpbmdEZWYoKSB3aWxsIGZpbmQgaXQgbGF0ZXIuIE5vdGUgdGhhdCBp
dCBpcyBnZW5lcmFsbHkgYWx3YXlzIHNvdW5kIHRvIG5vdAorICAgIC8vIHBydW5lIGFueSBQaGlz
ICh0aGF0IGlzLCB0byBhbHdheXMgaGF2ZSB0aGUgZnVuY3RvciBpbnNlcnQgYSBQaGkgYW5kIG5l
dmVyIHJldHVybiBudWxscHRyKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQaGlJbnNlcnRpb25G
dW5jdG9yPgorICAgIHZvaWQgY29tcHV0ZVBoaXMoUGhpSW5zZXJ0aW9uRnVuY3RvciBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1f
ZG9taW5hdG9ycy5pc1ZhbGlkKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChWYXJpYWJsZSog
dmFyaWFibGUgOiBtX3ZhcmlhYmxlcykgeworICAgICAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRv
cnMuZm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoCisgICAg
ICAgICAgICAgICAgdmFyaWFibGUtPm1fYmxvY2tzV2l0aERlZnMsCisgICAgICAgICAgICAgICAg
WyZdIChCYXNpY0Jsb2NrKiBibG9jaykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHBoaU5vZGUgPSBmdW5jdG9yKHZhcmlhYmxlLCBibG9jayk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghcGhpTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIEJsb2NrRGF0YSogZGF0
YSA9IG1fZGF0YVtibG9ja107CisgICAgICAgICAgICAgICAgICAgIERlZiogcGhpRGVmID0gbV9w
aGlzLmFkZCh2YXJpYWJsZSwgYmxvY2ssIHBoaU5vZGUpOworICAgICAgICAgICAgICAgICAgICBk
YXRhLm1fcGhpcy5hcHBlbmQocGhpRGVmKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBkYXRhLm1fZGVmcy5hZGQodmFyaWFibGUsIHBoaURlZik7CisgICAgICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgcmVzdWx0LmlzTmV3RW50cnkpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8RGVmKj4mIHBoaXNGb3JCbG9jayhC
YXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGFbYmxvY2tdLm1f
cGhpczsKKyAgICB9CisgICAgCisgICAgLy8gSWdub3JlcyBkZWZzIHdpdGhpbiB0aGUgZ2l2ZW4g
YmxvY2s7IGl0IGFzc3VtZXMgdGhhdCB5b3UndmUgdGFrZW4gY2FyZSBvZiB0aG9zZQorICAgIC8v
IHlvdXJzZWxmLgorICAgIERlZiogbm9uTG9jYWxSZWFjaGluZ0RlZihCYXNpY0Jsb2NrKiwgVmFy
aWFibGUqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlPiBt
X3ZhcmlhYmxlczsKKyAgICBCYWc8RGVmPiBtX2RlZnM7CisgICAgCisgICAgQmFnPERlZj4gbV9w
aGlzOworICAgIAorICAgIHN0cnVjdCBCbG9ja0RhdGEgeworICAgICAgICBIYXNoTWFwPFZhcmlh
YmxlKiwgRGVmKj4gbV9kZWZzOworICAgICAgICBWZWN0b3I8RGVmKj4gbV9waGlzOworICAgIH07
CisgICAgICAgICAgICAKKyAgICBCbG9ja01hcDxCbG9ja0RhdGE+IG1fZGF0YTsKKyAgICAKKyAg
ICBHcmFwaCYgbV9ncmFwaDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU1NBQ2FsY3VsYXRvcl9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
NyBAQCBjbGFzcyBTU0FDb252ZXJzaW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgCiBwdWJsaWM6CiAg
ICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFw
aCwgIlNTQSBjb252ZXJzaW9uIikKKyAgICAgICAgLCBtX2NhbGN1bGF0b3IoZ3JhcGgpCiAgICAg
ICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCiAgICAgICAgICwgbV9jaGFuZ2VkKGZhbHNlKQog
ICAgIHsKQEAgLTU3LDYgKzU4LDcwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZ3JhcGguZHVt
cCgpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgYSBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSBmb3IgZXZlcnkgcm9vdCBWYXJpYWJsZUFjY2Vzc0RhdGEuCisgICAgICAg
IGZvciAoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA6IG1fZ3JhcGgubV92YXJpYWJsZUFj
Y2Vzc0RhdGEpIHsKKyAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzUm9vdCgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBtX2NhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsK
KyAgICAgICAgICAgIEFTU0VSVChzc2FWYXJpYWJsZS0+aW5kZXgoKSA9PSBtX3ZhcmlhYmxlRm9y
U1NBSW5kZXguc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FW
YXJpYWJsZS0+aW5kZXgoKV0gPSB2YXJpYWJsZTsKKyAgICAgICAgICAgIG1fc3NhVmFyaWFibGVG
b3JWYXJpYWJsZS5hZGQodmFyaWFibGUsIHNzYVZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gRmluZCBhbGwgU2V0TG9jYWxzIGFuZCBjcmVhdGUgRGVmcyBmb3IgdGhl
bS4gV2UgaGFuZGxlIFNldEFyZ3VtZW50IGJ5IGNyZWF0aW5nIGEKKyAgICAgICAgLy8gR2V0QXJn
dW1lbnQuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTXVz
dCBwcm9jZXNzIHRoZSBibG9jayBpbiBmb3J3YXJkIGRpcmVjdGlvbiBiZWNhdXNlIHdlIHdhbnQg
dG8gc2VlIHRoZSBsYXN0CisgICAgICAgICAgICAvLyBhc3NpZ25tZW50IGZvciBldmVyeSBsb2Nh
bC4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgTm9kZSogY2hpbGROb2RlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAg
ICAgICAgICBjaGlsZE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IFNldEFyZ3VtZW50OgorICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgR2V0QXJndW1lbnQsIE9wSW5mbyhub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5v
ZGUtPm9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbV9jYWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAgICAgICAgICAgbV9zc2FWYXJpYWJs
ZUZvclZhcmlhYmxlLmdldChub2RlLT52YXJpYWJsZSksIGJsb2NrLCBjaGlsZE5vZGUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBEZWNpZGUgd2hlcmUg
UGhpcyBhcmUgdG8gYmUgaW5zZXJ0ZWQuIFRoaXMgY3JlYXRlcyB0aGUgUGhpJ3MgYnV0IGRvZXNu
J3QgaW5zZXJ0IHRoZW0KKyAgICAgICAgLy8geWV0LiBXZSBrbm93IHdoZXJlIHRvIGluc2VydCB0
aGVtIGJlY2F1c2UgU1NBQ2FsY3VsYXRvciBpcyBzdWNoIGEgYnJvLgorICAgICAgICBtX2NhbGN1
bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKiBzc2FWYXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IGJvb2wgeworICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5k
ZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIFBydW5lIGJ5IGxpdmVuZXNzLiBUaGlzIGRvZXNuJ3QgYnV5IHVzIG11Y2ggb3RoZXIg
dGhhbiBjb21waWxlIHRpbWVzLgorICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2Rl
KiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJs
ZS0+cHJlZGljdGlvbigpLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgRmx1
c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGUtPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAgICAg
ICAgTm9kZUZsYWdzIHJlc3VsdCA9IHJlc3VsdEZvcihmb3JtYXQpOworICAgICAgICAgICAgICAg
IHBoaU5vZGUtPm1lcmdlRmxhZ3MocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGhp
Tm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IGFsbW9z
dCBkb25lIQorICAgICAgICAKICAgICAgICAgLy8gRWxpbWluYXRlIGFsbCBkdXBsaWNhdGUgb3Ig
c2VsZi1wb2ludGluZyBQaGkgZWRnZXMuIFRoaXMgbWVhbnMgdGhhdAogICAgICAgICAvLyB3ZSB0
cmFuc2Zvcm06CiAgICAgICAgIC8vCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWdtZW50ZWRWZWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaAkocmV2
aXNpb24gMTczMzM3KQorKysgU291cmNlL1dURi93dGYvU2VnbWVudGVkVmVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1Nyw5ICsxNTcsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAg
ICBzZWdtZW50Rm9yKG1fc2l6ZSAtIDEpLT51bmNoZWNrZWRBcHBlbmQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7CiAgICAgICAgIH0KIAotICAgICAgICBUJiBhbGxvYygpCisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIFQmIGFsbG9jKEFyZ3MuLi4gYXJncykKICAg
ICAgICAgewotICAgICAgICAgICAgYXBwZW5kPFQ+KFQoKSk7CisgICAgICAgICAgICBhcHBlbmQ8
VD4oVChhcmdzLi4uKSk7CiAgICAgICAgICAgICByZXR1cm4gbGFzdCgpOwogICAgICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237750</attachid>
            <date>2014-09-06 20:19:38 -0700</date>
            <delta_ts>2014-09-07 09:43:09 -0700</delta_ts>
            <desc>it is written!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44318</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FuYWx5c2lzLmgJKHJldmlzaW9uIDE3
MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHJl
dmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9y
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBmcm9tID09IHRvIHx8IHN0cmljdGx5RG9taW5hdGVzKGZyb20sIHRvKTsKICAgICB9CiAg
ICAgCisgICAgQmFzaWNCbG9jayogaW1tZWRpYXRlRG9taW5hdG9yT2YoQmFzaWNCbG9jayogYmxv
Y2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50
OworICAgIH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQg
Zm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKSBjb25zdAogICAgIHsKQEAgLTExOSwxNCArMTI0LDI4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKAogICAgICAgICBj
b25zdCBCbG9ja0xpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgeworICAg
ICAgICBmb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAg
ICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlz
IGEgY2xvc2UgcmVsYXRpdmUgb2YgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250
aWVyT2YoKSwgd2hpY2ggYWxsb3dzIHRoZQorICAgIC8vIGdpdmVuIGZ1bmN0b3IgdG8gcmV0dXJu
IGZhbHNlIHRvIGluZGljYXRlIHRoYXQgd2UgZG9uJ3Qgd2lzaCB0byBjb25zaWRlciB0aGUgZ2l2
ZW4gYmxvY2suCisgICAgLy8gVXNlZnVsIGZvciBjb21wdXRpbmcgcHJ1bmVkIFNTQSBmb3JtLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJblBy
dW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgY29uc3QgQmxvY2tMaXN0
JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKICAgICAgICAgQmxvY2tTZXQg
c2V0OwogICAgICAgICBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZklt
cGwoCiAgICAgICAgICAgICBmcm9tLAogICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9j
aykgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgaWYgKCFzZXQuYWRkKGJsb2NrKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGZ1bmN0b3IoYmxv
Y2spOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVy
biBmdW5jdG9yKGJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTczMzM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2luZyBjb3B5
KQpAQCAtNjgsNyArNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNk
ZWZpbmUgTm9kZVJlbGV2YW50VG9PU1IgICAgICAgICAgICAgICAweDEwMDAwCiAKLSNkZWZpbmUg
Tm9kZUlzRmx1c2hlZCAgICAgICAgICAgICAgICAgICAweDIwMDAwIC8vIFVzZWQgYnkgR3JhcGg6
OmNvbXB1dGVJc0ZsdXNoZWQoKSwgd2lsbCB0ZWxsIHlvdSB3aGljaCBsb2NhbCBub2RlcyBhcmUg
YmFja3dhcmRzLXJlYWNoYWJsZSBmcm9tIGEgRmx1c2guCisjZGVmaW5lIE5vZGVJc0ZsdXNoZWQg
ICAgICAgICAgICAgICAgICAgMHgyMDAwMCAvLyBDb21wdXRlZCBieSBDUFNSZXRocmVhZGluZ1Bo
YXNlLCB3aWxsIHRlbGwgeW91IHdoaWNoIGxvY2FsIG5vZGVzIGFyZSBiYWNrd2FyZHMtcmVhY2hh
YmxlIGZyb20gYSBGbHVzaC4KIAogI2RlZmluZSBOb2RlTWlzY0ZsYWcxICAgICAgICAgICAgICAg
ICAgIDB4NDAwMDAKICNkZWZpbmUgTm9kZU1pc2NGbGFnMiAgICAgICAgICAgICAgICAgICAweDgw
MDAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRv
ci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNh
bGN1bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR1NTQUNhbGN1bGF0b3IuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK1NTQUNhbGN1bGF0b3I6OlNTQUNhbGN1
bGF0b3IoR3JhcGgmIGdyYXBoKQorICAgIDogbV9ncmFwaChncmFwaCkKK3sKK30KKworU1NBQ2Fs
Y3VsYXRvcjo6flNTQUNhbGN1bGF0b3IoKQoreworfQorCitTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSogU1NBQ2FsY3VsYXRvcjo6bmV3VmFyaWFibGUoKQoreworICAgIHJldHVybiBtX3ZhcmlhYmxl
cy5hbGxvYyhtX3ZhcmlhYmxlcy5zaXplKCkpOworfQorCitTU0FDYWxjdWxhdG9yOjpEZWYqIFNT
QUNhbGN1bGF0b3I6Om5ld0RlZihWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2Nr
LCBOb2RlKiBub2RlKQoreworICAgIERlZiogZGVmID0gbV9kZWZzLmFkZCh2YXJpYWJsZSwgYmxv
Y2ssIHZhbHVlKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fZGF0YVtibG9ja10ubV9kZWZzLmFkZCh2
YXJpYWJsZSwgZGVmKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHZhcmlh
YmxlLT5tX2Jsb2Nrc1dpdGhEZWZzLmFwcGVuZChibG9jayk7CisgICAgZWxzZQorICAgICAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZGVmOworICAgIHJldHVybiBkZWY7Cit9CisKK1NTQUNh
bGN1bGF0b3I6OkRlZiogU1NBQ2FsY3VsYXRvcjo6bm9uTG9jYWxSZWFjaGluZ0RlZihCYXNpY0Js
b2NrKiBibG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQoreworICAgIHJldHVybiByZWFjaGluZ0Rl
ZkF0VGFpbChtX2dyYXBoLm1fZG9taW5hdG9ycy5pbW1lZGlhdGVEb21pbmF0b3JPZihibG9jayks
IHZhcmlhYmxlKTsKK30KKworU1NBQ2FsY3VsYXRvcjo6RGVmKiBTU0FDYWxjdWxhdG9yOjpyZWFj
aGluZ0RlZkF0VGFpbChCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQorewor
ICAgIGZvciAoOyBibG9jazsgYmxvY2sgPSBtX2dyYXBoLm1fZG9taW5hdG9ycy5pbW1lZGlhdGVE
b21pbmF0b3JPZihibG9jaykpIHsKKyAgICAgICAgaWYgKERlZiogZGVmID0gbV9kYXRhW2Jsb2Nr
XS5tX2RlZnMuZ2V0KHZhcmlhYmxlKSkKKyAgICAgICAgICAgIHJldHVybiBkZWY7CisgICAgfQor
ICAgIHJldHVybiBudWxscHRyOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIw
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR1NTQUNhbGN1bGF0b3JfaAorI2RlZmluZSBERkdTU0FDYWxjdWxhdG9yX2gKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRG9taW5hdG9yLmgiCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBTU0FD
YWxjdWxhdG9yIHByb3ZpZGVzIGEgcmV1c2FibGUgdG9vbCBmb3IgdXNpbmcgdGhlIEN5dHJvbiwg
RmVycmFudGUsIFJvc2VuLCBXZWdtYW4sIGFuZAorLy8gWmFkZWNrICJFZmZpY2llbnRseSBDb21w
dXRpbmcgU3RhdGljIFNpbmdsZSBBc3NpZ25tZW50IEZvcm0gYW5kIHRoZSBDb250cm9sIERlcGVu
ZGVuY2UgR3JhcGgiCisvLyAoVE9QTEFTJzkxKSBhbGdvcml0aG0gZm9yIGNvbXB1dGluZyBTU0Eu
IFNTQUNhbGN1bGF0b3IgZG9lc24ndCBtYWdpY2FsbHkgZG8gZXZlcnl0aGluZyBmb3IgeW91Cisv
LyBidXQgaXQgbWFpbnRhaW5zIHRoZSBtYWpvciBkYXRhIHN0cnVjdHVyZXMgYW5kIGhhbmRsZXMg
bW9zdCBvZiB0aGUgbm9uLWxvY2wgcmVhc29uaW5nLiBIZXJlJ3MKKy8vIHRoZSB3b3JrZmxvdyBv
ZiB1c2luZyBTU0FDYWxjdWxhdG9yIHRvIGV4ZWN1dGUgdGhpcyBhbGdvcml0aG06CisvLworLy8g
MCkgQ3JlYXRlIGEgZnJlc2ggU1NBQ2FsY3VsYXRvciBpbnN0YW5jZS4gWW91IHdpbGwgbmVlZCB0
aGlzIGluc3RhbmNlIG9ubHkgZm9yIGFzIGxvbmcgYXMKKy8vICAgIHlvdSdyZSBub3QgeWV0IGRv
bmUgY29tcHV0aW5nIFNTQS4KKy8vCisvLyAxKSBDcmVhdGUgYW4gU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUgZm9yIGV2ZXJ5IHZhcmlhYmxlIHRoYXQgeW91IHdhbnQgdG8gZG8gUGhpIGluc2VydGlv
bgorLy8gICAgb24uIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlOjppbmRleCgpIGlzIGEgZGVuc2Ug
aW5kZXhpbmcgb2YgdGhlIFZhcmlhYmxlcyB0aGF0IHlvdQorLy8gICAgY3JlYXRlZCwgc28geW91
IGNhbiBlYXNpbHkgdXNlIGEgVmVjdG9yIHRvIG1hcCB0aGUgU1NBQ2FsY3VsYXRvcjo6VmFyaWFi
bGVzIHRvIHlvdXIKKy8vICAgIHZhcmlhYmxlcy4KKy8vCisvLyAyKSBDcmVhdGUgYSBTU0FDYWxj
dWxhdG9yOjpEZWYgZm9yIGV2ZXJ5IGFzc2lnbm1lbnQgdG8gdGhvc2UgdmFyaWFibGVzLiBBIERl
ZiBrbm93cyBhYm91dCB0aGUKKy8vICAgIHZhcmlhYmxlLCB0aGUgYmxvY2ssIGFuZCB0aGUgREZH
OjpOb2RlKiB0aGF0IGhhcyB0aGUgdmFsdWUgYmVpbmcgcHV0IGludG8gdGhlIHZhcmlhYmxlLgor
Ly8KKy8vIDMpIENhbGwgU1NBQ2FsY3VsYXRvcjo6Y29tcHV0ZVBoaXMoKS4gVGhpcyB0YWtlcyBh
IGZ1bmN0b3IgdGhhdCB3aWxsIGluc2VydCB0aGUgUGhpIG5vZGVzLiBJdAorLy8gICAgd2lsbCBh
bHNvIHJlY29yZCB0aG9zZSBQaGkgbm9kZXMgYXMgRGVmcy4gSXQncyBmaW5lIHRvIHVzZSB0aGUg
ZnVuY3RvciB0byBzaW1wbHkgcmVjb3JkIHRoZQorLy8gICAgbG9jYXRpb25zIHdoZXJlIHRoZSBQ
aGlzIHdpbGwgYmUgaW5zZXJ0ZWQsIGV4Y2VwdCB0aGF0IHlvdSBoYXZlIHRvIGNyZWF0ZSB0aGUg
REZHOjpOb2RlJ3MKKy8vICAgIGFuZCByZXR1cm4gdGhlbSBzbyB0aGF0IFNTQUNhbGN1bGF0b3Ig
Y2FuIHJlY29yZCB0aGVtLiBBIGNvbW1vbiBwYXR0ZXJuIGlzIHRvIGNyZWF0ZSB0aGUKKy8vICAg
IG5vZGVzIGJ1dCBwZXJmb3JtIHRoZSBpbnNlcnRpb25zIGluIGJ1bGsgYWZ0ZXIgY29tcHV0ZVBo
aXMoKSBmaW5pc2hlcyBydW5uaW5nLgorLy8KKy8vICAgIE5vdGUgdGhhdCBTU0FDYWxjdWxhdG9y
IG1ha2VzIGl0IGVhc3kgdG8gZG8gdGhlIGFjdHVhbCBpbnNlcnRpb24gb2YgUGhpcyBhZnRlciB0
aGUgY2FsbCB0bworLy8gICAgY29tcHV0ZVBoaXMoKSwgYmVjYXVzZSBpdCB3aWxsIHJlY29yZCBh
IGxpc3Qgb2YgYWxsIFBoaXMgYXQgZWFjaCBibG9jayBhbmQgeW91IGNhbiBnZXQgdGhpcworLy8g
ICAgbGlzdCB1c2luZyBTU0FDYWxjdWxhdG9yOjpwaGlzRm9yQmxvY2soKS4gVGh1cyBhIGNvbW1v
biBwYXR0ZXJuIGlzIHRvIGFsbG9jYXRlIHRoZSBQaGkgbm9kZXMKKy8vICAgIGluIHRoZSBmdW5j
dG9yIHBhc3NlZCB0byBjb21wdXRlUGhpcygpLCBhbmQgdGhlbiBsYXRlciBpbnNlcnQgdGhlbSBi
eSBjYWxsaW5nCisvLyAgICBwaGlzRm9yQmxvY2soKS4KKy8vCisvLyA0KSBJbnNlcnQgdGhlIFVw
c2lsb25zIGZvciBhbGwgb2YgdGhlIFBoaXMuIFlvdSBjYW4gdXNlIFNTQUNhbGN1bGF0b3I6OnBo
aXNGb3JCbG9jaygpIG9uIGVhY2gKKy8vICAgIHN1Y2Nlc3NvciBvZiBhIGJsb2NrLCBhbmQgU1NB
Q2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZBdFRhaWwoKSB0byBmaW5kIGFsbCBvZiB0aGUgVXBzaWxv
bnMKKy8vICAgIHRoYXQgbmVlZCB0byBiZSBpbnNlcnRlZCBhcyB3ZWxsIGFzIGFsbCBvZiB0aGUg
c291cmNlIG5vZGVzIHRoYXQgdGhvc2UgVXBzaWxvbnMgc2hvdWxkIHVzZS4KKy8vCisvLyAgICBJ
dCBtYWtlcyBzZW5zZSB0byBkbyB0aGlzIGFzIHBhcnQgb2YgdGhlIHNhbWUgcG9zdC1jb21wdXRl
UGhpcygpIHBhc3MgdGhhdCBpdCdzIGNvbW1vbiB0byBkbworLy8gICAgaW4gKDMpLgorLy8KKy8v
IDUpIFRyYXZlcnNlIGVhY2ggYmFzaWMgYmxvY2sgaW4gdGhlIGdyYXBoIHRvIHJlcGxhY2UgYWxs
IHVzZXMgb2YgdmFyaWFibGVzIHdpdGggdGhlIE5vZGUgdGhhdAorLy8gICAgaXMgdGhlIHJlYWNo
aW5nIERlZi4gU1NBQ2FsY3VsYXRvciB3aWxsIGJlIGFibGUgdG8gdGVsbCB5b3UgdGhlIG5vbi1s
b2NhbCByZWFjaGluZyBEZWYgd2hlbgorLy8gICAgeW91IGNhbGwgU1NBQ2FsY3VsYXRvcjo6bm9u
TG9jYWxSZWFjaGluZ0RlZigpLiBIb3dldmVyLCBmb3IgdGhlIGJsb2NrLWxvY2FsIHJlYWNoaW5n
IERlZiwKKy8vICAgIHlvdSBhcmUgb24geW91ciBvd24uIFlvdSBwcm9iYWJseSB3YW50IHRvIGNy
ZWF0ZSB5b3VyIG93biBibG9jay1sb2NhbCBtYXAgb2YgZGVmJ3MgeW91J3ZlCisvLyAgICBzZWVu
IHNvIGZhci4gSXQncyBvbmx5IHdoZW4gdGhlIGxvY2FsIG1hcCBsYWNrcyBhbiBlbnRyeSBmb3Ig
YSB2YXJpYWJsZSB0aGF0IHlvdSBjYWxsCisvLyAgICBub25Mb2NhbFJlYWNoaW5nRGVmKCkuCisv
LworLy8gICAgSSBsaWtlIHRvIHRoaW5rIG9mIHRoaXMgYXMgYSBzZXBhcmF0ZSBzdGVwLCBidXQg
eW91IGNhbiBkbyB0aGlzIGFzIHBhcnQgb2YgdGhlCisvLyAgICBwb3N0LWNvbXB1dGVQaGlzKCkg
cGFzcyBpbiAoMykuCisvLworLy8gVGhlIG1vc3Qgb2J2aW91cyB1c2Ugb2YgU1NBQ2FsY3VsYXRv
ciBpcyBmb3IgdGhlIENQUy0+U1NBIGNvbnZlcnNpb24gaXRzZWxmLCBidXQgaXQncyBtZWFudCB0
bworLy8gYWxzbyBiZSB1c2VkIGZvciBTU0EgdXBkYXRlIGFuZCBmb3IgdGhpbmdzIGxpa2UgdGhl
IHByb21vdGlvbiBvZiBoZWFwIGZpZWxkcyB0byBsb2NhbCBTU0EKKy8vIHZhcmlhYmxlcy4KKwor
Y2xhc3MgU1NBQ2FsY3VsYXRvciB7CitwdWJsaWM6CisgICAgU1NBQ2FsY3VsYXRvcihHcmFwaCYp
OworICAgIH5TU0FDYWxjdWxhdG9yKCk7CisgICAgCisgICAgY2xhc3MgVmFyaWFibGUgeworICAg
IHB1YmxpYzoKKyAgICAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFZhcmlhYmxlKCkKKyAgICAgICAg
ICAgIDogbV9pbmRleChVSU5UX01BWCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBWYXJpYWJsZSh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9pbmRleChp
bmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmxvY2tMaXN0IG1fYmxvY2tz
V2l0aERlZnM7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKyAgICAKKyAgICBj
bGFzcyBEZWYgeworICAgIHB1YmxpYzoKKyAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlKCkgY29u
c3QgeyByZXR1cm4gbV92YXJpYWJsZTsgfQorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICAgICAgCisgICAgICAgIE5vZGUqIHZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAg
ICBEZWYoKQorICAgICAgICAgICAgOiBtX3ZhcmlhYmxlKG51bGxwdHIpCisgICAgICAgICAgICAs
IG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICwgbV92YWx1ZShudWxscHRyKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERlZihWYXJpYWJsZSogdmFyaWFibGUs
IEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiB2YWx1ZSkKKyAgICAgICAgICAgIDogbV92YXJpYWJs
ZSh2YXJpYWJsZSkKKyAgICAgICAgICAgICwgbV9ibG9jayhibG9jaykKKyAgICAgICAgICAgICwg
bV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBW
YXJpYWJsZSogbV92YXJpYWJsZTsKKyAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICAg
ICAgTm9kZSogbV92YWx1ZTsKKyAgICB9OworICAgIAorICAgIFZhcmlhYmxlKiBuZXdWYXJpYWJs
ZSgpOworICAgIERlZiogbmV3RGVmKFZhcmlhYmxlKiwgQmFzaWNCbG9jayosIE5vZGUqKTsKKyAg
ICAKKyAgICBWYXJpYWJsZSogdmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuICZtX3Zh
cmlhYmxlc1tpbmRleF07IH0KKyAgICAKKyAgICAvLyBUaGUgUGhpSW5zZXJ0aW9uRnVuY3RvciB0
YWtlcyBhIFZhcmlhYmxlIGFuZCBhIEJhc2ljQmxvY2sgYW5kIGVpdGhlciBpbnNlcnRzIGEgUGhp
IGFuZAorICAgIC8vIHJldHVybnMgdGhlIE5vZGUgZm9yIHRoYXQgUGhpLCBvciBpdCBkZWNpZGVz
IHRoYXQgaXQncyBub3Qgd29ydGggaXQgdG8gaW5zZXJ0IGEgUGhpIGF0IHRoYXQKKyAgICAvLyBi
bG9jayBiZWNhdXNlIG9mIHNvbWUgYWRkaXRpb25hbCBwcnVuaW5nIGNvbmRpdGlvbiAodHlwaWNh
bGx5IGxpdmVuZXNzKSBhbmQgcmV0dXJucworICAgIC8vIG51bGxwdHIuIElmIGEgbm9uLW51bGwg
Tm9kZSogaXMgcmV0dXJuZWQsIGEgbmV3IERlZiBpcyBjcmVhdGVkLCBzbyB0aGF0CisgICAgLy8g
bm9uTG9jYWxSZWFjaGluZ0RlZigpIHdpbGwgZmluZCBpdCBsYXRlci4gTm90ZSB0aGF0IGl0IGlz
IGdlbmVyYWxseSBhbHdheXMgc291bmQgdG8gbm90CisgICAgLy8gcHJ1bmUgYW55IFBoaXMgKHRo
YXQgaXMsIHRvIGFsd2F5cyBoYXZlIHRoZSBmdW5jdG9yIGluc2VydCBhIFBoaSBhbmQgbmV2ZXIg
cmV0dXJuIG51bGxwdHIpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBoaUluc2VydGlvbkZ1bmN0
b3I+CisgICAgdm9pZCBjb21wdXRlUGhpcyhQaGlJbnNlcnRpb25GdW5jdG9yIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9kb21p
bmF0b3JzLmlzVmFsaWQoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJp
YWJsZSA6IG1fdmFyaWFibGVzKSB7CisgICAgICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5m
b3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+bV9ibG9ja3NXaXRoRGVmcywKKyAgICAgICAgICAgICAgICBbJl0g
KEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9IGZ1bmN0b3IodmFyaWFibGUsIGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFwaGlOb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tEYXRhKiBkYXRhID0g
bV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICAgICAgRGVmKiBwaGlEZWYgPSBtX3BoaXMu
YWRkKHZhcmlhYmxlLCBibG9jaywgcGhpTm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEu
bV9waGlzLmFwcGVuZChwaGlEZWYpOworICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IGRhdGEubV9kZWZzLmFkZCh2YXJpYWJsZSwgcGhpRGVmKTsKKyAgICAgICAgICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGNvbnN0IFZlY3RvcjxEZWYqPiYgcGhpc0ZvckJsb2NrKEJhc2lj
QmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVtibG9ja10ubV9waGlz
OworICAgIH0KKyAgICAKKyAgICAvLyBJZ25vcmVzIGRlZnMgd2l0aGluIHRoZSBnaXZlbiBibG9j
azsgaXQgYXNzdW1lcyB0aGF0IHlvdSd2ZSB0YWtlbiBjYXJlIG9mIHRob3NlCisgICAgLy8geW91
cnNlbGYuCisgICAgRGVmKiBub25Mb2NhbFJlYWNoaW5nRGVmKEJhc2ljQmxvY2sqLCBWYXJpYWJs
ZSopOworICAgIERlZiogcmVhY2hpbmdEZWZBdEhlYWQoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlh
YmxlKiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub25Mb2NhbFJlYWNoaW5nRGVm
KGJsb2NrLCB2YXJpYWJsZSk7CisgICAgfQorICAgIAorICAgIC8vIENvbnNpZGVycyB0aGUgZGVm
IHdpdGhpbiB0aGUgZ2l2ZW4gYmxvY2ssIGJ1dCBvbmx5IHdvcmtzIGF0IHRoZSB0YWlsIG9mIHRo
ZSBibG9jay4KKyAgICBEZWYqIHJlYWNoaW5nRGVmQXRUYWlsKEJhc2ljQmxvY2sqLCBWYXJpYWJs
ZSopOworICAgIAorcHJpdmF0ZToKKyAgICBTZWdtZW50ZWRWZWN0b3I8VmFyaWFibGU+IG1fdmFy
aWFibGVzOworICAgIEJhZzxEZWY+IG1fZGVmczsKKyAgICAKKyAgICBCYWc8RGVmPiBtX3BoaXM7
CisgICAgCisgICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAgIEhhc2hNYXA8VmFyaWFibGUq
LCBEZWYqPiBtX2RlZnM7CisgICAgICAgIFZlY3RvcjxEZWYqPiBtX3BoaXM7CisgICAgfTsKKyAg
ICAgICAgICAgIAorICAgIEJsb2NrTWFwPEJsb2NrRGF0YT4gbV9kYXRhOworICAgIAorICAgIEdy
YXBoJiBtX2dyYXBoOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTU0FDYWxjdWxhdG9yX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNp
bmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1NTQUNhbGN1bGF0b3IuaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAg
LTQzLDYgKzQ0LDcgQEAgY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVibGljIFBoYXNlIAog
cHVibGljOgogICAgIFNTQUNvbnZlcnNpb25QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDog
UGhhc2UoZ3JhcGgsICJTU0EgY29udmVyc2lvbiIpCisgICAgICAgICwgbV9jYWxjdWxhdG9yKGdy
YXBoKQogICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQogICAgICAgICAsIG1fY2hhbmdl
ZChmYWxzZSkKICAgICB7CkBAIC01NywyNTUgKzU5LDE2MCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRWxpbWlu
YXRlIGFsbCBkdXBsaWNhdGUgb3Igc2VsZi1wb2ludGluZyBQaGkgZWRnZXMuIFRoaXMgbWVhbnMg
dGhhdAotICAgICAgICAvLyB3ZSB0cmFuc2Zvcm06Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIHA6
IFBoaShAbjEsIEBuMiwgQG4zKQotICAgICAgICAvLwotICAgICAgICAvLyBpbnRvOgotICAgICAg
ICAvLwotICAgICAgICAvLyBwOiBQaGkoQHgpCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGlmIGVh
Y2ggQG5pIGluIHtAbjEsIEBuMiwgQG4zfSBpcyBlaXRoZXIgZXF1YWwgdG8gQHAgdG8gaXMgZXF1
YWwKLSAgICAgICAgLy8gdG8gQHgsIGZvciBleGFjdGx5IG9uZSBvdGhlciBAeC4gQWRkaXRpb25h
bGx5LCB0cml2aWFsIFBoaXMgKGkuZS4KLSAgICAgICAgLy8gcDogUGhpKEB4KSkgYXJlIGZvcndh
cmRlZCwgc28gdGhhdCBpZiBoYXZlIGFuIGVkZ2UgdG8gc3VjaCBAcCwgd2UKLSAgICAgICAgLy8g
cmVwbGFjZSBpdCB3aXRoIEB4LiBUaGlzIGxvb3AgZG9lcyB0aGlzIGZvciBQaGlzIG9ubHk7IGxh
dGVyIHdlIGRvCi0gICAgICAgIC8vIHN1Y2ggZm9yd2FyZGluZyBmb3IgUGhpIHJlZmVyZW5jZXMg
Zm91bmQgaW4gb3RoZXIgbm9kZXMuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFNlZSBBeWNvY2sg
YW5kIEhvcnNwb29sIGluIENDJzAwIGZvciBhIGJldHRlciBkZXNjcmlwdGlvbiBvZiB3aGF0Ci0g
ICAgICAgIC8vIHdlJ3JlIGRvaW5nIGhlcmUuCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAg
ICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBo
aUluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2NrLT5waGlz
W3BoaUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBoaS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCktPmlzQ2FwdHVyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkUGhpQ2hpbGRyZW4ocGhpKTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVkdXBsaWNhdGVDaGlsZHJlbihwaGkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICAgICAgbV9ncmFw
aC5jbGVhclJlcGxhY2VtZW50cygpOworCisgICAgICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlIGZvciBldmVyeSByb290IFZhcmlhYmxlQWNjZXNzRGF0YS4KKyAgICAgICAg
Zm9yIChWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlIDogbV9ncmFwaC5tX3ZhcmlhYmxlQWNj
ZXNzRGF0YSkgeworICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNSb290KCkgfHwgdmFyaWFi
bGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9j
YWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBBU1NFUlQoc3NhVmFyaWFibGUt
PmluZGV4KCkgPT0gbV92YXJpYWJsZUZvclNTQUluZGV4LnNpemUoKSk7CisgICAgICAgICAgICBt
X3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldID0gdmFyaWFibGU7Cisg
ICAgICAgICAgICBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUuYWRkKHZhcmlhYmxlLCBzc2FWYXJp
YWJsZSk7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZvciBlYWNoIGJhc2ljIGJs
b2NrLCBmb3IgZWFjaCBsb2NhbCBsaXZlIGF0IHRoZSBoZWFkIG9mIHRoYXQgYmxvY2ssCi0gICAg
ICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBub2RlIHdlIHNob3VsZCBiZSByZWZlcnJpbmcgdG8gaW5z
dGVhZCBvZiB0aGF0IGxvY2FsLgotICAgICAgICAvLyBJZiBpdCB0dXJucyBvdXQgdG8gYmUgYSBu
b24tdHJpdmlhbCBQaGksIG1ha2Ugc3VyZSB0aGF0IHdlIGNyZWF0ZSBhbgotICAgICAgICAvLyBT
U0EgUGhpIGFuZCBVcHNpbG9ucyBpbiBwcmVkZWNlc3NvciBibG9ja3MuIFdlIHJldXNlCi0gICAg
ICAgIC8vIEJhc2ljQmxvY2s6OnZhcmlhYmxlc0F0SGVhZCBmb3IgdHJhY2tpbmcgd2hpY2ggbm9k
ZXMgdG8gcmVmZXIgdG8uCi0gICAgICAgIE9wZXJhbmRzPGJvb2w+IG5vblRyaXZpYWxQaGlzKE9w
ZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAg
Ly8gRmluZCBhbGwgU2V0TG9jYWxzIGFuZCBjcmVhdGUgRGVmcyBmb3IgdGhlbS4gV2UgaGFuZGxl
IFNldEFyZ3VtZW50IGJ5IGNyZWF0aW5nIGEKKyAgICAgICAgLy8gR2V0QXJndW1lbnQuCiAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgbm9uVHJpdmlhbFBoaXMuZmlsbChmYWxzZSk7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cGhpcy5zaXplKCk7IGktLTspIHsK
LSAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1tpXTsKLSAgICAgICAgICAg
ICAgICBpZiAoIXBoaS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCkpCi0gICAgICAgICAgICAgICAg
ICAgIG5vblRyaXZpYWxQaGlzLm9wZXJhbmQocGhpLT5sb2NhbCgpKSA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwotICAgICAgICAgICAgICAgIGlm
ICghbm9kZSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTXVzdCBwcm9jZXNzIHRoZSBi
bG9jayBpbiBmb3J3YXJkIGRpcmVjdGlvbiBiZWNhdXNlIHdlIHdhbnQgdG8gc2VlIHRoZSBsYXN0
CisgICAgICAgICAgICAvLyBhc3NpZ25tZW50IGZvciBldmVyeSBsb2NhbC4KKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsg
Kytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5v
ZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gU2V0TG9jYWwgJiYg
bm9kZS0+b3AoKSAhPSBTZXRBcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkF0IGJsb2NrICMiLCBibG9ja0luZGV4LCAiIGZvciBvcGVy
YW5kIHIiLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKSwgIiBoYXZl
IG5vZGUgIiwgbm9kZSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFBvaXNvbiB0aGlzIGVudHJ5IGluIHZhcmlhYmxlc0F0SGVhZCBiZWNh
dXNlIHdlIGRvbid0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdhbnQgYW55b25lIHRvIHRyeSB0
byByZWZlciB0byBpdCwgaWYgdGhlIHZhcmlhYmxlIGlzCi0gICAgICAgICAgICAgICAgICAgIC8v
IGNhcHR1cmVkLgotICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ld
ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAg
ICAgIGNhc2UgUGhpOgotICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDoKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICBHZXRBcmd1bWVu
dCwgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZS0+b3JpZ2luKTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3Ao
KSA9PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0ZsdXNoZWQgPSAhIShub2RlLT5mbGFncygpICYgTm9k
ZUlzRmx1c2hlZCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9uVHJpdmlhbFBoaXMu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRWRnZSBl
ZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoZWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgT25lIGNoaWxkOiAiLCBl
ZGdlLCAiLCAiLCBSYXdQb2ludGVyKGVkZ2Uubm9kZSgpKSwgIlxuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBub2RlID0gZWRnZS5ub2RlKCk7IC8vIEl0J3Mgc29tZXRoaW5nIGZyb20gYSBk
aWZmZXJlbnQgYmFzaWMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgTm9uLXRyaXZpYWwuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEl0J3MgYSBub24tdHJpdmlhbCBQaGkuCi0gICAgICAgICAgICAgICAgICAgICAgICBG
bHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGVGbGFncyByZXN1bHQgPSByZXN1bHRGb3IoZm9ybWF0KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVzZUtpbmRGb3IoZm9ybWF0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIFBoaSwgTm9kZU9yaWdpbigp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnNlcnRlZCBuZXcgbm9kZTogIiwgbm9kZSwgIlxu
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKHJlc3VsdCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVSZXN1bHRNYXNrKSA9PSByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmVkZWNlc3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBwcmVkZWNlc3Nv
ci0+bGFzdCgpLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhub2RlKSwgRWRnZShwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsW2ldLCB1c2VLaW5kKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZsdXNoZWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBEbyBub3RoaW5nLiBGb3IgbXVsdGlwbGUgcmVhc29ucy4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFz
b24gIzE6IElmIHRoZSBsb2NhbCBpcyBmbHVzaGVkIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBib3Ro
ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGEgTW92SGludCBzaW5jZSBl
dmVyeSBwYXRoIHRvIHRoaXMgcG9pbnQgaW4gdGhlIGNvZGUgd2lsbAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGhhdmUgZmx1c2hlZCB0aGUgYnl0ZWNvZGUgdmFyaWFibGUgdXNpbmcg
YSBTZXRMb2NhbCBhbmQgaGVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUg
QXZhaWxhYmlsaXR5OjpmbHVzaGVkQXQoKSB3aWxsIGFncmVlLCBhbmQgdGhhdCB3aWxsIGJlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VmZmljaWVudCBmb3IgZmlndXJpbmcgb3V0
IGhvdyB0byByZWNvdmVyIHRoZSB2YXJpYWJsZSdzIHZhbHVlLgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMjogSWYg
d2UgaGFkIGluc2VydGVkIGEgTW92SGludCBhbmQgdGhlIFBoaSBmdW5jdGlvbiBoYWQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBkaWVkIChiZWNhdXNlIHRoZSBvbmx5IHVzZXIgb2Yg
dGhlIHZhbHVlIHdhcyB0aGUgImZsdXNoIiAtIGkuZS4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzb21lIGFzeW5jaHJvbm91cyBydW50aW1lIHRoaW5neSkgdGhlbiB0aGUgTW92SGlu
dCB3b3VsZCB0dXJuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50byBhIFpvbWJp
ZUhpbnQsIHdoaWNoIHdvdWxkIGZvb2wgdXMgaW50byB0aGlua2luZyB0aGF0IHRoZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlIGlzIGRlYWQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMz
OiBJZiB3ZSBoYWQgaW5zZXJ0ZWQgYSBNb3ZIaW50IHRoZW4gZXZlbiBpZiB0aGUgUGhpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RheWVkIGFsaXZlLCB3ZSB3b3VsZCBzdGlsbCBl
bmQgdXAgZ2VuZXJhdGluZyBpbmVmZmljaWVudCBjb2RlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc2luY2Ugd2Ugd291bGQgYmUgdGVsbGluZyB0aGUgT1NSIGV4aXQgY29tcGlsZXIg
dG8gdXNlIHNvbWUgU1NBCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgZm9y
IHRoZSBieXRlY29kZSB2YXJpYWJsZSByYXRoZXIgdGhhbiBqdXN0IHRlbGxpbmcgaXQgdGhhdAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBvbiB0
aGUgc3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBOb2RlT3JpZ2luKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5v
ZmZzZXQoKSksIG5vZGUtPmRlZmF1bHRFZGdlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSBub2RlOwor
ICAgICAgICAgICAgICAgIG1fY2FsY3VsYXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAg
IG1fc3NhVmFyaWFibGVGb3JWYXJpYWJsZS5nZXQobm9kZS0+dmFyaWFibGUpLCBibG9jaywgY2hp
bGROb2RlKTsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
aWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIlZhcmlhYmxlcyBhdCBoZWFkIGFm
dGVyIFNTQSBQaGkgaW5zZXJ0aW9uOlxuIik7Ci0gICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsICpibG9jaywgIjogIiwgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZCwgIlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdmFyaWFibGVzQXRIZWFkIGluIGVhY2ggYmxv
Y2sgcmVmZXJzIHRvIGVpdGhlcjoKKyAgICAgICAgLy8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRv
IGJlIGluc2VydGVkLiBUaGlzIGNyZWF0ZXMgdGhlIFBoaSdzIGJ1dCBkb2Vzbid0IGluc2VydCB0
aGVtCisgICAgICAgIC8vIHlldC4gV2Ugd2lsbCBsYXRlciBrbm93IHdoZXJlIHRvIGluc2VydCB0
aGVtIGJlY2F1c2UgU1NBQ2FsY3VsYXRvciBpcyBzdWNoIGEgYnJvLgorICAgICAgICBtX2NhbGN1
bGF0b3IuY29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKiBzc2FWYXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IGJvb2wgeworICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5k
ZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIFBydW5lIGJ5IGxpdmVuZXNzLiBUaGlzIGRvZXNuJ3QgYnV5IHVzIG11Y2ggb3RoZXIg
dGhhbiBjb21waWxlIHRpbWVzLgorICAgICAgICAgICAgICAgIGlmICghYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUt
PnByZWRpY3Rpb24oKSwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgICAgIEZsdXNo
Rm9ybWF0IGZvcm1hdCA9IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpOworICAgICAgICAgICAgICAg
IE5vZGVGbGFncyByZXN1bHQgPSByZXN1bHRGb3IoZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBw
aGlOb2RlLT5tZXJnZUZsYWdzKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5v
ZGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIC8vIERvIHRoZSBidWxrIG9m
IHRoZSBTU0EgY29udmVyc2lvbi4gRm9yIGVhY2ggYmxvY2ssIHRoaXMgdHJhY2tzIHRoZSBvcGVy
YW5kLT5Ob2RlCisgICAgICAgIC8vIG1hcHBpbmcgYmFzZWQgb24gYSBjb21iaW5hdGlvbiBvZiB3
aGF0IHRoZSBTU0FDYWxjdWxhdG9yIHRlbGxzIHVzLCBhbmQgdXMgd2Fsa2luZyBvdmVyCisgICAg
ICAgIC8vIHRoZSBibG9jayBpbiBmb3J3YXJkIG9yZGVyLiBUaGUgbWFpbiBkYXRhIHN0cnVjdHVy
ZSBpcyB2YWx1ZUZvck9wZXJhbmQuCiAgICAgICAgIC8vCi0gICAgICAgIC8vIDEpIEEgbmV3IFNT
QSBwaGkgaW4gdGhlIGN1cnJlbnQgYmxvY2suCi0gICAgICAgIC8vIDIpIEEgU2V0QXJndW1lbnQs
IHdoaWNoIHdpbGwgc29vbiBnZXQgY29udmVydGVkIGludG8gYSBHZXRBcmd1bWVudC4KLSAgICAg
ICAgLy8gMykgQW4gb2xkIENQUyBwaGkgaW4gYSBkaWZmZXJlbnQgYmxvY2suCisgICAgICAgIC8v
IFRoaXMgZG9lcyB0aHJlZSB0aGluZ3MgYXQgb25jZToKICAgICAgICAgLy8KLSAgICAgICAgLy8g
V2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBmb3IgKDEpIGFuZCAoMiksIGJ1dCB3ZSBkbyBu
ZWVkIHRvCi0gICAgICAgIC8vIGRvIGEgcmVwbGFjZW1lbnQgZm9yICgzKS4KLSAgICAgICAgCi0g
ICAgICAgIC8vIENsZWFyIGFsbCByZXBsYWNlbWVudHMsIHNpbmNlIG90aGVyIHBoYXNlcyBtYXkg
aGF2ZSB1c2VkIHRoZW0uCi0gICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChkdW1wR3JhcGgpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIkdy
YXBoIGp1c3QgYmVmb3JlIGlkZW50aWZ5aW5nIHJlcGxhY2VtZW50czpcbiIpOwotICAgICAgICAg
ICAgbV9ncmFwaC5kdW1wKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZvciBh
bGwgb2YgdGhlIG9sZCBDUFMgUGhpcywgZmlndXJlIG91dCB3aGF0IHRoZXkgY29ycmVzcG9uZCB0
byBpbiBTU0EuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5u
dW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBibG9jayAjIiwgYmxvY2tJbmRleCwg
IlxuIik7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMu
c2l6ZSgpOyBwaGlJbmRleC0tOykgewotICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2Nr
LT5waGlzW3BoaUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnNpZGVy
aW5nICIsIHBoaSwgIiAoIiwgUmF3UG9pbnRlcihwaGkpLCAiKSwgZm9yIHIiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgcGhpLT5sb2NhbCgpLCAiLCBhbmQgaXRzIHJlcGxhY2VtZW50IGluICIs
ICpibG9jaywgIiwgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQub3BlcmFuZChwaGktPmxvY2FsKCkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKHBoaSAhPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmQocGhpLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgcGhpLT5yZXBsYWNlbWVudCA9IGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChwaGktPmxvY2FsKCkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBOb3cgbWFrZSBzdXJlIHRoYXQgYWxs
IHZhcmlhYmxlc0F0SGVhZCBpbiBlYWNoIGJsb2NrIHBvaW50cyB0byB0aGUKLSAgICAgICAgLy8g
Y2Fub25pY2FsIFNTQSB2YWx1ZS4gUHJpb3IgdG8gdGhpcywgdmFyaWFibGVzQXRIZWFkW2xvY2Fs
XSBtYXkgcG9pbnQgdG8KLSAgICAgICAgLy8gYW4gb2xkIENQUyBQaGkgaW4gYSBkaWZmZXJlbnQg
YmxvY2suCisgICAgICAgIC8vIC0gSW5zZXJ0cyB0aGUgUGhpcyBpbiBhbGwgb2YgdGhlIHBsYWNl
cyB3aGVyZSB0aGV5IG5lZWQgdG8gZ28uIFdlJ3ZlIGFscmVhZHkgY3JlYXRlZAorICAgICAgICAv
LyAgIHRoZW0gYW5kIHRoZXkgYXJlIGFjY291bnRlZCBmb3IgaW4gdGhlIFNTQUNhbGN1bGF0b3In
cyBkYXRhIHN0cnVjdHVyZXMsIGJ1dCB3ZQorICAgICAgICAvLyAgIGhhdmVuJ3QgaW5zZXJ0ZWQg
dGhlbSB5ZXQsIG1vc3RseSBiZWNhdXNlIHdlIHdhbnQgdG8gaW5zZXJ0IGFsbCBvZiBhIGJsb2Nr
J3MgUGhpcyBpbgorICAgICAgICAvLyAgIG9uZSBnbyB0byBhbW9ydGl6ZSB0aGUgY29zdCBvZiBu
b2RlIGluc2VydGlvbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBDcmVhdGUgYW5kIGluc2Vy
dCBVcHNpbG9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBDb252ZXJ0IGFsbCBvZiB0aGUg
cHJlZXhpc3RpbmcgU1NBIG5vZGVzIChvdGhlciB0aGFuIHRoZSBvbGQgQ1BTIFBoaSBub2Rlcykg
aW50byBTU0EKKyAgICAgICAgLy8gICBmb3JtIGJ5IHJlcGxhY2luZyBhcyBmb2xsb3dzOgorICAg
ICAgICAvLworICAgICAgICAvLyAgIC0gR2V0TG9jYWwgb3ZlciBjYXB0dXJlZCB2YXJpYWJsZXMg
bG9zZSB0aGVpciBwaGlzLgorICAgICAgICAvLworICAgICAgICAvLyAgIC0gR2V0TG9jYWwgb3Zl
ciB1bmNhcHR1cmVkIHZhcmlhYmxlcyBkaWUgYW5kIGdldCByZXBsYWNlZCB3aXRoIHJlZmVyZW5j
ZXMgdG8gdGhlIG5vZGUKKyAgICAgICAgLy8gICAgIHNwZWNpZmllZCBieSB2YWx1ZUZvck9wZXJh
bmQuCisgICAgICAgIC8vCisgICAgICAgIC8vICAgLSBTZXRMb2NhbCBnZXRzIE5vZGVNdXN0R2Vu
ZXJhdGUgaWYgaXQncyBmbHVzaGVkLCBvciB0dXJucyBpbnRvIGEgQ2hlY2sgb3RoZXJ3aXNlLgor
ICAgICAgICAvLworICAgICAgICAvLyAgIC0gRmx1c2ggbG9zZXMgaXRzIGNoaWxkcmVuIGFuZCB0
dXJucyBpbnRvIGEgUGhhbnRvbS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAtIFBoYW50b21M
b2NhbCBiZWNvbWVzIFBoYW50b20sIGFuZCBpdHMgY2hpbGQgaXMgd2hhdGV2ZXIgaXMgc3BlY2lm
aWVkIGJ5CisgICAgICAgIC8vICAgICB2YWx1ZUZvck9wZXJhbmQuCisgICAgICAgIC8vCisgICAg
ICAgIC8vICAgLSBTZXRBcmd1bWVudCBpcyByZW1vdmVkIHVubGVzcyBpdCdzIGEgY2FwdHVyZWQg
dmFyaWFibGUuIE5vdGUgdGhhdCBHZXRBcmd1bWVudCBub2RlcworICAgICAgICAvLyAgICAgaGF2
ZSBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQuCisgICAgICAgIE9wZXJhbmRzPE5vZGUqPiB2YWx1ZUZv
ck9wZXJhbmQoT3BlcmFuZHNMaWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQp
OwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUp
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5jbGVhcigpOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IHZhbHVlRm9yT3BlcmFuZC5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgICAgICBOb2RlKiBub2RlQXRIZWFkID0gYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGVBdEhlYWQpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHdoaWxlIChub2RlLT5yZXBsYWNlbWVudCkg
ewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZSAhPSBub2RlLT5yZXBsYWNlbWVudCk7
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5yZXBsYWNlbWVudDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXSA9IG5v
ZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICh2ZXJi
b3NlKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJWYXJpYWJsZXMgYXQgaGVhZCBhZnRlciBjb252
ZXJnZW5jZTpcbiIpOwotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGVBdEhlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgKmJs
b2NrLCAiOiAiLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCAiXG4iKTsKKworICAgICAgICAgICAg
ICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1fc3NhVmFyaWFibGVG
b3JWYXJpYWJsZS5nZXQodmFyaWFibGUpOworICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFu
ZFtpXSA9IG1fY2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgc3NhVmFyaWFibGUp
OwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBDb252ZXJ0
IG9wZXJhdGlvbnMgb3ZlciBsb2NhbHMgaW50byBvcGVyYXRpb25zIG92ZXIgU1NBIG5vZGVzLgot
ICAgICAgICAvLyAtIEdldExvY2FsIG92ZXIgY2FwdHVyZWQgdmFyaWFibGVzIGxvc2UgdGhlaXIg
cGhpcy4KLSAgICAgICAgLy8gLSBHZXRMb2NhbCBvdmVyIHVuY2FwdHVyZWQgdmFyaWFibGVzIGRp
ZSBhbmQgZ2V0IHJlcGxhY2VkIHdpdGggcmVmZXJlbmNlcwotICAgICAgICAvLyAgIHRvIHRoZSBu
b2RlIHNwZWNpZmllZCBieSB2YXJpYWJsZXNBdEhlYWQuCi0gICAgICAgIC8vIC0gU2V0TG9jYWwg
Z2V0cyBOb2RlTXVzdEdlbmVyYXRlIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50byBhCi0g
ICAgICAgIC8vICAgQ2hlY2sgb3RoZXJ3aXNlLgotICAgICAgICAvLyAtIEZsdXNoIGxvc2VzIGl0
cyBjaGlsZHJlbiBhbmQgdHVybnMgaW50byBhIFBoYW50b20uCi0gICAgICAgIC8vIC0gUGhhbnRv
bUxvY2FsIGJlY29tZXMgUGhhbnRvbSwgYW5kIGl0cyBjaGlsZCBpcyB3aGF0ZXZlciBpcyBzcGVj
aWZpZWQKLSAgICAgICAgLy8gICBieSB2YXJpYWJsZXNBdEhlYWQuCi0gICAgICAgIC8vIC0gU2V0
QXJndW1lbnQgdHVybnMgaW50byBHZXRBcmd1bWVudCB1bmxlc3MgaXQncyBhIGNhcHR1cmVkIHZh
cmlhYmxlLgotICAgICAgICAvLyAtIFVwc2lsb25zIGdldCB0aGVpciBjaGlsZHJlbiBmaXhlZCB0
byByZWZlciB0byB0aGUgdHJ1ZSB2YWx1ZSBvZiB0aGF0IGxvY2FsCi0gICAgICAgIC8vICAgYXQg
dGhlIGVuZCBvZiB0aGUgYmxvY2suIFByaW9yIHRvIHRoaXMgbG9vcCwgVXBzaWxvbnMgd2lsbCBy
ZWZlciB0bwotICAgICAgICAvLyAgIHZhcmlhYmxlQXRUYWlsW29wZXJhbmRdLCB3aGljaCBtYXkg
YmUgYW55IG9mIEZsdXNoLCBQaGFudG9tTG9jYWwsIEdldExvY2FsLAotICAgICAgICAvLyAgIFNl
dExvY2FsLCBTZXRBcmd1bWVudCwgb3IgUGhpLiBXZSBhY2NvbXBsaXNoIHRoaXMgYnkgc2V0dGlu
ZyB0aGUKLSAgICAgICAgLy8gICByZXBsYWNlbWVudCBwb2ludGVycyBvZiBhbGwgb2YgdGhvc2Ug
bm9kZXMgdG8gcmVmZXIgdG8gZWl0aGVyCi0gICAgICAgIC8vICAgdmFyaWFibGVzQXRIZWFkW29w
ZXJhbmRdLCBvciB0aGUgY2hpbGQgb2YgdGhlIFNldExvY2FsLgotICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsK
LSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4
KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+
cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgYmxvY2stPnBoaXNb
cGhpSW5kZXhdLT5yZXBsYWNlbWVudCA9Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZChibG9jay0+cGhpc1twaGlJbmRleF0tPmxvY2FsKCkpOworICAg
ICAgICAgICAgLy8gSW5zZXJ0IFBoaXMgYnkgYXNraW5nIHRoZSBjYWxjdWxhdG9yIHdoYXQgcGhp
cyB0aGVyZSBhcmUgaW4gdGhpcyBibG9jay4gQWxzbyB1cGRhdGUKKyAgICAgICAgICAgIC8vIHZh
bHVlRm9yT3BlcmFuZCB3aXRoIHRob3NlIFBoaXMuCisgICAgICAgICAgICBzaXplX3QgcGhpSW5z
ZXJ0aW9uUG9pbnQgPSAwOworICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBo
aURlZiA6IG1fY2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtw
aGlEZWYtPnZhcmlhYmxlKCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IEZpZ3VyZSBvdXQgaWYgdGhlIGxvY2FsIGlzIG1lYW50IHRvIGJlIGZsdXNoZWQgaGVyZS4KKyAg
ICAgICAgICAgICAgICBib29sIGlzRmx1c2hlZCA9ICEhKAorICAgICAgICAgICAgICAgICAgICBi
bG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5mbGFncygp
ICYgTm9kZUlzRmx1c2hlZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlvblBvaW50LCBwaGlEZWYtPnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgIHZhbHVlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
aXNGbHVzaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuIEZvciBtdWx0
aXBsZSByZWFzb25zLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUmVhc29uICMxOiBJZiB0aGUgbG9jYWwgaXMgZmx1c2hlZCB0aGVuIHdlIGRvbid0IG5lZWQg
dG8gYm90aGVyCisgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBNb3ZIaW50IHNpbmNlIGV2
ZXJ5IHBhdGggdG8gdGhpcyBwb2ludCBpbiB0aGUgY29kZSB3aWxsCisgICAgICAgICAgICAgICAg
ICAgIC8vIGhhdmUgZmx1c2hlZCB0aGUgYnl0ZWNvZGUgdmFyaWFibGUgdXNpbmcgYSBTZXRMb2Nh
bCBhbmQgaGVuY2UKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIEF2YWlsYWJpbGl0eTo6Zmx1
c2hlZEF0KCkgd2lsbCBhZ3JlZSwgYW5kIHRoYXQgd2lsbCBiZQorICAgICAgICAgICAgICAgICAg
ICAvLyBzdWZmaWNpZW50IGZvciBmaWd1cmluZyBvdXQgaG93IHRvIHJlY292ZXIgdGhlIHZhcmlh
YmxlJ3MgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAv
LyBSZWFzb24gIzI6IElmIHdlIGhhZCBpbnNlcnRlZCBhIE1vdkhpbnQgYW5kIHRoZSBQaGkgZnVu
Y3Rpb24gaGFkCisgICAgICAgICAgICAgICAgICAgIC8vIGRpZWQgKGJlY2F1c2UgdGhlIG9ubHkg
dXNlciBvZiB0aGUgdmFsdWUgd2FzIHRoZSAiZmx1c2giIC0gaS5lLgorICAgICAgICAgICAgICAg
ICAgICAvLyBzb21lIGFzeW5jaHJvbm91cyBydW50aW1lIHRoaW5neSkgdGhlbiB0aGUgTW92SGlu
dCB3b3VsZCB0dXJuCisgICAgICAgICAgICAgICAgICAgIC8vIGludG8gYSBab21iaWVIaW50LCB3
aGljaCB3b3VsZCBmb29sIHVzIGludG8gdGhpbmtpbmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAg
ICAgICAgLy8gdmFyaWFibGUgaXMgZGVhZC4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIC8vIFJlYXNvbiAjMzogSWYgd2UgaGFkIGluc2VydGVkIGEgTW92SGludCB0
aGVuIGV2ZW4gaWYgdGhlIFBoaQorICAgICAgICAgICAgICAgICAgICAvLyBzdGF5ZWQgYWxpdmUs
IHdlIHdvdWxkIHN0aWxsIGVuZCB1cCBnZW5lcmF0aW5nIGluZWZmaWNpZW50IGNvZGUKKyAgICAg
ICAgICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd291bGQgYmUgdGVsbGluZyB0aGUgT1NSIGV4aXQg
Y29tcGlsZXIgdG8gdXNlIHNvbWUgU1NBCisgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGZv
ciB0aGUgYnl0ZWNvZGUgdmFyaWFibGUgcmF0aGVyIHRoYW4ganVzdCB0ZWxsaW5nIGl0IHRoYXQK
KyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHZhbHVlIHdhcyBhbHJlYWR5IG9uIHRoZSBzdGFj
ay4KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgcGhpSW5zZXJ0aW9u
UG9pbnQsIFNwZWNOb25lLCBNb3ZIaW50LCBDb2RlT3JpZ2luKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpLCBwaGlEZWYtPnZhbHVl
KCktPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUlu
ZGV4LS07KQotICAgICAgICAgICAgICAgIEFTU0VSVCghYmxvY2stPmF0KG5vZGVJbmRleCktPnJl
cGxhY2VtZW50KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKQEAgLTMxNSwz
NCArMjIyLDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+aXNDYXB0dXJlZCgpIHx8ICEhKG5vZGUtPmZsYWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7
CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldE9wQW5kRGVmYXVsdEZsYWdzKENoZWNrKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+
cmVwbGFjZW1lbnQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7IC8vIE9ubHkgZm9yIFVwc2lsb25z
LgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJs
ZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5k
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gSXQgc2VlbXMgdGVtcHRpbmcgdG8ganVzdCBkbyBmb3J3YXJkUGhpKEdldExvY2Fs
KSwgZXhjZXB0IHRoYXQgd2UKLSAgICAgICAgICAgICAgICAgICAgLy8gY291bGQgaGF2ZSBjcmVh
dGVkIGEgbmV3IChTU0EpIFBoaSwgYW5kIHRoZSBHZXRMb2NhbCBjb3VsZCBzdGlsbCBiZQotICAg
ICAgICAgICAgICAgICAgICAvLyByZWZlcnJpbmcgdG8gYW4gb2xkIChDUFMpIFBoaS4gVXNlcyB2
YXJpYWJsZXNBdEhlYWQgdG8gdGVsbCB1cyB3aGF0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRv
IHJlZmVyIHRvLgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOwor
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlibGUtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUGhhbnRvbSgpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2g6IHsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwotICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIG9ubHkgZm9yIFVwc2lsb25zLiBBbiBVcHNpbG9uIHdpbGwgb25seSBy
ZWZlciB0byBhIEZsdXNoIGlmCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIHdlcmUgbm8g
U2V0TG9jYWxzIG9yIEdldExvY2FscyBpbiB0aGUgYmxvY2suCi0gICAgICAgICAgICAgICAgICAg
IG5vZGUtPnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzY1LDkgKzI3MCw2IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IGZvciBVcHNpbG9ucy4gQW4gVXBzaWxvbiB3aWxsIG9u
bHkgcmVmZXIgdG8gYQotICAgICAgICAgICAgICAgICAgICAvLyBQaGFudG9tTG9jYWwgaWYgdGhl
cmUgd2VyZSBubyBTZXRMb2NhbHMgb3IgR2V0TG9jYWxzIGluIHRoZSBibG9jay4KLSAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzc1LDE1ICsyNzcsNDQg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldEFyZ3Vt
ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVzdWx0KHJlc3VsdEZvcihub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkpOworICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIEdldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gbm9k
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IFVwc2lsb25zIGp1c3QgYmVmb3Jl
IHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBPbiB0aGUgc3VyZmFjZSB0aGlzCisgICAgICAgICAgICAv
LyBzZWVtcyBkYW5nZXJvdXMgYmVjYXVzZSB0aGUgVXBzaWxvbiB3aWxsIGhhdmUgYSBjaGVja2lu
ZyBVc2VLaW5kLiBCdXQsIHdlIHdpbGwgbm90CisgICAgICAgICAgICAvLyBhY3R1YWxseSBiZSBw
ZXJmb3JtaW5nIHRoZSBjaGVjayBhdCB0aGUgcG9pbnQgb2YgdGhlIFVwc2lsb247IHRoZSBjaGVj
ayB3aWxsCisgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmUgYmVlbiBwZXJmb3JtZWQgYXQgdGhl
IHBvaW50IHdoZXJlIHRoZSBvcmlnaW5hbCBTZXRMb2NhbCB3YXMuCisgICAgICAgICAgICBzaXpl
X3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAg
ICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3Nv
cnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3JCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOworICAgICAg
ICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3Iu
cGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxl
Rm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24s
IHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSks
IEVkZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoaU5v
ZGUtPmRlZmF1bHRVc2VLaW5kKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBGcmVlIGFsbCBDUFMgcGhpcyBhbmQg
cmVzZXQgdmFyaWFibGVzIHZlY3RvcnMuCkBAIC00MDcsNzAgKzMzOCwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICB2b2lkIGZvcndhcmRQ
aGlDaGlsZHJlbihOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgewotICAgICAgICAgICAgRWRnZSYgZWRn
ZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwotICAgICAgICAgICAgaWYgKCFlZGdlKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IGZvcndhcmRQaGlF
ZGdlKGVkZ2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIE5vZGUqIGZvcndhcmRQaGko
Tm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBQaGk6IHsKLSAgICAgICAgICAgICAg
ICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5qdXN0T25lQ2hpbGQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWVkZ2UpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAgICAg
ICAgICAgICAgIG5vZGUgPSBlZGdlLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICBjYXNl
IFNldExvY2FsOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAg
ICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBib29sIGZvcndh
cmRQaGlFZGdlKEVkZ2UmIGVkZ2UpCi0gICAgewotICAgICAgICBOb2RlKiBuZXdOb2RlID0gZm9y
d2FyZFBoaShlZGdlLm5vZGUoKSk7Ci0gICAgICAgIGlmIChuZXdOb2RlID09IGVkZ2Uubm9kZSgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBlZGdlLnNldE5vZGUobmV3Tm9k
ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGRlZHVwbGlj
YXRlQ2hpbGRyZW4oTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKLSAgICAgICAgICAgIEVkZ2UgZWRn
ZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwotICAgICAgICAgICAgaWYgKCFlZGdlKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGVkZ2UgPT0gbm9kZSkgewotICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2UoaS0tKTsKLSAgICAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBBZGphY2Vu
Y3lMaXN0OjpTaXplOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGRyZW4u
Y2hpbGQoaikgPT0gZWRnZSkgewotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5y
ZW1vdmVFZGdlKGotLSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAor
ICAgIFNTQUNhbGN1bGF0b3IgbV9jYWxjdWxhdG9yOwogICAgIEluc2VydGlvblNldCBtX2luc2Vy
dGlvblNldDsKKyAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKj4gbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlOworICAgIFZlY3RvcjxWYXJpYWJs
ZUFjY2Vzc0RhdGEqPiBtX3ZhcmlhYmxlRm9yU1NBSW5kZXg7CiAgICAgYm9vbCBtX2NoYW5nZWQ7
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29u
dmVyc2lvblBoYXNlLmgJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEwICszNCw5
IEBAIGNsYXNzIEdyYXBoOwogCiAvLyBDb252ZXJ0IFRocmVhZGVkQ1BTIGZvcm0gaW50byBTU0Eg
Zm9ybS4gVGhpcyByZXN1bHRzIGluIGEgZm9ybSB0aGF0IGhhczoKIC8vCi0vLyAtIFJvdWdobHkg
bWluaW1hbCBQaGkncy4gV2UgdXNlIHRoZSBBeWNvY2sgJiBIb3JzcG9vbCBmaXhwb2ludCBmb3IK
LS8vICAgY29udmVydGluZyB0aGUgQ1BTIG1heGltYWwgUGhpcyBpbnRvIFNTQSBtaW5pbWFsIFBo
aXMsIHdpdGggdGhlIGNhdmVhdAotLy8gICB0aGF0IGlycmVkdWNpYmxlIGNvbnRyb2wgZmxvdyBt
YXkgcmVzdWx0IGluIHNvbWUgbWlzc2VkIG9wcG9ydHVuaXRpZXMKLS8vICAgZm9yIFBoaSByZWR1
Y3Rpb24uCisvLyAtIE1pbmltYWwgUGhpJ3MuIFdlIHVzZSB0aGUgdGhlIEN5dHJvbiBldCBhbCAo
VE9QTEFTJzkxKSBhbGdvcml0aG0gZm9yCisvLyAgIFBoaSBpbnNlcnRpb24uIE1vc3Qgb2YgdGhl
IGFsZ29yaXRobSBpcyBpbXBsZW1lbnRlZCBpbiBTU0FDYWxjdWxhdG9yCisvLyAgIGFuZCBEb21p
bmF0b3JzLgogLy8KIC8vIC0gTm8gdXNlcyBvZiBHZXRMb2NhbC9TZXRMb2NhbCBleGNlcHQgZm9y
IGNhcHR1cmVkIHZhcmlhYmxlcyBhbmQgZmx1c2hlcy4KIC8vICAgQWZ0ZXIgdGhpcywgYW55IHJl
bWFpbmluZyBTZXRMb2NhbCBtZWFucyBGbHVzaC4gUGhhbnRvbUxvY2FscyBiZWNvbWUKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1NlZ21lbnRlZFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1NlZ21lbnRlZFZlY3Rvci5oCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvV1RG
L3d0Zi9TZWdtZW50ZWRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDkgKzE1NywxMCBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHNlZ21lbnRGb3IobV9zaXplIC0gMSktPnVu
Y2hlY2tlZEFwcGVuZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKICAgICAgICAgfQogCi0gICAg
ICAgIFQmIGFsbG9jKCkKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICAg
ICAgVCYgYWxsb2MoQXJncy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmQ8
VD4oVCgpKTsKKyAgICAgICAgICAgIGFwcGVuZDxUPihUKGFyZ3MuLi4pKTsKICAgICAgICAgICAg
IHJldHVybiBsYXN0KCk7CiAgICAgICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237754</attachid>
            <date>2014-09-07 09:43:09 -0700</date>
            <delta_ts>2014-09-07 10:33:07 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57580</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE0LTA5LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGEgcmV1c2FibGUgU1NBIGJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV2Ugd2FudCB0byBpbXBsZW1l
bnQgc29waGlzdGljYXRlZCBTU0EgdHJhbnNmb3JtYXRpb25zIGxpa2Ugb2JqZWN0IGFsbG9jYXRp
b24gc2lua2luZworICAgICAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjMzMCksIGJ1dCB0byBkbyB0aGF0LCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZG8KKyAg
ICAgICAgdXBkYXRlcyB0byBTU0EgdGhhdCByZXF1aXJlIGluc2VydGluZyBuZXcgUGhpJ3MuIFRo
aXMgcmVxdWlyZXMgY2FsY3VsYXRpbmcgd2hlcmUgUGhpcyBnby4KKyAgICAgICAgUHJldmlvdXNs
eSwgb3VyIFBoaSBjYWxjdWxhdGlvbiB3YXMgYmFzZWQgb24gQXljb2NrIGFuZCBIb3JzcG9vbCdz
IGFsZ29yaXRobSwgYW5kIG91cgorICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGFsZ29y
aXRobSBvbmx5IHdvcmtlZCB3aGVuIGRvaW5nIENQUy0+U1NBIGNvbnZlcnNpb24uIFRoZSBjb2Rl
CisgICAgICAgIGNvdWxkIG5vdCBiZSByZXVzZWQgZm9yIGNhc2VzIHdoZXJlIHNvbWUgcGhhc2Ug
aGFwcGVucyB0byBrbm93IHRoYXQgaXQgaW50cm9kdWNlZCBhIGZldworICAgICAgICBkZWZzIGlu
IHNvbWUgYmxvY2tzIGFuZCBpdCB3YW50cyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBQaGlzIHNo
b3VsZCBnby4gTW9yZW92ZXIsIGV2ZW4KKyAgICAgICAgdGhlIGdlbmVyYWwgYWxnb3JpdGhtIG9m
IEF5Y29jayBhbmQgSG9yc3Bvb2wgaXMgbm90IHdlbGwgc3VpdGVkIHRvIHN1Y2ggdGFyZ2V0dGVk
IFNTQQorICAgICAgICB1cGRhdGVzLCBzaW5jZSBpdCByZXF1aXJlcyBmaXJzdCBpbnNlcnRpbmcg
bWF4aW1hbCBQaGlzLiBUaGF0IHNjYWxlcyB3ZWxsIHdoZW4gdGhlIFBoaXMKKyAgICAgICAgd2Vy
ZSBhbHJlYWR5IHRoZXJlIChsaWtlIGluIG91ciBDUFMgZm9ybSkgYnV0IG90aGVyd2lzZSBpdCdz
IHF1aXRlIHVubmF0dXJhbCBhbmQgbWF5IGJlCisgICAgICAgIGRpZmZpY3VsdCB0byBtYWtlIGVm
ZmljaWVudC4KKyAgICAgICAgCisgICAgICAgIFRoZSB1c3VhbCB3YXkgb2YgaGFuZGxpbmcgYm90
aCBTU0EgY29udmVyc2lvbiBhbmQgU1NBIHVwZGF0ZSBpcyB0byB1c2UgQ3l0cm9uIGV0IGFsJ3MK
KyAgICAgICAgYWxnb3JpdGhtIGJhc2VkIG9uIGRvbWluYW5jZSBmcm9udGllcnMuIEkgcHJldmlv
dXNseSBvcHRpbWl6ZWQgb3VyIGRvbWluYXRvciBjYWxjdWxhdGlvbgorICAgICAgICBhbmQgcmVw
cmVzZW50YXRpb24gdG8gdXNlIGRvbWluYXRvciB0cmVlcyBjb21wdXRlZCB1c2luZyBMZW5nYXVl
ciBhbmQgVGFyamFuJ3MgYWxnb3JpdGhtLAorICAgICAgICBhbmQgdGhlbiBJIGltcGxlbWVudGVk
IGEgZG9taW5hbmNlIGZyb250aWVyIGNhbGN1bGF0b3IuIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0
aGUgZmluYWwKKyAgICAgICAgc3RlcCB0b3dhcmRzIG1ha2luZyBTU0EgdXBkYXRlIGF2YWlsYWJs
ZSB0byBhbGwgU1NBIHBoYXNlczogaXQgaW1wbGVtZW50cyBhbiBTU0FDYWxjdWxhdG9yCisgICAg
ICAgIHRoYXQgY2FuIHRlbGwgeW91IHdoZXJlIFBoaXMgZ28gd2hlbiBnaXZlbiBhbiBhcmJpdHJh
cnkgc2V0IG9mIERlZnMsIGFuZCBpdCB1c2VzIGl0IGZvcgorICAgICAgICBTU0EgY29udmVyc2lv
biAodGh1cyBnZXR0aW5nIHJpZCBvZiBBeWNvY2sgYW5kIEhvcnNwb29sKSB0byBlbnN1cmUgdGhh
dCBpdCBpcyB3ZWxsLXRlc3RlZAorICAgICAgICBhbmQgc28gdGhhdCBpbiB0aGUgbG9uZyBydW4s
IHdlIG9ubHkgaGF2ZSBvbmUgU1NBIGNhbGN1bGF0b3IgdGhhdCBldmVyeW9uZSBzaGFyZXMgcmF0
aGVyCisgICAgICAgIHRoYW4gaGF2aW5nIEN5dHJvbiBldCBhbCdzIGNhbGN1bGF0b3IgZm9yIHVw
ZGF0ZSBhbmQgQXljb2NrIGFuZCBIb3JzcG9vbCdzIGZvciBjb252ZXJzaW9uLgorICAgICAgICAK
KyAgICAgICAgVGhpcyBoYXMgbm8gb2JzZXJ2YWJsZSBpbXBhY3QuIEl0IGRvZXMgcmVkdWNlIHRo
ZSBhbW91bnQgb2YgY29kZSBpbiBTU0FDb252ZXJzaW9uUGhhc2UuCisgICAgICAgIEJ1dCBldmVu
IGJldHRlciwgaXQgbWFrZXMgU1NBQ29udmVyc2lvblBoYXNlIGhhdmUgc2lnbmlmaWNhbnRseSBs
ZXNzIHRyaWNreSBsb2dpYy4gSXQKKyAgICAgICAgbW9zdGx5IGp1c3QgcmVsaWVzIG9uIFNTQUNh
bGN1bGF0b3IgdG8gZG8gdGhlIHRyaWNreSBzdHVmZi4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGRmZy9ERkdBbmFseXNpcy5oOgorICAgICAgICAqIGRmZy9ERkdEb21pbmF0
b3JzLmg6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6aW1tZWRpYXRlRG9taW5hdG9y
T2YpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0luSXRlcmF0
ZWREb21pbmFuY2VGcm9udGllck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpm
b3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZik6CisgICAgICAg
ICogZGZnL0RGR05vZGVGbGFncy5oOgorICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6U1NBQ2FsY3VsYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6flNTQUNhbGN1bGF0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6Om5ld1ZhcmlhYmxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpuZXdEZWYpOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUNhbGN1bGF0b3I6Om5vbkxvY2FsUmVhY2hpbmdEZWYpOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUNhbGN1bGF0b3I6OnJlYWNoaW5nRGVmQXRUYWlsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2Fs
Y3VsYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZTo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OlZhcmlhYmxl
OjpWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6RGVmOjp2YXJp
YWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6RGVmOjpibG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6RGVmOjp2YWx1ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6RGVmOjpEZWYpOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUNhbGN1bGF0b3I6OnZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9y
Ojpjb21wdXRlUGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cGhpc0Zv
ckJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpyZWFjaGluZ0RlZkF0
SGVhZCk6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpTU0FDb252ZXJzaW9uUGhhc2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmRQaGlDaGlsZHJlbik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmRQaGlFZGdl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmRlZHVw
bGljYXRlQ2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuaDoKKwogMjAxNC0wOS0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFrZSB1cGRhdGVzIHN1Z2dlc3RlZCBieSBuZXcgdmVyc2lvbiBvZiBYY29kZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTczMzM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0yMDEsNiArMjAxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1B1cmVWYWx1ZS5jcHAK
ICAgICBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcAorICAgIGRmZy9E
RkdTU0FDYWxjdWxhdG9yLmNwcAogICAgIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NhZmVwb2ludC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTcz
MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSw3IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUNhbGN1bGF0b3Iu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBTG93ZXJp
bmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhY2tM
YXlvdXRQaGFzZS5jcHAiIC8+CkBAIC0xMTAxLDYgKzExMDIsNyBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTbG93UGF0aEdlbmVyYXRvci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklULmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBQ2FsY3VsYXRvci5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUxvd2VyaW5nUGhhc2UuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNlLmgiIC8+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTM0MSw2ICszNDEsOCBAQAogCQkwRjY2NkVDRDE4MzZCMzdFMDBE
MDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdFMDBEMDE3
RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0YxNjAwQjdC
MkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lM
aXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBE
RkdFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY2ODJGQjIxOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2ODJGQjAxOUJDQjM2
NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuY3BwICovOyB9OworCQkwRjY4MkZCMzE5QkNC
MzY0MDBGQTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2ODJGQjExOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NT
QUNhbGN1bGF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2OUNDODYxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLzsgfTsKIAkJMEY2OUNDODkxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY5Q0M4NzE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJv
emVuVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0IzMTg1RkM5RTkwMDg0
NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovOyB9OwpAQCAtMjI2MCw2ICsyMjYyLDggQEAKIAkJMEY2
NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZXN1cnJlY3Rpb25Gb3JW
YWxpZGF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9u
UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjgxNERGM0YxMzAw
QjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8q
IERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRWRnZS5oOyBw
YXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2ODJG
QjAxOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU1NBQ2FsY3VsYXRvci5jcHA7IHBhdGggPSBkZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjgy
RkIxMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NTQUNhbGN1bGF0b3IuaDsgcGF0aCA9IGRmZy9ERkdTU0FD
YWxjdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjlDQzg2MTkzQUM2
MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdGcm96ZW5WYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZHRnJvemVuVmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY5Q0M4NzE5M0FDNjBBMDA0
NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRnJvemVuVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdGcm96ZW5WYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbC5j
cHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUwMTIsNiArNTAxNiw4IEBACiAJCQkJODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R1NwZWN1bGF0aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovLAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0
MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKKwkJCQkwRjY4MkZCMDE5QkNCMzY0MDBG
QTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5jcHAgKi8sCisJCQkJMEY2ODJGQjExOUJDQjM2NDAw
RkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuaCAqLywKIAkJCQlBN0Q4OUNGMDE3QTBCOENDMDA3
NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLywKIAkJCQlBN0Q4OUNGMTE3QTBC
OENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggKi8sCiAJCQkJMEZDMjBDQjcx
ODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuY3BwICovLApAQCAtNjQ3OCw2
ICs2NDg0LDcgQEAKIAkJCQkwRkMzMTQxMjE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTBBRjNDMTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1N0QyM0VFMTg5MUI1NTQw
MDMxQzdGQSAvKiBSZWd1bGFyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2ODJG
QjMxOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkQ0REVBMTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IuaCBp
biBIZWFkZXJzICovLApAQCAtNzIyMSw2ICs3MjI4LDcgQEAKIAkJCQkyQUFDRTYzQzE4Q0E1QTAz
MDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
MjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY2ODJGQjIxOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDgg
LyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUxMDdFQzM3
NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FuYWx5c2lzLmgJKHJldmlzaW9uIDE3MzMzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHJldmlzaW9uIDE3MzMz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw2ICs1NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmcm9tID09
IHRvIHx8IHN0cmljdGx5RG9taW5hdGVzKGZyb20sIHRvKTsKICAgICB9CiAgICAgCisgICAgQmFz
aWNCbG9jayogaW1tZWRpYXRlRG9taW5hdG9yT2YoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50OworICAgIH0KKyAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yQWxsU3RyaWN0
RG9taW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25z
dAogICAgIHsKQEAgLTExOSwxNCArMTI0LDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZvckFsbEJs
b2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKAogICAgICAgICBjb25zdCBCbG9ja0xp
c3QmIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgeworICAgICAgICBmb3JBbGxC
bG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgICAgIGZy
b20sCisgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgY2xvc2UgcmVs
YXRpdmUgb2YgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoKSwgd2hp
Y2ggYWxsb3dzIHRoZQorICAgIC8vIGdpdmVuIGZ1bmN0b3IgdG8gcmV0dXJuIGZhbHNlIHRvIGlu
ZGljYXRlIHRoYXQgd2UgZG9uJ3Qgd2lzaCB0byBjb25zaWRlciB0aGUgZ2l2ZW4gYmxvY2suCisg
ICAgLy8gVXNlZnVsIGZvciBjb21wdXRpbmcgcHJ1bmVkIFNTQSBmb3JtLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVk
RG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgY29uc3QgQmxvY2tMaXN0JiBmcm9tLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKICAgICAgICAgQmxvY2tTZXQgc2V0OwogICAgICAg
ICBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCiAgICAgICAg
ICAgICBmcm9tLAogICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaykgLT4gYm9vbCB7
CiAgICAgICAgICAgICAgICAgaWYgKCFzZXQuYWRkKGJsb2NrKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdG9yKGJs
b2NrKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyAr
NjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgTm9kZVJl
bGV2YW50VG9PU1IgICAgICAgICAgICAgICAweDEwMDAwCiAKLSNkZWZpbmUgTm9kZUlzRmx1c2hl
ZCAgICAgICAgICAgICAgICAgICAweDIwMDAwIC8vIFVzZWQgYnkgR3JhcGg6OmNvbXB1dGVJc0Zs
dXNoZWQoKSwgd2lsbCB0ZWxsIHlvdSB3aGljaCBsb2NhbCBub2RlcyBhcmUgYmFja3dhcmRzLXJl
YWNoYWJsZSBmcm9tIGEgRmx1c2guCisjZGVmaW5lIE5vZGVJc0ZsdXNoZWQgICAgICAgICAgICAg
ICAgICAgMHgyMDAwMCAvLyBDb21wdXRlZCBieSBDUFNSZXRocmVhZGluZ1BoYXNlLCB3aWxsIHRl
bGwgeW91IHdoaWNoIGxvY2FsIG5vZGVzIGFyZSBiYWNrd2FyZHMtcmVhY2hhYmxlIGZyb20gYSBG
bHVzaC4KIAogI2RlZmluZSBOb2RlTWlzY0ZsYWcxICAgICAgICAgICAgICAgICAgIDB4NDAwMDAK
ICNkZWZpbmUgTm9kZU1pc2NGbGFnMiAgICAgICAgICAgICAgICAgICAweDgwMDAwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R1NTQUNhbGN1bGF0b3IuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK1NTQUNhbGN1bGF0b3I6OlNTQUNhbGN1bGF0b3IoR3JhcGgm
IGdyYXBoKQorICAgIDogbV9ncmFwaChncmFwaCkKK3sKK30KKworU1NBQ2FsY3VsYXRvcjo6flNT
QUNhbGN1bGF0b3IoKQoreworfQorCitTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogU1NBQ2FsY3Vs
YXRvcjo6bmV3VmFyaWFibGUoKQoreworICAgIHJldHVybiAmbV92YXJpYWJsZXMuYWxsb2MoVmFy
aWFibGUobV92YXJpYWJsZXMuc2l6ZSgpKSk7Cit9CisKK1NTQUNhbGN1bGF0b3I6OkRlZiogU1NB
Q2FsY3VsYXRvcjo6bmV3RGVmKFZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2ss
IE5vZGUqIHZhbHVlKQoreworICAgIERlZiogZGVmID0gbV9kZWZzLmFkZChEZWYodmFyaWFibGUs
IGJsb2NrLCB2YWx1ZSkpOworICAgIGF1dG8gcmVzdWx0ID0gbV9kYXRhW2Jsb2NrXS5tX2RlZnMu
YWRkKHZhcmlhYmxlLCBkZWYpOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
dmFyaWFibGUtPm1fYmxvY2tzV2l0aERlZnMuYXBwZW5kKGJsb2NrKTsKKyAgICBlbHNlCisgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBkZWY7CisgICAgcmV0dXJuIGRlZjsKK30KKwor
U1NBQ2FsY3VsYXRvcjo6RGVmKiBTU0FDYWxjdWxhdG9yOjpub25Mb2NhbFJlYWNoaW5nRGVmKEJh
c2ljQmxvY2sqIGJsb2NrLCBWYXJpYWJsZSogdmFyaWFibGUpCit7CisgICAgcmV0dXJuIHJlYWNo
aW5nRGVmQXRUYWlsKG1fZ3JhcGgubV9kb21pbmF0b3JzLmltbWVkaWF0ZURvbWluYXRvck9mKGJs
b2NrKSwgdmFyaWFibGUpOworfQorCitTU0FDYWxjdWxhdG9yOjpEZWYqIFNTQUNhbGN1bGF0b3I6
OnJlYWNoaW5nRGVmQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrLCBWYXJpYWJsZSogdmFyaWFibGUp
Cit7CisgICAgZm9yICg7IGJsb2NrOyBibG9jayA9IG1fZ3JhcGgubV9kb21pbmF0b3JzLmltbWVk
aWF0ZURvbWluYXRvck9mKGJsb2NrKSkgeworICAgICAgICBpZiAoRGVmKiBkZWYgPSBtX2RhdGFb
YmxvY2tdLm1fZGVmcy5nZXQodmFyaWFibGUpKQorICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAg
ICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHU1NBQ2FsY3VsYXRvcl9oCisjZGVmaW5lIERGR1NTQUNhbGN1bGF0b3JfaAor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5j
bHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisv
LyBTU0FDYWxjdWxhdG9yIHByb3ZpZGVzIGEgcmV1c2FibGUgdG9vbCBmb3IgdXNpbmcgdGhlIEN5
dHJvbiwgRmVycmFudGUsIFJvc2VuLCBXZWdtYW4sIGFuZAorLy8gWmFkZWNrICJFZmZpY2llbnRs
eSBDb21wdXRpbmcgU3RhdGljIFNpbmdsZSBBc3NpZ25tZW50IEZvcm0gYW5kIHRoZSBDb250cm9s
IERlcGVuZGVuY2UgR3JhcGgiCisvLyAoVE9QTEFTJzkxKSBhbGdvcml0aG0gZm9yIGNvbXB1dGlu
ZyBTU0EuIFNTQUNhbGN1bGF0b3IgZG9lc24ndCBtYWdpY2FsbHkgZG8gZXZlcnl0aGluZyBmb3Ig
eW91CisvLyBidXQgaXQgbWFpbnRhaW5zIHRoZSBtYWpvciBkYXRhIHN0cnVjdHVyZXMgYW5kIGhh
bmRsZXMgbW9zdCBvZiB0aGUgbm9uLWxvY2wgcmVhc29uaW5nLiBIZXJlJ3MKKy8vIHRoZSB3b3Jr
ZmxvdyBvZiB1c2luZyBTU0FDYWxjdWxhdG9yIHRvIGV4ZWN1dGUgdGhpcyBhbGdvcml0aG06Cisv
LworLy8gMCkgQ3JlYXRlIGEgZnJlc2ggU1NBQ2FsY3VsYXRvciBpbnN0YW5jZS4gWW91IHdpbGwg
bmVlZCB0aGlzIGluc3RhbmNlIG9ubHkgZm9yIGFzIGxvbmcgYXMKKy8vICAgIHlvdSdyZSBub3Qg
eWV0IGRvbmUgY29tcHV0aW5nIFNTQS4KKy8vCisvLyAxKSBDcmVhdGUgYW4gU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUgZm9yIGV2ZXJ5IHZhcmlhYmxlIHRoYXQgeW91IHdhbnQgdG8gZG8gUGhpIGlu
c2VydGlvbgorLy8gICAgb24uIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlOjppbmRleCgpIGlzIGEg
ZGVuc2UgaW5kZXhpbmcgb2YgdGhlIFZhcmlhYmxlcyB0aGF0IHlvdQorLy8gICAgY3JlYXRlZCwg
c28geW91IGNhbiBlYXNpbHkgdXNlIGEgVmVjdG9yIHRvIG1hcCB0aGUgU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGVzIHRvIHlvdXIKKy8vICAgIHZhcmlhYmxlcy4KKy8vCisvLyAyKSBDcmVhdGUgYSBT
U0FDYWxjdWxhdG9yOjpEZWYgZm9yIGV2ZXJ5IGFzc2lnbm1lbnQgdG8gdGhvc2UgdmFyaWFibGVz
LiBBIERlZiBrbm93cyBhYm91dCB0aGUKKy8vICAgIHZhcmlhYmxlLCB0aGUgYmxvY2ssIGFuZCB0
aGUgREZHOjpOb2RlKiB0aGF0IGhhcyB0aGUgdmFsdWUgYmVpbmcgcHV0IGludG8gdGhlIHZhcmlh
YmxlLgorLy8gICAgTm90ZSB0aGF0IGNyZWF0aW5nIGEgRGVmIGluIGJsb2NrIEIgZm9yIHZhcmlh
YmxlIFYgaWYgYmxvY2sgQiBhbHJlYWR5IGhhcyBhIGRlZiBmb3IgdmFyaWFibGUKKy8vICAgIFYg
d2lsbCBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIERlZidzIERGRzo6Tm9kZSogdmFsdWUuIFRoaXMg
ZW5hYmxlcyB5b3UgdG8gY3JlYXRlIERlZnMgYnkKKy8vICAgIHByb2Nlc3NpbmcgYmFzaWMgYmxv
Y2tzIGluIGZvcndhcmQgb3JkZXIuIElmIGEgYmxvY2sgaGFzIG11bHRpcGxlIERlZnMgb2YgYSB2
YXJpYWJsZSwgdGhpcworLy8gICAgImp1c3Qgd29ya3MiIGJlY2F1c2UgZWFjaCBibG9jayB3aWxs
IHRoZW4gcmVtZW1iZXIgdGhlIGxhc3QgRGVmIG9mIGVhY2ggdmFyaWFibGUuCisvLworLy8gMykg
Q2FsbCBTU0FDYWxjdWxhdG9yOjpjb21wdXRlUGhpcygpLiBUaGlzIHRha2VzIGEgZnVuY3RvciB0
aGF0IHdpbGwgY3JlYXRlIHRoZSBQaGkgbm9kZXMuIFRoZQorLy8gICAgZnVuY3RvciByZXR1cm5z
IGVpdGhlciB0aGUgUGhpIG5vZGUgaXQgY3JlYXRlZCwgb3IgbnVsbHB0ciwgaWYgaXQgY2hvb3Nl
cyB0byBwcnVuZS4gKEFzIGFuCisvLyAgICBhc2lkZSwgaXQncyBhbHdheXMgc291bmQgbm90IHRv
IHBydW5lLCBhbmQgdGhlIHNhZmVzdCByZWFzb24gZm9yIHBydW5pbmcgaXMgbGl2ZW5lc3MuKSBU
aGUKKy8vICAgIGNvbXB1dGVQaGlzKCkgY29kZSB3aWxsIHJlY29yZCB0aGUgY3JlYXRlZCBQaGkg
bm9kZXMgYXMgRGVmcywgYW5kIGl0IHdpbGwgc2VwYXJhdGVseSByZWNvcmQKKy8vICAgIHRoZSBs
aXN0IG9mIFBoaXMgaW5zZXJ0ZWQgYXQgZWFjaCBibG9jay4gSXQncyBPSyBmb3IgdGhlIGZ1bmN0
b3IgeW91IHBhc3MgaGVyZSB0byBtb2RpZnkgdGhlCisvLyAgICBERkc6OkdyYXBoIG9uIHRoZSBm
bHksIGJ1dCB0aGUgZWFzaWVzdCB3YXkgdG8gd3JpdGUgdGhpcyBpcyB0byBqdXN0IGNyZWF0ZSB0
aGUgUGhpIG5vZGVzIGJ5CisvLyAgICBkb2luZyBHcmFwaDo6YWRkTm9kZSgpIGFuZCByZXR1cm4g
dGhlbS4gSXQncyB0aGVuIGJlc3QgdG8gaW5zZXJ0IGFsbCBQaGkgbm9kZXMgZm9yIGEgYmxvY2sK
Ky8vICAgIGluIGJ1bGsgYXMgcGFydCBvZiB0aGUgcGFzcyB5b3UgZG8gYmVsb3csIGluIHN0ZXAg
KDQpLgorLy8KKy8vIDQpIE1vZGlmeSB0aGUgZ3JhcGggdG8gY3JlYXRlIHRoZSBTU0EgZGF0YSBm
bG93LiBGb3IgZWFjaCBibG9jaywgdGhpcyBzaG91bGQ6CisvLworLy8gICAgNC4wKSBDb21wdXRl
IHRoZSBzZXQgb2YgcmVhY2hpbmcgZGVmcyAoYWthIGF2YWlsYWJsZSB2YWx1ZXMpIGZvciBlYWNo
IHZhcmlhYmxlIGJ5IGNhbGxpbmcKKy8vICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6cmVhY2hpbmdE
ZWZBdEhlYWQoKSBmb3IgZWFjaCB2YXJpYWJsZS4gUmVjb3JkIHRoaXMgaW4gYSBsb2NhbCB0YWJs
ZSB0aGF0CisvLyAgICAgICAgIHdpbGwgYmUgaW5jcmVtZW50YWxseSB1cGRhdGVkIGFzIHlvdSBw
cm9jZWVkIHRocm91Z2ggdGhlIGJsb2NrIGluIGZvcndhcmQgb3JkZXIgaW4gdGhlCisvLyAgICAg
ICAgIG5leHQgc3RlcHM6CisvLworLy8gICAgICAgICBGSVhNRTogSXQgbWlnaHQgYmUgYmV0dGVy
IHRvIGNvbXB1dGUgcmVhY2hpbmcgZGVmcyBmb3IgYWxsIGxpdmUgdmFyaWFibGVzIGluIG9uZSBn
bywgdG8KKy8vICAgICAgICAgYXZvaWQgZG9pbmcgcmVwZWF0ZWQgZG9tIHRyZWUgdHJhdmVyc2Fs
cy4KKy8vICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NjYxMAorLy8KKy8vICAgIDQuMSkgSW5zZXJ0IGFsbCBvZiB0aGUgUGhpIG5vZGVzIGZvciB0aGUg
YmxvY2sgYnkgdXNpbmcgU1NBQ2FsY3VsYXRvcjo6cGhpc0ZvckJsb2NrKCksIGFuZAorLy8gICAg
ICAgICByZWNvcmQgdGhvc2UgUGhpIG5vZGVzIGFzIGJlaW5nIGF2YWlsYWJsZSB2YWx1ZXMuCisv
LworLy8gICAgNC4yKSBQcm9jZXNzIHRoZSBibG9jayBpbiBmb3J3YXJkIG9yZGVyLiBGb3IgZWFj
aCBsb2FkIGZyb20gYSB2YXJpYWJsZSwgcmVwbGFjZSBpdCB3aXRoIHRoZQorLy8gICAgICAgICBh
dmFpbGFibGUgU1NBIHZhbHVlIGZvciB0aGF0IHZhcmlhYmxlLiBGb3IgZWFjaCBzdG9yZSwgZGVs
ZXRlIGl0IGFuZCByZWNvcmQgdGhlIHN0b3JlZAorLy8gICAgICAgICB2YWx1ZSBhcyBiZWluZyBh
dmFpbGFibGUuCisvLworLy8gICAgNC4zKSBJbnNlcnQgVXBzaWxvbnMgZm9yIGVhY2ggUGhpIGlu
IGVhY2ggc3VjY2Vzc29yIGJsb2NrLiBVc2UgdGhlIGF2YWlsYWJsZSB2YWx1ZXMgdGFibGUgdG8K
Ky8vICAgICAgICAgZGVjaWRlIHRoZSBzb3VyY2UgdmFsdWUgZm9yIGVhY2ggUGhpJ3MgdmFyaWFi
bGUuIE5vdGUgdGhhdCB5b3UgY291bGQgYWxzbyB1c2UKKy8vICAgICAgICAgU1NBQ2FsY3VsYXRv
cjo6cmVhY2hpbmdEZWZBdFRhaWwoKSBpbnN0ZWFkIG9mIHRoZSBhdmFpbGFibGUgdmFsdWVzIHRh
YmxlLCB0aG91Z2ggeW91cgorLy8gICAgICAgICBsb2NhbCBhdmFpbGFibGUgdmFsdWVzIHRhYmxl
IGlzIGxpa2VseSB0byBiZSBtb3JlIGVmZmljaWVudC4KKy8vCisvLyBUaGUgbW9zdCBvYnZpb3Vz
IHVzZSBvZiBTU0FDYWxjdWxhdG9yIGlzIGZvciB0aGUgQ1BTLT5TU0EgY29udmVyc2lvbiBpdHNl
bGYsIGJ1dCBpdCdzIG1lYW50IHRvCisvLyBhbHNvIGJlIHVzZWQgZm9yIFNTQSB1cGRhdGUgYW5k
IGZvciB0aGluZ3MgbGlrZSB0aGUgcHJvbW90aW9uIG9mIGhlYXAgZmllbGRzIHRvIGxvY2FsIFNT
QQorLy8gdmFyaWFibGVzLgorCitjbGFzcyBTU0FDYWxjdWxhdG9yIHsKK3B1YmxpYzoKKyAgICBT
U0FDYWxjdWxhdG9yKEdyYXBoJik7CisgICAgflNTQUNhbGN1bGF0b3IoKTsKKyAgICAKKyAgICBj
bGFzcyBWYXJpYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIFNTQUNhbGN1bGF0b3I7CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZSgp
CisgICAgICAgICAgICA6IG1faW5kZXgoVUlOVF9NQVgpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgVmFyaWFibGUodW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6
IG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJsb2NrTGlz
dCBtX2Jsb2Nrc1dpdGhEZWZzOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07Cisg
ICAgCisgICAgY2xhc3MgRGVmIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhcmlhYmxlKiB2YXJp
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGU7IH0KKyAgICAgICAgQmFzaWNCbG9jayog
YmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgICAgIAorICAgICAgICBOb2Rl
KiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgCisgICAgcHJpdmF0
ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNTQUNhbGN1bGF0b3I7CisgICAgICAgIAorICAgICAg
ICBEZWYoKQorICAgICAgICAgICAgOiBtX3ZhcmlhYmxlKG51bGxwdHIpCisgICAgICAgICAgICAs
IG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICwgbV92YWx1ZShudWxscHRyKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERlZihWYXJpYWJsZSogdmFyaWFibGUs
IEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiB2YWx1ZSkKKyAgICAgICAgICAgIDogbV92YXJpYWJs
ZSh2YXJpYWJsZSkKKyAgICAgICAgICAgICwgbV9ibG9jayhibG9jaykKKyAgICAgICAgICAgICwg
bV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBW
YXJpYWJsZSogbV92YXJpYWJsZTsKKyAgICAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICAg
ICAgTm9kZSogbV92YWx1ZTsKKyAgICB9OworICAgIAorICAgIFZhcmlhYmxlKiBuZXdWYXJpYWJs
ZSgpOworICAgIERlZiogbmV3RGVmKFZhcmlhYmxlKiwgQmFzaWNCbG9jayosIE5vZGUqKTsKKyAg
ICAKKyAgICBWYXJpYWJsZSogdmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuICZtX3Zh
cmlhYmxlc1tpbmRleF07IH0KKyAgICAKKyAgICAvLyBUaGUgUGhpSW5zZXJ0aW9uRnVuY3RvciB0
YWtlcyBhIFZhcmlhYmxlIGFuZCBhIEJhc2ljQmxvY2sgYW5kIGVpdGhlciBpbnNlcnRzIGEgUGhp
IGFuZAorICAgIC8vIHJldHVybnMgdGhlIE5vZGUgZm9yIHRoYXQgUGhpLCBvciBpdCBkZWNpZGVz
IHRoYXQgaXQncyBub3Qgd29ydGggaXQgdG8gaW5zZXJ0IGEgUGhpIGF0IHRoYXQKKyAgICAvLyBi
bG9jayBiZWNhdXNlIG9mIHNvbWUgYWRkaXRpb25hbCBwcnVuaW5nIGNvbmRpdGlvbiAodHlwaWNh
bGx5IGxpdmVuZXNzKSBhbmQgcmV0dXJucworICAgIC8vIG51bGxwdHIuIElmIGEgbm9uLW51bGwg
Tm9kZSogaXMgcmV0dXJuZWQsIGEgbmV3IERlZiBpcyBjcmVhdGVkLCBzbyB0aGF0CisgICAgLy8g
bm9uTG9jYWxSZWFjaGluZ0RlZigpIHdpbGwgZmluZCBpdCBsYXRlci4gTm90ZSB0aGF0IGl0IGlz
IGdlbmVyYWxseSBhbHdheXMgc291bmQgdG8gbm90CisgICAgLy8gcHJ1bmUgYW55IFBoaXMgKHRo
YXQgaXMsIHRvIGFsd2F5cyBoYXZlIHRoZSBmdW5jdG9yIGluc2VydCBhIFBoaSBhbmQgbmV2ZXIg
cmV0dXJuIG51bGxwdHIpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBoaUluc2VydGlvbkZ1bmN0
b3I+CisgICAgdm9pZCBjb21wdXRlUGhpcyhQaGlJbnNlcnRpb25GdW5jdG9yIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9kb21p
bmF0b3JzLmlzVmFsaWQoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKFZhcmlhYmxlJiB2YXJp
YWJsZSA6IG1fdmFyaWFibGVzKSB7CisgICAgICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5m
b3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZS5tX2Jsb2Nrc1dpdGhEZWZzLAorICAgICAgICAgICAgICAgIFsmXSAo
QmFzaWNCbG9jayogYmxvY2spIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBw
aGlOb2RlID0gZnVuY3RvcigmdmFyaWFibGUsIGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFwaGlOb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBkYXRhID0g
bV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICAgICAgRGVmKiBwaGlEZWYgPSBtX3BoaXMu
YWRkKERlZigmdmFyaWFibGUsIGJsb2NrLCBwaGlOb2RlKSk7CisgICAgICAgICAgICAgICAgICAg
IGRhdGEubV9waGlzLmFwcGVuZChwaGlEZWYpOworICAgICAgICAgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGRhdGEubV9kZWZzLmFkZCgmdmFyaWFibGUsIHBoaURlZik7CisgICAgICAgICAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgcmVzdWx0LmlzTmV3RW50cnkpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8RGVmKj4mIHBoaXNGb3JCbG9j
ayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGFbYmxvY2td
Lm1fcGhpczsKKyAgICB9CisgICAgCisgICAgLy8gSWdub3JlcyBkZWZzIHdpdGhpbiB0aGUgZ2l2
ZW4gYmxvY2s7IGl0IGFzc3VtZXMgdGhhdCB5b3UndmUgdGFrZW4gY2FyZSBvZiB0aG9zZQorICAg
IC8vIHlvdXJzZWxmLgorICAgIERlZiogbm9uTG9jYWxSZWFjaGluZ0RlZihCYXNpY0Jsb2NrKiwg
VmFyaWFibGUqKTsKKyAgICBEZWYqIHJlYWNoaW5nRGVmQXRIZWFkKEJhc2ljQmxvY2sqIGJsb2Nr
LCBWYXJpYWJsZSogdmFyaWFibGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9uTG9jYWxSZWFj
aGluZ0RlZihibG9jaywgdmFyaWFibGUpOworICAgIH0KKyAgICAKKyAgICAvLyBDb25zaWRlcnMg
dGhlIGRlZiB3aXRoaW4gdGhlIGdpdmVuIGJsb2NrLCBidXQgb25seSB3b3JrcyBhdCB0aGUgdGFp
bCBvZiB0aGUgYmxvY2suCisgICAgRGVmKiByZWFjaGluZ0RlZkF0VGFpbChCYXNpY0Jsb2NrKiwg
VmFyaWFibGUqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxl
PiBtX3ZhcmlhYmxlczsKKyAgICBCYWc8RGVmPiBtX2RlZnM7CisgICAgCisgICAgQmFnPERlZj4g
bV9waGlzOworICAgIAorICAgIHN0cnVjdCBCbG9ja0RhdGEgeworICAgICAgICBIYXNoTWFwPFZh
cmlhYmxlKiwgRGVmKj4gbV9kZWZzOworICAgICAgICBWZWN0b3I8RGVmKj4gbV9waGlzOworICAg
IH07CisgICAgICAgICAgICAKKyAgICBCbG9ja01hcDxCbG9ja0RhdGE+IG1fZGF0YTsKKyAgICAK
KyAgICBHcmFwaCYgbV9ncmFwaDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU1NBQ2FsY3VsYXRvcl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZl
cnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0
LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdTU0FDYWxjdWxhdG9yLmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CkBAIC00Myw2ICs0NCw3IEBAIGNsYXNzIFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1YmxpYyBQ
aGFzZSAKIHB1YmxpYzoKICAgICBTU0FDb252ZXJzaW9uUGhhc2UoR3JhcGgmIGdyYXBoKQogICAg
ICAgICA6IFBoYXNlKGdyYXBoLCAiU1NBIGNvbnZlcnNpb24iKQorICAgICAgICAsIG1fY2FsY3Vs
YXRvcihncmFwaCkKICAgICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKICAgICAgICAgLCBt
X2NoYW5nZWQoZmFsc2UpCiAgICAgewpAQCAtNTcsMjU1ICs1OSwxNjcgQEAgcHVibGljOgogICAg
ICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8v
IEVsaW1pbmF0ZSBhbGwgZHVwbGljYXRlIG9yIHNlbGYtcG9pbnRpbmcgUGhpIGVkZ2VzLiBUaGlz
IG1lYW5zIHRoYXQKLSAgICAgICAgLy8gd2UgdHJhbnNmb3JtOgotICAgICAgICAvLwotICAgICAg
ICAvLyBwOiBQaGkoQG4xLCBAbjIsIEBuMykKLSAgICAgICAgLy8KLSAgICAgICAgLy8gaW50bzoK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gcDogUGhpKEB4KQotICAgICAgICAvLwotICAgICAgICAv
LyBpZiBlYWNoIEBuaSBpbiB7QG4xLCBAbjIsIEBuM30gaXMgZWl0aGVyIGVxdWFsIHRvIEBwIHRv
IGlzIGVxdWFsCi0gICAgICAgIC8vIHRvIEB4LCBmb3IgZXhhY3RseSBvbmUgb3RoZXIgQHguIEFk
ZGl0aW9uYWxseSwgdHJpdmlhbCBQaGlzIChpLmUuCi0gICAgICAgIC8vIHA6IFBoaShAeCkpIGFy
ZSBmb3J3YXJkZWQsIHNvIHRoYXQgaWYgaGF2ZSBhbiBlZGdlIHRvIHN1Y2ggQHAsIHdlCi0gICAg
ICAgIC8vIHJlcGxhY2UgaXQgd2l0aCBAeC4gVGhpcyBsb29wIGRvZXMgdGhpcyBmb3IgUGhpcyBv
bmx5OyBsYXRlciB3ZSBkbwotICAgICAgICAvLyBzdWNoIGZvcndhcmRpbmcgZm9yIFBoaSByZWZl
cmVuY2VzIGZvdW5kIGluIG90aGVyIG5vZGVzLgotICAgICAgICAvLwotICAgICAgICAvLyBTZWUg
QXljb2NrIGFuZCBIb3JzcG9vbCBpbiBDQycwMCBmb3IgYSBiZXR0ZXIgZGVzY3JpcHRpb24gb2Yg
d2hhdAotICAgICAgICAvLyB3ZSdyZSBkb2luZyBoZXJlLgotICAgICAgICBkbyB7Ci0gICAgICAg
ICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6
ZSgpOyBwaGlJbmRleC0tOykgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9j
ay0+cGhpc1twaGlJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwaGktPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yd2FyZFBoaUNoaWxkcmVuKHBoaSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlZHVwbGljYXRlQ2hpbGRyZW4ocGhpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgICAg
IG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKKyAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRv
cnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworCisgICAgICAgIC8vIENyZWF0ZSBhIFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlIGZvciBldmVyeSByb290IFZhcmlhYmxlQWNjZXNzRGF0YS4K
KyAgICAgICAgZm9yIChWYXJpYWJsZUFjY2Vzc0RhdGEmIHZhcmlhYmxlIDogbV9ncmFwaC5tX3Zh
cmlhYmxlQWNjZXNzRGF0YSkgeworICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS5pc1Jvb3QoKSB8
fCB2YXJpYWJsZS5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJs
ZSA9IG1fY2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgQVNTRVJUKHNzYVZh
cmlhYmxlLT5pbmRleCgpID09IG1fdmFyaWFibGVGb3JTU0FJbmRleC5zaXplKCkpOworICAgICAg
ICAgICAgbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXSA9ICZ2YXJp
YWJsZTsKKyAgICAgICAgICAgIG1fc3NhVmFyaWFibGVGb3JWYXJpYWJsZS5hZGQoJnZhcmlhYmxl
LCBzc2FWYXJpYWJsZSk7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZvciBlYWNo
IGJhc2ljIGJsb2NrLCBmb3IgZWFjaCBsb2NhbCBsaXZlIGF0IHRoZSBoZWFkIG9mIHRoYXQgYmxv
Y2ssCi0gICAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBub2RlIHdlIHNob3VsZCBiZSByZWZlcnJp
bmcgdG8gaW5zdGVhZCBvZiB0aGF0IGxvY2FsLgotICAgICAgICAvLyBJZiBpdCB0dXJucyBvdXQg
dG8gYmUgYSBub24tdHJpdmlhbCBQaGksIG1ha2Ugc3VyZSB0aGF0IHdlIGNyZWF0ZSBhbgotICAg
ICAgICAvLyBTU0EgUGhpIGFuZCBVcHNpbG9ucyBpbiBwcmVkZWNlc3NvciBibG9ja3MuIFdlIHJl
dXNlCi0gICAgICAgIC8vIEJhc2ljQmxvY2s6OnZhcmlhYmxlc0F0SGVhZCBmb3IgdHJhY2tpbmcg
d2hpY2ggbm9kZXMgdG8gcmVmZXIgdG8uCi0gICAgICAgIE9wZXJhbmRzPGJvb2w+IG5vblRyaXZp
YWxQaGlzKE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsK
KyAgICAgICAgLy8gRmluZCBhbGwgU2V0TG9jYWxzIGFuZCBjcmVhdGUgRGVmcyBmb3IgdGhlbS4g
V2UgaGFuZGxlIFNldEFyZ3VtZW50IGJ5IGNyZWF0aW5nIGEKKyAgICAgICAgLy8gR2V0QXJndW1l
bnQuCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgbm9uVHJpdmlhbFBoaXMuZmlsbChm
YWxzZSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cGhpcy5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1tpXTsKLSAg
ICAgICAgICAgICAgICBpZiAoIXBoaS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCkpCi0gICAgICAg
ICAgICAgICAgICAgIG5vblRyaXZpYWxQaGlzLm9wZXJhbmQocGhpLT5sb2NhbCgpKSA9IHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwotICAgICAgICAg
ICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTXVzdCBwcm9j
ZXNzIHRoZSBibG9jayBpbiBmb3J3YXJkIGRpcmVjdGlvbiBiZWNhdXNlIHdlIHdhbnQgdG8gc2Vl
IHRoZSBsYXN0CisgICAgICAgICAgICAvLyBhc3NpZ25tZW50IGZvciBldmVyeSBsb2NhbC4KKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2st
PnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gU2V0
TG9jYWwgJiYgbm9kZS0+b3AoKSAhPSBTZXRBcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0IGJsb2NrICMiLCBibG9ja0luZGV4LCAi
IGZvciBvcGVyYW5kIHIiLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChp
KSwgIiBoYXZlIG5vZGUgIiwgbm9kZSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFBvaXNvbiB0aGlzIGVudHJ5IGluIHZhcmlhYmxlc0F0
SGVhZCBiZWNhdXNlIHdlIGRvbid0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdhbnQgYW55b25l
IHRvIHRyeSB0byByZWZlciB0byBpdCwgaWYgdGhlIHZhcmlhYmxlIGlzCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGNhcHR1cmVkLgotICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVz
QXRIZWFkW2ldID0gMDsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAg
ICAgICAgICAgICAgIGNhc2UgUGhpOgotICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6
Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNlIFBo
YW50b21Mb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3Ao
KSA9PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0ZsdXNoZWQgPSAhIShub2RlLT5mbGFncygpICYgTm9k
ZUlzRmx1c2hlZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9uVHJpdmlhbFBoaXMu
b3BlcmFuZChub2RlLT5sb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRWRnZSBl
ZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoZWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgT25lIGNoaWxkOiAiLCBl
ZGdlLCAiLCAiLCBSYXdQb2ludGVyKGVkZ2Uubm9kZSgpKSwgIlxuIik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBub2RlID0gZWRnZS5ub2RlKCk7IC8vIEl0J3Mgc29tZXRoaW5nIGZyb20gYSBk
aWZmZXJlbnQgYmFzaWMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgTm9uLXRyaXZpYWwuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEl0J3MgYSBub24tdHJpdmlhbCBQaGkuCi0gICAgICAgICAgICAgICAgICAgICAgICBG
bHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGVGbGFncyByZXN1bHQgPSByZXN1bHRGb3IoZm9ybWF0KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVzZUtpbmRGb3IoZm9ybWF0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIFBoaSwgTm9kZU9yaWdpbigp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnNlcnRlZCBuZXcgbm9kZTogIiwgbm9kZSwgIlxu
Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKHJlc3VsdCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVSZXN1bHRNYXNrKSA9PSByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmVkZWNlc3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBwcmVkZWNlc3Nv
ci0+bGFzdCgpLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhub2RlKSwgRWRnZShwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsW2ldLCB1c2VLaW5kKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZsdXNoZWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBEbyBub3RoaW5nLiBGb3IgbXVsdGlwbGUgcmVhc29ucy4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFz
b24gIzE6IElmIHRoZSBsb2NhbCBpcyBmbHVzaGVkIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBib3Ro
ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGEgTW92SGludCBzaW5jZSBl
dmVyeSBwYXRoIHRvIHRoaXMgcG9pbnQgaW4gdGhlIGNvZGUgd2lsbAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGhhdmUgZmx1c2hlZCB0aGUgYnl0ZWNvZGUgdmFyaWFibGUgdXNpbmcg
YSBTZXRMb2NhbCBhbmQgaGVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUg
QXZhaWxhYmlsaXR5OjpmbHVzaGVkQXQoKSB3aWxsIGFncmVlLCBhbmQgdGhhdCB3aWxsIGJlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VmZmljaWVudCBmb3IgZmlndXJpbmcgb3V0
IGhvdyB0byByZWNvdmVyIHRoZSB2YXJpYWJsZSdzIHZhbHVlLgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMjogSWYg
d2UgaGFkIGluc2VydGVkIGEgTW92SGludCBhbmQgdGhlIFBoaSBmdW5jdGlvbiBoYWQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBkaWVkIChiZWNhdXNlIHRoZSBvbmx5IHVzZXIgb2Yg
dGhlIHZhbHVlIHdhcyB0aGUgImZsdXNoIiAtIGkuZS4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBzb21lIGFzeW5jaHJvbm91cyBydW50aW1lIHRoaW5neSkgdGhlbiB0aGUgTW92SGlu
dCB3b3VsZCB0dXJuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50byBhIFpvbWJp
ZUhpbnQsIHdoaWNoIHdvdWxkIGZvb2wgdXMgaW50byB0aGlua2luZyB0aGF0IHRoZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlIGlzIGRlYWQuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMz
OiBJZiB3ZSBoYWQgaW5zZXJ0ZWQgYSBNb3ZIaW50IHRoZW4gZXZlbiBpZiB0aGUgUGhpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RheWVkIGFsaXZlLCB3ZSB3b3VsZCBzdGlsbCBl
bmQgdXAgZ2VuZXJhdGluZyBpbmVmZmljaWVudCBjb2RlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gc2luY2Ugd2Ugd291bGQgYmUgdGVsbGluZyB0aGUgT1NSIGV4aXQgY29tcGlsZXIg
dG8gdXNlIHNvbWUgU1NBCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgZm9y
IHRoZSBieXRlY29kZSB2YXJpYWJsZSByYXRoZXIgdGhhbiBqdXN0IHRlbGxpbmcgaXQgdGhhdAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBvbiB0
aGUgc3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBOb2RlT3JpZ2luKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5v
ZmZzZXQoKSksIG5vZGUtPmRlZmF1bHRFZGdlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGROb2Rl
OworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKQorICAgICAgICAg
ICAgICAgICAgICBjaGlsZE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNl
dEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdldEFyZ3VtZW50LCBub2RlLT5vcmlnaW4sIE9wSW5mbyhub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsKKyAgICAgICAgICAgICAg
ICBtX2NhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAgICBtX3NzYVZhcmlhYmxl
Rm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKSwgYmxvY2ssIGNoaWxkTm9kZSk7CiAgICAgICAgICAg
ICB9Ci0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICh2ZXJib3NlKSB7Ci0gICAg
ICAgICAgICBkYXRhTG9nKCJWYXJpYWJsZXMgYXQgaGVhZCBhZnRlciBTU0EgUGhpIGluc2VydGlv
bjpcbiIpOwotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgICAgIGlm
ICghYmxvY2spCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAiLCAqYmxvY2ssICI6ICIsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsICJc
biIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBBdCB0
aGlzIHBvaW50IHZhcmlhYmxlc0F0SGVhZCBpbiBlYWNoIGJsb2NrIHJlZmVycyB0byBlaXRoZXI6
CisgICAgICAgIC8vIERlY2lkZSB3aGVyZSBQaGlzIGFyZSB0byBiZSBpbnNlcnRlZC4gVGhpcyBj
cmVhdGVzIHRoZSBQaGkncyBidXQgZG9lc24ndCBpbnNlcnQgdGhlbQorICAgICAgICAvLyB5ZXQu
IFdlIHdpbGwgbGF0ZXIga25vdyB3aGVyZSB0byBpbnNlcnQgdGhlbSBiZWNhdXNlIFNTQUNhbGN1
bGF0b3IgaXMgc3VjaCBhIGJyby4KKyAgICAgICAgbV9jYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAor
ICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUsIEJh
c2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7CisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FWYXJpYWJsZS0+aW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gUHJ1bmUgYnkgbGl2
ZW5lc3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhlciB0aGFuIGNvbXBpbGUgdGltZXMu
CisgICAgICAgICAgICAgICAgaWYgKCFibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5h
ZGROb2RlKAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+cHJlZGljdGlvbigpLCBQaGks
IE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFy
aWFibGUtPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAgICAgICAgTm9kZUZsYWdzIHJlc3VsdCA9
IHJlc3VsdEZvcihmb3JtYXQpOworICAgICAgICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3Mo
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAKKyAgICAgICAgLy8gRG8gdGhlIGJ1bGsgb2YgdGhlIFNTQSBjb252ZXJzaW9u
LiBGb3IgZWFjaCBibG9jaywgdGhpcyB0cmFja3MgdGhlIG9wZXJhbmQtPk5vZGUKKyAgICAgICAg
Ly8gbWFwcGluZyBiYXNlZCBvbiBhIGNvbWJpbmF0aW9uIG9mIHdoYXQgdGhlIFNTQUNhbGN1bGF0
b3IgdGVsbHMgdXMsIGFuZCB1cyB3YWxraW5nIG92ZXIKKyAgICAgICAgLy8gdGhlIGJsb2NrIGlu
IGZvcndhcmQgb3JkZXIuIFdlIHVzZSBvdXIgb3duIGRhdGEgc3RydWN0dXJlLCB2YWx1ZUZvck9w
ZXJhbmQsIGZvcgorICAgICAgICAvLyBkZXRlcm1pbmluZyB0aGUgbG9jYWwgbWFwcGluZywgYnV0
IHdlIHJlbHkgb24gU1NBQ2FsY3VsYXRvciBmb3IgdGhlIG5vbi1sb2NhbCBtYXBwaW5nLgogICAg
ICAgICAvLwotICAgICAgICAvLyAxKSBBIG5ldyBTU0EgcGhpIGluIHRoZSBjdXJyZW50IGJsb2Nr
LgotICAgICAgICAvLyAyKSBBIFNldEFyZ3VtZW50LCB3aGljaCB3aWxsIHNvb24gZ2V0IGNvbnZl
cnRlZCBpbnRvIGEgR2V0QXJndW1lbnQuCi0gICAgICAgIC8vIDMpIEFuIG9sZCBDUFMgcGhpIGlu
IGEgZGlmZmVyZW50IGJsb2NrLgorICAgICAgICAvLyBUaGlzIGRvZXMgdGhyZWUgdGhpbmdzIGF0
IG9uY2U6CiAgICAgICAgIC8vCi0gICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhp
bmcgZm9yICgxKSBhbmQgKDIpLCBidXQgd2UgZG8gbmVlZCB0bwotICAgICAgICAvLyBkbyBhIHJl
cGxhY2VtZW50IGZvciAoMykuCi0gICAgICAgIAotICAgICAgICAvLyBDbGVhciBhbGwgcmVwbGFj
ZW1lbnRzLCBzaW5jZSBvdGhlciBwaGFzZXMgbWF5IGhhdmUgdXNlZCB0aGVtLgotICAgICAgICBt
X2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZHVtcEdy
YXBoKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBqdXN0IGJlZm9yZSBpZGVudGlmeWlu
ZyByZXBsYWNlbWVudHM6XG4iKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGb3IgYWxsIG9mIHRoZSBvbGQgQ1BTIFBoaXMsIGZp
Z3VyZSBvdXQgd2hhdCB0aGV5IGNvcnJlc3BvbmQgdG8gaW4gU1NBLgotICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWFs
aW5nIHdpdGggYmxvY2sgIyIsIGJsb2NrSW5kZXgsICJcbiIpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsKLSAg
ICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRleF07Ci0gICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAg
ICAgICAgICAgICAgICAgICAgICAgICJDb25zaWRlcmluZyAiLCBwaGksICIgKCIsIFJhd1BvaW50
ZXIocGhpKSwgIiksIGZvciByIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBoaS0+bG9jYWwo
KSwgIiwgYW5kIGl0cyByZXBsYWNlbWVudCBpbiAiLCAqYmxvY2ssICIsICIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQocGhpLT5sb2NhbCgp
KSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFTU0VSVChwaGkg
IT0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHBoaS0+bG9jYWwoKSkpOwotICAgICAg
ICAgICAgICAgIHBoaS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmQocGhpLT5sb2NhbCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgLy8gTm93IG1ha2Ugc3VyZSB0aGF0IGFsbCB2YXJpYWJsZXNBdEhlYWQgaW4gZWFjaCBi
bG9jayBwb2ludHMgdG8gdGhlCi0gICAgICAgIC8vIGNhbm9uaWNhbCBTU0EgdmFsdWUuIFByaW9y
IHRvIHRoaXMsIHZhcmlhYmxlc0F0SGVhZFtsb2NhbF0gbWF5IHBvaW50IHRvCi0gICAgICAgIC8v
IGFuIG9sZCBDUFMgUGhpIGluIGEgZGlmZmVyZW50IGJsb2NrLgorICAgICAgICAvLyAtIEluc2Vy
dHMgdGhlIFBoaXMgaW4gYWxsIG9mIHRoZSBwbGFjZXMgd2hlcmUgdGhleSBuZWVkIHRvIGdvLiBX
ZSd2ZSBhbHJlYWR5IGNyZWF0ZWQKKyAgICAgICAgLy8gICB0aGVtIGFuZCB0aGV5IGFyZSBhY2Nv
dW50ZWQgZm9yIGluIHRoZSBTU0FDYWxjdWxhdG9yJ3MgZGF0YSBzdHJ1Y3R1cmVzLCBidXQgd2UK
KyAgICAgICAgLy8gICBoYXZlbid0IGluc2VydGVkIHRoZW0geWV0LCBtb3N0bHkgYmVjYXVzZSB3
ZSB3YW50IHRvIGluc2VydCBhbGwgb2YgYSBibG9jaydzIFBoaXMgaW4KKyAgICAgICAgLy8gICBv
bmUgZ28gdG8gYW1vcnRpemUgdGhlIGNvc3Qgb2Ygbm9kZSBpbnNlcnRpb24uCisgICAgICAgIC8v
CisgICAgICAgIC8vIC0gQ3JlYXRlIGFuZCBpbnNlcnQgVXBzaWxvbnMuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIC0gQ29udmVydCBhbGwgb2YgdGhlIHByZWV4aXN0aW5nIFNTQSBub2RlcyAob3Ro
ZXIgdGhhbiB0aGUgb2xkIENQUyBQaGkgbm9kZXMpIGludG8gU1NBCisgICAgICAgIC8vICAgZm9y
bSBieSByZXBsYWNpbmcgYXMgZm9sbG93czoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAtIEdl
dExvY2FsIG92ZXIgY2FwdHVyZWQgdmFyaWFibGVzIGxvc2UgdGhlaXIgcGhpcy4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gICAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGll
IGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBub2RlCisgICAgICAgIC8v
ICAgICBzcGVjaWZpZWQgYnkgdmFsdWVGb3JPcGVyYW5kLgorICAgICAgICAvLworICAgICAgICAv
LyAgIC0gU2V0TG9jYWwgZ2V0cyBOb2RlTXVzdEdlbmVyYXRlIGlmIGl0J3MgZmx1c2hlZCwgb3Ig
dHVybnMgaW50byBhIENoZWNrIG90aGVyd2lzZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAt
IEZsdXNoIGxvc2VzIGl0cyBjaGlsZHJlbiBhbmQgdHVybnMgaW50byBhIFBoYW50b20uCisgICAg
ICAgIC8vCisgICAgICAgIC8vICAgLSBQaGFudG9tTG9jYWwgYmVjb21lcyBQaGFudG9tLCBhbmQg
aXRzIGNoaWxkIGlzIHdoYXRldmVyIGlzIHNwZWNpZmllZCBieQorICAgICAgICAvLyAgICAgdmFs
dWVGb3JPcGVyYW5kLgorICAgICAgICAvLworICAgICAgICAvLyAgIC0gU2V0QXJndW1lbnQgaXMg
cmVtb3ZlZCB1bmxlc3MgaXQncyBhIGNhcHR1cmVkIHZhcmlhYmxlLiBOb3RlIHRoYXQgR2V0QXJn
dW1lbnQgbm9kZXMKKyAgICAgICAgLy8gICAgIGhhdmUgYWxyZWFkeSBiZWVuIGluc2VydGVkLgor
ICAgICAgICBPcGVyYW5kczxOb2RlKj4gdmFsdWVGb3JPcGVyYW5kKE9wZXJhbmRzTGlrZSwgbV9n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKICAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAg
ICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWRb
aV07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgCisgICAgICAgICAg
ICB2YWx1ZUZvck9wZXJhbmQuY2xlYXIoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSB2
YWx1ZUZvck9wZXJhbmQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZUF0SGVhZCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07CisgICAgICAgICAgICAgICAgaWYg
KCFub2RlQXRIZWFkKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB3aGlsZSAobm9kZS0+cmVwbGFjZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUgIT0gbm9kZS0+cmVwbGFjZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICBub2Rl
ID0gbm9kZS0+cmVwbGFjZW1lbnQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSBub2RlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAgZGF0YUxv
ZygiVmFyaWFibGVzIGF0IGhlYWQgYWZ0ZXIgY29udmVyZ2VuY2U6XG4iKTsKLSAgICAgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJ
bmRleC0tOykgewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlQXRIZWFkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFy
aWFibGUtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgICIsICpibG9jaywgIjogIiwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZCwgIlxuIik7CisKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSogc3NhVmFyaWFibGUgPSBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKTsK
KyAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmRbaV0gPSBtX2NhbGN1bGF0b3IucmVhY2hp
bmdEZWZBdEhlYWQoYmxvY2ssIHNzYVZhcmlhYmxlKS0+dmFsdWUoKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQ29udmVydCBvcGVyYXRpb25zIG92ZXIg
bG9jYWxzIGludG8gb3BlcmF0aW9ucyBvdmVyIFNTQSBub2Rlcy4KLSAgICAgICAgLy8gLSBHZXRM
b2NhbCBvdmVyIGNhcHR1cmVkIHZhcmlhYmxlcyBsb3NlIHRoZWlyIHBoaXMuCi0gICAgICAgIC8v
IC0gR2V0TG9jYWwgb3ZlciB1bmNhcHR1cmVkIHZhcmlhYmxlcyBkaWUgYW5kIGdldCByZXBsYWNl
ZCB3aXRoIHJlZmVyZW5jZXMKLSAgICAgICAgLy8gICB0byB0aGUgbm9kZSBzcGVjaWZpZWQgYnkg
dmFyaWFibGVzQXRIZWFkLgotICAgICAgICAvLyAtIFNldExvY2FsIGdldHMgTm9kZU11c3RHZW5l
cmF0ZSBpZiBpdCdzIGZsdXNoZWQsIG9yIHR1cm5zIGludG8gYQotICAgICAgICAvLyAgIENoZWNr
IG90aGVyd2lzZS4KLSAgICAgICAgLy8gLSBGbHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYW5kIHR1
cm5zIGludG8gYSBQaGFudG9tLgotICAgICAgICAvLyAtIFBoYW50b21Mb2NhbCBiZWNvbWVzIFBo
YW50b20sIGFuZCBpdHMgY2hpbGQgaXMgd2hhdGV2ZXIgaXMgc3BlY2lmaWVkCi0gICAgICAgIC8v
ICAgYnkgdmFyaWFibGVzQXRIZWFkLgotICAgICAgICAvLyAtIFNldEFyZ3VtZW50IHR1cm5zIGlu
dG8gR2V0QXJndW1lbnQgdW5sZXNzIGl0J3MgYSBjYXB0dXJlZCB2YXJpYWJsZS4KLSAgICAgICAg
Ly8gLSBVcHNpbG9ucyBnZXQgdGhlaXIgY2hpbGRyZW4gZml4ZWQgdG8gcmVmZXIgdG8gdGhlIHRy
dWUgdmFsdWUgb2YgdGhhdCBsb2NhbAotICAgICAgICAvLyAgIGF0IHRoZSBlbmQgb2YgdGhlIGJs
b2NrLiBQcmlvciB0byB0aGlzIGxvb3AsIFVwc2lsb25zIHdpbGwgcmVmZXIgdG8KLSAgICAgICAg
Ly8gICB2YXJpYWJsZUF0VGFpbFtvcGVyYW5kXSwgd2hpY2ggbWF5IGJlIGFueSBvZiBGbHVzaCwg
UGhhbnRvbUxvY2FsLCBHZXRMb2NhbCwKLSAgICAgICAgLy8gICBTZXRMb2NhbCwgU2V0QXJndW1l
bnQsIG9yIFBoaS4gV2UgYWNjb21wbGlzaCB0aGlzIGJ5IHNldHRpbmcgdGhlCi0gICAgICAgIC8v
ICAgcmVwbGFjZW1lbnQgcG9pbnRlcnMgb2YgYWxsIG9mIHRob3NlIG5vZGVzIHRvIHJlZmVyIHRv
IGVpdGhlcgotICAgICAgICAvLyAgIHZhcmlhYmxlc0F0SGVhZFtvcGVyYW5kXSwgb3IgdGhlIGNo
aWxkIG9mIHRoZSBTZXRMb2NhbC4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBp
ZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJ
bmRleC0tOykgewotICAgICAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+cmVwbGFj
ZW1lbnQgPQotICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmQoYmxvY2stPnBoaXNbcGhpSW5kZXhdLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIC8vIEluc2Vy
dCBQaGlzIGJ5IGFza2luZyB0aGUgY2FsY3VsYXRvciB3aGF0IHBoaXMgdGhlcmUgYXJlIGluIHRo
aXMgYmxvY2suIEFsc28gdXBkYXRlCisgICAgICAgICAgICAvLyB2YWx1ZUZvck9wZXJhbmQgd2l0
aCB0aG9zZSBQaGlzLiBGb3IgUGhpcyBhc3NvY2lhdGVkIHdpdGggdmFyaWFibGVzIHRoYXQgYXJl
IG5vdAorICAgICAgICAgICAgLy8gZmx1c2hlZCwgd2UgYWxzbyBpbnNlcnQgYSBNb3ZIaW50Lgor
ICAgICAgICAgICAgc2l6ZV90IHBoaUluc2VydGlvblBvaW50ID0gMDsKKyAgICAgICAgICAgIGZv
ciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3IucGhpc0ZvckJsb2Nr
KGJsb2NrKSkgeworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IGlmIHRoZSBsb2Nh
bCBpcyBtZWFudCB0byBiZSBmbHVzaGVkIGhlcmUuCisgICAgICAgICAgICAgICAgYm9vbCBpc0Zs
dXNoZWQgPSAhISgKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKS0+ZmxhZ3MoKSAmIE5vZGVJc0ZsdXNoZWQpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChwaGlJ
bnNlcnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUZv
ck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGlEZWYtPnZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzRmx1c2hlZCkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLiBGb3IgbXVsdGlwbGUgcmVhc29ucy4KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMTogSWYgdGhl
IGxvY2FsIGlzIGZsdXNoZWQgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoIGEKKyAg
ICAgICAgICAgICAgICAgICAgLy8gTW92SGludCBzaW5jZSBldmVyeSBwYXRoIHRvIHRoaXMgcG9p
bnQgaW4gdGhlIGNvZGUgd2lsbCBoYXZlIGZsdXNoZWQgdGhlCisgICAgICAgICAgICAgICAgICAg
IC8vIGJ5dGVjb2RlIHZhcmlhYmxlIHVzaW5nIGEgU2V0TG9jYWwgYW5kIGhlbmNlIHRoZSBBdmFp
bGFiaWxpdHk6OmZsdXNoZWRBdCgpCisgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgYWdyZWUs
IGFuZCB0aGF0IHdpbGwgYmUgc3VmZmljaWVudCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0byByZWNv
dmVyIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSdzIHZhbHVlLgorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMyOiBJZiB3ZSBo
YWQgaW5zZXJ0ZWQgYSBNb3ZIaW50IGFuZCB0aGUgUGhpIGZ1bmN0aW9uIGhhZCBkaWVkCisgICAg
ICAgICAgICAgICAgICAgIC8vIChiZWNhdXNlIHRoZSBvbmx5IHVzZXIgb2YgdGhlIHZhbHVlIHdh
cyB0aGUgImZsdXNoIiAtIGkuZS4gc29tZQorICAgICAgICAgICAgICAgICAgICAvLyBhc3luY2hy
b25vdXMgcnVudGltZSB0aGluZ3kpIHRoZW4gdGhlIE1vdkhpbnQgd291bGQgdHVybiBpbnRvIGEg
Wm9tYmllSGludCwKKyAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd291bGQgZm9vbCB1cyBp
bnRvIHRoaW5raW5nIHRoYXQgdGhlIHZhcmlhYmxlIGlzIGRlYWQuIE5vdGUgdGhhdCB0aGlzCisg
ICAgICAgICAgICAgICAgICAgIC8vIHJlYXNvbiBoYXMgYSBsb3QgdG8gZG8gd2l0aCB0aGUgZmFj
dCB0aGF0IEZsdXNoZXMgZG8gbm90IHR1cm4gaW50bworICAgICAgICAgICAgICAgICAgICAvLyBQ
aGFudG9tcywgYmVjYXVzZSBvdXIgaGFuZGxpbmcgb2YgRmx1c2hlcyBhc3N1bWUgdGhhdCB3ZSAo
MSkgYWx3YXlzIGxlYXZlCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmbHVzaGVkIFNldExv
Y2FscyBhbG9uZSBhbmQgKDIpIE9TUiBhdmFpbGFiaWxpdHkgYW5hbHlzaXMgYWx3YXlzIHNlZXMK
KyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGF2YWlsYWJsZSBmbHVzaC4gVGhlIHByZXNlbmNl
IG9mIGEgTW92SGludCBvciBab21iaWVIaW50IHdvdWxkIG1ha2UgdGhlCisgICAgICAgICAgICAg
ICAgICAgIC8vIGZsdXNoIHNlZW0gdW5hdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAvLyBSZWFzb24gIzM6IElmIHdlIGhhZCBpbnNlcnRlZCBhIE1v
dkhpbnQgdGhlbiBldmVuIGlmIHRoZSBQaGkgc3RheWVkIGFsaXZlLAorICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSB3b3VsZCBzdGlsbCBlbmQgdXAgZ2VuZXJhdGluZyBpbmVmZmljaWVudCBjb2Rl
IHNpbmNlIHdlIHdvdWxkIGJlIHRlbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIE9T
UiBleGl0IGNvbXBpbGVyIHRvIHVzZSBzb21lIFNTQSB2YWx1ZSBmb3IgdGhlIGJ5dGVjb2RlIHZh
cmlhYmxlCisgICAgICAgICAgICAgICAgICAgIC8vIHJhdGhlciB0aGFuIGp1c3QgdGVsbGluZyBp
dCB0aGF0IHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBvbiB0aGUgc3RhY2suCisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBTcGVjTm9uZSwg
TW92SGludCwgTm9kZU9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZh
cmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgp
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoIWJsb2NrLT5hdChub2RlSW5kZXgpLT5yZXBsYWNlbWVudCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUlu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CkBAIC0zMTUsMzQgKzIyOSwzMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8
fCAhIShub2RlLT5mbGFncygpICYgTm9kZUlzRmx1c2hlZCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhDaGVjayk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOyAvLyBPbmx5IGZvciBVcHNpbG9ucy4KKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEl0IHNlZW1z
IHRlbXB0aW5nIHRvIGp1c3QgZG8gZm9yd2FyZFBoaShHZXRMb2NhbCksIGV4Y2VwdCB0aGF0IHdl
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNvdWxkIGhhdmUgY3JlYXRlZCBhIG5ldyAoU1NBKSBQ
aGksIGFuZCB0aGUgR2V0TG9jYWwgY291bGQgc3RpbGwgYmUKLSAgICAgICAgICAgICAgICAgICAg
Ly8gcmVmZXJyaW5nIHRvIGFuIG9sZCAoQ1BTKSBQaGkuIFVzZXMgdmFyaWFibGVzQXRIZWFkIHRv
IHRlbGwgdXMgd2hhdAotICAgICAgICAgICAgICAgICAgICAvLyB0byByZWZlciB0by4KICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
YmxlLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50
b20oKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFy
aWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAg
ICAgICBub2RlLT5yZXBsYWNlbWVudCA9IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOiB7CiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CiAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBvbmx5IGZvciBVcHNpbG9ucy4gQW4gVXBzaWxvbiB3aWxsIG9ubHkgcmVmZXIgdG8g
YSBGbHVzaCBpZgotICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSB3ZXJlIG5vIFNldExvY2Fs
cyBvciBHZXRMb2NhbHMgaW4gdGhlIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICBub2RlLT5y
ZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTM2NSw5ICsyNzcsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKS0+ZGVmYXVsdEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgb25seSBmb3IgVXBzaWxvbnMuIEFuIFVwc2lsb24gd2lsbCBvbmx5IHJlZmVy
IHRvIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gUGhhbnRvbUxvY2FsIGlmIHRoZXJlIHdlcmUg
bm8gU2V0TG9jYWxzIG9yIEdldExvY2FscyBpbiB0aGUgYmxvY2suCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM3NSwxNSArMjg0LDQ0IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFi
bGUtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRBcmd1bWVudCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlc3VsdChyZXN1bHRGb3Iobm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCghdmFyaWFibGUtPmlzQ2FwdHVyZWQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IG5vZGU7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBXZSB3YW50IHRvIGluc2VydCBVcHNpbG9ucyBqdXN0IGJlZm9yZSB0aGUgZW5k
IG9mIHRoZSBibG9jay4gT24gdGhlIHN1cmZhY2UgdGhpcworICAgICAgICAgICAgLy8gc2VlbXMg
ZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIFVwc2lsb24gd2lsbCBoYXZlIGEgY2hlY2tpbmcgVXNlS2lu
ZC4gQnV0LCB3ZSB3aWxsIG5vdAorICAgICAgICAgICAgLy8gYWN0dWFsbHkgYmUgcGVyZm9ybWlu
ZyB0aGUgY2hlY2sgYXQgdGhlIHBvaW50IG9mIHRoZSBVcHNpbG9uOyB0aGUgY2hlY2sgd2lsbAor
ICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZlIGJlZW4gcGVyZm9ybWVkIGF0IHRoZSBwb2ludCB3
aGVyZSB0aGUgb3JpZ2luYWwgU2V0TG9jYWwgd2FzLgorICAgICAgICAgICAgc2l6ZV90IHVwc2ls
b25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9y
aWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1
Y2Nlc3NvckluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
QmxvY2sgPSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKKyAgICAgICAgICAgICAg
ICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9jYWxjdWxhdG9yLnBoaXNGb3JC
bG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9k
ZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOworICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUlu
ZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9u
T3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHBoaU5vZGUpLCBFZGdlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGlOb2RlLT5kZWZh
dWx0VXNlS2luZCgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgLy8gRnJlZSBhbGwgQ1BTIHBoaXMgYW5kIHJlc2V0IHZh
cmlhYmxlcyB2ZWN0b3JzLgpAQCAtNDA3LDcwICszNDUsMTAgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBmb3J3YXJkUGhpQ2hpbGRy
ZW4oTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBB
ZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKLSAgICAgICAgICAgIEVkZ2UmIGVkZ2UgPSBub2Rl
LT5jaGlsZHJlbi5jaGlsZChpKTsKLSAgICAgICAgICAgIGlmICghZWRnZSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBmb3J3YXJkUGhpRWRnZShlZGdl
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBOb2RlKiBmb3J3YXJkUGhpKE5vZGUqIG5v
ZGUpCi0gICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgUGhpOiB7Ci0gICAgICAgICAgICAgICAgRWRnZSBl
ZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFlZGdlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAg
ICBub2RlID0gZWRnZS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAg
ICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgYm9vbCBmb3J3YXJkUGhpRWRn
ZShFZGdlJiBlZGdlKQotICAgIHsKLSAgICAgICAgTm9kZSogbmV3Tm9kZSA9IGZvcndhcmRQaGko
ZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAobmV3Tm9kZSA9PSBlZGdlLm5vZGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkZWR1cGxpY2F0ZUNoaWxk
cmVuKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
QWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2Rl
LT5jaGlsZHJlbi5jaGlsZChpKTsKLSAgICAgICAgICAgIGlmICghZWRnZSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChlZGdlID09IG5vZGUpIHsKLSAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGktLSk7Ci0gICAgICAgICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5TGlzdDo6
U2l6ZTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGop
ID09IGVkZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRn
ZShqLS0pOwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKKyAgICBTU0FD
YWxjdWxhdG9yIG1fY2FsY3VsYXRvcjsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7
CisgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSo+IG1fc3NhVmFyaWFibGVGb3JWYXJpYWJsZTsKKyAgICBWZWN0b3I8VmFyaWFibGVBY2Nlc3NE
YXRhKj4gbV92YXJpYWJsZUZvclNTQUluZGV4OwogICAgIGJvb2wgbV9jaGFuZ2VkOwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5oCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NTQUNvbnZlcnNpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMCArMzQsOSBAQCBjbGFz
cyBHcmFwaDsKIAogLy8gQ29udmVydCBUaHJlYWRlZENQUyBmb3JtIGludG8gU1NBIGZvcm0uIFRo
aXMgcmVzdWx0cyBpbiBhIGZvcm0gdGhhdCBoYXM6CiAvLwotLy8gLSBSb3VnaGx5IG1pbmltYWwg
UGhpJ3MuIFdlIHVzZSB0aGUgQXljb2NrICYgSG9yc3Bvb2wgZml4cG9pbnQgZm9yCi0vLyAgIGNv
bnZlcnRpbmcgdGhlIENQUyBtYXhpbWFsIFBoaXMgaW50byBTU0EgbWluaW1hbCBQaGlzLCB3aXRo
IHRoZSBjYXZlYXQKLS8vICAgdGhhdCBpcnJlZHVjaWJsZSBjb250cm9sIGZsb3cgbWF5IHJlc3Vs
dCBpbiBzb21lIG1pc3NlZCBvcHBvcnR1bml0aWVzCi0vLyAgIGZvciBQaGkgcmVkdWN0aW9uLgor
Ly8gLSBNaW5pbWFsIFBoaSdzLiBXZSB1c2UgdGhlIHRoZSBDeXRyb24gZXQgYWwgKFRPUExBUyc5
MSkgYWxnb3JpdGhtIGZvcgorLy8gICBQaGkgaW5zZXJ0aW9uLiBNb3N0IG9mIHRoZSBhbGdvcml0
aG0gaXMgaW1wbGVtZW50ZWQgaW4gU1NBQ2FsY3VsYXRvcgorLy8gICBhbmQgRG9taW5hdG9ycy4K
IC8vCiAvLyAtIE5vIHVzZXMgb2YgR2V0TG9jYWwvU2V0TG9jYWwgZXhjZXB0IGZvciBjYXB0dXJl
ZCB2YXJpYWJsZXMgYW5kIGZsdXNoZXMuCiAvLyAgIEFmdGVyIHRoaXMsIGFueSByZW1haW5pbmcg
U2V0TG9jYWwgbWVhbnMgRmx1c2guIFBoYW50b21Mb2NhbHMgYmVjb21lCkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMTczMzY2KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNSBAQAorMjAxNC0wOS0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIERGRyBzaG91bGQgaGF2ZSBhIHJldXNhYmxlIFNTQSBidWlsZGVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYzMzEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFVwZGF0ZSB0
aGUgYWxsb2MoKSBtZXRob2QgdG8gdXNlIHZhcmlhZGljIHRlbXBsYXRlcy4gVGhpcyBtYWtlcyBp
dCBtb3JlIG5hdHVyYWwgdG8gdXNlLgorCisgICAgICAgICogd3RmL1NlZ21lbnRlZFZlY3Rvci5o
OgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3I6OmFsbG9jKToKKwogMjAxNC0wOS0wNiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSB1cGRhdGVzIHN1
Z2dlc3RlZCBieSBuZXcgdmVyc2lvbiBvZiBYY29kZQpJbmRleDogU291cmNlL1dURi93dGYvU2Vn
bWVudGVkVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2VnbWVudGVkVmVj
dG9yLmgJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9XVEYvd3RmL1NlZ21lbnRlZFZlY3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsOSArMTU3LDEwIEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICAgICAgc2VnbWVudEZvcihtX3NpemUgLSAxKS0+dW5jaGVja2VkQXBwZW5kKHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOwogICAgICAgICB9CiAKLSAgICAgICAgVCYgYWxsb2MoKQorICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBUJiBhbGxvYyhBcmdzLi4u
IGFyZ3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZDxUPihUKCkpOworICAgICAgICAg
ICAgYXBwZW5kPFQ+KFQoYXJncy4uLikpOwogICAgICAgICAgICAgcmV0dXJuIGxhc3QoKTsKICAg
ICAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237755</attachid>
            <date>2014-09-07 10:33:07 -0700</date>
            <delta_ts>2014-09-08 11:32:50 -0700</delta_ts>
            <desc>it ran something without crashing!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>62880</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE0LTA5LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGEgcmV1c2FibGUgU1NBIGJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV2Ugd2FudCB0byBpbXBsZW1l
bnQgc29waGlzdGljYXRlZCBTU0EgdHJhbnNmb3JtYXRpb25zIGxpa2Ugb2JqZWN0IGFsbG9jYXRp
b24gc2lua2luZworICAgICAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjMzMCksIGJ1dCB0byBkbyB0aGF0LCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZG8KKyAg
ICAgICAgdXBkYXRlcyB0byBTU0EgdGhhdCByZXF1aXJlIGluc2VydGluZyBuZXcgUGhpJ3MuIFRo
aXMgcmVxdWlyZXMgY2FsY3VsYXRpbmcgd2hlcmUgUGhpcyBnby4KKyAgICAgICAgUHJldmlvdXNs
eSwgb3VyIFBoaSBjYWxjdWxhdGlvbiB3YXMgYmFzZWQgb24gQXljb2NrIGFuZCBIb3JzcG9vbCdz
IGFsZ29yaXRobSwgYW5kIG91cgorICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGFsZ29y
aXRobSBvbmx5IHdvcmtlZCB3aGVuIGRvaW5nIENQUy0+U1NBIGNvbnZlcnNpb24uIFRoZSBjb2Rl
CisgICAgICAgIGNvdWxkIG5vdCBiZSByZXVzZWQgZm9yIGNhc2VzIHdoZXJlIHNvbWUgcGhhc2Ug
aGFwcGVucyB0byBrbm93IHRoYXQgaXQgaW50cm9kdWNlZCBhIGZldworICAgICAgICBkZWZzIGlu
IHNvbWUgYmxvY2tzIGFuZCBpdCB3YW50cyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBQaGlzIHNo
b3VsZCBnby4gTW9yZW92ZXIsIGV2ZW4KKyAgICAgICAgdGhlIGdlbmVyYWwgYWxnb3JpdGhtIG9m
IEF5Y29jayBhbmQgSG9yc3Bvb2wgaXMgbm90IHdlbGwgc3VpdGVkIHRvIHN1Y2ggdGFyZ2V0dGVk
IFNTQQorICAgICAgICB1cGRhdGVzLCBzaW5jZSBpdCByZXF1aXJlcyBmaXJzdCBpbnNlcnRpbmcg
bWF4aW1hbCBQaGlzLiBUaGF0IHNjYWxlcyB3ZWxsIHdoZW4gdGhlIFBoaXMKKyAgICAgICAgd2Vy
ZSBhbHJlYWR5IHRoZXJlIChsaWtlIGluIG91ciBDUFMgZm9ybSkgYnV0IG90aGVyd2lzZSBpdCdz
IHF1aXRlIHVubmF0dXJhbCBhbmQgbWF5IGJlCisgICAgICAgIGRpZmZpY3VsdCB0byBtYWtlIGVm
ZmljaWVudC4KKyAgICAgICAgCisgICAgICAgIFRoZSB1c3VhbCB3YXkgb2YgaGFuZGxpbmcgYm90
aCBTU0EgY29udmVyc2lvbiBhbmQgU1NBIHVwZGF0ZSBpcyB0byB1c2UgQ3l0cm9uIGV0IGFsJ3MK
KyAgICAgICAgYWxnb3JpdGhtIGJhc2VkIG9uIGRvbWluYW5jZSBmcm9udGllcnMuIEkgcHJldmlv
dXNseSBvcHRpbWl6ZWQgb3VyIGRvbWluYXRvciBjYWxjdWxhdGlvbgorICAgICAgICBhbmQgcmVw
cmVzZW50YXRpb24gdG8gdXNlIGRvbWluYXRvciB0cmVlcyBjb21wdXRlZCB1c2luZyBMZW5nYXVl
ciBhbmQgVGFyamFuJ3MgYWxnb3JpdGhtLAorICAgICAgICBhbmQgdGhlbiBJIGltcGxlbWVudGVk
IGEgZG9taW5hbmNlIGZyb250aWVyIGNhbGN1bGF0b3IuIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0
aGUgZmluYWwKKyAgICAgICAgc3RlcCB0b3dhcmRzIG1ha2luZyBTU0EgdXBkYXRlIGF2YWlsYWJs
ZSB0byBhbGwgU1NBIHBoYXNlczogaXQgaW1wbGVtZW50cyBhbiBTU0FDYWxjdWxhdG9yCisgICAg
ICAgIHRoYXQgY2FuIHRlbGwgeW91IHdoZXJlIFBoaXMgZ28gd2hlbiBnaXZlbiBhbiBhcmJpdHJh
cnkgc2V0IG9mIERlZnMsIGFuZCBpdCB1c2VzIGl0IGZvcgorICAgICAgICBTU0EgY29udmVyc2lv
biAodGh1cyBnZXR0aW5nIHJpZCBvZiBBeWNvY2sgYW5kIEhvcnNwb29sKSB0byBlbnN1cmUgdGhh
dCBpdCBpcyB3ZWxsLXRlc3RlZAorICAgICAgICBhbmQgc28gdGhhdCBpbiB0aGUgbG9uZyBydW4s
IHdlIG9ubHkgaGF2ZSBvbmUgU1NBIGNhbGN1bGF0b3IgdGhhdCBldmVyeW9uZSBzaGFyZXMgcmF0
aGVyCisgICAgICAgIHRoYW4gaGF2aW5nIEN5dHJvbiBldCBhbCdzIGNhbGN1bGF0b3IgZm9yIHVw
ZGF0ZSBhbmQgQXljb2NrIGFuZCBIb3JzcG9vbCdzIGZvciBjb252ZXJzaW9uLgorICAgICAgICAK
KyAgICAgICAgVGhpcyBoYXMgbm8gb2JzZXJ2YWJsZSBpbXBhY3QuIEl0IGRvZXMgcmVkdWNlIHRo
ZSBhbW91bnQgb2YgY29kZSBpbiBTU0FDb252ZXJzaW9uUGhhc2UuCisgICAgICAgIEJ1dCBldmVu
IGJldHRlciwgaXQgbWFrZXMgU1NBQ29udmVyc2lvblBoYXNlIGhhdmUgc2lnbmlmaWNhbnRseSBs
ZXNzIHRyaWNreSBsb2dpYy4gSXQKKyAgICAgICAgbW9zdGx5IGp1c3QgcmVsaWVzIG9uIFNTQUNh
bGN1bGF0b3IgdG8gZG8gdGhlIHRyaWNreSBzdHVmZi4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGRmZy9ERkdBbmFseXNpcy5oOgorICAgICAgICAqIGRmZy9ERkdEb21pbmF0
b3JzLmg6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6aW1tZWRpYXRlRG9taW5hdG9y
T2YpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0luSXRlcmF0
ZWREb21pbmFuY2VGcm9udGllck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpm
b3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZik6CisgICAgICAg
ICogZGZnL0RGR05vZGVGbGFncy5oOgorICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6U1NBQ2FsY3VsYXRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6flNTQUNhbGN1bGF0b3IpOgor
ICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6Om5ld1ZhcmlhYmxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpuZXdEZWYpOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUNhbGN1bGF0b3I6Om5vbkxvY2FsUmVhY2hpbmdEZWYpOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUNhbGN1bGF0b3I6OnJlYWNoaW5nRGVmQXRUYWlsKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ2Fs
Y3VsYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZTo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OlZhcmlhYmxl
OjpWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6RGVmOjp2YXJp
YWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6RGVmOjpibG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6RGVmOjp2YWx1ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6RGVmOjpEZWYpOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUNhbGN1bGF0b3I6OnZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9y
Ojpjb21wdXRlUGhpcyk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cGhpc0Zv
ckJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpyZWFjaGluZ0RlZkF0
SGVhZCk6CisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpTU0FDb252ZXJzaW9uUGhhc2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmRQaGlDaGlsZHJlbik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmRQaGlFZGdl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmRlZHVw
bGljYXRlQ2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuaDoKKwogMjAxNC0wOS0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFrZSB1cGRhdGVzIHN1Z2dlc3RlZCBieSBuZXcgdmVyc2lvbiBvZiBYY29kZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTczMzM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0yMDEsNiArMjAxLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1B1cmVWYWx1ZS5jcHAK
ICAgICBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcAorICAgIGRmZy9E
RkdTU0FDYWxjdWxhdG9yLmNwcAogICAgIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NhZmVwb2ludC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTcz
MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSw3IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUNhbGN1bGF0b3Iu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBTG93ZXJp
bmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhY2tM
YXlvdXRQaGFzZS5jcHAiIC8+CkBAIC0xMTAxLDYgKzExMDIsNyBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTbG93UGF0aEdlbmVyYXRvci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklULmgiIC8+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBQ2FsY3VsYXRvci5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUxvd2VyaW5nUGhhc2UuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNlLmgiIC8+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTM0MSw2ICszNDEsOCBAQAogCQkwRjY2NkVDRDE4MzZCMzdFMDBE
MDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdFMDBEMDE3
RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0YxNjAwQjdC
MkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lM
aXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBE
RkdFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY2ODJGQjIxOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2ODJGQjAxOUJDQjM2
NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuY3BwICovOyB9OworCQkwRjY4MkZCMzE5QkNC
MzY0MDBGQTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2ODJGQjExOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NT
QUNhbGN1bGF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2OUNDODYxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLzsgfTsKIAkJMEY2OUNDODkxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY5Q0M4NzE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJv
emVuVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0IzMTg1RkM5RTkwMDg0
NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovOyB9OwpAQCAtMjI2MCw2ICsyMjYyLDggQEAKIAkJMEY2
NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZXN1cnJlY3Rpb25Gb3JW
YWxpZGF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9u
UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjgxNERGM0YxMzAw
QjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8q
IERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRWRnZS5oOyBw
YXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2ODJG
QjAxOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU1NBQ2FsY3VsYXRvci5jcHA7IHBhdGggPSBkZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjgy
RkIxMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NTQUNhbGN1bGF0b3IuaDsgcGF0aCA9IGRmZy9ERkdTU0FD
YWxjdWxhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjlDQzg2MTkzQUM2
MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdGcm96ZW5WYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZHRnJvemVuVmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY5Q0M4NzE5M0FDNjBBMDA0
NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRnJvemVuVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdGcm96ZW5WYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbC5j
cHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUwMTIsNiArNTAxNiw4IEBACiAJCQkJODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R1NwZWN1bGF0aXZlSklULmggKi8sCiAJCQkJODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICovLAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0
MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKKwkJCQkwRjY4MkZCMDE5QkNCMzY0MDBG
QTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5jcHAgKi8sCisJCQkJMEY2ODJGQjExOUJDQjM2NDAw
RkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuaCAqLywKIAkJCQlBN0Q4OUNGMDE3QTBCOENDMDA3
NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCAqLywKIAkJCQlBN0Q4OUNGMTE3QTBC
OENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmggKi8sCiAJCQkJMEZDMjBDQjcx
ODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuY3BwICovLApAQCAtNjQ3OCw2
ICs2NDg0LDcgQEAKIAkJCQkwRkMzMTQxMjE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTBBRjNDMTkzRThCMzkwMDY3NEVFOCAvKiBERkdTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1N0QyM0VFMTg5MUI1NTQw
MDMxQzdGQSAvKiBSZWd1bGFyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2ODJG
QjMxOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkQ0REVBMTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IuaCBp
biBIZWFkZXJzICovLApAQCAtNzIyMSw2ICs3MjI4LDcgQEAKIAkJCQkyQUFDRTYzQzE4Q0E1QTAz
MDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
MjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY2ODJGQjIxOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDgg
LyogRGF0ZUNvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUxMDdFQzM3
NjAwNDI3QTQ4IC8qIERhdGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FuYWx5c2lzLmgJKHJldmlzaW9uIDE3MzMzNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHJldmlzaW9uIDE3MzMz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw2ICs1NywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmcm9tID09
IHRvIHx8IHN0cmljdGx5RG9taW5hdGVzKGZyb20sIHRvKTsKICAgICB9CiAgICAgCisgICAgQmFz
aWNCbG9jayogaW1tZWRpYXRlRG9taW5hdG9yT2YoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50OworICAgIH0KKyAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgZm9yQWxsU3RyaWN0
RG9taW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25z
dAogICAgIHsKQEAgLTExOSwxNCArMTI0LDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZvckFsbEJs
b2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKAogICAgICAgICBjb25zdCBCbG9ja0xp
c3QmIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgeworICAgICAgICBmb3JBbGxC
bG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgICAgIGZy
b20sCisgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgY2xvc2UgcmVs
YXRpdmUgb2YgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YoKSwgd2hp
Y2ggYWxsb3dzIHRoZQorICAgIC8vIGdpdmVuIGZ1bmN0b3IgdG8gcmV0dXJuIGZhbHNlIHRvIGlu
ZGljYXRlIHRoYXQgd2UgZG9uJ3Qgd2lzaCB0byBjb25zaWRlciB0aGUgZ2l2ZW4gYmxvY2suCisg
ICAgLy8gVXNlZnVsIGZvciBjb21wdXRpbmcgcHJ1bmVkIFNTQSBmb3JtLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVk
RG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgY29uc3QgQmxvY2tMaXN0JiBmcm9tLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKICAgICAgICAgQmxvY2tTZXQgc2V0OwogICAgICAg
ICBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZkltcGwoCiAgICAgICAg
ICAgICBmcm9tLAogICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaykgLT4gYm9vbCB7
CiAgICAgICAgICAgICAgICAgaWYgKCFzZXQuYWRkKGJsb2NrKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGZ1bmN0b3IoYmxvY2spOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdG9yKGJs
b2NrKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyAr
NjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgTm9kZVJl
bGV2YW50VG9PU1IgICAgICAgICAgICAgICAweDEwMDAwCiAKLSNkZWZpbmUgTm9kZUlzRmx1c2hl
ZCAgICAgICAgICAgICAgICAgICAweDIwMDAwIC8vIFVzZWQgYnkgR3JhcGg6OmNvbXB1dGVJc0Zs
dXNoZWQoKSwgd2lsbCB0ZWxsIHlvdSB3aGljaCBsb2NhbCBub2RlcyBhcmUgYmFja3dhcmRzLXJl
YWNoYWJsZSBmcm9tIGEgRmx1c2guCisjZGVmaW5lIE5vZGVJc0ZsdXNoZWQgICAgICAgICAgICAg
ICAgICAgMHgyMDAwMCAvLyBDb21wdXRlZCBieSBDUFNSZXRocmVhZGluZ1BoYXNlLCB3aWxsIHRl
bGwgeW91IHdoaWNoIGxvY2FsIG5vZGVzIGFyZSBiYWNrd2FyZHMtcmVhY2hhYmxlIGZyb20gYSBG
bHVzaC4KIAogI2RlZmluZSBOb2RlTWlzY0ZsYWcxICAgICAgICAgICAgICAgICAgIDB4NDAwMDAK
ICNkZWZpbmUgTm9kZU1pc2NGbGFnMiAgICAgICAgICAgICAgICAgICAweDgwMDAwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdTU0FDYWxjdWxhdG9yLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
Cit2b2lkIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KCJ2YXIiLCBtX2luZGV4KTsKK30KKwordm9pZCBTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZTo6ZHVtcFZlcmJvc2UoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBkdW1wKG91dCk7CisgICAgaWYgKCFtX2Jsb2Nrc1dpdGhEZWZzLmlzRW1wdHkoKSkgewor
ICAgICAgICBvdXQucHJpbnQoIihkZWZzOiAiKTsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1h
OworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ibG9ja3NXaXRoRGVmcykKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgKmJsb2NrKTsKKyAgICAgICAgb3V0LnByaW50KCIp
Iik7CisgICAgfQorfQorCit2b2lkIFNTQUNhbGN1bGF0b3I6OkRlZjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiZGVmKCIsICptX3ZhcmlhYmxlLCAiLCAi
LCAqbV9ibG9jaywgIiwgIiwgbV92YWx1ZSwgIikiKTsKK30KKworU1NBQ2FsY3VsYXRvcjo6U1NB
Q2FsY3VsYXRvcihHcmFwaCYgZ3JhcGgpCisgICAgOiBtX2RhdGEoZ3JhcGgpCisgICAgLCBtX2dy
YXBoKGdyYXBoKQoreworfQorCitTU0FDYWxjdWxhdG9yOjp+U1NBQ2FsY3VsYXRvcigpCit7Cit9
CisKK1NTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBTU0FDYWxjdWxhdG9yOjpuZXdWYXJpYWJsZSgp
Cit7CisgICAgcmV0dXJuICZtX3ZhcmlhYmxlcy5hbGxvYyhWYXJpYWJsZShtX3ZhcmlhYmxlcy5z
aXplKCkpKTsKK30KKworU1NBQ2FsY3VsYXRvcjo6RGVmKiBTU0FDYWxjdWxhdG9yOjpuZXdEZWYo
VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogdmFsdWUpCit7Cisg
ICAgRGVmKiBkZWYgPSBtX2RlZnMuYWRkKERlZih2YXJpYWJsZSwgYmxvY2ssIHZhbHVlKSk7Cisg
ICAgYXV0byByZXN1bHQgPSBtX2RhdGFbYmxvY2tdLm1fZGVmcy5hZGQodmFyaWFibGUsIGRlZik7
CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICB2YXJpYWJsZS0+bV9ibG9ja3NX
aXRoRGVmcy5hcHBlbmQoYmxvY2spOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IGRlZjsKKyAgICByZXR1cm4gZGVmOworfQorCitTU0FDYWxjdWxhdG9yOjpEZWYq
IFNTQUNhbGN1bGF0b3I6Om5vbkxvY2FsUmVhY2hpbmdEZWYoQmFzaWNCbG9jayogYmxvY2ssIFZh
cmlhYmxlKiB2YXJpYWJsZSkKK3sKKyAgICByZXR1cm4gcmVhY2hpbmdEZWZBdFRhaWwobV9ncmFw
aC5tX2RvbWluYXRvcnMuaW1tZWRpYXRlRG9taW5hdG9yT2YoYmxvY2spLCB2YXJpYWJsZSk7Cit9
CisKK1NTQUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZBdFRhaWwo
QmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiB2YXJpYWJsZSkKK3sKKyAgICBmb3IgKDsgYmxv
Y2s7IGJsb2NrID0gbV9ncmFwaC5tX2RvbWluYXRvcnMuaW1tZWRpYXRlRG9taW5hdG9yT2YoYmxv
Y2spKSB7CisgICAgICAgIGlmIChEZWYqIGRlZiA9IG1fZGF0YVtibG9ja10ubV9kZWZzLmdldCh2
YXJpYWJsZSkpCisgICAgICAgICAgICByZXR1cm4gZGVmOworICAgIH0KKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordm9pZCBTU0FDYWxjdWxhdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KCI8VmFyaWFibGVzOiBbIik7CisgICAgQ29tbWFQcmludGVy
IGNvbW1hOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7
ICsraSkgeworICAgICAgICBvdXQucHJpbnQoY29tbWEpOworICAgICAgICBtX3ZhcmlhYmxlc1tp
XS5kdW1wVmVyYm9zZShvdXQpOworICAgIH0KKyAgICBvdXQucHJpbnQoIl0sIERlZnM6IFsiKTsK
KyAgICBjb21tYSA9IENvbW1hUHJpbnRlcigpOworICAgIGZvciAoRGVmKiBkZWYgOiBjb25zdF9j
YXN0PFNTQUNhbGN1bGF0b3IqPih0aGlzKS0+bV9kZWZzKQorICAgICAgICBvdXQucHJpbnQoY29t
bWEsICpkZWYpOworICAgIG91dC5wcmludCgiXSwgUGhpczogWyIpOworICAgIGNvbW1hID0gQ29t
bWFQcmludGVyKCk7CisgICAgZm9yIChEZWYqIGRlZiA6IGNvbnN0X2Nhc3Q8U1NBQ2FsY3VsYXRv
cio+KHRoaXMpLT5tX3BoaXMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKmRlZik7CisgICAg
b3V0LnByaW50KCJdLCBCbG9jayBkYXRhOiBbIik7CisgICAgY29tbWEgPSBDb21tYVByaW50ZXIo
KTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBvdXQucHJpbnQoY29tbWEsICpi
bG9jaywgIj0+KCIpOworICAgICAgICBvdXQucHJpbnQoIkRlZnM6IHsiKTsKKyAgICAgICAgQ29t
bWFQcmludGVyIGlubmVyQ29tbWE7CisgICAgICAgIGZvciAoYXV0byBlbnRyeSA6IG1fZGF0YVti
bG9ja10ubV9kZWZzKQorICAgICAgICAgICAgb3V0LnByaW50KGlubmVyQ29tbWEsICplbnRyeS5r
ZXksICItPiIsICplbnRyeS52YWx1ZSk7CisgICAgICAgIG91dC5wcmludCgifSwgUGhpczogeyIp
OworICAgICAgICBpbm5lckNvbW1hID0gQ29tbWFQcmludGVyKCk7CisgICAgICAgIGZvciAoRGVm
KiBkZWYgOiBtX2RhdGFbYmxvY2tdLm1fcGhpcykKKyAgICAgICAgICAgIG91dC5wcmludChpbm5l
ckNvbW1hLCAqZGVmKTsKKyAgICAgICAgb3V0LnByaW50KCJ9KSIpOworICAgIH0KKyAgICBvdXQu
cHJpbnQoIl0+Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ2FsY3VsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
U1NBQ2FsY3VsYXRvcl9oCisjZGVmaW5lIERGR1NTQUNhbGN1bGF0b3JfaAorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBTU0FDYWxjdWxh
dG9yIHByb3ZpZGVzIGEgcmV1c2FibGUgdG9vbCBmb3IgdXNpbmcgdGhlIEN5dHJvbiwgRmVycmFu
dGUsIFJvc2VuLCBXZWdtYW4sIGFuZAorLy8gWmFkZWNrICJFZmZpY2llbnRseSBDb21wdXRpbmcg
U3RhdGljIFNpbmdsZSBBc3NpZ25tZW50IEZvcm0gYW5kIHRoZSBDb250cm9sIERlcGVuZGVuY2Ug
R3JhcGgiCisvLyAoVE9QTEFTJzkxKSBhbGdvcml0aG0gZm9yIGNvbXB1dGluZyBTU0EuIFNTQUNh
bGN1bGF0b3IgZG9lc24ndCBtYWdpY2FsbHkgZG8gZXZlcnl0aGluZyBmb3IgeW91CisvLyBidXQg
aXQgbWFpbnRhaW5zIHRoZSBtYWpvciBkYXRhIHN0cnVjdHVyZXMgYW5kIGhhbmRsZXMgbW9zdCBv
ZiB0aGUgbm9uLWxvY2wgcmVhc29uaW5nLiBIZXJlJ3MKKy8vIHRoZSB3b3JrZmxvdyBvZiB1c2lu
ZyBTU0FDYWxjdWxhdG9yIHRvIGV4ZWN1dGUgdGhpcyBhbGdvcml0aG06CisvLworLy8gMCkgQ3Jl
YXRlIGEgZnJlc2ggU1NBQ2FsY3VsYXRvciBpbnN0YW5jZS4gWW91IHdpbGwgbmVlZCB0aGlzIGlu
c3RhbmNlIG9ubHkgZm9yIGFzIGxvbmcgYXMKKy8vICAgIHlvdSdyZSBub3QgeWV0IGRvbmUgY29t
cHV0aW5nIFNTQS4KKy8vCisvLyAxKSBDcmVhdGUgYW4gU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUg
Zm9yIGV2ZXJ5IHZhcmlhYmxlIHRoYXQgeW91IHdhbnQgdG8gZG8gUGhpIGluc2VydGlvbgorLy8g
ICAgb24uIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlOjppbmRleCgpIGlzIGEgZGVuc2UgaW5kZXhp
bmcgb2YgdGhlIFZhcmlhYmxlcyB0aGF0IHlvdQorLy8gICAgY3JlYXRlZCwgc28geW91IGNhbiBl
YXNpbHkgdXNlIGEgVmVjdG9yIHRvIG1hcCB0aGUgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGVzIHRv
IHlvdXIKKy8vICAgIHZhcmlhYmxlcy4KKy8vCisvLyAyKSBDcmVhdGUgYSBTU0FDYWxjdWxhdG9y
OjpEZWYgZm9yIGV2ZXJ5IGFzc2lnbm1lbnQgdG8gdGhvc2UgdmFyaWFibGVzLiBBIERlZiBrbm93
cyBhYm91dCB0aGUKKy8vICAgIHZhcmlhYmxlLCB0aGUgYmxvY2ssIGFuZCB0aGUgREZHOjpOb2Rl
KiB0aGF0IGhhcyB0aGUgdmFsdWUgYmVpbmcgcHV0IGludG8gdGhlIHZhcmlhYmxlLgorLy8gICAg
Tm90ZSB0aGF0IGNyZWF0aW5nIGEgRGVmIGluIGJsb2NrIEIgZm9yIHZhcmlhYmxlIFYgaWYgYmxv
Y2sgQiBhbHJlYWR5IGhhcyBhIGRlZiBmb3IgdmFyaWFibGUKKy8vICAgIFYgd2lsbCBvdmVyd3Jp
dGUgdGhlIHByZXZpb3VzIERlZidzIERGRzo6Tm9kZSogdmFsdWUuIFRoaXMgZW5hYmxlcyB5b3Ug
dG8gY3JlYXRlIERlZnMgYnkKKy8vICAgIHByb2Nlc3NpbmcgYmFzaWMgYmxvY2tzIGluIGZvcndh
cmQgb3JkZXIuIElmIGEgYmxvY2sgaGFzIG11bHRpcGxlIERlZnMgb2YgYSB2YXJpYWJsZSwgdGhp
cworLy8gICAgImp1c3Qgd29ya3MiIGJlY2F1c2UgZWFjaCBibG9jayB3aWxsIHRoZW4gcmVtZW1i
ZXIgdGhlIGxhc3QgRGVmIG9mIGVhY2ggdmFyaWFibGUuCisvLworLy8gMykgQ2FsbCBTU0FDYWxj
dWxhdG9yOjpjb21wdXRlUGhpcygpLiBUaGlzIHRha2VzIGEgZnVuY3RvciB0aGF0IHdpbGwgY3Jl
YXRlIHRoZSBQaGkgbm9kZXMuIFRoZQorLy8gICAgZnVuY3RvciByZXR1cm5zIGVpdGhlciB0aGUg
UGhpIG5vZGUgaXQgY3JlYXRlZCwgb3IgbnVsbHB0ciwgaWYgaXQgY2hvb3NlcyB0byBwcnVuZS4g
KEFzIGFuCisvLyAgICBhc2lkZSwgaXQncyBhbHdheXMgc291bmQgbm90IHRvIHBydW5lLCBhbmQg
dGhlIHNhZmVzdCByZWFzb24gZm9yIHBydW5pbmcgaXMgbGl2ZW5lc3MuKSBUaGUKKy8vICAgIGNv
bXB1dGVQaGlzKCkgY29kZSB3aWxsIHJlY29yZCB0aGUgY3JlYXRlZCBQaGkgbm9kZXMgYXMgRGVm
cywgYW5kIGl0IHdpbGwgc2VwYXJhdGVseSByZWNvcmQKKy8vICAgIHRoZSBsaXN0IG9mIFBoaXMg
aW5zZXJ0ZWQgYXQgZWFjaCBibG9jay4gSXQncyBPSyBmb3IgdGhlIGZ1bmN0b3IgeW91IHBhc3Mg
aGVyZSB0byBtb2RpZnkgdGhlCisvLyAgICBERkc6OkdyYXBoIG9uIHRoZSBmbHksIGJ1dCB0aGUg
ZWFzaWVzdCB3YXkgdG8gd3JpdGUgdGhpcyBpcyB0byBqdXN0IGNyZWF0ZSB0aGUgUGhpIG5vZGVz
IGJ5CisvLyAgICBkb2luZyBHcmFwaDo6YWRkTm9kZSgpIGFuZCByZXR1cm4gdGhlbS4gSXQncyB0
aGVuIGJlc3QgdG8gaW5zZXJ0IGFsbCBQaGkgbm9kZXMgZm9yIGEgYmxvY2sKKy8vICAgIGluIGJ1
bGsgYXMgcGFydCBvZiB0aGUgcGFzcyB5b3UgZG8gYmVsb3csIGluIHN0ZXAgKDQpLgorLy8KKy8v
IDQpIE1vZGlmeSB0aGUgZ3JhcGggdG8gY3JlYXRlIHRoZSBTU0EgZGF0YSBmbG93LiBGb3IgZWFj
aCBibG9jaywgdGhpcyBzaG91bGQ6CisvLworLy8gICAgNC4wKSBDb21wdXRlIHRoZSBzZXQgb2Yg
cmVhY2hpbmcgZGVmcyAoYWthIGF2YWlsYWJsZSB2YWx1ZXMpIGZvciBlYWNoIHZhcmlhYmxlIGJ5
IGNhbGxpbmcKKy8vICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZBdEhlYWQoKSBm
b3IgZWFjaCB2YXJpYWJsZS4gUmVjb3JkIHRoaXMgaW4gYSBsb2NhbCB0YWJsZSB0aGF0CisvLyAg
ICAgICAgIHdpbGwgYmUgaW5jcmVtZW50YWxseSB1cGRhdGVkIGFzIHlvdSBwcm9jZWVkIHRocm91
Z2ggdGhlIGJsb2NrIGluIGZvcndhcmQgb3JkZXIgaW4gdGhlCisvLyAgICAgICAgIG5leHQgc3Rl
cHM6CisvLworLy8gICAgICAgICBGSVhNRTogSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGNvbXB1dGUg
cmVhY2hpbmcgZGVmcyBmb3IgYWxsIGxpdmUgdmFyaWFibGVzIGluIG9uZSBnbywgdG8KKy8vICAg
ICAgICAgYXZvaWQgZG9pbmcgcmVwZWF0ZWQgZG9tIHRyZWUgdHJhdmVyc2Fscy4KKy8vICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjYxMAorLy8KKy8v
ICAgIDQuMSkgSW5zZXJ0IGFsbCBvZiB0aGUgUGhpIG5vZGVzIGZvciB0aGUgYmxvY2sgYnkgdXNp
bmcgU1NBQ2FsY3VsYXRvcjo6cGhpc0ZvckJsb2NrKCksIGFuZAorLy8gICAgICAgICByZWNvcmQg
dGhvc2UgUGhpIG5vZGVzIGFzIGJlaW5nIGF2YWlsYWJsZSB2YWx1ZXMuCisvLworLy8gICAgNC4y
KSBQcm9jZXNzIHRoZSBibG9jayBpbiBmb3J3YXJkIG9yZGVyLiBGb3IgZWFjaCBsb2FkIGZyb20g
YSB2YXJpYWJsZSwgcmVwbGFjZSBpdCB3aXRoIHRoZQorLy8gICAgICAgICBhdmFpbGFibGUgU1NB
IHZhbHVlIGZvciB0aGF0IHZhcmlhYmxlLiBGb3IgZWFjaCBzdG9yZSwgZGVsZXRlIGl0IGFuZCBy
ZWNvcmQgdGhlIHN0b3JlZAorLy8gICAgICAgICB2YWx1ZSBhcyBiZWluZyBhdmFpbGFibGUuCisv
LworLy8gICAgNC4zKSBJbnNlcnQgVXBzaWxvbnMgZm9yIGVhY2ggUGhpIGluIGVhY2ggc3VjY2Vz
c29yIGJsb2NrLiBVc2UgdGhlIGF2YWlsYWJsZSB2YWx1ZXMgdGFibGUgdG8KKy8vICAgICAgICAg
ZGVjaWRlIHRoZSBzb3VyY2UgdmFsdWUgZm9yIGVhY2ggUGhpJ3MgdmFyaWFibGUuIE5vdGUgdGhh
dCB5b3UgY291bGQgYWxzbyB1c2UKKy8vICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6cmVhY2hpbmdE
ZWZBdFRhaWwoKSBpbnN0ZWFkIG9mIHRoZSBhdmFpbGFibGUgdmFsdWVzIHRhYmxlLCB0aG91Z2gg
eW91cgorLy8gICAgICAgICBsb2NhbCBhdmFpbGFibGUgdmFsdWVzIHRhYmxlIGlzIGxpa2VseSB0
byBiZSBtb3JlIGVmZmljaWVudC4KKy8vCisvLyBUaGUgbW9zdCBvYnZpb3VzIHVzZSBvZiBTU0FD
YWxjdWxhdG9yIGlzIGZvciB0aGUgQ1BTLT5TU0EgY29udmVyc2lvbiBpdHNlbGYsIGJ1dCBpdCdz
IG1lYW50IHRvCisvLyBhbHNvIGJlIHVzZWQgZm9yIFNTQSB1cGRhdGUgYW5kIGZvciB0aGluZ3Mg
bGlrZSB0aGUgcHJvbW90aW9uIG9mIGhlYXAgZmllbGRzIHRvIGxvY2FsIFNTQQorLy8gdmFyaWFi
bGVzLgorCitjbGFzcyBTU0FDYWxjdWxhdG9yIHsKK3B1YmxpYzoKKyAgICBTU0FDYWxjdWxhdG9y
KEdyYXBoJik7CisgICAgflNTQUNhbGN1bGF0b3IoKTsKKyAgICAKKyAgICBjbGFzcyBWYXJpYWJs
ZSB7CisgICAgcHVibGljOgorICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgICAgICB2b2lkIGR1bXBWZXJib3NlKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBTU0FDYWxjdWxhdG9yOwor
ICAgICAgICAKKyAgICAgICAgVmFyaWFibGUoKQorICAgICAgICAgICAgOiBtX2luZGV4KFVJTlRf
TUFYKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlKHVu
c2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBCbG9ja0xpc3QgbV9ibG9ja3NXaXRoRGVmczsKKyAgICAgICAg
dW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworICAgIAorICAgIGNsYXNzIERlZiB7CisgICAgcHVi
bGljOgorICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX3Zhcmlh
YmxlOyB9CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
azsgfQorICAgICAgICAKKyAgICAgICAgTm9kZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNTQUNhbGN1bGF0
b3I7CisgICAgICAgIAorICAgICAgICBEZWYoKQorICAgICAgICAgICAgOiBtX3ZhcmlhYmxlKG51
bGxwdHIpCisgICAgICAgICAgICAsIG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgICAgICwgbV92
YWx1ZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERl
ZihWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiB2YWx1ZSkKKyAg
ICAgICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJsZSkKKyAgICAgICAgICAgICwgbV9ibG9jayhi
bG9jaykKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZSogbV92YXJpYWJsZTsKKyAgICAgICAgQmFzaWNC
bG9jayogbV9ibG9jazsKKyAgICAgICAgTm9kZSogbV92YWx1ZTsKKyAgICB9OworICAgIAorICAg
IFZhcmlhYmxlKiBuZXdWYXJpYWJsZSgpOworICAgIERlZiogbmV3RGVmKFZhcmlhYmxlKiwgQmFz
aWNCbG9jayosIE5vZGUqKTsKKyAgICAKKyAgICBWYXJpYWJsZSogdmFyaWFibGUodW5zaWduZWQg
aW5kZXgpIHsgcmV0dXJuICZtX3ZhcmlhYmxlc1tpbmRleF07IH0KKyAgICAKKyAgICAvLyBUaGUg
UGhpSW5zZXJ0aW9uRnVuY3RvciB0YWtlcyBhIFZhcmlhYmxlIGFuZCBhIEJhc2ljQmxvY2sgYW5k
IGVpdGhlciBpbnNlcnRzIGEgUGhpIGFuZAorICAgIC8vIHJldHVybnMgdGhlIE5vZGUgZm9yIHRo
YXQgUGhpLCBvciBpdCBkZWNpZGVzIHRoYXQgaXQncyBub3Qgd29ydGggaXQgdG8gaW5zZXJ0IGEg
UGhpIGF0IHRoYXQKKyAgICAvLyBibG9jayBiZWNhdXNlIG9mIHNvbWUgYWRkaXRpb25hbCBwcnVu
aW5nIGNvbmRpdGlvbiAodHlwaWNhbGx5IGxpdmVuZXNzKSBhbmQgcmV0dXJucworICAgIC8vIG51
bGxwdHIuIElmIGEgbm9uLW51bGwgTm9kZSogaXMgcmV0dXJuZWQsIGEgbmV3IERlZiBpcyBjcmVh
dGVkLCBzbyB0aGF0CisgICAgLy8gbm9uTG9jYWxSZWFjaGluZ0RlZigpIHdpbGwgZmluZCBpdCBs
YXRlci4gTm90ZSB0aGF0IGl0IGlzIGdlbmVyYWxseSBhbHdheXMgc291bmQgdG8gbm90CisgICAg
Ly8gcHJ1bmUgYW55IFBoaXMgKHRoYXQgaXMsIHRvIGFsd2F5cyBoYXZlIHRoZSBmdW5jdG9yIGlu
c2VydCBhIFBoaSBhbmQgbmV2ZXIgcmV0dXJuIG51bGxwdHIpLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFBoaUluc2VydGlvbkZ1bmN0b3I+CisgICAgdm9pZCBjb21wdXRlUGhpcyhQaGlJbnNlcnRp
b25GdW5jdG9yIGZ1bmN0b3IpCisgICAgeworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51
bGxwdHIsIG1fZ3JhcGgubV9kb21pbmF0b3JzLmlzVmFsaWQoKSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKFZhcmlhYmxlJiB2YXJpYWJsZSA6IG1fdmFyaWFibGVzKSB7CisgICAgICAgICAgICBt
X2dyYXBoLm1fZG9taW5hdG9ycy5mb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNl
RnJvbnRpZXJPZigKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS5tX2Jsb2Nrc1dpdGhEZWZzLAor
ICAgICAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2spIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gZnVuY3RvcigmdmFyaWFibGUsIGJsb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgQmxvY2tEYXRhJiBkYXRhID0gbV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICAgICAg
RGVmKiBwaGlEZWYgPSBtX3BoaXMuYWRkKERlZigmdmFyaWFibGUsIGJsb2NrLCBwaGlOb2RlKSk7
CisgICAgICAgICAgICAgICAgICAgIGRhdGEubV9waGlzLmFwcGVuZChwaGlEZWYpOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0J3MgcG9z
c2libGUgdG8gaGF2ZSBhIGJsb2NrIHRoYXQgbG9va3MgbGlrZSB0aGlzIGJlZm9yZSBTU0EKKyAg
ICAgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgLy8gbGFiZWw6CisgICAgICAgICAgICAgICAgICAgIC8vICAg
ICBwcmludCh4KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgeCA9IDQyOworICAgICAgICAgICAgICAgICAgICAvLyAgICAgZ290byBs
YWJlbDsKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gQW5k
IGl0IG1heSBsb29rIGxpa2UgdGhpcyBhZnRlciBTU0EgY29udmVyc2lvbjoKKyAgICAgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gbGFiZWw6CisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICB4MTogUGhpKCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIC4uLgor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgVXBzaWxvbig0MiwgXngxKQorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgZ290byBsYWJlbDsKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSB3aWxsIHdhbnQgdG8gaW5zZXJ0IGEg
UGhpIGluIHRoaXMgYmxvY2ssIGFuZCB0aGUgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgLy8g
d2lsbCBhbHJlYWR5IGhhdmUgYSBEZWYgZm9yIHRoZSB2YXJpYWJsZS4gV2hlbiB0aGlzIGhhcHBl
bnMsIHdlIGRvbid0IHdhbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFBoaSB0byBvdmVy
cmlkZSB0aGUgb3JpZ2luYWwgRGVmLCBzaW5jZSB0aGUgUGhpIGlzIGF0IHRoZSB0b3AsIHRoZQor
ICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCBEZWYgaW4gdGhlIG1fZGVmcyB0YWJsZSB3
b3VsZCBoYXZlIGJlZW4gYXQgdGhlIGJvdHRvbSwgYW5kIHdlIHdhbnQKKyAgICAgICAgICAgICAg
ICAgICAgLy8gbV9kZWZzIHRvIHRlbGwgdXMgYWJvdXQgZGVmcyBhdCB0YWlsLgorICAgICAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBTbywgd2UgcmVseSBvbiB0aGUg
ZmFjdCB0aGF0IEhhc2hNYXA6OmFkZCgpIGRvZXMgbm90aGluZyBpZiB0aGUga2V5IHdhcworICAg
ICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IHByZXNlbnQuCisgICAgICAgICAgICAgICAgICAg
IGRhdGEubV9kZWZzLmFkZCgmdmFyaWFibGUsIHBoaURlZik7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8RGVmKj4mIHBoaXNGb3JC
bG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGFbYmxv
Y2tdLm1fcGhpczsKKyAgICB9CisgICAgCisgICAgLy8gSWdub3JlcyBkZWZzIHdpdGhpbiB0aGUg
Z2l2ZW4gYmxvY2s7IGl0IGFzc3VtZXMgdGhhdCB5b3UndmUgdGFrZW4gY2FyZSBvZiB0aG9zZQor
ICAgIC8vIHlvdXJzZWxmLgorICAgIERlZiogbm9uTG9jYWxSZWFjaGluZ0RlZihCYXNpY0Jsb2Nr
KiwgVmFyaWFibGUqKTsKKyAgICBEZWYqIHJlYWNoaW5nRGVmQXRIZWFkKEJhc2ljQmxvY2sqIGJs
b2NrLCBWYXJpYWJsZSogdmFyaWFibGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9uTG9jYWxS
ZWFjaGluZ0RlZihibG9jaywgdmFyaWFibGUpOworICAgIH0KKyAgICAKKyAgICAvLyBDb25zaWRl
cnMgdGhlIGRlZiB3aXRoaW4gdGhlIGdpdmVuIGJsb2NrLCBidXQgb25seSB3b3JrcyBhdCB0aGUg
dGFpbCBvZiB0aGUgYmxvY2suCisgICAgRGVmKiByZWFjaGluZ0RlZkF0VGFpbChCYXNpY0Jsb2Nr
KiwgVmFyaWFibGUqKTsKKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlPiBtX3ZhcmlhYmxl
czsKKyAgICBCYWc8RGVmPiBtX2RlZnM7CisgICAgCisgICAgQmFnPERlZj4gbV9waGlzOworICAg
IAorICAgIHN0cnVjdCBCbG9ja0RhdGEgeworICAgICAgICBIYXNoTWFwPFZhcmlhYmxlKiwgRGVm
Kj4gbV9kZWZzOworICAgICAgICBWZWN0b3I8RGVmKj4gbV9waGlzOworICAgIH07CisgICAgICAg
ICAgICAKKyAgICBCbG9ja01hcDxCbG9ja0RhdGE+IG1fZGF0YTsKKyAgICAKKyAgICBHcmFwaCYg
bV9ncmFwaDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU1NBQ2FsY3VsYXRvcl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE5IEBACiAj
aW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNs
dWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1NTQUNhbGN1bGF0b3IuaCIKKyNpbmNsdWRl
ICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIFNTQUNvbnZlcnNpb25Q
aGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdCBib29sIGR1bXBHcmFwaCA9IGZhbHNlOwogICAgIAogcHVi
bGljOgogICAgIFNTQUNvbnZlcnNpb25QaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhh
c2UoZ3JhcGgsICJTU0EgY29udmVyc2lvbiIpCisgICAgICAgICwgbV9jYWxjdWxhdG9yKGdyYXBo
KQogICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQogICAgICAgICAsIG1fY2hhbmdlZChm
YWxzZSkKICAgICB7CkBAIC01MiwyNjAgKzU0LDE5NiBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CiAgICAgICAg
IAotICAgICAgICBpZiAoZHVtcEdyYXBoKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBk
dW1wIGF0IHRvcCBvZiBTU0EgY29udmVyc2lvbjpcbiIpOworICAgICAgICBtX2dyYXBoLmNsZWFy
UmVwbGFjZW1lbnRzKCk7CisgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5l
Y2Vzc2FyeShtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAg
ICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgU1NBIHRyYW5zZm9ybWF0aW9uOlxuIik7CiAg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQorCisgICAgICAgIC8vIENyZWF0
ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlIGZvciBldmVyeSByb290IFZhcmlhYmxlQWNjZXNz
RGF0YS4KKyAgICAgICAgZm9yIChWYXJpYWJsZUFjY2Vzc0RhdGEmIHZhcmlhYmxlIDogbV9ncmFw
aC5tX3ZhcmlhYmxlQWNjZXNzRGF0YSkgeworICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS5pc1Jv
b3QoKSB8fCB2YXJpYWJsZS5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FW
YXJpYWJsZSA9IG1fY2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgQVNTRVJU
KHNzYVZhcmlhYmxlLT5pbmRleCgpID09IG1fdmFyaWFibGVGb3JTU0FJbmRleC5zaXplKCkpOwor
ICAgICAgICAgICAgbV92YXJpYWJsZUZvclNTQUluZGV4LmFwcGVuZCgmdmFyaWFibGUpOworICAg
ICAgICAgICAgbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlLmFkZCgmdmFyaWFibGUsIHNzYVZhcmlh
YmxlKTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRWxpbWluYXRlIGFsbCBkdXBs
aWNhdGUgb3Igc2VsZi1wb2ludGluZyBQaGkgZWRnZXMuIFRoaXMgbWVhbnMgdGhhdAotICAgICAg
ICAvLyB3ZSB0cmFuc2Zvcm06Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIHA6IFBoaShAbjEsIEBu
MiwgQG4zKQotICAgICAgICAvLwotICAgICAgICAvLyBpbnRvOgotICAgICAgICAvLwotICAgICAg
ICAvLyBwOiBQaGkoQHgpCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGlmIGVhY2ggQG5pIGluIHtA
bjEsIEBuMiwgQG4zfSBpcyBlaXRoZXIgZXF1YWwgdG8gQHAgdG8gaXMgZXF1YWwKLSAgICAgICAg
Ly8gdG8gQHgsIGZvciBleGFjdGx5IG9uZSBvdGhlciBAeC4gQWRkaXRpb25hbGx5LCB0cml2aWFs
IFBoaXMgKGkuZS4KLSAgICAgICAgLy8gcDogUGhpKEB4KSkgYXJlIGZvcndhcmRlZCwgc28gdGhh
dCBpZiBoYXZlIGFuIGVkZ2UgdG8gc3VjaCBAcCwgd2UKLSAgICAgICAgLy8gcmVwbGFjZSBpdCB3
aXRoIEB4LiBUaGlzIGxvb3AgZG9lcyB0aGlzIGZvciBQaGlzIG9ubHk7IGxhdGVyIHdlIGRvCi0g
ICAgICAgIC8vIHN1Y2ggZm9yd2FyZGluZyBmb3IgUGhpIHJlZmVyZW5jZXMgZm91bmQgaW4gb3Ro
ZXIgbm9kZXMuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFNlZSBBeWNvY2sgYW5kIEhvcnNwb29s
IGluIENDJzAwIGZvciBhIGJldHRlciBkZXNjcmlwdGlvbiBvZiB3aGF0Ci0gICAgICAgIC8vIHdl
J3JlIGRvaW5nIGhlcmUuCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZh
bHNlOwotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmICgh
YmxvY2spCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7
Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2NrLT5waGlzW3BoaUluZGV4XTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2Fw
dHVyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkUGhpQ2hpbGRyZW4ocGhpKTsKLSAgICAgICAgICAgICAgICAgICAgZGVk
dXBsaWNhdGVDaGlsZHJlbihwaGkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZvciBl
YWNoIGJhc2ljIGJsb2NrLCBmb3IgZWFjaCBsb2NhbCBsaXZlIGF0IHRoZSBoZWFkIG9mIHRoYXQg
YmxvY2ssCi0gICAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBub2RlIHdlIHNob3VsZCBiZSByZWZl
cnJpbmcgdG8gaW5zdGVhZCBvZiB0aGF0IGxvY2FsLgotICAgICAgICAvLyBJZiBpdCB0dXJucyBv
dXQgdG8gYmUgYSBub24tdHJpdmlhbCBQaGksIG1ha2Ugc3VyZSB0aGF0IHdlIGNyZWF0ZSBhbgot
ICAgICAgICAvLyBTU0EgUGhpIGFuZCBVcHNpbG9ucyBpbiBwcmVkZWNlc3NvciBibG9ja3MuIFdl
IHJldXNlCi0gICAgICAgIC8vIEJhc2ljQmxvY2s6OnZhcmlhYmxlc0F0SGVhZCBmb3IgdHJhY2tp
bmcgd2hpY2ggbm9kZXMgdG8gcmVmZXIgdG8uCi0gICAgICAgIE9wZXJhbmRzPGJvb2w+IG5vblRy
aXZpYWxQaGlzKE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
KTsKKyAgICAgICAgLy8gRmluZCBhbGwgU2V0TG9jYWxzIGFuZCBjcmVhdGUgRGVmcyBmb3IgdGhl
bS4gV2UgaGFuZGxlIFNldEFyZ3VtZW50IGJ5IGNyZWF0aW5nIGEKKyAgICAgICAgLy8gR2V0QXJn
dW1lbnQuCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgbm9uVHJpdmlhbFBoaXMuZmls
bChmYWxzZSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cGhpcy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1tpXTsK
LSAgICAgICAgICAgICAgICBpZiAoIXBoaS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCkpCi0gICAg
ICAgICAgICAgICAgICAgIG5vblRyaXZpYWxQaGlzLm9wZXJhbmQocGhpLT5sb2NhbCgpKSA9IHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwotICAgICAg
ICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTXVzdCBw
cm9jZXNzIHRoZSBibG9jayBpbiBmb3J3YXJkIGRpcmVjdGlvbiBiZWNhdXNlIHdlIHdhbnQgdG8g
c2VlIHRoZSBsYXN0CisgICAgICAgICAgICAvLyBhc3NpZ25tZW50IGZvciBldmVyeSBsb2NhbC4K
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxv
Y2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
U2V0TG9jYWwgJiYgbm9kZS0+b3AoKSAhPSBTZXRBcmd1bWVudCkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkF0IGJsb2NrICMiLCBibG9ja0luZGV4
LCAiIGZvciBvcGVyYW5kIHIiLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRl
eChpKSwgIiBoYXZlIG5vZGUgIiwgbm9kZSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFBvaXNvbiB0aGlzIGVudHJ5IGluIHZhcmlhYmxl
c0F0SGVhZCBiZWNhdXNlIHdlIGRvbid0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdhbnQgYW55
b25lIHRvIHRyeSB0byByZWZlciB0byBpdCwgaWYgdGhlIHZhcmlhYmxlIGlzCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGNhcHR1cmVkLgotICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkW2ldID0gMDsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVy
ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewot
ICAgICAgICAgICAgICAgIGNhc2UgUGhpOgotICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1l
bnQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2g6Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNl
IFBoYW50b21Mb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+
b3AoKSA9PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgYm9vbCBpc0ZsdXNoZWQgPSAhIShub2RlLT5mbGFncygpICYg
Tm9kZUlzRmx1c2hlZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9uVHJpdmlhbFBo
aXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRWRn
ZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoZWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgT25lIGNoaWxkOiAi
LCBlZGdlLCAiLCAiLCBSYXdQb2ludGVyKGVkZ2Uubm9kZSgpKSwgIlxuIik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBub2RlID0gZWRnZS5ub2RlKCk7IC8vIEl0J3Mgc29tZXRoaW5nIGZyb20g
YSBkaWZmZXJlbnQgYmFzaWMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgTm9uLXRyaXZpYWwuXG4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEl0J3MgYSBub24tdHJpdmlhbCBQaGkuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGVGbGFncyByZXN1bHQgPSByZXN1bHRGb3IoZm9ybWF0KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVzZUtpbmRGb3IoZm9ybWF0
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIFBoaSwgTm9kZU9yaWdp
bigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnNlcnRlZCBuZXcgbm9kZTogIiwgbm9kZSwg
IlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKHJlc3VsdCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVSZXN1bHRNYXNrKSA9PSByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNz
b3JzLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmVkZWNlc3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9uLCBwcmVkZWNl
c3Nvci0+bGFzdCgpLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhub2RlKSwgRWRnZShwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsW2ldLCB1c2VLaW5k
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZsdXNoZWQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLiBGb3IgbXVsdGlwbGUgcmVhc29ucy4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBS
ZWFzb24gIzE6IElmIHRoZSBsb2NhbCBpcyBmbHVzaGVkIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBi
b3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGEgTW92SGludCBzaW5j
ZSBldmVyeSBwYXRoIHRvIHRoaXMgcG9pbnQgaW4gdGhlIGNvZGUgd2lsbAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGhhdmUgZmx1c2hlZCB0aGUgYnl0ZWNvZGUgdmFyaWFibGUgdXNp
bmcgYSBTZXRMb2NhbCBhbmQgaGVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
aGUgQXZhaWxhYmlsaXR5OjpmbHVzaGVkQXQoKSB3aWxsIGFncmVlLCBhbmQgdGhhdCB3aWxsIGJl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VmZmljaWVudCBmb3IgZmlndXJpbmcg
b3V0IGhvdyB0byByZWNvdmVyIHRoZSB2YXJpYWJsZSdzIHZhbHVlLgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMjog
SWYgd2UgaGFkIGluc2VydGVkIGEgTW92SGludCBhbmQgdGhlIFBoaSBmdW5jdGlvbiBoYWQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkaWVkIChiZWNhdXNlIHRoZSBvbmx5IHVzZXIg
b2YgdGhlIHZhbHVlIHdhcyB0aGUgImZsdXNoIiAtIGkuZS4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBzb21lIGFzeW5jaHJvbm91cyBydW50aW1lIHRoaW5neSkgdGhlbiB0aGUgTW92
SGludCB3b3VsZCB0dXJuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50byBhIFpv
bWJpZUhpbnQsIHdoaWNoIHdvdWxkIGZvb2wgdXMgaW50byB0aGlua2luZyB0aGF0IHRoZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlIGlzIGRlYWQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhc29u
ICMzOiBJZiB3ZSBoYWQgaW5zZXJ0ZWQgYSBNb3ZIaW50IHRoZW4gZXZlbiBpZiB0aGUgUGhpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RheWVkIGFsaXZlLCB3ZSB3b3VsZCBzdGls
bCBlbmQgdXAgZ2VuZXJhdGluZyBpbmVmZmljaWVudCBjb2RlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gc2luY2Ugd2Ugd291bGQgYmUgdGVsbGluZyB0aGUgT1NSIGV4aXQgY29tcGls
ZXIgdG8gdXNlIHNvbWUgU1NBCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUg
Zm9yIHRoZSBieXRlY29kZSB2YXJpYWJsZSByYXRoZXIgdGhhbiBqdXN0IHRlbGxpbmcgaXQgdGhh
dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBv
biB0aGUgc3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBOb2RlT3JpZ2luKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwo
KS5vZmZzZXQoKSksIG5vZGUtPmRlZmF1bHRFZGdlKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTm9kZSogY2hpbGRO
b2RlOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKQorICAgICAg
ICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09
IFNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEdldEFyZ3VtZW50LCBub2RlLT5vcmlnaW4sIE9wSW5mbyhub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsKKyAgICAgICAgICAg
ICAgICBtX2NhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAgICBtX3NzYVZhcmlh
YmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxlKSwgYmxvY2ssIGNoaWxkTm9kZSk7CiAgICAgICAg
ICAgICB9Ci0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0
ZShibG9jayk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIC8vIERlY2lkZSB3aGVyZSBQ
aGlzIGFyZSB0byBiZSBpbnNlcnRlZC4gVGhpcyBjcmVhdGVzIHRoZSBQaGkncyBidXQgZG9lc24n
dCBpbnNlcnQgdGhlbQorICAgICAgICAvLyB5ZXQuIFdlIHdpbGwgbGF0ZXIga25vdyB3aGVyZSB0
byBpbnNlcnQgdGhlbSBiZWNhdXNlIFNTQUNhbGN1bGF0b3IgaXMgc3VjaCBhIGJyby4KKyAgICAg
ICAgbV9jYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7
CisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFi
bGVGb3JTU0FJbmRleFtzc2FWYXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gUHJ1bmUgYnkgbGl2ZW5lc3MuIFRoaXMgZG9lc24ndCBidXkgdXMg
bXVjaCBvdGhlciB0aGFuIGNvbXBpbGUgdGltZXMuCisgICAgICAgICAgICAgICAgaWYgKCFibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+cHJlZGljdGlvbigpLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAg
ICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGUtPmZsdXNoRm9ybWF0KCk7CisgICAg
ICAgICAgICAgICAgTm9kZUZsYWdzIHJlc3VsdCA9IHJlc3VsdEZvcihmb3JtYXQpOworICAgICAg
ICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKICAgICAgICAgaWYgKHZl
cmJvc2UpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIlZhcmlhYmxlcyBhdCBoZWFkIGFmdGVyIFNT
QSBQaGkgaW5zZXJ0aW9uOlxuIik7Ci0gICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsICpibG9jaywgIjogIiwgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZCwgIlxuIik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBkYXRhTG9nKCJD
b21wdXRlZCBQaGlzLCBhYm91dCB0byB0cmFuc2Zvcm0gdGhlIGdyYXBoLlxuIik7CisgICAgICAg
ICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGg6XG4iKTsKKyAg
ICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAg
ICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmdzOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZUZvclNTQUluZGV4LnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBpLCAiOiAiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1w
KG1fZ3JhcGgsIG1fdmFyaWFibGVGb3JTU0FJbmRleFtpXSksICJcbiIpOworICAgICAgICAgICAg
ZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlNTQSBjYWxjdWxhdG9yOiAiLCBt
X2NhbGN1bGF0b3IsICJcbiIpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBBdCB0
aGlzIHBvaW50IHZhcmlhYmxlc0F0SGVhZCBpbiBlYWNoIGJsb2NrIHJlZmVycyB0byBlaXRoZXI6
CisgICAgICAgIC8vIERvIHRoZSBidWxrIG9mIHRoZSBTU0EgY29udmVyc2lvbi4gRm9yIGVhY2gg
YmxvY2ssIHRoaXMgdHJhY2tzIHRoZSBvcGVyYW5kLT5Ob2RlCisgICAgICAgIC8vIG1hcHBpbmcg
YmFzZWQgb24gYSBjb21iaW5hdGlvbiBvZiB3aGF0IHRoZSBTU0FDYWxjdWxhdG9yIHRlbGxzIHVz
LCBhbmQgdXMgd2Fsa2luZyBvdmVyCisgICAgICAgIC8vIHRoZSBibG9jayBpbiBmb3J3YXJkIG9y
ZGVyLiBXZSB1c2Ugb3VyIG93biBkYXRhIHN0cnVjdHVyZSwgdmFsdWVGb3JPcGVyYW5kLCBmb3IK
KyAgICAgICAgLy8gZGV0ZXJtaW5pbmcgdGhlIGxvY2FsIG1hcHBpbmcsIGJ1dCB3ZSByZWx5IG9u
IFNTQUNhbGN1bGF0b3IgZm9yIHRoZSBub24tbG9jYWwgbWFwcGluZy4KICAgICAgICAgLy8KLSAg
ICAgICAgLy8gMSkgQSBuZXcgU1NBIHBoaSBpbiB0aGUgY3VycmVudCBibG9jay4KLSAgICAgICAg
Ly8gMikgQSBTZXRBcmd1bWVudCwgd2hpY2ggd2lsbCBzb29uIGdldCBjb252ZXJ0ZWQgaW50byBh
IEdldEFyZ3VtZW50LgotICAgICAgICAvLyAzKSBBbiBvbGQgQ1BTIHBoaSBpbiBhIGRpZmZlcmVu
dCBibG9jay4KKyAgICAgICAgLy8gVGhpcyBkb2VzIHRocmVlIHRoaW5ncyBhdCBvbmNlOgogICAg
ICAgICAvLwotICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGZvciAoMSkg
YW5kICgyKSwgYnV0IHdlIGRvIG5lZWQgdG8KLSAgICAgICAgLy8gZG8gYSByZXBsYWNlbWVudCBm
b3IgKDMpLgotICAgICAgICAKLSAgICAgICAgLy8gQ2xlYXIgYWxsIHJlcGxhY2VtZW50cywgc2lu
Y2Ugb3RoZXIgcGhhc2VzIG1heSBoYXZlIHVzZWQgdGhlbS4KLSAgICAgICAgbV9ncmFwaC5jbGVh
clJlcGxhY2VtZW50cygpOwotICAgICAgICAKLSAgICAgICAgaWYgKGR1bXBHcmFwaCkgewotICAg
ICAgICAgICAgZGF0YUxvZygiR3JhcGgganVzdCBiZWZvcmUgaWRlbnRpZnlpbmcgcmVwbGFjZW1l
bnRzOlxuIik7Ci0gICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgLy8gRm9yIGFsbCBvZiB0aGUgb2xkIENQUyBQaGlzLCBmaWd1cmUgb3V0IHdo
YXQgdGhleSBjb3JyZXNwb25kIHRvIGluIFNTQS4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAg
ICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiRGVhbGluZyB3aXRoIGJs
b2NrICMiLCBibG9ja0luZGV4LCAiXG4iKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhp
SW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7Ci0gICAgICAgICAgICAg
ICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhdOwotICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAg
ICAgICAgICAgICAiQ29uc2lkZXJpbmcgIiwgcGhpLCAiICgiLCBSYXdQb2ludGVyKHBoaSksICIp
LCBmb3IgciIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwaGktPmxvY2FsKCksICIsIGFuZCBp
dHMgcmVwbGFjZW1lbnQgaW4gIiwgKmJsb2NrLCAiLCAiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHBoaS0+bG9jYWwoKSksICJcbiIpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQocGhpICE9IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQub3BlcmFuZChwaGktPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBw
aGktPnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHBoaS0+bG9j
YWwoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIE5v
dyBtYWtlIHN1cmUgdGhhdCBhbGwgdmFyaWFibGVzQXRIZWFkIGluIGVhY2ggYmxvY2sgcG9pbnRz
IHRvIHRoZQotICAgICAgICAvLyBjYW5vbmljYWwgU1NBIHZhbHVlLiBQcmlvciB0byB0aGlzLCB2
YXJpYWJsZXNBdEhlYWRbbG9jYWxdIG1heSBwb2ludCB0bwotICAgICAgICAvLyBhbiBvbGQgQ1BT
IFBoaSBpbiBhIGRpZmZlcmVudCBibG9jay4KKyAgICAgICAgLy8gLSBJbnNlcnRzIHRoZSBQaGlz
IGluIGFsbCBvZiB0aGUgcGxhY2VzIHdoZXJlIHRoZXkgbmVlZCB0byBnby4gV2UndmUgYWxyZWFk
eSBjcmVhdGVkCisgICAgICAgIC8vICAgdGhlbSBhbmQgdGhleSBhcmUgYWNjb3VudGVkIGZvciBp
biB0aGUgU1NBQ2FsY3VsYXRvcidzIGRhdGEgc3RydWN0dXJlcywgYnV0IHdlCisgICAgICAgIC8v
ICAgaGF2ZW4ndCBpbnNlcnRlZCB0aGVtIHlldCwgbW9zdGx5IGJlY2F1c2Ugd2Ugd2FudCB0byBp
bnNlcnQgYWxsIG9mIGEgYmxvY2sncyBQaGlzIGluCisgICAgICAgIC8vICAgb25lIGdvIHRvIGFt
b3J0aXplIHRoZSBjb3N0IG9mIG5vZGUgaW5zZXJ0aW9uLgorICAgICAgICAvLworICAgICAgICAv
LyAtIENyZWF0ZSBhbmQgaW5zZXJ0IFVwc2lsb25zLgorICAgICAgICAvLworICAgICAgICAvLyAt
IENvbnZlcnQgYWxsIG9mIHRoZSBwcmVleGlzdGluZyBTU0Egbm9kZXMgKG90aGVyIHRoYW4gdGhl
IG9sZCBDUFMgUGhpIG5vZGVzKSBpbnRvIFNTQQorICAgICAgICAvLyAgIGZvcm0gYnkgcmVwbGFj
aW5nIGFzIGZvbGxvd3M6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgLSBHZXRMb2NhbCBvdmVy
IGNhcHR1cmVkIHZhcmlhYmxlcyBsb3NlIHRoZWlyIHBoaXMuCisgICAgICAgIC8vCisgICAgICAg
IC8vICAgLSBHZXRMb2NhbCBvdmVyIHVuY2FwdHVyZWQgdmFyaWFibGVzIGRpZSBhbmQgZ2V0IHJl
cGxhY2VkIHdpdGggcmVmZXJlbmNlcyB0byB0aGUgbm9kZQorICAgICAgICAvLyAgICAgc3BlY2lm
aWVkIGJ5IHZhbHVlRm9yT3BlcmFuZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAtIFNldExv
Y2FsIGdldHMgTm9kZU11c3RHZW5lcmF0ZSBpZiBpdCdzIGZsdXNoZWQsIG9yIHR1cm5zIGludG8g
YSBDaGVjayBvdGhlcndpc2UuCisgICAgICAgIC8vCisgICAgICAgIC8vICAgLSBGbHVzaCBsb3Nl
cyBpdHMgY2hpbGRyZW4gYW5kIHR1cm5zIGludG8gYSBQaGFudG9tLgorICAgICAgICAvLworICAg
ICAgICAvLyAgIC0gUGhhbnRvbUxvY2FsIGJlY29tZXMgUGhhbnRvbSwgYW5kIGl0cyBjaGlsZCBp
cyB3aGF0ZXZlciBpcyBzcGVjaWZpZWQgYnkKKyAgICAgICAgLy8gICAgIHZhbHVlRm9yT3BlcmFu
ZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAtIFNldEFyZ3VtZW50IGlzIHJlbW92ZWQgdW5s
ZXNzIGl0J3MgYSBjYXB0dXJlZCB2YXJpYWJsZS4gTm90ZSB0aGF0IEdldEFyZ3VtZW50IG5vZGVz
CisgICAgICAgIC8vICAgICBoYXZlIGFscmVhZHkgYmVlbiBpbnNlcnRlZC4KKyAgICAgICAgT3Bl
cmFuZHM8Tm9kZSo+IHZhbHVlRm9yT3BlcmFuZChPcGVyYW5kc0xpa2UsIG1fZ3JhcGguYmxvY2so
MCktPnZhcmlhYmxlc0F0SGVhZCk7CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
aWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwotICAgICAg
ICAgICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKG5vZGUtPnJlcGxhY2VtZW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlICE9IG5vZGUtPnJlcGxhY2VtZW50KTsKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZSA9IG5vZGUtPnJlcGxhY2VtZW50OworICAgICAgICAgICAgCisgICAgICAgICAgICB2
YWx1ZUZvck9wZXJhbmQuY2xlYXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ1BT
IHdpbGwgY2xhaW0gdGhhdCB0aGUgcm9vdCBibG9jayBoYXMgYWxsIGFyZ3VtZW50cyBsaXZlLiBC
dXQgd2UgaGF2ZSBhbHJlYWR5IGRvbmUKKyAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBzdGVwIG9m
IFNTQSBjb252ZXJzaW9uOiBhcmd1bWVudCBsb2NhbHMgYXJlIG5vIGxvbmdlciBsaXZlIGF0IGhl
YWQ7CisgICAgICAgICAgICAvLyBpbnN0ZWFkIHdlIGhhdmUgR2V0QXJndW1lbnQgbm9kZXMgZm9y
IGV4dHJhY3RpbmcgdGhlIHZhbHVlcyBvZiBhcmd1bWVudHMuIFNvLCB3ZQorICAgICAgICAgICAg
Ly8gc2tpcCB0aGUgYXQtaGVhZCBhdmFpbGFibGUgdmFsdWUgY2FsY3VsYXRpb24gZm9yIHRoZSBy
b290IGJsb2NrLgorICAgICAgICAgICAgaWYgKGJsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gdmFsdWVGb3JPcGVyYW5kLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlQXRIZWFkID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtp
XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlQXRIZWFkKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZUF0SGVhZC0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJl
ZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGxpdmUgdmFyaWFibGUgIiwgVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcChtX2dyYXBoLCB2YXJpYWJsZSksICIgYXQgaGVhZCBvZiBibG9jayAiLCAqYmxv
Y2ssICJcbiIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9zc2FWYXJpYWJsZUZvclZhcmlh
YmxlLmdldCh2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRl
ZiogZGVmID0gbV9jYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCBzc2FWYXJpYWJs
ZSk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZFtpXSA9IGRlZi0+dmFsdWUo
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0
SGVhZFtpXSA9IG5vZGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJWYXJpYWJsZXMgYXQgaGVh
ZCBhZnRlciBjb252ZXJnZW5jZTpcbiIpOwotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwot
ICAgICAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCAqYmxvY2ssICI6ICIsIGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQsICJcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAvLyBDb252ZXJ0IG9wZXJhdGlvbnMgb3ZlciBsb2NhbHMgaW50byBvcGVyYXRp
b25zIG92ZXIgU1NBIG5vZGVzLgotICAgICAgICAvLyAtIEdldExvY2FsIG92ZXIgY2FwdHVyZWQg
dmFyaWFibGVzIGxvc2UgdGhlaXIgcGhpcy4KLSAgICAgICAgLy8gLSBHZXRMb2NhbCBvdmVyIHVu
Y2FwdHVyZWQgdmFyaWFibGVzIGRpZSBhbmQgZ2V0IHJlcGxhY2VkIHdpdGggcmVmZXJlbmNlcwot
ICAgICAgICAvLyAgIHRvIHRoZSBub2RlIHNwZWNpZmllZCBieSB2YXJpYWJsZXNBdEhlYWQuCi0g
ICAgICAgIC8vIC0gU2V0TG9jYWwgZ2V0cyBOb2RlTXVzdEdlbmVyYXRlIGlmIGl0J3MgZmx1c2hl
ZCwgb3IgdHVybnMgaW50byBhCi0gICAgICAgIC8vICAgQ2hlY2sgb3RoZXJ3aXNlLgotICAgICAg
ICAvLyAtIEZsdXNoIGxvc2VzIGl0cyBjaGlsZHJlbiBhbmQgdHVybnMgaW50byBhIFBoYW50b20u
Ci0gICAgICAgIC8vIC0gUGhhbnRvbUxvY2FsIGJlY29tZXMgUGhhbnRvbSwgYW5kIGl0cyBjaGls
ZCBpcyB3aGF0ZXZlciBpcyBzcGVjaWZpZWQKLSAgICAgICAgLy8gICBieSB2YXJpYWJsZXNBdEhl
YWQuCi0gICAgICAgIC8vIC0gU2V0QXJndW1lbnQgdHVybnMgaW50byBHZXRBcmd1bWVudCB1bmxl
c3MgaXQncyBhIGNhcHR1cmVkIHZhcmlhYmxlLgotICAgICAgICAvLyAtIFVwc2lsb25zIGdldCB0
aGVpciBjaGlsZHJlbiBmaXhlZCB0byByZWZlciB0byB0aGUgdHJ1ZSB2YWx1ZSBvZiB0aGF0IGxv
Y2FsCi0gICAgICAgIC8vICAgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suIFByaW9yIHRvIHRoaXMg
bG9vcCwgVXBzaWxvbnMgd2lsbCByZWZlciB0bwotICAgICAgICAvLyAgIHZhcmlhYmxlQXRUYWls
W29wZXJhbmRdLCB3aGljaCBtYXkgYmUgYW55IG9mIEZsdXNoLCBQaGFudG9tTG9jYWwsIEdldExv
Y2FsLAotICAgICAgICAvLyAgIFNldExvY2FsLCBTZXRBcmd1bWVudCwgb3IgUGhpLiBXZSBhY2Nv
bXBsaXNoIHRoaXMgYnkgc2V0dGluZyB0aGUKLSAgICAgICAgLy8gICByZXBsYWNlbWVudCBwb2lu
dGVycyBvZiBhbGwgb2YgdGhvc2Ugbm9kZXMgdG8gcmVmZXIgdG8gZWl0aGVyCi0gICAgICAgIC8v
ICAgdmFyaWFibGVzQXRIZWFkW29wZXJhbmRdLCBvciB0aGUgY2hpbGQgb2YgdGhlIFNldExvY2Fs
LgotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7Ci0gICAgICAg
ICAgICAgICAgYmxvY2stPnBoaXNbcGhpSW5kZXhdLT5yZXBsYWNlbWVudCA9Ci0gICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChibG9jay0+cGhpc1twaGlJ
bmRleF0tPmxvY2FsKCkpOworICAgICAgICAgICAgLy8gSW5zZXJ0IFBoaXMgYnkgYXNraW5nIHRo
ZSBjYWxjdWxhdG9yIHdoYXQgcGhpcyB0aGVyZSBhcmUgaW4gdGhpcyBibG9jay4gQWxzbyB1cGRh
dGUKKyAgICAgICAgICAgIC8vIHZhbHVlRm9yT3BlcmFuZCB3aXRoIHRob3NlIFBoaXMuIEZvciBQ
aGlzIGFzc29jaWF0ZWQgd2l0aCB2YXJpYWJsZXMgdGhhdCBhcmUgbm90CisgICAgICAgICAgICAv
LyBmbHVzaGVkLCB3ZSBhbHNvIGluc2VydCBhIE1vdkhpbnQuCisgICAgICAgICAgICBzaXplX3Qg
cGhpSW5zZXJ0aW9uUG9pbnQgPSAwOworICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpE
ZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJ
bmRleFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgaWYgdGhlIGxvY2FsIGlzIG1lYW50IHRvIGJlIGZs
dXNoZWQgaGVyZS4KKyAgICAgICAgICAgICAgICBib29sIGlzRmx1c2hlZCA9ICEhKAorICAgICAg
ICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpLT5mbGFncygpICYgTm9kZUlzRmx1c2hlZCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlvblBvaW50LCBwaGlE
ZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoaXNGbHVzaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIERv
IG5vdGhpbmcuIEZvciBtdWx0aXBsZSByZWFzb25zLgorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMxOiBJZiB0aGUgbG9jYWwgaXMgZmx1c2hlZCB0
aGVuIHdlIGRvbid0IG5lZWQgdG8gYm90aGVyIHdpdGggYQorICAgICAgICAgICAgICAgICAgICAv
LyBNb3ZIaW50IHNpbmNlIGV2ZXJ5IHBhdGggdG8gdGhpcyBwb2ludCBpbiB0aGUgY29kZSB3aWxs
IGhhdmUgZmx1c2hlZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZWNvZGUgdmFyaWFi
bGUgdXNpbmcgYSBTZXRMb2NhbCBhbmQgaGVuY2UgdGhlIEF2YWlsYWJpbGl0eTo6Zmx1c2hlZEF0
KCkKKyAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBhZ3JlZSwgYW5kIHRoYXQgd2lsbCBiZSBz
dWZmaWNpZW50IGZvciBmaWd1cmluZyBvdXQgaG93IHRvIHJlY292ZXIgdGhlCisgICAgICAgICAg
ICAgICAgICAgIC8vIHZhcmlhYmxlJ3MgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAvLyBSZWFzb24gIzI6IElmIHdlIGhhZCBpbnNlcnRlZCBhIE1vdkhp
bnQgYW5kIHRoZSBQaGkgZnVuY3Rpb24gaGFkIGRpZWQKKyAgICAgICAgICAgICAgICAgICAgLy8g
KGJlY2F1c2UgdGhlIG9ubHkgdXNlciBvZiB0aGUgdmFsdWUgd2FzIHRoZSAiZmx1c2giIC0gaS5l
LiBzb21lCisgICAgICAgICAgICAgICAgICAgIC8vIGFzeW5jaHJvbm91cyBydW50aW1lIHRoaW5n
eSkgdGhlbiB0aGUgTW92SGludCB3b3VsZCB0dXJuIGludG8gYSBab21iaWVIaW50LAorICAgICAg
ICAgICAgICAgICAgICAvLyB3aGljaCB3b3VsZCBmb29sIHVzIGludG8gdGhpbmtpbmcgdGhhdCB0
aGUgdmFyaWFibGUgaXMgZGVhZC4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgICAgICAgICAg
Ly8gcmVhc29uIGhhcyBhIGxvdCB0byBkbyB3aXRoIHRoZSBmYWN0IHRoYXQgRmx1c2hlcyBkbyBu
b3QgdHVybiBpbnRvCisgICAgICAgICAgICAgICAgICAgIC8vIFBoYW50b21zLCBiZWNhdXNlIG91
ciBoYW5kbGluZyBvZiBGbHVzaGVzIGFzc3VtZSB0aGF0IHdlICgxKSBhbHdheXMgbGVhdmUKKyAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIGZsdXNoZWQgU2V0TG9jYWxzIGFsb25lIGFuZCAoMikg
T1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcyBhbHdheXMgc2VlcworICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgYXZhaWxhYmxlIGZsdXNoLiBUaGUgcHJlc2VuY2Ugb2YgYSBNb3ZIaW50IG9yIFpv
bWJpZUhpbnQgd291bGQgbWFrZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gZmx1c2ggc2Vl
bSB1bmF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IC8vIFJlYXNvbiAjMzogSWYgd2UgaGFkIGluc2VydGVkIGEgTW92SGludCB0aGVuIGV2ZW4gaWYg
dGhlIFBoaSBzdGF5ZWQgYWxpdmUsCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIHdvdWxkIHN0
aWxsIGVuZCB1cCBnZW5lcmF0aW5nIGluZWZmaWNpZW50IGNvZGUgc2luY2Ugd2Ugd291bGQgYmUg
dGVsbGluZworICAgICAgICAgICAgICAgICAgICAvLyB0aGUgT1NSIGV4aXQgY29tcGlsZXIgdG8g
dXNlIHNvbWUgU1NBIHZhbHVlIGZvciB0aGUgYnl0ZWNvZGUgdmFyaWFibGUKKyAgICAgICAgICAg
ICAgICAgICAgLy8gcmF0aGVyIHRoYW4ganVzdCB0ZWxsaW5nIGl0IHRoYXQgdGhlIHZhbHVlIHdh
cyBhbHJlYWR5IG9uIHRoZSBzdGFjay4KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgcGhpSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBNb3ZIaW50LCBOb2RlT3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zm
c2V0KCkpLCBwaGlEZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
YmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQotICAgICAgICAgICAgICAgIEFTU0VSVCghYmxv
Y2stPmF0KG5vZGVJbmRleCktPnJlcGxhY2VtZW50KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
bm9kZUluZGV4KTsKQEAgLTMxNSwzNCArMjUzLDMyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7
CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8ICEhKG5vZGUtPmZsYWdzKCkg
JiBOb2RlSXNGbHVzaGVkKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxh
Z3MoTm9kZU11c3RHZW5lcmF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENoZWNrKTsKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
IC8vIE9ubHkgZm9yIFVwc2lsb25zLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSXQgc2VlbXMgdGVtcHRpbmcgdG8ganVzdCBk
byBmb3J3YXJkUGhpKEdldExvY2FsKSwgZXhjZXB0IHRoYXQgd2UKLSAgICAgICAgICAgICAgICAg
ICAgLy8gY291bGQgaGF2ZSBjcmVhdGVkIGEgbmV3IChTU0EpIFBoaSwgYW5kIHRoZSBHZXRMb2Nh
bCBjb3VsZCBzdGlsbCBiZQotICAgICAgICAgICAgICAgICAgICAvLyByZWZlcnJpbmcgdG8gYW4g
b2xkIChDUFMpIFBoaS4gVXNlcyB2YXJpYWJsZXNBdEhlYWQgdG8gdGVsbCB1cyB3aGF0Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIHRvIHJlZmVyIHRvLgogICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwotICAgICAgICAgICAg
ICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFu
ZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2Vt
ZW50ID0gdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUGhhbnRvbSgpOwotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgZm9yIFVw
c2lsb25zLiBBbiBVcHNpbG9uIHdpbGwgb25seSByZWZlciB0byBhIEZsdXNoIGlmCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHRoZXJlIHdlcmUgbm8gU2V0TG9jYWxzIG9yIEdldExvY2FscyBpbiB0
aGUgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
MzY1LDkgKzMwMSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRn
ZSgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IGZv
ciBVcHNpbG9ucy4gQW4gVXBzaWxvbiB3aWxsIG9ubHkgcmVmZXIgdG8gYQotICAgICAgICAgICAg
ICAgICAgICAvLyBQaGFudG9tTG9jYWwgaWYgdGhlcmUgd2VyZSBubyBTZXRMb2NhbHMgb3IgR2V0
TG9jYWxzIGluIHRoZSBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1l
bnQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIApAQCAtMzc1LDE1ICszMDgsNDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldEFyZ3VtZW50KTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0UmVzdWx0KHJlc3VsdEZvcihub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1
c2hGb3JtYXQoKSkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9t
KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50OiB7Cisg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYWJs
ZS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHdhbnQg
dG8gaW5zZXJ0IFVwc2lsb25zIGp1c3QgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBPbiB0
aGUgc3VyZmFjZSB0aGlzCisgICAgICAgICAgICAvLyBzZWVtcyBkYW5nZXJvdXMgYmVjYXVzZSB0
aGUgVXBzaWxvbiB3aWxsIGhhdmUgYSBjaGVja2luZyBVc2VLaW5kLiBCdXQsIHdlIHdpbGwgbm90
CisgICAgICAgICAgICAvLyBhY3R1YWxseSBiZSBwZXJmb3JtaW5nIHRoZSBjaGVjayBhdCB0aGUg
cG9pbnQgb2YgdGhlIFVwc2lsb247IHRoZSBjaGVjayB3aWxsCisgICAgICAgICAgICAvLyBhbHJl
YWR5IGhhdmUgYmVlbiBwZXJmb3JtZWQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBvcmlnaW5hbCBT
ZXRMb2NhbCB3YXMuCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0g
YmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4g
PSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nl
c3NvckluZGV4ID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsK
KyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA9IGJsb2NrLT5zdWNj
ZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRv
cjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2Nr
KSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgp
OworICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFi
bGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmlu
ZGV4KCldOworICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJs
ZS0+Zmx1c2hGb3JtYXQoKTsKKyAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0g
dXNlS2luZEZvcihmb3JtYXQpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIEVkZ2UoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAv
LyBGcmVlIGFsbCBDUFMgcGhpcyBhbmQgcmVzZXQgdmFyaWFibGVzIHZlY3RvcnMuCkBAIC00MDQs
NzMgKzM2OCwxOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMuY2xlYXIo
KTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gU1NBOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBmb3J3YXJkUGhpQ2hpbGRyZW4o
Tm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGph
Y2VuY3lMaXN0OjpTaXplOyArK2kpIHsKLSAgICAgICAgICAgIEVkZ2UmIGVkZ2UgPSBub2RlLT5j
aGlsZHJlbi5jaGlsZChpKTsKLSAgICAgICAgICAgIGlmICghZWRnZSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBmb3J3YXJkUGhpRWRnZShlZGdlKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBOb2RlKiBmb3J3YXJkUGhpKE5vZGUqIG5vZGUp
Ci0gICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKLSAgICAgICAgICAgIGNhc2UgUGhpOiB7Ci0gICAgICAgICAgICAgICAgRWRnZSBlZGdl
ID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFl
ZGdlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBu
b2RlID0gZWRnZS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVy
ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAg
ICAgICB9CisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFw
aCBhZnRlciBTU0EgdHJhbnNmb3JtYXRpb246XG4iKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVt
cCgpOwogICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGJvb2wgZm9yd2FyZFBoaUVkZ2UoRWRn
ZSYgZWRnZSkKLSAgICB7Ci0gICAgICAgIE5vZGUqIG5ld05vZGUgPSBmb3J3YXJkUGhpKGVkZ2Uu
bm9kZSgpKTsKLSAgICAgICAgaWYgKG5ld05vZGUgPT0gZWRnZS5ub2RlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKKwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBkZWR1cGxpY2F0ZUNoaWxkcmVu
KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRq
YWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5j
aGlsZHJlbi5jaGlsZChpKTsKLSAgICAgICAgICAgIGlmICghZWRnZSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGlmIChlZGdlID09IG5vZGUpIHsKLSAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGktLSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFu
Z2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6
ZTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGopID09
IGVkZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShq
LS0pOwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKKworICAgIFNTQUNh
bGN1bGF0b3IgbV9jYWxjdWxhdG9yOwogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsK
KyAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxl
Kj4gbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxlOworICAgIFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0Rh
dGEqPiBtX3ZhcmlhYmxlRm9yU1NBSW5kZXg7CiAgICAgYm9vbCBtX2NoYW5nZWQ7CiB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBo
YXNlLmgJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U1NBQ29udmVyc2lvblBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEwICszNCw5IEBAIGNsYXNz
IEdyYXBoOwogCiAvLyBDb252ZXJ0IFRocmVhZGVkQ1BTIGZvcm0gaW50byBTU0EgZm9ybS4gVGhp
cyByZXN1bHRzIGluIGEgZm9ybSB0aGF0IGhhczoKIC8vCi0vLyAtIFJvdWdobHkgbWluaW1hbCBQ
aGkncy4gV2UgdXNlIHRoZSBBeWNvY2sgJiBIb3JzcG9vbCBmaXhwb2ludCBmb3IKLS8vICAgY29u
dmVydGluZyB0aGUgQ1BTIG1heGltYWwgUGhpcyBpbnRvIFNTQSBtaW5pbWFsIFBoaXMsIHdpdGgg
dGhlIGNhdmVhdAotLy8gICB0aGF0IGlycmVkdWNpYmxlIGNvbnRyb2wgZmxvdyBtYXkgcmVzdWx0
IGluIHNvbWUgbWlzc2VkIG9wcG9ydHVuaXRpZXMKLS8vICAgZm9yIFBoaSByZWR1Y3Rpb24uCisv
LyAtIE1pbmltYWwgUGhpJ3MuIFdlIHVzZSB0aGUgdGhlIEN5dHJvbiBldCBhbCAoVE9QTEFTJzkx
KSBhbGdvcml0aG0gZm9yCisvLyAgIFBoaSBpbnNlcnRpb24uIE1vc3Qgb2YgdGhlIGFsZ29yaXRo
bSBpcyBpbXBsZW1lbnRlZCBpbiBTU0FDYWxjdWxhdG9yCisvLyAgIGFuZCBEb21pbmF0b3JzLgog
Ly8KIC8vIC0gTm8gdXNlcyBvZiBHZXRMb2NhbC9TZXRMb2NhbCBleGNlcHQgZm9yIGNhcHR1cmVk
IHZhcmlhYmxlcyBhbmQgZmx1c2hlcy4KIC8vICAgQWZ0ZXIgdGhpcywgYW55IHJlbWFpbmluZyBT
ZXRMb2NhbCBtZWFucyBGbHVzaC4gUGhhbnRvbUxvY2FscyBiZWNvbWUKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAxNzMzNjYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1IEBACisyMDE0LTA5LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgREZHIHNob3VsZCBoYXZlIGEgcmV1c2FibGUgU1NBIGJ1aWxkZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVXBkYXRlIHRo
ZSBhbGxvYygpIG1ldGhvZCB0byB1c2UgdmFyaWFkaWMgdGVtcGxhdGVzLiBUaGlzIG1ha2VzIGl0
IG1vcmUgbmF0dXJhbCB0byB1c2UuCisKKyAgICAgICAgKiB3dGYvU2VnbWVudGVkVmVjdG9yLmg6
CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvcjo6YWxsb2MpOgorCiAyMDE0LTA5LTA2ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIHVwZGF0ZXMgc3Vn
Z2VzdGVkIGJ5IG5ldyB2ZXJzaW9uIG9mIFhjb2RlCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TZWdt
ZW50ZWRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TZWdtZW50ZWRWZWN0
b3IuaAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL1dURi93dGYvU2VnbWVudGVkVmVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw5ICsxNTcsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgICAgICBzZWdtZW50Rm9yKG1fc2l6ZSAtIDEpLT51bmNoZWNrZWRBcHBlbmQoc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgICAgIH0KIAotICAgICAgICBUJiBhbGxvYygpCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIFQmIGFsbG9jKEFyZ3MuLi4g
YXJncykKICAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kPFQ+KFQoKSk7CisgICAgICAgICAg
ICBhcHBlbmQ8VD4oVChhcmdzLi4uKSk7CiAgICAgICAgICAgICByZXR1cm4gbGFzdCgpOwogICAg
ICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237799</attachid>
            <date>2014-09-08 11:32:50 -0700</date>
            <delta_ts>2014-09-08 12:26:29 -0700</delta_ts>
            <desc>it can run bigger programs</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>77128</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMzY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBA
CisyMDE0LTA5LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGEgcmV1c2FibGUgU1NBIGJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjMzMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV2Ugd2FudCB0byBpbXBsZW1l
bnQgc29waGlzdGljYXRlZCBTU0EgdHJhbnNmb3JtYXRpb25zIGxpa2Ugb2JqZWN0IGFsbG9jYXRp
b24gc2lua2luZworICAgICAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjMzMCksIGJ1dCB0byBkbyB0aGF0LCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZG8KKyAg
ICAgICAgdXBkYXRlcyB0byBTU0EgdGhhdCByZXF1aXJlIGluc2VydGluZyBuZXcgUGhpJ3MuIFRo
aXMgcmVxdWlyZXMgY2FsY3VsYXRpbmcgd2hlcmUgUGhpcyBnby4KKyAgICAgICAgUHJldmlvdXNs
eSwgb3VyIFBoaSBjYWxjdWxhdGlvbiB3YXMgYmFzZWQgb24gQXljb2NrIGFuZCBIb3JzcG9vbCdz
IGFsZ29yaXRobSwgYW5kIG91cgorICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGFsZ29y
aXRobSBvbmx5IHdvcmtlZCB3aGVuIGRvaW5nIENQUy0+U1NBIGNvbnZlcnNpb24uIFRoZSBjb2Rl
CisgICAgICAgIGNvdWxkIG5vdCBiZSByZXVzZWQgZm9yIGNhc2VzIHdoZXJlIHNvbWUgcGhhc2Ug
aGFwcGVucyB0byBrbm93IHRoYXQgaXQgaW50cm9kdWNlZCBhIGZldworICAgICAgICBkZWZzIGlu
IHNvbWUgYmxvY2tzIGFuZCBpdCB3YW50cyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBQaGlzIHNo
b3VsZCBnby4gTW9yZW92ZXIsIGV2ZW4KKyAgICAgICAgdGhlIGdlbmVyYWwgYWxnb3JpdGhtIG9m
IEF5Y29jayBhbmQgSG9yc3Bvb2wgaXMgbm90IHdlbGwgc3VpdGVkIHRvIHN1Y2ggdGFyZ2V0dGVk
IFNTQQorICAgICAgICB1cGRhdGVzLCBzaW5jZSBpdCByZXF1aXJlcyBmaXJzdCBpbnNlcnRpbmcg
bWF4aW1hbCBQaGlzLiBUaGF0IHNjYWxlcyB3ZWxsIHdoZW4gdGhlIFBoaXMKKyAgICAgICAgd2Vy
ZSBhbHJlYWR5IHRoZXJlIChsaWtlIGluIG91ciBDUFMgZm9ybSkgYnV0IG90aGVyd2lzZSBpdCdz
IHF1aXRlIHVubmF0dXJhbCBhbmQgbWF5IGJlCisgICAgICAgIGRpZmZpY3VsdCB0byBtYWtlIGVm
ZmljaWVudC4KKyAgICAgICAgCisgICAgICAgIFRoZSB1c3VhbCB3YXkgb2YgaGFuZGxpbmcgYm90
aCBTU0EgY29udmVyc2lvbiBhbmQgU1NBIHVwZGF0ZSBpcyB0byB1c2UgQ3l0cm9uIGV0IGFsJ3MK
KyAgICAgICAgYWxnb3JpdGhtIGJhc2VkIG9uIGRvbWluYW5jZSBmcm9udGllcnMuIEZvciBhIHdo
aWxlIG5vdywgSSd2ZSBiZWVuIHdvcmtpbmcgb24gY3JlYXRpbmcgYQorICAgICAgICBDeXRyb24t
YmFzZWQgU1NBIGNhbGN1bGF0b3IgdGhhdCBjYW4gYmUgdXNlZCBib3RoIGFzIGEgcmVwbGFjZW1l
bnQgZm9yIG91ciBjdXJyZW50IFNTQQorICAgICAgICBjb252ZXJ0ZXIgYW5kIGFzIGEgcmV1c2Fi
bGUgdG9vbCBmb3IgYW55IHBoYXNlIHRoYXQgbmVlZHMgdG8gZG8gU1NBIHVwZGF0ZS4gSSBwcmV2
aW91c2x5CisgICAgICAgIG9wdGltaXplZCBvdXIgZG9taW5hdG9yIGNhbGN1bGF0aW9uIGFuZCBy
ZXByZXNlbnRhdGlvbiB0byB1c2UgZG9taW5hdG9yIHRyZWVzIGNvbXB1dGVkCisgICAgICAgIHVz
aW5nIExlbmdhdWVyIGFuZCBUYXJqYW4ncyBhbGdvcml0aG0gLSBtYWlubHkgdG8gbWFrZSBpdCBt
b3JlIHNjYWxhYmxlIHRvIGVudW1lcmF0ZSBvdmVyCisgICAgICAgIHRoZSBzZXQgb2YgYmxvY2tz
IHRoYXQgZG9taW5hdGUgeW91IG9yIHZpY2UtdmVyc2EsIGFuZCB0aGVuIEkgaW1wbGVtZW50ZWQg
YSBkb21pbmFuY2UKKyAgICAgICAgZnJvbnRpZXIgY2FsY3VsYXRvci4gVGhpcyBwYXRjaCBpbXBs
ZW1lbnRzIHRoZSBmaW5hbCBzdGVwIHRvd2FyZHMgbWFraW5nIFNTQSB1cGRhdGUKKyAgICAgICAg
YXZhaWxhYmxlIHRvIGFsbCBTU0EgcGhhc2VzOiBpdCBpbXBsZW1lbnRzIGFuIFNTQUNhbGN1bGF0
b3IgdGhhdCBjYW4gdGVsbCB5b3Ugd2hlcmUgUGhpcworICAgICAgICBnbyB3aGVuIGdpdmVuIGFu
IGFyYml0cmFyeSBzZXQgb2YgRGVmcy4gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlLCBhbmQgdG8gZW5z
dXJlIHRoYXQgd2UgaGF2ZQorICAgICAgICBnb29kIHRlc3QgY292ZXJhZ2UgZm9yIHRoaXMgU1NB
Q2FsY3VsYXRvciwgdGhpcyBwYXRjaCByZXBsYWNlcyB0aGUgb2xkIEF5Y29jay1Ib3JzcG9vbAor
ICAgICAgICBTU0EgY29udmVydGVyIHdpdGggb25lIGJhc2VkIG9uIHRoZSBTU0FDYWxjdWxhdG9y
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBoYXMgbm8gb2JzZXJ2YWJsZSBpbXBhY3QuIEl0IGRv
ZXMgcmVkdWNlIHRoZSBhbW91bnQgb2YgY29kZSBpbiBTU0FDb252ZXJzaW9uUGhhc2UuCisgICAg
ICAgIEJ1dCBldmVuIGJldHRlciwgaXQgbWFrZXMgU1NBQ29udmVyc2lvblBoYXNlIGhhdmUgc2ln
bmlmaWNhbnRseSBsZXNzIHRyaWNreSBsb2dpYy4gSXQKKyAgICAgICAgbW9zdGx5IGp1c3QgcmVs
aWVzIG9uIFNTQUNhbGN1bGF0b3IgdG8gZG8gdGhlIHRyaWNreSBzdHVmZiwgYW5kIFNTQUNvbnZl
cnNpb25QaGFzZSBtb3N0bHkKKyAgICAgICAganVzdCByZWFzb25zIGFib3V0IHRoZSB3ZWlyZG5l
c3NlcyB1bmlxdWUgdG8gdGhlIFRocmVhZGVkQ1BTIGZvcm0gdGhhdCBpdCBzZWVzIGFzIGlucHV0
LgorICAgICAgICBJbiBmYWN0LCB1c2luZyB0aGUgQ3l0cm9uIGV0IGFsIGFwcHJvYWNoIG1lYW5z
IHRoYXQgdGhlcmUgaXNuJ3QgcmVhbGx5IGFueSAic21va2UgYW5kCisgICAgICAgIG1pcnJvcnMi
IHRyaWNreW5lc3MgcmVsYXRlZCB0byBTU0EuIFNTQUNhbGN1bGF0b3IncyBvbmx5ICJ0cmlja3Mi
IGFyZSB1c2luZyB0aGUgcHJ1bmVkCisgICAgICAgIGl0ZXJhdGVkIGRvbWluYW5jZSBmcm9udGll
ciB0byBwbGFjZSBQaGkncyBhbmQgdXNpbmcgdGhlIGRvbSB0cmVlIHRvIGZpbmQgcmVhY2hpbmcg
ZGVmcy4KKyAgICAgICAgVGhlIGNvbXBsZXhpdHkgaXMgbW9zbHR5IGNvbmZpbmVkIHRvIERvbWlu
YXRvcnMsIHdoaWNoIGNvbXB1dGVzIHZhcmlvdXMgZG9taW5hdG9yLXJlbGF0ZWQKKyAgICAgICAg
cHJvcGVydGllcyBvdmVyIHRoZSBjb250cm9sIGZsb3cgZ3JhcGguIFRoYXQgY2xhc3MgY2FuIGJl
IGRpZmZpY3VsdCB0byB1bmRlcnN0YW5kLCBidXQgYXQKKyAgICAgICAgbGVhc3QgaXQgZm9sbG93
cyB3ZWxsLWtub3duIGdyYXBoIHRoZW9yeSB3aXNkb20uCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBkZmcvREZHQW5hbHlzaXMuaDoKKyAgICAgICAgKiBkZmcvREZHRG9taW5h
dG9ycy5oOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmltbWVkaWF0ZURvbWluYXRv
ck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJbkl0ZXJh
dGVkRG9taW5hbmNlRnJvbnRpZXJPZik6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6
Zm9yQWxsQmxvY2tzSW5QcnVuZWRJdGVyYXRlZERvbWluYW5jZUZyb250aWVyT2YpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlRmxhZ3MuaDoKKyAgICAgICAgKiBkZmcvREZHU1NBQ2FsY3VsYXRvci5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OlNTQUNhbGN1bGF0
b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6On5TU0FDYWxjdWxhdG9yKToK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpuZXdWYXJpYWJsZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6bmV3RGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpT
U0FDYWxjdWxhdG9yOjpub25Mb2NhbFJlYWNoaW5nRGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpT
U0FDYWxjdWxhdG9yOjpyZWFjaGluZ0RlZkF0VGFpbCk6CisgICAgICAgICogZGZnL0RGR1NTQUNh
bGN1bGF0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZTo6VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OkRlZjo6dmFy
aWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OkRlZjo6YmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OkRlZjo6dmFsdWUpOgorICAgICAgICAo
SlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OkRlZjo6RGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpT
U0FDYWxjdWxhdG9yOjp2YXJpYWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRv
cjo6Y29tcHV0ZVBoaXMpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OnBoaXNG
b3JCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZB
dEhlYWQpOgorICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6U1NBQ29udmVyc2lvblBoYXNlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpQ2hpbGRyZW4pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2FyZFBoaSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpmb3J3YXJkUGhpRWRn
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpkZWR1
cGxpY2F0ZUNoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmg6CisKIDIwMTQtMDktMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIE1ha2UgdXBkYXRlcyBzdWdnZXN0ZWQgYnkgbmV3IHZlcnNpb24gb2YgWGNvZGUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3MzMzNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMjAxLDYgKzIwMSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdQdXJlVmFsdWUuY3Bw
CiAgICAgZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAKKyAgICBkZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHAKICAgICBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAog
ICAgIGRmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdTYWZlcG9pbnQuY3Bw
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE3
MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw2ICs0NTEsNyBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklULmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FDYWxjdWxhdG9y
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUxvd2Vy
aW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0YWNr
TGF5b3V0UGhhc2UuY3BwIiAvPgpAQCAtMTEwMSw2ICsxMTAyLDcgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUNhbGN1bGF0b3IuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FMb3dlcmluZ1BoYXNlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhY2tMYXlvdXRQaGFzZS5oIiAvPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNiArMzQxLDggQEAKIAkJMEY2NjZFQ0QxODM2QjM3RTAw
RDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQ0IxODM2QjM3RTAwRDAx
N0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjZFMTZCMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyog
REZHRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGNjgyRkIyMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjgyRkIwMTlCQ0Iz
NjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmNwcCAqLzsgfTsKKwkJMEY2ODJGQjMxOUJD
QjM2NDAwRkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjgyRkIxMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdT
U0FDYWxjdWxhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjlDQzg2MTkz
QUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgKi87IH07CiAJCTBGNjlDQzg5MTkz
QUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2OUNDODcxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zy
b3plblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCMzE4NUZDOUU5MDA4
NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLzsgfTsKQEAgLTIyNjAsNiArMjI2Miw4IEBACiAJCTBG
NjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVzdXJyZWN0aW9uRm9y
VmFsaWRhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlv
blBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY4MTRERjNGMTMw
MEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRmZy9ERkdBZGphY2VuY3lMaXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAv
KiBERkdFZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0VkZ2UuaDsg
cGF0aCA9IGRmZy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjgy
RkIwMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1NTQUNhbGN1bGF0b3IuY3BwOyBwYXRoID0gZGZn
L0RGR1NTQUNhbGN1bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY4
MkZCMTE5QkNCMzY0MDBGQTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTU0FDYWxjdWxhdG9yLmg7IHBhdGggPSBkZmcvREZHU1NB
Q2FsY3VsYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY5Q0M4NjE5M0FD
NjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHRnJvemVuVmFsdWUuY3BwOyBwYXRoID0gZGZnL0RGR0Zyb3plblZh
bHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2OUNDODcxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0Zyb3plblZhbHVlLmg7IHBhdGggPSBkZmcvREZHRnJvemVuVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2QjFDQjMxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpT
Q2FsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKU0NhbGwu
Y3BwOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01MDEyLDYgKzUwMTYsOCBAQAogCQkJCTg2RUM5REMzMTMyOERGODIwMDJCMkFENyAvKiBE
RkdTcGVjdWxhdGl2ZUpJVC5oICovLAogCQkJCTg2ODgwRjFCMTQzMjhCQjkwMEIwOEQ0MiAvKiBE
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCAqLywKIAkJCQk4Njg4MEY0QzE0MzUzQjIxMDBCMDhE
NDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgKi8sCisJCQkJMEY2ODJGQjAxOUJDQjM2NDAw
RkEzQkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuY3BwICovLAorCQkJCTBGNjgyRkIxMTlCQ0IzNjQw
MEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmggKi8sCiAJCQkJQTdEODlDRjAxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgKi8sCiAJCQkJQTdEODlDRjExN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR1NTQUNvbnZlcnNpb25QaGFzZS5oICovLAogCQkJCTBGQzIwQ0I3
MTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCAqLywKQEAgLTY0Nzgs
NiArNjQ4NCw3IEBACiAJCQkJMEZDMzE0MTIxODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTdEMjNFRTE4OTFCNTU0
MDAzMUM3RkEgLyogUmVndWxhckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjgy
RkIzMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUJBMTVFODE4MjM0MEIzMDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTcyMjEsNiArNzIyOCw3IEBACiAJCQkJMkFBQ0U2M0MxOENBNUEw
MzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
MjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYyQjY2REUxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGNjgyRkIyMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMzMTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlQ29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzQxMDdFQzM3NjAwNDI3QTQ4
IC8qIERhdGVDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1MTA3RUMz
NzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FuYWx5c2lzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbmFseXNpcy5oCShyZXZpc2lvbiAxNzMzMzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FuYWx5c2lzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNzMz
MzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzc3LDcgKzM3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9ncmFwaC5pbml0
aWFsaXplTm9kZU93bmVycygpOwogICAgICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRl
SWZOZWNlc3NhcnkobV9ncmFwaCk7CiAgICAgICAgIAotICAgICAgICBtX2dyYXBoLmdldEJsb2Nr
c0luUHJlT3JkZXIobV9wcmVPcmRlcik7CisgICAgICAgIG1fcHJlT3JkZXIgPSBtX2dyYXBoLmJs
b2Nrc0luUHJlT3JkZXIoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQg
d2hhdCBnZXRzIGNsb2JiZXJlZCBieSBibG9ja3MuIE5vZGUgdGhhdCB0aGlzIHVzZXMgdGhlIHBy
ZU9yZGVyIGxpc3QKICAgICAgICAgLy8gZm9yIGNvbnZlbmllbmNlIG9ubHkuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTczMzM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNiwxMCArMTE2LDggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgICAgICBWZWN0b3I8QmFz
aWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJl
T3JkZXIoZGVwdGhGaXJzdCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGVwdGhGaXJzdC5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBmaXh1cEJsb2NrKGRlcHRo
Rmlyc3RbaV0pOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5QcmVPcmRlcigpKQorICAgICAgICAgICAgICAgIGZpeHVwQmxvY2soYmxvY2spOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMpOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYg
KzU3LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZyb20gPT0gdG8gfHwgc3RyaWN0bHlE
b21pbmF0ZXMoZnJvbSwgdG8pOwogICAgIH0KICAgICAKKyAgICBCYXNpY0Jsb2NrKiBpbW1lZGlh
dGVEb21pbmF0b3JPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQ7CisgICAgfQorICAgIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JBbGxTdHJpY3REb21pbmF0b3JzT2YoQmFz
aWNCbG9jayogdG8sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CiAgICAgewpAQCAtMTE5
LDE0ICsxMjQsMjggQEAgcHVibGljOgogICAgIHZvaWQgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERv
bWluYW5jZUZyb250aWVyT2YoCiAgICAgICAgIGNvbnN0IEJsb2NrTGlzdCYgZnJvbSwgY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKICAgICB7CisgICAgICAgIGZvckFsbEJsb2Nrc0luUHJ1bmVkSXRl
cmF0ZWREb21pbmFuY2VGcm9udGllck9mKAorICAgICAgICAgICAgZnJvbSwKKyAgICAgICAgICAg
IFsmXSAoQmFzaWNCbG9jayogYmxvY2spIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGZ1bmN0
b3IoYmxvY2spOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSk7
CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMgYSBjbG9zZSByZWxhdGl2ZSBvZiBmb3JBbGxC
bG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigpLCB3aGljaCBhbGxvd3MgdGhlCisg
ICAgLy8gZ2l2ZW4gZnVuY3RvciB0byByZXR1cm4gZmFsc2UgdG8gaW5kaWNhdGUgdGhhdCB3ZSBk
b24ndCB3aXNoIHRvIGNvbnNpZGVyIHRoZSBnaXZlbiBibG9jay4KKyAgICAvLyBVc2VmdWwgZm9y
IGNvbXB1dGluZyBwcnVuZWQgU1NBIGZvcm0uCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGZvckFsbEJsb2Nrc0luUHJ1bmVkSXRlcmF0ZWREb21pbmFuY2VGcm9udGll
ck9mKAorICAgICAgICBjb25zdCBCbG9ja0xpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgewogICAgICAgICBCbG9ja1NldCBzZXQ7CiAgICAgICAgIGZvckFsbEJsb2Nrc0lu
SXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mSW1wbCgKICAgICAgICAgICAgIGZyb20sCiAgICAg
ICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBib29sIHsKICAgICAgICAgICAgICAg
ICBpZiAoIXNldC5hZGQoYmxvY2spKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgZnVuY3RvcihibG9jayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0b3IoYmxvY2spOwogICAgICAgICAg
ICAgfSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjMsMTAgKzQyMywxMCBAQCB2b2lkIEdyYXBo
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgaWYgKCFjb250ZXh0KQogICAgICAg
ICBjb250ZXh0ID0gJm15Q29udGV4dDsKICAgICAKLSAgICBkYXRhTG9nKCJcbiIpOwotICAgIGRh
dGFMb2coIkRGRyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVENv
ZGU6OkRGR0pJVCksICI6XG4iKTsKLSAgICBkYXRhTG9nKCIgIEZpeHBvaW50IHN0YXRlOiAiLCBt
X2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIsIG1fZm9ybSwgIjsgVW5pZmljYXRpb24gc3RhdGU6
ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIjsgUmVmIGNvdW50IHN0YXRlOiAiLCBtX3JlZkNvdW50
U3RhdGUsICJcbiIpOwotICAgIGRhdGFMb2coIlxuIik7CisgICAgb3V0LnByaW50KCJcbiIpOwor
ICAgIG91dC5wcmludCgiREZHIGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9j
aywgSklUQ29kZTo6REZHSklUKSwgIjpcbiIpOworICAgIG91dC5wcmludCgiICBGaXhwb2ludCBz
dGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0
aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUsICI7IFJlZiBjb3VudCBzdGF0ZTogIiwg
bV9yZWZDb3VudFN0YXRlLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgCiAgICAg
Tm9kZSogbGFzdE5vZGUgPSAwOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Mu
c2l6ZSgpOyArK2IpIHsKQEAgLTQ5NSwxMiArNDk1LDEyIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAgICAgIG91dC5wcmludCgiICBWYWx1ZXM6ICIs
IG5vZGVNYXBEdW1wKGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCwgY29udGV4dCksICJcbiIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gfQotICAgICAgICBkYXRhTG9nKCJcbiIpOwor
ICAgICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgfQogICAgIAogICAgIGlmICghbXlDb250ZXh0
LmlzRW1wdHkoKSkgewotICAgICAgICBteUNvbnRleHQuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwot
ICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICBteUNvbnRleHQuZHVtcChvdXQpOworICAg
ICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgfQogfQogCkBAIC02MjYsOCArNjI2LDkgQEAgdm9p
ZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvYwogICAgIH0KIH0KIAotdm9pZCBH
cmFwaDo6Z2V0QmxvY2tzSW5QcmVPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpCitC
bG9ja0xpc3QgR3JhcGg6OmJsb2Nrc0luUHJlT3JkZXIoKQogeworICAgIEJsb2NrTGlzdCByZXN1
bHQ7CiAgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKICAgICB3b3JrbGlzdC5wdXNoKGJsb2Nr
KDApKTsKICAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgewpA
QCAtNjM1LDEwICs2MzYsMTIgQEAgdm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5QcmVPcmRlcihWZWN0
b3I8QgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBp
LS07KQogICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jay0+c3VjY2Vzc29yKGkpKTsKICAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5Qb3N0
T3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQorQmxvY2tMaXN0IEdyYXBoOjpibG9j
a3NJblBvc3RPcmRlcigpCiB7CisgICAgQmxvY2tMaXN0IHJlc3VsdDsKICAgICBQb3N0T3JkZXJC
bG9ja1dvcmtsaXN0IHdvcmtsaXN0OwogICAgIHdvcmtsaXN0LnB1c2goYmxvY2soMCkpOwogICAg
IHdoaWxlIChCbG9ja1dpdGhPcmRlciBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKQEAgLTY1Myw2
ICs2NTYsNyBAQCB2b2lkIEdyYXBoOjpnZXRCbG9ja3NJblBvc3RPcmRlcihWZWN0b3I8CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB2b2lkIEdyYXBoOjpjbGVhclJlcGxhY2VtZW50cygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3Niw4ICs2NzYsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjbGVhclJlcGxhY2VtZW50cygpOwogICAgIHZvaWQgaW5pdGlhbGl6ZU5v
ZGVPd25lcnMoKTsKICAgICAKLSAgICB2b2lkIGdldEJsb2Nrc0luUHJlT3JkZXIoVmVjdG9yPEJh
c2ljQmxvY2sqPiYgcmVzdWx0KTsKLSAgICB2b2lkIGdldEJsb2Nrc0luUG9zdE9yZGVyKFZlY3Rv
cjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCk7CisgICAgQmxvY2tMaXN0IGJsb2Nrc0luUHJlT3JkZXIo
KTsKKyAgICBCbG9ja0xpc3QgYmxvY2tzSW5Qb3N0T3JkZXIoKTsKICAgICAKICAgICBQcm9maWxl
cjo6Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKCkgeyByZXR1cm4gbV9wbGFuLmNvbXBpbGF0aW9u
LmdldCgpOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNN
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xJQ01QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCwxNiArMTUwLDkgQEAgcHVi
bGljOgogICAgICAgICAvLwogICAgICAgICAvLyBGb3IgbWF4aW11bSBwcm9maXQsIHdlIHdhbGsg
YmxvY2tzIGluIERGUyBvcmRlciB0byBlbnN1cmUgdGhhdCB3ZSBnZW5lcmFsbHkKICAgICAgICAg
Ly8gdGVuZCB0byBob2lzdCBkb21pbmF0b3JzIGJlZm9yZSBkb21pbmF0ZWVzLgotICAgICAgICBW
ZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAgIG1fZ3JhcGguZ2V0QmxvY2tz
SW5QcmVPcmRlcihkZXB0aEZpcnN0KTsKICAgICAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29w
Kj4gbG9vcFN0YWNrOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9y
ICgKLSAgICAgICAgICAgIHVuc2lnbmVkIGRlcHRoRmlyc3RJbmRleCA9IDA7Ci0gICAgICAgICAg
ICBkZXB0aEZpcnN0SW5kZXggPCBkZXB0aEZpcnN0LnNpemUoKTsKLSAgICAgICAgICAgICsrZGVw
dGhGaXJzdEluZGV4KSB7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gZGVwdGhGaXJzdFtkZXB0aEZpcnN0SW5kZXhdOworICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAgICAgICAgIGNv
bnN0IE5hdHVyYWxMb29wKiBsb29wID0gbV9ncmFwaC5tX25hdHVyYWxMb29wcy5pbm5lck1vc3RM
b29wT2YoYmxvY2spOwogICAgICAgICAgICAgaWYgKCFsb29wKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCShy
ZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFn
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIAogI2RlZmluZSBOb2RlUmVsZXZhbnRUb09TUiAgICAgICAgICAgICAgIDB4
MTAwMDAKIAotI2RlZmluZSBOb2RlSXNGbHVzaGVkICAgICAgICAgICAgICAgICAgIDB4MjAwMDAg
Ly8gVXNlZCBieSBHcmFwaDo6Y29tcHV0ZUlzRmx1c2hlZCgpLCB3aWxsIHRlbGwgeW91IHdoaWNo
IGxvY2FsIG5vZGVzIGFyZSBiYWNrd2FyZHMtcmVhY2hhYmxlIGZyb20gYSBGbHVzaC4KKyNkZWZp
bmUgTm9kZUlzRmx1c2hlZCAgICAgICAgICAgICAgICAgICAweDIwMDAwIC8vIENvbXB1dGVkIGJ5
IENQU1JldGhyZWFkaW5nUGhhc2UsIHdpbGwgdGVsbCB5b3Ugd2hpY2ggbG9jYWwgbm9kZXMgYXJl
IGJhY2t3YXJkcy1yZWFjaGFibGUgZnJvbSBhIEZsdXNoLgogCiAjZGVmaW5lIE5vZGVNaXNjRmxh
ZzEgICAgICAgICAgICAgICAgICAgMHg0MDAwMAogI2RlZmluZSBOb2RlTWlzY0ZsYWcyICAgICAg
ICAgICAgICAgICAgIDB4ODAwMDAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhh
c2UuY3BwCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIFBoYXNlOjpiZWdpblBoYXNlKCkKIHsKKyAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZVZhbGlkYXRpb25GYWlsdXJlKCkpIHsKKyAgICAgICAgU3RyaW5n
UHJpbnRTdHJlYW0gb3V0OworICAgICAgICBtX2dyYXBoLmR1bXAob3V0KTsKKyAgICAgICAgbV9n
cmFwaER1bXBCZWZvcmVQaGFzZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICB9CisgICAgCiAgICAg
aWYgKCFzaG91bGREdW1wR3JhcGhBdEVhY2hQaGFzZSgpKQogICAgICAgICByZXR1cm47CisgICAg
CiAgICAgZGF0YUxvZygiQmVnaW5uaW5nIERGRyBwaGFzZSAiLCBtX25hbWUsICIuXG4iKTsKICAg
ICBkYXRhTG9nKCJCZWZvcmUgIiwgbV9uYW1lLCAiOlxuIik7CiAgICAgbV9ncmFwaC5kdW1wKCk7
CkBAIC00Niw3ICs1Myw3IEBAIHZvaWQgUGhhc2U6OmVuZFBoYXNlKCkKIHsKICAgICBpZiAoIU9w
dGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
dmFsaWRhdGUobV9ncmFwaCwgRHVtcEdyYXBoKTsKKyAgICB2YWxpZGF0ZShtX2dyYXBoLCBEdW1w
R3JhcGgsIG1fZ3JhcGhEdW1wQmVmb3JlUGhhc2UpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAx
NzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY3LDYgKzY3LDggQEAgcHJpdmF0ZToKICAgICAvLyBDYWxsIHRoZXNlIGhvb2tz
IHdoZW4gc3RhcnRpbmcgYW5kIGZpbmlzaGluZy4KICAgICB2b2lkIGJlZ2luUGhhc2UoKTsKICAg
ICB2b2lkIGVuZFBoYXNlKCk7CisgICAgCisgICAgQ1N0cmluZyBtX2dyYXBoRHVtcEJlZm9yZVBo
YXNlOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUGhhc2VUeXBlPgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU1NBQ2Fs
Y3VsYXRvci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCbG9ja01h
cElubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBT
U0FDYWxjdWxhdG9yOjpWYXJpYWJsZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgidmFyIiwgbV9pbmRleCk7Cit9CisKK3ZvaWQgU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGU6OmR1bXBWZXJib3NlKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVt
cChvdXQpOworICAgIGlmICghbV9ibG9ja3NXaXRoRGVmcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
b3V0LnByaW50KCIoZGVmczogIik7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fYmxvY2tzV2l0aERlZnMpCisgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICpibG9jayk7CisgICAgICAgIG91dC5wcmludCgiKSIpOworICAg
IH0KK30KKwordm9pZCBTU0FDYWxjdWxhdG9yOjpEZWY6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoImRlZigiLCAqbV92YXJpYWJsZSwgIiwgIiwgKm1fYmxv
Y2ssICIsICIsIG1fdmFsdWUsICIpIik7Cit9CisKK1NTQUNhbGN1bGF0b3I6OlNTQUNhbGN1bGF0
b3IoR3JhcGgmIGdyYXBoKQorICAgIDogbV9kYXRhKGdyYXBoKQorICAgICwgbV9ncmFwaChncmFw
aCkKK3sKK30KKworU1NBQ2FsY3VsYXRvcjo6flNTQUNhbGN1bGF0b3IoKQoreworfQorCitTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogU1NBQ2FsY3VsYXRvcjo6bmV3VmFyaWFibGUoKQoreworICAg
IHJldHVybiAmbV92YXJpYWJsZXMuYWxsb2MoVmFyaWFibGUobV92YXJpYWJsZXMuc2l6ZSgpKSk7
Cit9CisKK1NTQUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3VsYXRvcjo6bmV3RGVmKFZhcmlhYmxl
KiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIHZhbHVlKQoreworICAgIERlZiog
ZGVmID0gbV9kZWZzLmFkZChEZWYodmFyaWFibGUsIGJsb2NrLCB2YWx1ZSkpOworICAgIGF1dG8g
cmVzdWx0ID0gbV9kYXRhW2Jsb2NrXS5tX2RlZnMuYWRkKHZhcmlhYmxlLCBkZWYpOworICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgdmFyaWFibGUtPm1fYmxvY2tzV2l0aERlZnMu
YXBwZW5kKGJsb2NrKTsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBkZWY7CisgICAgcmV0dXJuIGRlZjsKK30KKworU1NBQ2FsY3VsYXRvcjo6RGVmKiBTU0FDYWxj
dWxhdG9yOjpub25Mb2NhbFJlYWNoaW5nRGVmKEJhc2ljQmxvY2sqIGJsb2NrLCBWYXJpYWJsZSog
dmFyaWFibGUpCit7CisgICAgcmV0dXJuIHJlYWNoaW5nRGVmQXRUYWlsKG1fZ3JhcGgubV9kb21p
bmF0b3JzLmltbWVkaWF0ZURvbWluYXRvck9mKGJsb2NrKSwgdmFyaWFibGUpOworfQorCitTU0FD
YWxjdWxhdG9yOjpEZWYqIFNTQUNhbGN1bGF0b3I6OnJlYWNoaW5nRGVmQXRUYWlsKEJhc2ljQmxv
Y2sqIGJsb2NrLCBWYXJpYWJsZSogdmFyaWFibGUpCit7CisgICAgZm9yICg7IGJsb2NrOyBibG9j
ayA9IG1fZ3JhcGgubV9kb21pbmF0b3JzLmltbWVkaWF0ZURvbWluYXRvck9mKGJsb2NrKSkgewor
ICAgICAgICBpZiAoRGVmKiBkZWYgPSBtX2RhdGFbYmxvY2tdLm1fZGVmcy5nZXQodmFyaWFibGUp
KQorICAgICAgICAgICAgcmV0dXJuIGRlZjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3ZvaWQgU1NBQ2FsY3VsYXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiPFZhcmlhYmxlczogWyIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hKTsKKyAgICAgICAgbV92YXJpYWJsZXNbaV0uZHVtcFZl
cmJvc2Uob3V0KTsKKyAgICB9CisgICAgb3V0LnByaW50KCJdLCBEZWZzOiBbIik7CisgICAgY29t
bWEgPSBDb21tYVByaW50ZXIoKTsKKyAgICBmb3IgKERlZiogZGVmIDogY29uc3RfY2FzdDxTU0FD
YWxjdWxhdG9yKj4odGhpcyktPm1fZGVmcykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqZGVm
KTsKKyAgICBvdXQucHJpbnQoIl0sIFBoaXM6IFsiKTsKKyAgICBjb21tYSA9IENvbW1hUHJpbnRl
cigpOworICAgIGZvciAoRGVmKiBkZWYgOiBjb25zdF9jYXN0PFNTQUNhbGN1bGF0b3IqPih0aGlz
KS0+bV9waGlzKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICpkZWYpOworICAgIG91dC5wcmlu
dCgiXSwgQmxvY2sgZGF0YTogWyIpOworICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7CisgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqYmxvY2ssICI9
PigiKTsKKyAgICAgICAgb3V0LnByaW50KCJEZWZzOiB7Iik7CisgICAgICAgIENvbW1hUHJpbnRl
ciBpbm5lckNvbW1hOworICAgICAgICBmb3IgKGF1dG8gZW50cnkgOiBtX2RhdGFbYmxvY2tdLm1f
ZGVmcykKKyAgICAgICAgICAgIG91dC5wcmludChpbm5lckNvbW1hLCAqZW50cnkua2V5LCAiLT4i
LCAqZW50cnkudmFsdWUpOworICAgICAgICBvdXQucHJpbnQoIn0sIFBoaXM6IHsiKTsKKyAgICAg
ICAgaW5uZXJDb21tYSA9IENvbW1hUHJpbnRlcigpOworICAgICAgICBmb3IgKERlZiogZGVmIDog
bV9kYXRhW2Jsb2NrXS5tX3BoaXMpCisgICAgICAgICAgICBvdXQucHJpbnQoaW5uZXJDb21tYSwg
KmRlZik7CisgICAgICAgIG91dC5wcmludCgifSkiKTsKKyAgICB9CisgICAgb3V0LnByaW50KCJd
PiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxj
dWxhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNhbGN1bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1NTQUNhbGN1
bGF0b3JfaAorI2RlZmluZSBERkdTU0FDYWxjdWxhdG9yX2gKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gU1NBQ2FsY3VsYXRvciBwcm92
aWRlcyBhIHJldXNhYmxlIHRvb2wgZm9yIHVzaW5nIHRoZSBDeXRyb24sIEZlcnJhbnRlLCBSb3Nl
biwgV2VnbWFuLCBhbmQKKy8vIFphZGVjayAiRWZmaWNpZW50bHkgQ29tcHV0aW5nIFN0YXRpYyBT
aW5nbGUgQXNzaWdubWVudCBGb3JtIGFuZCB0aGUgQ29udHJvbCBEZXBlbmRlbmNlIEdyYXBoIgor
Ly8gKFRPUExBUyc5MSkgYWxnb3JpdGhtIGZvciBjb21wdXRpbmcgU1NBLiBTU0FDYWxjdWxhdG9y
IGRvZXNuJ3QgbWFnaWNhbGx5IGRvIGV2ZXJ5dGhpbmcgZm9yIHlvdQorLy8gYnV0IGl0IG1haW50
YWlucyB0aGUgbWFqb3IgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBoYW5kbGVzIG1vc3Qgb2YgdGhlIG5v
bi1sb2NhbCByZWFzb25pbmcuIEhlcmUncworLy8gdGhlIHdvcmtmbG93IG9mIHVzaW5nIFNTQUNh
bGN1bGF0b3IgdG8gZXhlY3V0ZSB0aGlzIGFsZ29yaXRobToKKy8vCisvLyAwKSBDcmVhdGUgYSBm
cmVzaCBTU0FDYWxjdWxhdG9yIGluc3RhbmNlLiBZb3Ugd2lsbCBuZWVkIHRoaXMgaW5zdGFuY2Ug
b25seSBmb3IgYXMgbG9uZyBhcworLy8gICAgeW91J3JlIG5vdCB5ZXQgZG9uZSBjb21wdXRpbmcg
U1NBLgorLy8KKy8vIDEpIENyZWF0ZSBhbiBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSBmb3IgZXZl
cnkgdmFyaWFibGUgdGhhdCB5b3Ugd2FudCB0byBkbyBQaGkgaW5zZXJ0aW9uCisvLyAgICBvbi4g
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGU6OmluZGV4KCkgaXMgYSBkZW5zZSBpbmRleGluZyBvZiB0
aGUgVmFyaWFibGVzIHRoYXQgeW91CisvLyAgICBjcmVhdGVkLCBzbyB5b3UgY2FuIGVhc2lseSB1
c2UgYSBWZWN0b3IgdG8gbWFwIHRoZSBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZXMgdG8geW91cgor
Ly8gICAgdmFyaWFibGVzLgorLy8KKy8vIDIpIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OkRlZiBm
b3IgZXZlcnkgYXNzaWdubWVudCB0byB0aG9zZSB2YXJpYWJsZXMuIEEgRGVmIGtub3dzIGFib3V0
IHRoZQorLy8gICAgdmFyaWFibGUsIHRoZSBibG9jaywgYW5kIHRoZSBERkc6Ok5vZGUqIHRoYXQg
aGFzIHRoZSB2YWx1ZSBiZWluZyBwdXQgaW50byB0aGUgdmFyaWFibGUuCisvLyAgICBOb3RlIHRo
YXQgY3JlYXRpbmcgYSBEZWYgaW4gYmxvY2sgQiBmb3IgdmFyaWFibGUgViBpZiBibG9jayBCIGFs
cmVhZHkgaGFzIGEgZGVmIGZvciB2YXJpYWJsZQorLy8gICAgViB3aWxsIG92ZXJ3cml0ZSB0aGUg
cHJldmlvdXMgRGVmJ3MgREZHOjpOb2RlKiB2YWx1ZS4gVGhpcyBlbmFibGVzIHlvdSB0byBjcmVh
dGUgRGVmcyBieQorLy8gICAgcHJvY2Vzc2luZyBiYXNpYyBibG9ja3MgaW4gZm9yd2FyZCBvcmRl
ci4gSWYgYSBibG9jayBoYXMgbXVsdGlwbGUgRGVmcyBvZiBhIHZhcmlhYmxlLCB0aGlzCisvLyAg
ICAianVzdCB3b3JrcyIgYmVjYXVzZSBlYWNoIGJsb2NrIHdpbGwgdGhlbiByZW1lbWJlciB0aGUg
bGFzdCBEZWYgb2YgZWFjaCB2YXJpYWJsZS4KKy8vCisvLyAzKSBDYWxsIFNTQUNhbGN1bGF0b3I6
OmNvbXB1dGVQaGlzKCkuIFRoaXMgdGFrZXMgYSBmdW5jdG9yIHRoYXQgd2lsbCBjcmVhdGUgdGhl
IFBoaSBub2Rlcy4gVGhlCisvLyAgICBmdW5jdG9yIHJldHVybnMgZWl0aGVyIHRoZSBQaGkgbm9k
ZSBpdCBjcmVhdGVkLCBvciBudWxscHRyLCBpZiBpdCBjaG9vc2VzIHRvIHBydW5lLiAoQXMgYW4K
Ky8vICAgIGFzaWRlLCBpdCdzIGFsd2F5cyBzb3VuZCBub3QgdG8gcHJ1bmUsIGFuZCB0aGUgc2Fm
ZXN0IHJlYXNvbiBmb3IgcHJ1bmluZyBpcyBsaXZlbmVzcy4pIFRoZQorLy8gICAgY29tcHV0ZVBo
aXMoKSBjb2RlIHdpbGwgcmVjb3JkIHRoZSBjcmVhdGVkIFBoaSBub2RlcyBhcyBEZWZzLCBhbmQg
aXQgd2lsbCBzZXBhcmF0ZWx5IHJlY29yZAorLy8gICAgdGhlIGxpc3Qgb2YgUGhpcyBpbnNlcnRl
ZCBhdCBlYWNoIGJsb2NrLiBJdCdzIE9LIGZvciB0aGUgZnVuY3RvciB5b3UgcGFzcyBoZXJlIHRv
IG1vZGlmeSB0aGUKKy8vICAgIERGRzo6R3JhcGggb24gdGhlIGZseSwgYnV0IHRoZSBlYXNpZXN0
IHdheSB0byB3cml0ZSB0aGlzIGlzIHRvIGp1c3QgY3JlYXRlIHRoZSBQaGkgbm9kZXMgYnkKKy8v
ICAgIGRvaW5nIEdyYXBoOjphZGROb2RlKCkgYW5kIHJldHVybiB0aGVtLiBJdCdzIHRoZW4gYmVz
dCB0byBpbnNlcnQgYWxsIFBoaSBub2RlcyBmb3IgYSBibG9jaworLy8gICAgaW4gYnVsayBhcyBw
YXJ0IG9mIHRoZSBwYXNzIHlvdSBkbyBiZWxvdywgaW4gc3RlcCAoNCkuCisvLworLy8gNCkgTW9k
aWZ5IHRoZSBncmFwaCB0byBjcmVhdGUgdGhlIFNTQSBkYXRhIGZsb3cuIEZvciBlYWNoIGJsb2Nr
LCB0aGlzIHNob3VsZDoKKy8vCisvLyAgICA0LjApIENvbXB1dGUgdGhlIHNldCBvZiByZWFjaGlu
ZyBkZWZzIChha2EgYXZhaWxhYmxlIHZhbHVlcykgZm9yIGVhY2ggdmFyaWFibGUgYnkgY2FsbGlu
ZworLy8gICAgICAgICBTU0FDYWxjdWxhdG9yOjpyZWFjaGluZ0RlZkF0SGVhZCgpIGZvciBlYWNo
IHZhcmlhYmxlLiBSZWNvcmQgdGhpcyBpbiBhIGxvY2FsIHRhYmxlIHRoYXQKKy8vICAgICAgICAg
d2lsbCBiZSBpbmNyZW1lbnRhbGx5IHVwZGF0ZWQgYXMgeW91IHByb2NlZWQgdGhyb3VnaCB0aGUg
YmxvY2sgaW4gZm9yd2FyZCBvcmRlciBpbiB0aGUKKy8vICAgICAgICAgbmV4dCBzdGVwczoKKy8v
CisvLyAgICAgICAgIEZJWE1FOiBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gY29tcHV0ZSByZWFjaGlu
ZyBkZWZzIGZvciBhbGwgbGl2ZSB2YXJpYWJsZXMgaW4gb25lIGdvLCB0bworLy8gICAgICAgICBh
dm9pZCBkb2luZyByZXBlYXRlZCBkb20gdHJlZSB0cmF2ZXJzYWxzLgorLy8gICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NjEwCisvLworLy8gICAgNC4x
KSBJbnNlcnQgYWxsIG9mIHRoZSBQaGkgbm9kZXMgZm9yIHRoZSBibG9jayBieSB1c2luZyBTU0FD
YWxjdWxhdG9yOjpwaGlzRm9yQmxvY2soKSwgYW5kCisvLyAgICAgICAgIHJlY29yZCB0aG9zZSBQ
aGkgbm9kZXMgYXMgYmVpbmcgYXZhaWxhYmxlIHZhbHVlcy4KKy8vCisvLyAgICA0LjIpIFByb2Nl
c3MgdGhlIGJsb2NrIGluIGZvcndhcmQgb3JkZXIuIEZvciBlYWNoIGxvYWQgZnJvbSBhIHZhcmlh
YmxlLCByZXBsYWNlIGl0IHdpdGggdGhlCisvLyAgICAgICAgIGF2YWlsYWJsZSBTU0EgdmFsdWUg
Zm9yIHRoYXQgdmFyaWFibGUuIEZvciBlYWNoIHN0b3JlLCBkZWxldGUgaXQgYW5kIHJlY29yZCB0
aGUgc3RvcmVkCisvLyAgICAgICAgIHZhbHVlIGFzIGJlaW5nIGF2YWlsYWJsZS4KKy8vCisvLyAg
ICAgICAgIE5vdGUgdGhhdCB5b3UgaGF2ZSB0d28gb3B0aW9ucyBvZiBob3cgdG8gcmVwbGFjZSBs
b2FkcyB3aXRoIFNTQSB2YWx1ZXMuIFlvdSBjYW4gcmVwbGFjZQorLy8gICAgICAgICB0aGUgbG9h
ZCB3aXRoIGFuIElkZW50aXR5IG5vZGU7IHRoaXMgd2lsbCBlbmQgdXAgd29ya2luZyBmYWlybHkg
bmF0dXJhbGx5IHNvIGxvbmcgYXMKKy8vICAgICAgICAgeW91IHJ1biBHQ1NFIGFmdGVyIHlvdXIg
cGhhc2UuIE9yLCB5b3UgY2FuIHJlcGxhY2UgYWxsIHVzZXMgb2YgdGhlIGxvYWQgd2l0aCB0aGUg
U1NBCisvLyAgICAgICAgIHZhbHVlIHlvdXJzZWxmICh1c2luZyB0aGUgR3JhcGg6OnBlcmZvcm1T
dWJzdGl0dXRpb24oKSBpZGlvbSksIGJ1dCB0aGF0IHJlcXVpcmVzIHRoYXQKKy8vICAgICAgICAg
eW91ciBsb29wIG92ZXIgYmFzaWMgYmxvY2tzIHByb2NlZWRzIGluIHRoZSBhcHByb3ByaWF0ZSBn
cmFwaCBvcmRlciwgZm9yIGV4YW1wbGUKKy8vICAgICAgICAgcHJlb3JkZXIuCisvLworLy8gICAg
ICAgICBGSVhNRTogTWFrZSBpdCBlYXNpZXIgdG8gZG8gdGhpcywgdGhhdCBkb2Vzbid0IGludm9s
dmUgcmVydW5uaW5nIEdDU0UuCisvLyAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzY2MzkKKy8vCisvLyAgICA0LjMpIEluc2VydCBVcHNpbG9ucyBmb3Ig
ZWFjaCBQaGkgaW4gZWFjaCBzdWNjZXNzb3IgYmxvY2suIFVzZSB0aGUgYXZhaWxhYmxlIHZhbHVl
cyB0YWJsZSB0bworLy8gICAgICAgICBkZWNpZGUgdGhlIHNvdXJjZSB2YWx1ZSBmb3IgZWFjaCBQ
aGkncyB2YXJpYWJsZS4gTm90ZSB0aGF0IHlvdSBjb3VsZCBhbHNvIHVzZQorLy8gICAgICAgICBT
U0FDYWxjdWxhdG9yOjpyZWFjaGluZ0RlZkF0VGFpbCgpIGluc3RlYWQgb2YgdGhlIGF2YWlsYWJs
ZSB2YWx1ZXMgdGFibGUsIHRob3VnaCB5b3VyCisvLyAgICAgICAgIGxvY2FsIGF2YWlsYWJsZSB2
YWx1ZXMgdGFibGUgaXMgbGlrZWx5IHRvIGJlIG1vcmUgZWZmaWNpZW50LgorLy8KKy8vIFRoZSBt
b3N0IG9idmlvdXMgdXNlIG9mIFNTQUNhbGN1bGF0b3IgaXMgZm9yIHRoZSBDUFMtPlNTQSBjb252
ZXJzaW9uIGl0c2VsZiwgYnV0IGl0J3MgbWVhbnQgdG8KKy8vIGFsc28gYmUgdXNlZCBmb3IgU1NB
IHVwZGF0ZSBhbmQgZm9yIHRoaW5ncyBsaWtlIHRoZSBwcm9tb3Rpb24gb2YgaGVhcCBmaWVsZHMg
dG8gbG9jYWwgU1NBCisvLyB2YXJpYWJsZXMuCisKK2NsYXNzIFNTQUNhbGN1bGF0b3IgeworcHVi
bGljOgorICAgIFNTQUNhbGN1bGF0b3IoR3JhcGgmKTsKKyAgICB+U1NBQ2FsY3VsYXRvcigpOwor
ICAgIAorICAgIGNsYXNzIFZhcmlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVuc2lnbmVk
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgICAgICAKKyAgICAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgICAgIHZvaWQgZHVtcFZlcmJvc2UoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5k
IGNsYXNzIFNTQUNhbGN1bGF0b3I7CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZSgpCisgICAg
ICAgICAgICA6IG1faW5kZXgoVUlOVF9NQVgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgVmFyaWFibGUodW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1faW5k
ZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJsb2NrTGlzdCBtX2Js
b2Nrc1dpdGhEZWZzOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisgICAgCisg
ICAgY2xhc3MgRGVmIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGU7IH0KKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2so
KSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgICAgIAorICAgICAgICBOb2RlKiB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBm
cmllbmQgY2xhc3MgU1NBQ2FsY3VsYXRvcjsKKyAgICAgICAgCisgICAgICAgIERlZigpCisgICAg
ICAgICAgICA6IG1fdmFyaWFibGUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9ibG9jayhudWxs
cHRyKQorICAgICAgICAgICAgLCBtX3ZhbHVlKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgRGVmKFZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayog
YmxvY2ssIE5vZGUqIHZhbHVlKQorICAgICAgICAgICAgOiBtX3ZhcmlhYmxlKHZhcmlhYmxlKQor
ICAgICAgICAgICAgLCBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVl
KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlKiBtX3Zh
cmlhYmxlOworICAgICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgICAgICBOb2RlKiBtX3Zh
bHVlOworICAgIH07CisgICAgCisgICAgVmFyaWFibGUqIG5ld1ZhcmlhYmxlKCk7CisgICAgRGVm
KiBuZXdEZWYoVmFyaWFibGUqLCBCYXNpY0Jsb2NrKiwgTm9kZSopOworICAgIAorICAgIFZhcmlh
YmxlKiB2YXJpYWJsZSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gJm1fdmFyaWFibGVzW2luZGV4
XTsgfQorICAgIAorICAgIC8vIFRoZSBQaGlJbnNlcnRpb25GdW5jdG9yIHRha2VzIGEgVmFyaWFi
bGUgYW5kIGEgQmFzaWNCbG9jayBhbmQgZWl0aGVyIGluc2VydHMgYSBQaGkgYW5kCisgICAgLy8g
cmV0dXJucyB0aGUgTm9kZSBmb3IgdGhhdCBQaGksIG9yIGl0IGRlY2lkZXMgdGhhdCBpdCdzIG5v
dCB3b3J0aCBpdCB0byBpbnNlcnQgYSBQaGkgYXQgdGhhdAorICAgIC8vIGJsb2NrIGJlY2F1c2Ug
b2Ygc29tZSBhZGRpdGlvbmFsIHBydW5pbmcgY29uZGl0aW9uICh0eXBpY2FsbHkgbGl2ZW5lc3Mp
IGFuZCByZXR1cm5zCisgICAgLy8gbnVsbHB0ci4gSWYgYSBub24tbnVsbCBOb2RlKiBpcyByZXR1
cm5lZCwgYSBuZXcgRGVmIGlzIGNyZWF0ZWQsIHNvIHRoYXQKKyAgICAvLyBub25Mb2NhbFJlYWNo
aW5nRGVmKCkgd2lsbCBmaW5kIGl0IGxhdGVyLiBOb3RlIHRoYXQgaXQgaXMgZ2VuZXJhbGx5IGFs
d2F5cyBzb3VuZCB0byBub3QKKyAgICAvLyBwcnVuZSBhbnkgUGhpcyAodGhhdCBpcywgdG8gYWx3
YXlzIGhhdmUgdGhlIGZ1bmN0b3IgaW5zZXJ0IGEgUGhpIGFuZCBuZXZlciByZXR1cm4gbnVsbHB0
cikuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGhpSW5zZXJ0aW9uRnVuY3Rvcj4KKyAgICB2b2lk
IGNvbXB1dGVQaGlzKFBoaUluc2VydGlvbkZ1bmN0b3IgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX2RvbWluYXRvcnMuaXNWYWxp
ZCgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoVmFyaWFibGUmIHZhcmlhYmxlIDogbV92YXJp
YWJsZXMpIHsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9kb21pbmF0b3JzLmZvckFsbEJsb2Nrc0lu
UHJ1bmVkSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9mKAorICAgICAgICAgICAgICAgIHZhcmlh
YmxlLm1fYmxvY2tzV2l0aERlZnMsCisgICAgICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBi
bG9jaykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBmdW5j
dG9yKCZ2YXJpYWJsZSwgYmxvY2spOworICAgICAgICAgICAgICAgICAgICBpZiAoIXBoaU5vZGUp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBCbG9ja0RhdGEmIGRhdGEgPSBtX2RhdGFbYmxvY2td
OworICAgICAgICAgICAgICAgICAgICBEZWYqIHBoaURlZiA9IG1fcGhpcy5hZGQoRGVmKCZ2YXJp
YWJsZSwgYmxvY2ssIHBoaU5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tX3BoaXMu
YXBwZW5kKHBoaURlZik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSB0byBoYXZlIGEgYmxvY2sgdGhhdCBsb29rcyBs
aWtlIHRoaXMgYmVmb3JlIFNTQQorICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJzaW9uOgor
ICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBsYWJlbDoKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgIHByaW50KHgpOworICAgICAgICAgICAgICAgICAgICAv
LyAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgIC8vICAgICB4ID0gNDI7CisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICBnb3RvIGxhYmVsOworICAgICAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgICAgICAvLyBBbmQgaXQgbWF5IGxvb2sgbGlrZSB0aGlzIGFmdGVyIFNTQSBj
b252ZXJzaW9uOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAv
LyBsYWJlbDoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIHgxOiBQaGkoKQorICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgLi4uCisgICAgICAgICAgICAgICAgICAgIC8vICAgICBVcHNpbG9u
KDQyLCBeeDEpCisgICAgICAgICAgICAgICAgICAgIC8vICAgICBnb3RvIGxhYmVsOworICAgICAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdl
IHdpbGwgd2FudCB0byBpbnNlcnQgYSBQaGkgaW4gdGhpcyBibG9jaywgYW5kIHRoZSBibG9jawor
ICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGFscmVhZHkgaGF2ZSBhIERlZiBmb3IgdGhlIHZh
cmlhYmxlLiBXaGVuIHRoaXMgaGFwcGVucywgd2UgZG9uJ3Qgd2FudAorICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgUGhpIHRvIG92ZXJyaWRlIHRoZSBvcmlnaW5hbCBEZWYsIHNpbmNlIHRoZSBQ
aGkgaXMgYXQgdGhlIHRvcCwgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIERl
ZiBpbiB0aGUgbV9kZWZzIHRhYmxlIHdvdWxkIGhhdmUgYmVlbiBhdCB0aGUgYm90dG9tLCBhbmQg
d2Ugd2FudAorICAgICAgICAgICAgICAgICAgICAvLyBtX2RlZnMgdG8gdGVsbCB1cyBhYm91dCBk
ZWZzIGF0IHRhaWwuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAg
IC8vIFNvLCB3ZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgSGFzaE1hcDo6YWRkKCkgZG9lcyBub3Ro
aW5nIGlmIHRoZSBrZXkgd2FzCisgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgcHJlc2Vu
dC4KKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tX2RlZnMuYWRkKCZ2YXJpYWJsZSwgcGhpRGVm
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGNvbnN0
IFZlY3RvcjxEZWYqPiYgcGhpc0ZvckJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YVtibG9ja10ubV9waGlzOworICAgIH0KKyAgICAKKyAgICAvLyBJ
Z25vcmVzIGRlZnMgd2l0aGluIHRoZSBnaXZlbiBibG9jazsgaXQgYXNzdW1lcyB0aGF0IHlvdSd2
ZSB0YWtlbiBjYXJlIG9mIHRob3NlCisgICAgLy8geW91cnNlbGYuCisgICAgRGVmKiBub25Mb2Nh
bFJlYWNoaW5nRGVmKEJhc2ljQmxvY2sqLCBWYXJpYWJsZSopOworICAgIERlZiogcmVhY2hpbmdE
ZWZBdEhlYWQoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiB2YXJpYWJsZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBub25Mb2NhbFJlYWNoaW5nRGVmKGJsb2NrLCB2YXJpYWJsZSk7CisgICAg
fQorICAgIAorICAgIC8vIENvbnNpZGVycyB0aGUgZGVmIHdpdGhpbiB0aGUgZ2l2ZW4gYmxvY2ss
IGJ1dCBvbmx5IHdvcmtzIGF0IHRoZSB0YWlsIG9mIHRoZSBibG9jay4KKyAgICBEZWYqIHJlYWNo
aW5nRGVmQXRUYWlsKEJhc2ljQmxvY2sqLCBWYXJpYWJsZSopOworICAgIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBTZWdtZW50ZWRWZWN0
b3I8VmFyaWFibGU+IG1fdmFyaWFibGVzOworICAgIEJhZzxEZWY+IG1fZGVmczsKKyAgICAKKyAg
ICBCYWc8RGVmPiBtX3BoaXM7CisgICAgCisgICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAg
IEhhc2hNYXA8VmFyaWFibGUqLCBEZWYqPiBtX2RlZnM7CisgICAgICAgIFZlY3RvcjxEZWYqPiBt
X3BoaXM7CisgICAgfTsKKyAgICAgICAgICAgIAorICAgIEJsb2NrTWFwPEJsb2NrRGF0YT4gbV9k
YXRhOworICAgIAorICAgIEdyYXBoJiBtX2dyYXBoOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTU0FD
YWxjdWxhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252
ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwxNyArMzIsMTkgQEAKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRG
R0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiREZHU1NB
Q2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAogY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVibGljIFBoYXNlIHsKICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgZHVtcEdy
YXBoID0gZmFsc2U7CiAgICAgCiBwdWJsaWM6CiAgICAgU1NBQ29udmVyc2lvblBoYXNlKEdyYXBo
JiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgIlNTQSBjb252ZXJzaW9uIikKKyAgICAg
ICAgLCBtX2NhbGN1bGF0b3IoZ3JhcGgpCiAgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgp
CiAgICAgICAgICwgbV9jaGFuZ2VkKGZhbHNlKQogICAgIHsKQEAgLTUyLDI5NyArNTQsMjU0IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09
IFRocmVhZGVkQ1BTKTsKICAgICAgICAgCi0gICAgICAgIGlmIChkdW1wR3JhcGgpIHsKLSAgICAg
ICAgICAgIGRhdGFMb2coIkdyYXBoIGR1bXAgYXQgdG9wIG9mIFNTQSBjb252ZXJzaW9uOlxuIik7
CisgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsKKyAgICAgICAgbV9ncmFwaC5t
X2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAg
ICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBTU0Eg
dHJhbnNmb3JtYXRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAg
ICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgZm9yIGV2
ZXJ5IHJvb3QgVmFyaWFibGVBY2Nlc3NEYXRhLgorICAgICAgICBmb3IgKFZhcmlhYmxlQWNjZXNz
RGF0YSYgdmFyaWFibGUgOiBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhKSB7CisgICAgICAg
ICAgICBpZiAoIXZhcmlhYmxlLmlzUm9vdCgpIHx8IHZhcmlhYmxlLmlzQ2FwdHVyZWQoKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9jYWxjdWxhdG9yLm5ld1ZhcmlhYmxl
KCk7CisgICAgICAgICAgICBBU1NFUlQoc3NhVmFyaWFibGUtPmluZGV4KCkgPT0gbV92YXJpYWJs
ZUZvclNTQUluZGV4LnNpemUoKSk7CisgICAgICAgICAgICBtX3ZhcmlhYmxlRm9yU1NBSW5kZXgu
YXBwZW5kKCZ2YXJpYWJsZSk7CisgICAgICAgICAgICBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUu
YWRkKCZ2YXJpYWJsZSwgc3NhVmFyaWFibGUpOworICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICAvLyBFbGltaW5hdGUgYWxsIGR1cGxpY2F0ZSBvciBzZWxmLXBvaW50aW5nIFBoaSBlZGdlcy4g
VGhpcyBtZWFucyB0aGF0Ci0gICAgICAgIC8vIHdlIHRyYW5zZm9ybToKLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gcDogUGhpKEBuMSwgQG4yLCBAbjMpCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGlu
dG86Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIHA6IFBoaShAeCkKLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gaWYgZWFjaCBAbmkgaW4ge0BuMSwgQG4yLCBAbjN9IGlzIGVpdGhlciBlcXVhbCB0byBA
cCB0byBpcyBlcXVhbAotICAgICAgICAvLyB0byBAeCwgZm9yIGV4YWN0bHkgb25lIG90aGVyIEB4
LiBBZGRpdGlvbmFsbHksIHRyaXZpYWwgUGhpcyAoaS5lLgotICAgICAgICAvLyBwOiBQaGkoQHgp
KSBhcmUgZm9yd2FyZGVkLCBzbyB0aGF0IGlmIGhhdmUgYW4gZWRnZSB0byBzdWNoIEBwLCB3ZQot
ICAgICAgICAvLyByZXBsYWNlIGl0IHdpdGggQHguIFRoaXMgbG9vcCBkb2VzIHRoaXMgZm9yIFBo
aXMgb25seTsgbGF0ZXIgd2UgZG8KLSAgICAgICAgLy8gc3VjaCBmb3J3YXJkaW5nIGZvciBQaGkg
cmVmZXJlbmNlcyBmb3VuZCBpbiBvdGhlciBub2Rlcy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8g
U2VlIEF5Y29jayBhbmQgSG9yc3Bvb2wgaW4gQ0MnMDAgZm9yIGEgYmV0dGVyIGRlc2NyaXB0aW9u
IG9mIHdoYXQKLSAgICAgICAgLy8gd2UncmUgZG9pbmcgaGVyZS4KLSAgICAgICAgZG8gewotICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlz
LnNpemUoKTsgcGhpSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpID0g
YmxvY2stPnBoaXNbcGhpSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICBpZiAocGhpLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGZvcndhcmRQaGlDaGlsZHJlbihwaGkpOwot
ICAgICAgICAgICAgICAgICAgICBkZWR1cGxpY2F0ZUNoaWxkcmVuKHBoaSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwotICAg
ICAgICAKLSAgICAgICAgLy8gRm9yIGVhY2ggYmFzaWMgYmxvY2ssIGZvciBlYWNoIGxvY2FsIGxp
dmUgYXQgdGhlIGhlYWQgb2YgdGhhdCBibG9jaywKLSAgICAgICAgLy8gZmlndXJlIG91dCB3aGF0
IG5vZGUgd2Ugc2hvdWxkIGJlIHJlZmVycmluZyB0byBpbnN0ZWFkIG9mIHRoYXQgbG9jYWwuCi0g
ICAgICAgIC8vIElmIGl0IHR1cm5zIG91dCB0byBiZSBhIG5vbi10cml2aWFsIFBoaSwgbWFrZSBz
dXJlIHRoYXQgd2UgY3JlYXRlIGFuCi0gICAgICAgIC8vIFNTQSBQaGkgYW5kIFVwc2lsb25zIGlu
IHByZWRlY2Vzc29yIGJsb2Nrcy4gV2UgcmV1c2UKLSAgICAgICAgLy8gQmFzaWNCbG9jazo6dmFy
aWFibGVzQXRIZWFkIGZvciB0cmFja2luZyB3aGljaCBub2RlcyB0byByZWZlciB0by4KLSAgICAg
ICAgT3BlcmFuZHM8Ym9vbD4gbm9uVHJpdmlhbFBoaXMoT3BlcmFuZHNMaWtlLCBtX2dyYXBoLmJs
b2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAvLyBGaW5kIGFsbCBTZXRMb2NhbHMg
YW5kIGNyZWF0ZSBEZWZzIGZvciB0aGVtLiBXZSBoYW5kbGUgU2V0QXJndW1lbnQgYnkgY3JlYXRp
bmcgYQorICAgICAgICAvLyBHZXRBcmd1bWVudC4KICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
ICAgICBub25Ucml2aWFsUGhpcy5maWxsKGZhbHNlKTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5waGlzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIE5vZGUq
IHBoaSA9IGJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgICAgIGlmICghcGhpLT5jaGlsZHJl
bi5qdXN0T25lQ2hpbGQoKSkKLSAgICAgICAgICAgICAgICAgICAgbm9uVHJpdmlhbFBoaXMub3Bl
cmFuZChwaGktPmxvY2FsKCkpID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT52YXJp
YWJsZXNBdEhlYWRbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBNdXN0IHByb2Nlc3MgdGhlIGJsb2NrIGluIGZvcndhcmQgZGlyZWN0
aW9uIGJlY2F1c2Ugd2Ugd2FudCB0byBzZWUgdGhlIGxhc3QKKyAgICAgICAgICAgIC8vIGFzc2ln
bm1lbnQgZm9yIGV2ZXJ5IGxvY2FsLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBTZXRMb2NhbCAmJiBub2RlLT5vcCgpICE9IFNldEFyZ3Vt
ZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
QXQgYmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgZm9yIG9wZXJhbmQgciIsIGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpLCAiIGhhdmUgbm9kZSAiLCBub2RlLCAiXG4iKTsK
LSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUG9pc29u
IHRoaXMgZW50cnkgaW4gdmFyaWFibGVzQXRIZWFkIGJlY2F1c2Ugd2UgZG9uJ3QKLSAgICAgICAg
ICAgICAgICAgICAgLy8gd2FudCBhbnlvbmUgdG8gdHJ5IHRvIHJlZmVyIHRvIGl0LCBpZiB0aGUg
dmFyaWFibGUgaXMKLSAgICAgICAgICAgICAgICAgICAgLy8gY2FwdHVyZWQuCi0gICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSAwOworICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBQaGk6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAgICAgICBjYXNlIEdldExvY2Fs
OgotICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgotICAgICAgICAgICAgICAgICAg
ICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZTsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAg
ICAgICAgICAgY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRB
cmd1bWVudCk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBHZXRBcmd1bWVudCwgbm9kZS0+b3JpZ2luLCBPcEluZm8obm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCkpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbCBpc0ZsdXNoZWQgPSAhIShub2RlLT5m
bGFncygpICYgTm9kZUlzRmx1c2hlZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9u
VHJpdmlhbFBoaXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoZWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgT25l
IGNoaWxkOiAiLCBlZGdlLCAiLCAiLCBSYXdQb2ludGVyKGVkZ2Uubm9kZSgpKSwgIlxuIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWRnZS5ub2RlKCk7IC8vIEl0J3Mgc29tZXRo
aW5nIGZyb20gYSBkaWZmZXJlbnQgYmFzaWMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgTm9uLXRyaXZpYWwuXG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBub24tdHJpdmlhbCBQaGkuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVGbGFncyByZXN1bHQgPSByZXN1bHRGb3IoZm9y
bWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVzZUtpbmRG
b3IoZm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoMCwgU3BlY05vbmUsIFBoaSwg
Tm9kZU9yaWdpbigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnNlcnRlZCBuZXcgbm9kZTog
Iiwgbm9kZSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdz
KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSA9PSByZXN1bHQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+
cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3Nvci0+YXBwZW5kTm9uVGVybWluYWwoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBVcHNpbG9u
LCBwcmVkZWNlc3Nvci0+bGFzdCgpLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhub2RlKSwgRWRnZShwcmVkZWNlc3Nvci0+dmFyaWFibGVzQXRUYWlsW2ld
LCB1c2VLaW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZsdXNoZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLiBGb3IgbXVsdGlwbGUgcmVhc29u
cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBSZWFzb24gIzE6IElmIHRoZSBsb2NhbCBpcyBmbHVzaGVkIHRoZW4gd2UgZG9uJ3Qg
bmVlZCB0byBib3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGEgTW92
SGludCBzaW5jZSBldmVyeSBwYXRoIHRvIHRoaXMgcG9pbnQgaW4gdGhlIGNvZGUgd2lsbAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZmx1c2hlZCB0aGUgYnl0ZWNvZGUgdmFy
aWFibGUgdXNpbmcgYSBTZXRMb2NhbCBhbmQgaGVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgQXZhaWxhYmlsaXR5OjpmbHVzaGVkQXQoKSB3aWxsIGFncmVlLCBhbmQgdGhh
dCB3aWxsIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VmZmljaWVudCBmb3Ig
ZmlndXJpbmcgb3V0IGhvdyB0byByZWNvdmVyIHRoZSB2YXJpYWJsZSdzIHZhbHVlLgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJl
YXNvbiAjMjogSWYgd2UgaGFkIGluc2VydGVkIGEgTW92SGludCBhbmQgdGhlIFBoaSBmdW5jdGlv
biBoYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkaWVkIChiZWNhdXNlIHRoZSBv
bmx5IHVzZXIgb2YgdGhlIHZhbHVlIHdhcyB0aGUgImZsdXNoIiAtIGkuZS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzb21lIGFzeW5jaHJvbm91cyBydW50aW1lIHRoaW5neSkgdGhl
biB0aGUgTW92SGludCB3b3VsZCB0dXJuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aW50byBhIFpvbWJpZUhpbnQsIHdoaWNoIHdvdWxkIGZvb2wgdXMgaW50byB0aGlua2luZyB0aGF0
IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlIGlzIGRlYWQuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUmVhc29uICMzOiBJZiB3ZSBoYWQgaW5zZXJ0ZWQgYSBNb3ZIaW50IHRoZW4gZXZlbiBpZiB0
aGUgUGhpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RheWVkIGFsaXZlLCB3ZSB3
b3VsZCBzdGlsbCBlbmQgdXAgZ2VuZXJhdGluZyBpbmVmZmljaWVudCBjb2RlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd291bGQgYmUgdGVsbGluZyB0aGUgT1NSIGV4
aXQgY29tcGlsZXIgdG8gdXNlIHNvbWUgU1NBCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdmFsdWUgZm9yIHRoZSBieXRlY29kZSB2YXJpYWJsZSByYXRoZXIgdGhhbiBqdXN0IHRlbGxp
bmcgaXQgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSB3YXMg
YWxyZWFkeSBvbiB0aGUgc3RhY2suCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50LCBOb2Rl
T3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJs
ZS0+bG9jYWwoKS5vZmZzZXQoKSksIG5vZGUtPmRlZmF1bHRFZGdlKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRb
aV0gPSBub2RlOworICAgICAgICAgICAgICAgIG1fY2FsY3VsYXRvci5uZXdEZWYoCisgICAgICAg
ICAgICAgICAgICAgIG1fc3NhVmFyaWFibGVGb3JWYXJpYWJsZS5nZXQodmFyaWFibGUpLCBibG9j
aywgY2hpbGROb2RlKTsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKKyAg
ICAgICAgLy8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRvIGJlIGluc2VydGVkLiBUaGlzIGNyZWF0
ZXMgdGhlIFBoaSdzIGJ1dCBkb2Vzbid0IGluc2VydCB0aGVtCisgICAgICAgIC8vIHlldC4gV2Ug
d2lsbCBsYXRlciBrbm93IHdoZXJlIHRvIGluc2VydCB0aGVtIGJlY2F1c2UgU1NBQ2FsY3VsYXRv
ciBpcyBzdWNoIGEgYnJvLgorICAgICAgICBtX2NhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAg
ICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSwgQmFzaWNC
bG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxlLT5pbmRleCgp
XTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBQcnVuZSBieSBsaXZlbmVz
cy4gVGhpcyBkb2Vzbid0IGJ1eSB1cyBtdWNoIG90aGVyIHRoYW4gY29tcGlsZSB0aW1lcy4KKyAg
ICAgICAgICAgICAgICBpZiAoIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5v
ZGUoCisgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksIFBoaSwgTm9k
ZU9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJs
ZS0+Zmx1c2hGb3JtYXQoKTsKKyAgICAgICAgICAgICAgICBOb2RlRmxhZ3MgcmVzdWx0ID0gcmVz
dWx0Rm9yKGZvcm1hdCk7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhyZXN1
bHQpOworICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAgZGF0YUxvZygiVmFy
aWFibGVzIGF0IGhlYWQgYWZ0ZXIgU1NBIFBoaSBpbnNlcnRpb246XG4iKTsKLSAgICAgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJ
bmRleC0tOykgewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgKmJs
b2NrLCAiOiAiLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCAiXG4iKTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGRhdGFMb2coIkNvbXB1dGVkIFBoaXMsIGFib3V0IHRvIHRyYW5zZm9ybSB0
aGUgZ3JhcGguXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCJHcmFwaDpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAg
ICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZ3M6XG4iKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlRm9yU1NBSW5k
ZXguc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIGksICI6ICIs
IFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAobV9ncmFwaCwgbV92YXJpYWJsZUZvclNTQUluZGV4W2ld
KSwgIlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgZGF0YUxv
ZygiU1NBIGNhbGN1bGF0b3I6ICIsIG1fY2FsY3VsYXRvciwgIlxuIik7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdmFyaWFibGVzQXRIZWFkIGluIGVhY2gg
YmxvY2sgcmVmZXJzIHRvIGVpdGhlcjoKKyAgICAgICAgLy8gRG8gdGhlIGJ1bGsgb2YgdGhlIFNT
QSBjb252ZXJzaW9uLiBGb3IgZWFjaCBibG9jaywgdGhpcyB0cmFja3MgdGhlIG9wZXJhbmQtPk5v
ZGUKKyAgICAgICAgLy8gbWFwcGluZyBiYXNlZCBvbiBhIGNvbWJpbmF0aW9uIG9mIHdoYXQgdGhl
IFNTQUNhbGN1bGF0b3IgdGVsbHMgdXMsIGFuZCB1cyB3YWxraW5nIG92ZXIKKyAgICAgICAgLy8g
dGhlIGJsb2NrIGluIGZvcndhcmQgb3JkZXIuIFdlIHVzZSBvdXIgb3duIGRhdGEgc3RydWN0dXJl
LCB2YWx1ZUZvck9wZXJhbmQsIGZvcgorICAgICAgICAvLyBkZXRlcm1pbmluZyB0aGUgbG9jYWwg
bWFwcGluZywgYnV0IHdlIHJlbHkgb24gU1NBQ2FsY3VsYXRvciBmb3IgdGhlIG5vbi1sb2NhbCBt
YXBwaW5nLgogICAgICAgICAvLwotICAgICAgICAvLyAxKSBBIG5ldyBTU0EgcGhpIGluIHRoZSBj
dXJyZW50IGJsb2NrLgotICAgICAgICAvLyAyKSBBIFNldEFyZ3VtZW50LCB3aGljaCB3aWxsIHNv
b24gZ2V0IGNvbnZlcnRlZCBpbnRvIGEgR2V0QXJndW1lbnQuCi0gICAgICAgIC8vIDMpIEFuIG9s
ZCBDUFMgcGhpIGluIGEgZGlmZmVyZW50IGJsb2NrLgorICAgICAgICAvLyBUaGlzIGRvZXMgdGhy
ZWUgdGhpbmdzIGF0IG9uY2U6CiAgICAgICAgIC8vCi0gICAgICAgIC8vIFdlIGRvbid0IGhhdmUg
dG8gZG8gYW55dGhpbmcgZm9yICgxKSBhbmQgKDIpLCBidXQgd2UgZG8gbmVlZCB0bwotICAgICAg
ICAvLyBkbyBhIHJlcGxhY2VtZW50IGZvciAoMykuCi0gICAgICAgIAotICAgICAgICAvLyBDbGVh
ciBhbGwgcmVwbGFjZW1lbnRzLCBzaW5jZSBvdGhlciBwaGFzZXMgbWF5IGhhdmUgdXNlZCB0aGVt
LgotICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoZHVtcEdyYXBoKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBqdXN0IGJlZm9y
ZSBpZGVudGlmeWluZyByZXBsYWNlbWVudHM6XG4iKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZHVt
cCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGb3IgYWxsIG9mIHRoZSBvbGQg
Q1BTIFBoaXMsIGZpZ3VyZSBvdXQgd2hhdCB0aGV5IGNvcnJlc3BvbmQgdG8gaW4gU1NBLgotICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBk
YXRhTG9nKCJEZWFsaW5nIHdpdGggYmxvY2sgIyIsIGJsb2NrSW5kZXgsICJcbiIpOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5k
ZXgtLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1twaGlJbmRl
eF07Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAgICAgICJDb25zaWRlcmluZyAiLCBwaGksICIg
KCIsIFJhd1BvaW50ZXIocGhpKSwgIiksIGZvciByIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBoaS0+bG9jYWwoKSwgIiwgYW5kIGl0cyByZXBsYWNlbWVudCBpbiAiLCAqYmxvY2ssICIsICIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQo
cGhpLT5sb2NhbCgpKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IEFTU0VSVChwaGkgIT0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHBoaS0+bG9jYWwo
KSkpOwotICAgICAgICAgICAgICAgIHBoaS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm9wZXJhbmQocGhpLT5sb2NhbCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgLy8gTm93IG1ha2Ugc3VyZSB0aGF0IGFsbCB2YXJpYWJsZXNBdEhl
YWQgaW4gZWFjaCBibG9jayBwb2ludHMgdG8gdGhlCi0gICAgICAgIC8vIGNhbm9uaWNhbCBTU0Eg
dmFsdWUuIFByaW9yIHRvIHRoaXMsIHZhcmlhYmxlc0F0SGVhZFtsb2NhbF0gbWF5IHBvaW50IHRv
Ci0gICAgICAgIC8vIGFuIG9sZCBDUFMgUGhpIGluIGEgZGlmZmVyZW50IGJsb2NrLgotICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PnZhcmlhYmxlc0F0SGVhZFtpXTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHdoaWxlIChub2RlLT5yZXBs
YWNlbWVudCkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZSAhPSBub2RlLT5yZXBs
YWNlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5yZXBsYWNlbWVudDsK
KyAgICAgICAgLy8gLSBJbnNlcnRzIHRoZSBQaGlzIGluIGFsbCBvZiB0aGUgcGxhY2VzIHdoZXJl
IHRoZXkgbmVlZCB0byBnby4gV2UndmUgYWxyZWFkeSBjcmVhdGVkCisgICAgICAgIC8vICAgdGhl
bSBhbmQgdGhleSBhcmUgYWNjb3VudGVkIGZvciBpbiB0aGUgU1NBQ2FsY3VsYXRvcidzIGRhdGEg
c3RydWN0dXJlcywgYnV0IHdlCisgICAgICAgIC8vICAgaGF2ZW4ndCBpbnNlcnRlZCB0aGVtIHll
dCwgbW9zdGx5IGJlY2F1c2Ugd2Ugd2FudCB0byBpbnNlcnQgYWxsIG9mIGEgYmxvY2sncyBQaGlz
IGluCisgICAgICAgIC8vICAgb25lIGdvIHRvIGFtb3J0aXplIHRoZSBjb3N0IG9mIG5vZGUgaW5z
ZXJ0aW9uLgorICAgICAgICAvLworICAgICAgICAvLyAtIENyZWF0ZSBhbmQgaW5zZXJ0IFVwc2ls
b25zLgorICAgICAgICAvLworICAgICAgICAvLyAtIENvbnZlcnQgYWxsIG9mIHRoZSBwcmVleGlz
dGluZyBTU0Egbm9kZXMgKG90aGVyIHRoYW4gdGhlIG9sZCBDUFMgUGhpIG5vZGVzKSBpbnRvIFNT
QQorICAgICAgICAvLyAgIGZvcm0gYnkgcmVwbGFjaW5nIGFzIGZvbGxvd3M6CisgICAgICAgIC8v
CisgICAgICAgIC8vICAgLSBHZXRMb2NhbCBvdmVyIGNhcHR1cmVkIHZhcmlhYmxlcyBsb3NlIHRo
ZWlyIHBoaXMuCisgICAgICAgIC8vCisgICAgICAgIC8vICAgLSBHZXRMb2NhbCBvdmVyIHVuY2Fw
dHVyZWQgdmFyaWFibGVzIGRpZSBhbmQgZ2V0IHJlcGxhY2VkIHdpdGggcmVmZXJlbmNlcyB0byB0
aGUgbm9kZQorICAgICAgICAvLyAgICAgc3BlY2lmaWVkIGJ5IHZhbHVlRm9yT3BlcmFuZC4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gICAtIFNldExvY2FsIGdldHMgTm9kZU11c3RHZW5lcmF0ZSBp
ZiBpdCdzIGZsdXNoZWQsIG9yIHR1cm5zIGludG8gYSBDaGVjayBvdGhlcndpc2UuCisgICAgICAg
IC8vCisgICAgICAgIC8vICAgLSBGbHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYW5kIHR1cm5zIGlu
dG8gYSBQaGFudG9tLgorICAgICAgICAvLworICAgICAgICAvLyAgIC0gUGhhbnRvbUxvY2FsIGJl
Y29tZXMgUGhhbnRvbSwgYW5kIGl0cyBjaGlsZCBpcyB3aGF0ZXZlciBpcyBzcGVjaWZpZWQgYnkK
KyAgICAgICAgLy8gICAgIHZhbHVlRm9yT3BlcmFuZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
ICAtIFNldEFyZ3VtZW50IGlzIHJlbW92ZWQgdW5sZXNzIGl0J3MgYSBjYXB0dXJlZCB2YXJpYWJs
ZS4gTm90ZSB0aGF0IEdldEFyZ3VtZW50IG5vZGVzCisgICAgICAgIC8vICAgICBoYXZlIGFscmVh
ZHkgYmVlbiBpbnNlcnRlZC4KKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IHZhbHVlRm9yT3BlcmFu
ZChPcGVyYW5kc0xpa2UsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCk7CisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkg
eworICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIENQUyB3aWxsIGNsYWltIHRoYXQgdGhlIHJvb3QgYmxvY2sgaGFzIGFsbCBh
cmd1bWVudHMgbGl2ZS4gQnV0IHdlIGhhdmUgYWxyZWFkeSBkb25lCisgICAgICAgICAgICAvLyB0
aGUgZmlyc3Qgc3RlcCBvZiBTU0EgY29udmVyc2lvbjogYXJndW1lbnQgbG9jYWxzIGFyZSBubyBs
b25nZXIgbGl2ZSBhdCBoZWFkOworICAgICAgICAgICAgLy8gaW5zdGVhZCB3ZSBoYXZlIEdldEFy
Z3VtZW50IG5vZGVzIGZvciBleHRyYWN0aW5nIHRoZSB2YWx1ZXMgb2YgYXJndW1lbnRzLiBTbywg
d2UKKyAgICAgICAgICAgIC8vIHNraXAgdGhlIGF0LWhlYWQgYXZhaWxhYmxlIHZhbHVlIGNhbGN1
bGF0aW9uIGZvciB0aGUgcm9vdCBibG9jay4KKyAgICAgICAgICAgIGlmIChibG9jayAhPSBtX2dy
YXBoLmJsb2NrKDApKSB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHZhbHVlRm9y
T3BlcmFuZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZUF0
SGVhZCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbm9kZUF0SGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IG5vZGVBdEhlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmlu
ZyBsaXZlIHZhcmlhYmxlICIsIFZhcmlhYmxlQWNjZXNzRGF0YUR1bXAobV9ncmFwaCwgdmFyaWFi
bGUpLCAiIGF0IGhlYWQgb2YgYmxvY2sgIiwgKmJsb2NrLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FW
YXJpYWJsZSA9IG1fc3NhVmFyaWFibGVGb3JWYXJpYWJsZS5nZXQodmFyaWFibGUpOworICAgICAg
ICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IG1fY2FsY3VsYXRvci5yZWFj
aGluZ0RlZkF0SGVhZChibG9jaywgc3NhVmFyaWFibGUpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWRlZikgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHJlcXVpcmVk
IHRvIGluc2VydCBhIFBoaSwgdGhlbiB3ZSB3b24ndCBoYXZlIGEgcmVhY2hpbmcgZGVmCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhdCBoZWFkLgorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBkZWYtPnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5yZXBsYWNlbWVudCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyB3aWxsIG9jY3VyIHdoZW4gYSBTZXRMb2NhbCBoYWQgYSBHZXRMb2NhbCBhcyBp
dHMgc291cmNlLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldExvY2FsIHdvdWxk
IGdldCByZXBsYWNlZCB3aXRoIGFuIGFjdHVhbCBTU0EgdmFsdWUgYnkgdGhlIHRpbWUgd2UgZ2V0
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBoZXJlLiBOb3RlIHRoYXQgdGhlIFNTQSB2YWx1
ZSB3aXRoIHdoaWNoIHRoZSBHZXRMb2NhbCBnb3QgcmVwbGFjZWQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHdvdWxkIG5vdCBpbiB0dXJuIGhhdmUgYSByZXBsYWNlbWVudC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5yZXBsYWNlbWVudDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghbm9kZS0+cmVwbGFjZW1lbnQpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiTWFwcGluZzogciIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5k
ZXgoaSksICIgLT4gIiwgbm9kZSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9y
T3BlcmFuZFtpXSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSBub2RlOwogICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAgZGF0YUxvZygi
VmFyaWFibGVzIGF0IGhlYWQgYWZ0ZXIgY29udmVyZ2VuY2U6XG4iKTsKLSAgICAgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRl
eC0tOykgewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgKmJsb2Nr
LCAiOiAiLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCAiXG4iKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQ29udmVydCBvcGVyYXRpb25zIG92ZXIgbG9j
YWxzIGludG8gb3BlcmF0aW9ucyBvdmVyIFNTQSBub2Rlcy4KLSAgICAgICAgLy8gLSBHZXRMb2Nh
bCBvdmVyIGNhcHR1cmVkIHZhcmlhYmxlcyBsb3NlIHRoZWlyIHBoaXMuCi0gICAgICAgIC8vIC0g
R2V0TG9jYWwgb3ZlciB1bmNhcHR1cmVkIHZhcmlhYmxlcyBkaWUgYW5kIGdldCByZXBsYWNlZCB3
aXRoIHJlZmVyZW5jZXMKLSAgICAgICAgLy8gICB0byB0aGUgbm9kZSBzcGVjaWZpZWQgYnkgdmFy
aWFibGVzQXRIZWFkLgotICAgICAgICAvLyAtIFNldExvY2FsIGdldHMgTm9kZU11c3RHZW5lcmF0
ZSBpZiBpdCdzIGZsdXNoZWQsIG9yIHR1cm5zIGludG8gYQotICAgICAgICAvLyAgIENoZWNrIG90
aGVyd2lzZS4KLSAgICAgICAgLy8gLSBGbHVzaCBsb3NlcyBpdHMgY2hpbGRyZW4gYW5kIHR1cm5z
IGludG8gYSBQaGFudG9tLgotICAgICAgICAvLyAtIFBoYW50b21Mb2NhbCBiZWNvbWVzIFBoYW50
b20sIGFuZCBpdHMgY2hpbGQgaXMgd2hhdGV2ZXIgaXMgc3BlY2lmaWVkCi0gICAgICAgIC8vICAg
YnkgdmFyaWFibGVzQXRIZWFkLgotICAgICAgICAvLyAtIFNldEFyZ3VtZW50IHR1cm5zIGludG8g
R2V0QXJndW1lbnQgdW5sZXNzIGl0J3MgYSBjYXB0dXJlZCB2YXJpYWJsZS4KLSAgICAgICAgLy8g
LSBVcHNpbG9ucyBnZXQgdGhlaXIgY2hpbGRyZW4gZml4ZWQgdG8gcmVmZXIgdG8gdGhlIHRydWUg
dmFsdWUgb2YgdGhhdCBsb2NhbAotICAgICAgICAvLyAgIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2Nr
LiBQcmlvciB0byB0aGlzIGxvb3AsIFVwc2lsb25zIHdpbGwgcmVmZXIgdG8KLSAgICAgICAgLy8g
ICB2YXJpYWJsZUF0VGFpbFtvcGVyYW5kXSwgd2hpY2ggbWF5IGJlIGFueSBvZiBGbHVzaCwgUGhh
bnRvbUxvY2FsLCBHZXRMb2NhbCwKLSAgICAgICAgLy8gICBTZXRMb2NhbCwgU2V0QXJndW1lbnQs
IG9yIFBoaS4gV2UgYWNjb21wbGlzaCB0aGlzIGJ5IHNldHRpbmcgdGhlCi0gICAgICAgIC8vICAg
cmVwbGFjZW1lbnQgcG9pbnRlcnMgb2YgYWxsIG9mIHRob3NlIG5vZGVzIHRvIHJlZmVyIHRvIGVp
dGhlcgotICAgICAgICAvLyAgIHZhcmlhYmxlc0F0SGVhZFtvcGVyYW5kXSwgb3IgdGhlIGNoaWxk
IG9mIHRoZSBTZXRMb2NhbC4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAo
IWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRl
eC0tOykgewotICAgICAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+cmVwbGFjZW1l
bnQgPQotICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQo
YmxvY2stPnBoaXNbcGhpSW5kZXhdLT5sb2NhbCgpKTsKKyAgICAgICAgICAgIC8vIEluc2VydCBQ
aGlzIGJ5IGFza2luZyB0aGUgY2FsY3VsYXRvciB3aGF0IHBoaXMgdGhlcmUgYXJlIGluIHRoaXMg
YmxvY2suIEFsc28gdXBkYXRlCisgICAgICAgICAgICAvLyB2YWx1ZUZvck9wZXJhbmQgd2l0aCB0
aG9zZSBQaGlzLiBGb3IgUGhpcyBhc3NvY2lhdGVkIHdpdGggdmFyaWFibGVzIHRoYXQgYXJlIG5v
dAorICAgICAgICAgICAgLy8gZmx1c2hlZCwgd2UgYWxzbyBpbnNlcnQgYSBNb3ZIaW50LgorICAg
ICAgICAgICAgc2l6ZV90IHBoaUluc2VydGlvblBvaW50ID0gMDsKKyAgICAgICAgICAgIGZvciAo
U1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJs
b2NrKSkgeworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBt
X3ZhcmlhYmxlRm9yU1NBSW5kZXhbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IGlmIHRoZSBsb2NhbCBp
cyBtZWFudCB0byBiZSBmbHVzaGVkIGhlcmUuCisgICAgICAgICAgICAgICAgYm9vbCBpc0ZsdXNo
ZWQgPSAhISgKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKS0+ZmxhZ3MoKSAmIE5vZGVJc0ZsdXNoZWQpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChwaGlJbnNl
cnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzRmx1c2hlZCkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBEbyBub3RoaW5nLiBGb3IgbXVsdGlwbGUgcmVhc29ucy4KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMTogSWYgdGhlIGxv
Y2FsIGlzIGZsdXNoZWQgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoIGEKKyAgICAg
ICAgICAgICAgICAgICAgLy8gTW92SGludCBzaW5jZSBldmVyeSBwYXRoIHRvIHRoaXMgcG9pbnQg
aW4gdGhlIGNvZGUgd2lsbCBoYXZlIGZsdXNoZWQgdGhlCisgICAgICAgICAgICAgICAgICAgIC8v
IGJ5dGVjb2RlIHZhcmlhYmxlIHVzaW5nIGEgU2V0TG9jYWwgYW5kIGhlbmNlIHRoZSBBdmFpbGFi
aWxpdHk6OmZsdXNoZWRBdCgpCisgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgYWdyZWUsIGFu
ZCB0aGF0IHdpbGwgYmUgc3VmZmljaWVudCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0byByZWNvdmVy
IHRoZQorICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSdzIHZhbHVlLgorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMyOiBJZiB3ZSBoYWQg
aW5zZXJ0ZWQgYSBNb3ZIaW50IGFuZCB0aGUgUGhpIGZ1bmN0aW9uIGhhZCBkaWVkCisgICAgICAg
ICAgICAgICAgICAgIC8vIChiZWNhdXNlIHRoZSBvbmx5IHVzZXIgb2YgdGhlIHZhbHVlIHdhcyB0
aGUgImZsdXNoIiAtIGkuZS4gc29tZQorICAgICAgICAgICAgICAgICAgICAvLyBhc3luY2hyb25v
dXMgcnVudGltZSB0aGluZ3kpIHRoZW4gdGhlIE1vdkhpbnQgd291bGQgdHVybiBpbnRvIGEgWm9t
YmllSGludCwKKyAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd291bGQgZm9vbCB1cyBpbnRv
IHRoaW5raW5nIHRoYXQgdGhlIHZhcmlhYmxlIGlzIGRlYWQuIE5vdGUgdGhhdCB0aGlzCisgICAg
ICAgICAgICAgICAgICAgIC8vIHJlYXNvbiBoYXMgYSBsb3QgdG8gZG8gd2l0aCB0aGUgZmFjdCB0
aGF0IEZsdXNoZXMgZG8gbm90IHR1cm4gaW50bworICAgICAgICAgICAgICAgICAgICAvLyBQaGFu
dG9tcywgYmVjYXVzZSBvdXIgaGFuZGxpbmcgb2YgRmx1c2hlcyBhc3N1bWUgdGhhdCB3ZSAoMSkg
YWx3YXlzIGxlYXZlCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmbHVzaGVkIFNldExvY2Fs
cyBhbG9uZSBhbmQgKDIpIE9TUiBhdmFpbGFiaWxpdHkgYW5hbHlzaXMgYWx3YXlzIHNlZXMKKyAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIGF2YWlsYWJsZSBmbHVzaC4gVGhlIHByZXNlbmNlIG9m
IGEgTW92SGludCBvciBab21iaWVIaW50IHdvdWxkIG1ha2UgdGhlCisgICAgICAgICAgICAgICAg
ICAgIC8vIGZsdXNoIHNlZW0gdW5hdmFpbGFibGUuCisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAvLyBSZWFzb24gIzM6IElmIHdlIGhhZCBpbnNlcnRlZCBhIE1vdkhp
bnQgdGhlbiBldmVuIGlmIHRoZSBQaGkgc3RheWVkIGFsaXZlLAorICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSB3b3VsZCBzdGlsbCBlbmQgdXAgZ2VuZXJhdGluZyBpbmVmZmljaWVudCBjb2RlIHNp
bmNlIHdlIHdvdWxkIGJlIHRlbGxpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIE9TUiBl
eGl0IGNvbXBpbGVyIHRvIHVzZSBzb21lIFNTQSB2YWx1ZSBmb3IgdGhlIGJ5dGVjb2RlIHZhcmlh
YmxlCisgICAgICAgICAgICAgICAgICAgIC8vIHJhdGhlciB0aGFuIGp1c3QgdGVsbGluZyBpdCB0
aGF0IHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBvbiB0aGUgc3RhY2suCisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgTW92
SGludCwgTm9kZU9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlh
YmxlLT5sb2NhbCgpLm9mZnNldCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoIWJsb2NrLT5hdChub2RlSW5kZXgpLT5yZXBsYWNlbWVudCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUHJvY2Vz
c2luZyBub2RlICIsIG5vZGUsICI6XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5k
dW1wKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAiLCBub2RlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5wZXJmb3JtU3Vic3RpdHV0
aW9uKG5vZGUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYg
KHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgISEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVJc0ZsdXNo
ZWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTXVzdEdl
bmVyYXRlKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ2hlY2spOwotICAgICAgICAgICAgICAgICAg
ICBub2RlLT5yZXBsYWNlbWVudCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsgLy8gT25seSBmb3Ig
VXBzaWxvbnMuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
IXZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6IHIi
LCB2YXJpYWJsZS0+bG9jYWwoKSwgIiAtPiAiLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksICJcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDogewotICAgICAg
ICAgICAgICAgICAgICAvLyBJdCBzZWVtcyB0ZW1wdGluZyB0byBqdXN0IGRvIGZvcndhcmRQaGko
R2V0TG9jYWwpLCBleGNlcHQgdGhhdCB3ZQotICAgICAgICAgICAgICAgICAgICAvLyBjb3VsZCBo
YXZlIGNyZWF0ZWQgYSBuZXcgKFNTQSkgUGhpLCBhbmQgdGhlIEdldExvY2FsIGNvdWxkIHN0aWxs
IGJlCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlZmVycmluZyB0byBhbiBvbGQgKENQUykgUGhp
LiBVc2VzIHZhcmlhYmxlc0F0SGVhZCB0byB0ZWxsIHVzIHdoYXQKLSAgICAgICAgICAgICAgICAg
ICAgLy8gdG8gcmVmZXIgdG8uCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJl
c2V0KCk7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUt
PnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJSZXBsYWNpbmcgbm9kZSAiLCBub2RlLCAiIHdpdGggIiwgdmFs
dWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLCAiXG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBGbHVz
aDogewogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOwogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgb25seSBmb3IgVXBzaWxvbnMuIEFuIFVwc2lsb24gd2lsbCBvbmx5IHJl
ZmVyIHRvIGEgRmx1c2ggaWYKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUgd2VyZSBubyBT
ZXRMb2NhbHMgb3IgR2V0TG9jYWxzIGluIHRoZSBibG9jay4KLSAgICAgICAgICAgICAgICAgICAg
bm9kZS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQobm9kZS0+
bG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCkBAIC0zNjAsMTQgKzMxOSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdvdWxkbid0IGhhdmUgYmVlbiBjb21wdXRlZCBi
eSB0aGUgUGhpIHJlZHVjdGlvbiBhbGdvcml0aG0KICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFib3ZlLgogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOwotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSktPmRlZmF1bHRFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBv
bmx5IGZvciBVcHNpbG9ucy4gQW4gVXBzaWxvbiB3aWxsIG9ubHkgcmVmZXIgdG8gYQotICAgICAg
ICAgICAgICAgICAgICAvLyBQaGFudG9tTG9jYWwgaWYgdGhlcmUgd2VyZSBubyBTZXRMb2NhbHMg
b3IgR2V0TG9jYWxzIGluIHRoZSBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVw
bGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIApAQCAtMzc1LDE1ICszMjksNDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJl
ZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldEFyZ3VtZW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0UmVzdWx0KHJlc3VsdEZvcihub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KS0+Zmx1c2hGb3JtYXQoKSkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9Q
aGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
LQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50
OiB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2
YXJpYWJsZS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiByIiwgdmFyaWFibGUt
PmxvY2FsKCksICIgLT4gIiwgbm9kZSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIHZhbHVl
Rm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IG5vZGU7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBXZSB3YW50IHRvIGluc2VydCBVcHNpbG9ucyBqdXN0IGJlZm9yZSB0aGUgZW5kIG9mIHRo
ZSBibG9jay4gT24gdGhlIHN1cmZhY2UgdGhpcworICAgICAgICAgICAgLy8gc2VlbXMgZGFuZ2Vy
b3VzIGJlY2F1c2UgdGhlIFVwc2lsb24gd2lsbCBoYXZlIGEgY2hlY2tpbmcgVXNlS2luZC4gQnV0
LCB3ZSB3aWxsIG5vdAorICAgICAgICAgICAgLy8gYWN0dWFsbHkgYmUgcGVyZm9ybWluZyB0aGUg
Y2hlY2sgYXQgdGhlIHBvaW50IG9mIHRoZSBVcHNpbG9uOyB0aGUgY2hlY2sgd2lsbAorICAgICAg
ICAgICAgLy8gYWxyZWFkeSBoYXZlIGJlZW4gcGVyZm9ybWVkIGF0IHRoZSBwb2ludCB3aGVyZSB0
aGUgb3JpZ2luYWwgU2V0TG9jYWwgd2FzLgorICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNl
cnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAgTm9kZU9yaWdpbiB1
cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBzdWNjZXNzb3JJbmRleCA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IHN1Y2Nlc3Nv
ckluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sg
PSBibG9jay0+c3VjY2Vzc29yKHN1Y2Nlc3NvckluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3Ig
KFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9jYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhz
dWNjZXNzb3JCbG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBo
aURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFi
bGUqIHNzYVZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOworICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3Nz
YVZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9y
bWF0ID0gdmFyaWFibGUtPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAgICAgICAgICAgIFVzZUtp
bmQgdXNlS2luZCA9IHVzZUtpbmRGb3IoZm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1
cHNpbG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHBoaU5vZGUpLCBF
ZGdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VLaW5k
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgLy8gRnJlZSBhbGwgQ1BTIHBoaXMgYW5kIHJlc2V0IHZhcmlhYmxlcyB2ZWN0
b3JzLgpAQCAtNDA0LDczICszOTEsMTkgQEAgcHVibGljOgogICAgICAgICBtX2dyYXBoLm1fYXJn
dW1lbnRzLmNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFNTQTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQogCi1wcml2YXRlOgotICAgIHZvaWQgZm9yd2Fy
ZFBoaUNoaWxkcmVuKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBFZGdlJiBl
ZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7Ci0gICAgICAgICAgICBpZiAoIWVkZ2UpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgfD0gZm9yd2FyZFBo
aUVkZ2UoZWRnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgTm9kZSogZm9yd2FyZFBo
aShOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFBoaTogewotICAgICAgICAgICAg
ICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmp1c3RPbmVDaGlsZCgpOwotICAgICAgICAg
ICAgICAgIGlmICghZWRnZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAg
ICAgICAgICAgICAgbm9kZSA9IGVkZ2Uubm9kZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIGNh
c2UgU2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5pc0NhcHR1cmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotICAg
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAg
ZGF0YUxvZygiR3JhcGggYWZ0ZXIgU1NBIHRyYW5zZm9ybWF0aW9uOlxuIik7CisgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBib29sIGZvcndh
cmRQaGlFZGdlKEVkZ2UmIGVkZ2UpCi0gICAgewotICAgICAgICBOb2RlKiBuZXdOb2RlID0gZm9y
d2FyZFBoaShlZGdlLm5vZGUoKSk7Ci0gICAgICAgIGlmIChuZXdOb2RlID09IGVkZ2Uubm9kZSgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBlZGdlLnNldE5vZGUobmV3Tm9k
ZSk7CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAotICAgIHZvaWQgZGVkdXBs
aWNhdGVDaGlsZHJlbihOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgewotICAgICAgICAgICAgRWRnZSBl
ZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7Ci0gICAgICAgICAgICBpZiAoIWVkZ2UpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoZWRnZSA9PSBub2RlKSB7Ci0g
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShpLS0pOwotICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IEFkamFj
ZW5jeUxpc3Q6OlNpemU7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZHJl
bi5jaGlsZChqKSA9PSBlZGdlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LnJlbW92ZUVkZ2Uoai0tKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
CisKKyAgICBTU0FDYWxjdWxhdG9yIG1fY2FsY3VsYXRvcjsKICAgICBJbnNlcnRpb25TZXQgbV9p
bnNlcnRpb25TZXQ7CisgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSo+IG1fc3NhVmFyaWFibGVGb3JWYXJpYWJsZTsKKyAgICBWZWN0b3I8VmFy
aWFibGVBY2Nlc3NEYXRhKj4gbV92YXJpYWJsZUZvclNTQUluZGV4OwogICAgIGJvb2wgbV9jaGFu
Z2VkOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNvbnZlcnNpb25QaGFzZS5oCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCwxMCAr
MzQsOSBAQCBjbGFzcyBHcmFwaDsKIAogLy8gQ29udmVydCBUaHJlYWRlZENQUyBmb3JtIGludG8g
U1NBIGZvcm0uIFRoaXMgcmVzdWx0cyBpbiBhIGZvcm0gdGhhdCBoYXM6CiAvLwotLy8gLSBSb3Vn
aGx5IG1pbmltYWwgUGhpJ3MuIFdlIHVzZSB0aGUgQXljb2NrICYgSG9yc3Bvb2wgZml4cG9pbnQg
Zm9yCi0vLyAgIGNvbnZlcnRpbmcgdGhlIENQUyBtYXhpbWFsIFBoaXMgaW50byBTU0EgbWluaW1h
bCBQaGlzLCB3aXRoIHRoZSBjYXZlYXQKLS8vICAgdGhhdCBpcnJlZHVjaWJsZSBjb250cm9sIGZs
b3cgbWF5IHJlc3VsdCBpbiBzb21lIG1pc3NlZCBvcHBvcnR1bml0aWVzCi0vLyAgIGZvciBQaGkg
cmVkdWN0aW9uLgorLy8gLSBNaW5pbWFsIFBoaSdzLiBXZSB1c2UgdGhlIHRoZSBDeXRyb24gZXQg
YWwgKFRPUExBUyc5MSkgYWxnb3JpdGhtIGZvcgorLy8gICBQaGkgaW5zZXJ0aW9uLiBNb3N0IG9m
IHRoZSBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQgaW4gU1NBQ2FsY3VsYXRvcgorLy8gICBhbmQg
RG9taW5hdG9ycy4KIC8vCiAvLyAtIE5vIHVzZXMgb2YgR2V0TG9jYWwvU2V0TG9jYWwgZXhjZXB0
IGZvciBjYXB0dXJlZCB2YXJpYWJsZXMgYW5kIGZsdXNoZXMuCiAvLyAgIEFmdGVyIHRoaXMsIGFu
eSByZW1haW5pbmcgU2V0TG9jYWwgbWVhbnMgRmx1c2guIFBoYW50b21Mb2NhbHMgYmVjb21lCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24g
MTczMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAogY2xhc3MgVmFsaWRhdGUgewogcHVibGljOgotICAgIFZhbGlkYXRlKEdyYXBoJiBn
cmFwaCwgR3JhcGhEdW1wTW9kZSBncmFwaER1bXBNb2RlKQorICAgIFZhbGlkYXRlKEdyYXBoJiBn
cmFwaCwgR3JhcGhEdW1wTW9kZSBncmFwaER1bXBNb2RlLCBDU3RyaW5nIGdyYXBoRHVtcEJlZm9y
ZVBoYXNlKQogICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiAgICAgICAgICwgbV9ncmFwaER1bXBN
b2RlKGdyYXBoRHVtcE1vZGUpCisgICAgICAgICwgbV9ncmFwaER1bXBCZWZvcmVQaGFzZShncmFw
aER1bXBCZWZvcmVQaGFzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtMjY2LDYgKzI2Nyw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgR3JhcGhEdW1wTW9k
ZSBtX2dyYXBoRHVtcE1vZGU7CisgICAgQ1N0cmluZyBtX2dyYXBoRHVtcEJlZm9yZVBoYXNlOwog
ICAgIAogICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBtX215UmVmQ291bnRzOwogICAgIEhh
c2hTZXQ8Tm9kZSo+IG1fYWNjZXB0YWJsZU5vZGVzOwpAQCAtNTY0LDE0ICs1NjYsMTkgQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoRHVtcE1vZGUgPT0gRG9udER1bXBHcmFw
aCkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAg
aWYgKCFtX2dyYXBoRHVtcEJlZm9yZVBoYXNlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBkYXRh
TG9nKCJCZWZvcmUgcGhhc2U6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2cobV9ncmFwaER1bXBC
ZWZvcmVQaGFzZSk7CisgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiQXQgdGltZSBvZiBmYWls
dXJlOlxuIik7CiAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgIH0KIH07CiAKLXZvaWQgdmFs
aWRhdGUoR3JhcGgmIGdyYXBoLCBHcmFwaER1bXBNb2RlIGdyYXBoRHVtcE1vZGUpCit2b2lkIHZh
bGlkYXRlKEdyYXBoJiBncmFwaCwgR3JhcGhEdW1wTW9kZSBncmFwaER1bXBNb2RlLCBDU3RyaW5n
IGdyYXBoRHVtcEJlZm9yZVBoYXNlKQogewotICAgIFZhbGlkYXRlIHZhbGlkYXRpb25PYmplY3Qo
Z3JhcGgsIGdyYXBoRHVtcE1vZGUpOworICAgIFZhbGlkYXRlIHZhbGlkYXRpb25PYmplY3QoZ3Jh
cGgsIGdyYXBoRHVtcE1vZGUsIGdyYXBoRHVtcEJlZm9yZVBoYXNlKTsKICAgICB2YWxpZGF0aW9u
T2JqZWN0LnZhbGlkYXRlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmgJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0gR3JhcGhEdW1wTW9kZSB7IERvbnREdW1w
R3JhcGgsIER1bXBHcmFwaCB9OwogCi12b2lkIHZhbGlkYXRlKEdyYXBoJiwgR3JhcGhEdW1wTW9k
ZSA9IER1bXBHcmFwaCk7Cit2b2lkIHZhbGlkYXRlKEdyYXBoJiwgR3JhcGhEdW1wTW9kZSA9IER1
bXBHcmFwaCwgQ1N0cmluZyBncmFwaER1bXBCZWZvcmVQaGFzZSA9IENTdHJpbmcoKSk7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDUsMTIgKzE0NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1f
cHJvbG9ndWUsIHN0YWNrT3ZlcmZsb3cpOwogICAgICAgICBjcmVhdGVQaGlWYXJpYWJsZXMoKTsK
IAotICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGRlcHRoRmlyc3Q7Ci0gICAgICAgIG1fZ3Jh
cGguZ2V0QmxvY2tzSW5QcmVPcmRlcihkZXB0aEZpcnN0KTsKKyAgICAgICAgVmVjdG9yPEJhc2lj
QmxvY2sqPiBwcmVPcmRlciA9IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpOwogCiAgICAgICAg
IGludCBtYXhOdW1iZXJPZkFyZ3VtZW50cyA9IC0xOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGJs
b2NrSW5kZXggPSBkZXB0aEZpcnN0LnNpemUoKTsgYmxvY2tJbmRleC0tOyApIHsKLSAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZGVwdGhGaXJzdFtibG9ja0luZGV4XTsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByZU9yZGVyKSB7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOyApIHsKICAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CkBAIC0yMTEsOSArMjA5LDggQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxh
Y2VtZW50U2l6ZSgpKSk7CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAKLQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGhGaXJzdC5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgIGNvbXBpbGVCbG9jayhkZXB0aEZpcnN0W2ldKTsKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IHByZU9yZGVyKQorICAgICAgICAgICAgY29tcGlsZUJsb2NrKGJsb2NrKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjpkdW1wTExWTUlSKCkpCiAgICAgICAgICAg
ICBkdW1wTW9kdWxlKG1fZnRsU3RhdGUubW9kdWxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCw3
IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgcHJpbnRF
YWNoT1NSRXhpdCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHZhbGlkYXRlR3JhcGgsIGZhbHNlKSBc
CiAgICAgdihib29sLCB2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UsIGZhbHNlKSBcCisgICAgdihi
b29sLCB2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUsIGZhbHNlKSBcCiAgICAgdihib29sLCB2ZXJi
b3NlT1NSLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdmVyYm9zZUZUTE9TUkV4aXQsIGZhbHNlKSBc
CiAgICAgdihib29sLCB2ZXJib3NlQ2FsbExpbmssIGZhbHNlKSBcCkluZGV4OiBTb3VyY2UvV1RG
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24g
MTczMzY2KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAxNC0wOS0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIERGRyBzaG91bGQgaGF2ZSBhIHJldXNhYmxlIFNTQSBidWlsZGVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYzMzEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFVwZGF0ZSB0aGUg
YWxsb2MoKSBtZXRob2QgdG8gdXNlIHZhcmlhZGljIHRlbXBsYXRlcy4gVGhpcyBtYWtlcyBpdCBt
b3JlIG5hdHVyYWwgdG8gdXNlLgorCisgICAgICAgICogd3RmL1NlZ21lbnRlZFZlY3Rvci5oOgor
ICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3I6OmFsbG9jKToKKwogMjAxNC0wOS0wNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSB1cGRhdGVzIHN1Z2dl
c3RlZCBieSBuZXcgdmVyc2lvbiBvZiBYY29kZQpJbmRleDogU291cmNlL1dURi93dGYvU2VnbWVu
dGVkVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2VnbWVudGVkVmVjdG9y
LmgJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9XVEYvd3RmL1NlZ21lbnRlZFZlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsOSArMTU3LDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICAgICAgc2VnbWVudEZvcihtX3NpemUgLSAxKS0+dW5jaGVja2VkQXBwZW5kKHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwogICAgICAgICB9CiAKLSAgICAgICAgVCYgYWxsb2MoKQorICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBUJiBhbGxvYyhBcmdzLi4uIGFy
Z3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZDxUPihUKCkpOworICAgICAgICAgICAg
YXBwZW5kPFQ+KFQoYXJncy4uLikpOwogICAgICAgICAgICAgcmV0dXJuIGxhc3QoKTsKICAgICAg
ICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237802</attachid>
            <date>2014-09-08 12:26:29 -0700</date>
            <delta_ts>2014-09-08 12:31:51 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79019</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMzkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBA
QAorMjAxNC0wOS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhIHJldXNhYmxlIFNTQSBidWlsZGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYzMzEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdlIHdhbnQgdG8gaW1wbGVt
ZW50IHNvcGhpc3RpY2F0ZWQgU1NBIHRyYW5zZm9ybWF0aW9ucyBsaWtlIG9iamVjdCBhbGxvY2F0
aW9uIHNpbmtpbmcKKyAgICAgICAgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzYzMzApLCBidXQgdG8gZG8gdGhhdCwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGRvCisg
ICAgICAgIHVwZGF0ZXMgdG8gU1NBIHRoYXQgcmVxdWlyZSBpbnNlcnRpbmcgbmV3IFBoaSdzLiBU
aGlzIHJlcXVpcmVzIGNhbGN1bGF0aW5nIHdoZXJlIFBoaXMgZ28uCisgICAgICAgIFByZXZpb3Vz
bHksIG91ciBQaGkgY2FsY3VsYXRpb24gd2FzIGJhc2VkIG9uIEF5Y29jayBhbmQgSG9yc3Bvb2wn
cyBhbGdvcml0aG0sIGFuZCBvdXIKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBhbGdv
cml0aG0gb25seSB3b3JrZWQgd2hlbiBkb2luZyBDUFMtPlNTQSBjb252ZXJzaW9uLiBUaGUgY29k
ZQorICAgICAgICBjb3VsZCBub3QgYmUgcmV1c2VkIGZvciBjYXNlcyB3aGVyZSBzb21lIHBoYXNl
IGhhcHBlbnMgdG8ga25vdyB0aGF0IGl0IGludHJvZHVjZWQgYSBmZXcKKyAgICAgICAgZGVmcyBp
biBzb21lIGJsb2NrcyBhbmQgaXQgd2FudHMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgUGhpcyBz
aG91bGQgZ28uIE1vcmVvdmVyLCBldmVuCisgICAgICAgIHRoZSBnZW5lcmFsIGFsZ29yaXRobSBv
ZiBBeWNvY2sgYW5kIEhvcnNwb29sIGlzIG5vdCB3ZWxsIHN1aXRlZCB0byBzdWNoIHRhcmdldHRl
ZCBTU0EKKyAgICAgICAgdXBkYXRlcywgc2luY2UgaXQgcmVxdWlyZXMgZmlyc3QgaW5zZXJ0aW5n
IG1heGltYWwgUGhpcy4gVGhhdCBzY2FsZXMgd2VsbCB3aGVuIHRoZSBQaGlzCisgICAgICAgIHdl
cmUgYWxyZWFkeSB0aGVyZSAobGlrZSBpbiBvdXIgQ1BTIGZvcm0pIGJ1dCBvdGhlcndpc2UgaXQn
cyBxdWl0ZSB1bm5hdHVyYWwgYW5kIG1heSBiZQorICAgICAgICBkaWZmaWN1bHQgdG8gbWFrZSBl
ZmZpY2llbnQuCisgICAgICAgIAorICAgICAgICBUaGUgdXN1YWwgd2F5IG9mIGhhbmRsaW5nIGJv
dGggU1NBIGNvbnZlcnNpb24gYW5kIFNTQSB1cGRhdGUgaXMgdG8gdXNlIEN5dHJvbiBldCBhbCdz
CisgICAgICAgIGFsZ29yaXRobSBiYXNlZCBvbiBkb21pbmFuY2UgZnJvbnRpZXJzLiBGb3IgYSB3
aGlsZSBub3csIEkndmUgYmVlbiB3b3JraW5nIG9uIGNyZWF0aW5nIGEKKyAgICAgICAgQ3l0cm9u
LWJhc2VkIFNTQSBjYWxjdWxhdG9yIHRoYXQgY2FuIGJlIHVzZWQgYm90aCBhcyBhIHJlcGxhY2Vt
ZW50IGZvciBvdXIgY3VycmVudCBTU0EKKyAgICAgICAgY29udmVydGVyIGFuZCBhcyBhIHJldXNh
YmxlIHRvb2wgZm9yIGFueSBwaGFzZSB0aGF0IG5lZWRzIHRvIGRvIFNTQSB1cGRhdGUuIEkgcHJl
dmlvdXNseQorICAgICAgICBvcHRpbWl6ZWQgb3VyIGRvbWluYXRvciBjYWxjdWxhdGlvbiBhbmQg
cmVwcmVzZW50YXRpb24gdG8gdXNlIGRvbWluYXRvciB0cmVlcyBjb21wdXRlZAorICAgICAgICB1
c2luZyBMZW5nYXVlciBhbmQgVGFyamFuJ3MgYWxnb3JpdGhtIC0gbWFpbmx5IHRvIG1ha2UgaXQg
bW9yZSBzY2FsYWJsZSB0byBlbnVtZXJhdGUgb3ZlcgorICAgICAgICB0aGUgc2V0IG9mIGJsb2Nr
cyB0aGF0IGRvbWluYXRlIHlvdSBvciB2aWNlLXZlcnNhLCBhbmQgdGhlbiBJIGltcGxlbWVudGVk
IGEgZG9taW5hbmNlCisgICAgICAgIGZyb250aWVyIGNhbGN1bGF0b3IuIFRoaXMgcGF0Y2ggaW1w
bGVtZW50cyB0aGUgZmluYWwgc3RlcCB0b3dhcmRzIG1ha2luZyBTU0EgdXBkYXRlCisgICAgICAg
IGF2YWlsYWJsZSB0byBhbGwgU1NBIHBoYXNlczogaXQgaW1wbGVtZW50cyBhbiBTU0FDYWxjdWxh
dG9yIHRoYXQgY2FuIHRlbGwgeW91IHdoZXJlIFBoaXMKKyAgICAgICAgZ28gd2hlbiBnaXZlbiBh
biBhcmJpdHJhcnkgc2V0IG9mIERlZnMuIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgYW5kIHRvIGVu
c3VyZSB0aGF0IHdlIGhhdmUKKyAgICAgICAgZ29vZCB0ZXN0IGNvdmVyYWdlIGZvciB0aGlzIFNT
QUNhbGN1bGF0b3IsIHRoaXMgcGF0Y2ggcmVwbGFjZXMgdGhlIG9sZCBBeWNvY2stSG9yc3Bvb2wK
KyAgICAgICAgU1NBIGNvbnZlcnRlciB3aXRoIG9uZSBiYXNlZCBvbiB0aGUgU1NBQ2FsY3VsYXRv
ci4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaGFzIG5vIG9ic2VydmFibGUgaW1wYWN0LiBJdCBk
b2VzIHJlZHVjZSB0aGUgYW1vdW50IG9mIGNvZGUgaW4gU1NBQ29udmVyc2lvblBoYXNlLgorICAg
ICAgICBCdXQgZXZlbiBiZXR0ZXIsIGl0IG1ha2VzIFNTQUNvbnZlcnNpb25QaGFzZSBoYXZlIHNp
Z25pZmljYW50bHkgbGVzcyB0cmlja3kgbG9naWMuIEl0CisgICAgICAgIG1vc3RseSBqdXN0IHJl
bGllcyBvbiBTU0FDYWxjdWxhdG9yIHRvIGRvIHRoZSB0cmlja3kgc3R1ZmYsIGFuZCBTU0FDb252
ZXJzaW9uUGhhc2UgbW9zdGx5CisgICAgICAgIGp1c3QgcmVhc29ucyBhYm91dCB0aGUgd2VpcmRu
ZXNzZXMgdW5pcXVlIHRvIHRoZSBUaHJlYWRlZENQUyBmb3JtIHRoYXQgaXQgc2VlcyBhcyBpbnB1
dC4KKyAgICAgICAgSW4gZmFjdCwgdXNpbmcgdGhlIEN5dHJvbiBldCBhbCBhcHByb2FjaCBtZWFu
cyB0aGF0IHRoZXJlIGlzbid0IHJlYWxseSBhbnkgInNtb2tlIGFuZAorICAgICAgICBtaXJyb3Jz
IiB0cmlja3luZXNzIHJlbGF0ZWQgdG8gU1NBLiBTU0FDYWxjdWxhdG9yJ3Mgb25seSAidHJpY2tz
IiBhcmUgdXNpbmcgdGhlIHBydW5lZAorICAgICAgICBpdGVyYXRlZCBkb21pbmFuY2UgZnJvbnRp
ZXIgdG8gcGxhY2UgUGhpJ3MgYW5kIHVzaW5nIHRoZSBkb20gdHJlZSB0byBmaW5kIHJlYWNoaW5n
IGRlZnMuCisgICAgICAgIFRoZSBjb21wbGV4aXR5IGlzIG1vc2x0eSBjb25maW5lZCB0byBEb21p
bmF0b3JzLCB3aGljaCBjb21wdXRlcyB2YXJpb3VzIGRvbWluYXRvci1yZWxhdGVkCisgICAgICAg
IHByb3BlcnRpZXMgb3ZlciB0aGUgY29udHJvbCBmbG93IGdyYXBoLiBUaGF0IGNsYXNzIGNhbiBi
ZSBkaWZmaWN1bHQgdG8gdW5kZXJzdGFuZCwgYnV0IGF0CisgICAgICAgIGxlYXN0IGl0IGZvbGxv
d3Mgd2VsbC1rbm93biBncmFwaCB0aGVvcnkgd2lzZG9tLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogZGZnL0RGR0FuYWx5c2lzLmg6CisgICAgICAgICogZGZnL0RGR0NTRVBo
YXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHRENFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkRDRVBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdEb21pbmF0b3JzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6aW1tZWRpYXRlRG9taW5hdG9yT2YpOgorICAgICAg
ICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VG
cm9udGllck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJ
blBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZik6CisgICAgICAgICogZGZnL0RGR0dy
YXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmJsb2Nrc0luUHJlT3JkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpibG9ja3NJblBvc3RPcmRlcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldEJsb2Nr
c0luUHJlT3JkZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnZXRCbG9j
a3NJblBvc3RPcmRlcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAg
ICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdOb2RlRmxhZ3MuaDoKKyAgICAgICAgKiBkZmcvREZH
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYXNlOjpiZWdpblBoYXNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQaGFzZTo6ZW5kUGhhc2UpOgorICAgICAgICAqIGRmZy9ERkdQaGFzZS5o
OgorICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGU6OmR1bXApOgorICAgICAgICAoSlNDOjpE
Rkc6OlNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlOjpkdW1wVmVyYm9zZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U1NBQ2FsY3VsYXRvcjo6RGVmOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FD
YWxjdWxhdG9yOjpTU0FDYWxjdWxhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxh
dG9yOjp+U1NBQ2FsY3VsYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6
bmV3VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6Om5ld0RlZik6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6bm9uTG9jYWxSZWFjaGluZ0RlZik6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZBdFRhaWwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OmR1bXApOgorICAgICAgICAqIGRmZy9E
RkdTU0FDYWxjdWxhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlOjppbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGU6OlZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpE
ZWY6OnZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpEZWY6OmJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpEZWY6OnZhbHVlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpEZWY6OkRlZik6CisgICAgICAgIChKU0M6
OkRGRzo6U1NBQ2FsY3VsYXRvcjo6dmFyaWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNh
bGN1bGF0b3I6OmNvbXB1dGVQaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9y
OjpwaGlzRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OnJlYWNo
aW5nRGVmQXRIZWFkKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OlNTQUNvbnZlcnNpb25QaGFz
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2FyZFBoaUNoaWxkcmVuKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmRQaGkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2Fy
ZFBoaUVkZ2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFz
ZTo6ZGVkdXBsaWNhdGVDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5oOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VmFsaWRhdGU6OlZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWxp
ZGF0ZTo6ZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6dmFsaWRh
dGUpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd2Vy
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0wOS0wOCAgU2FhbSBCYXJh
dGkgIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CiAKICAgICAgICAgTWVyZ2UgU3RydWN0dXJlU2hh
cGVzIHRoYXQgc2hhcmUgdGhlIHNhbWUgcHJvdG90eXBlIGNoYWluCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw2ICsyMDEsNyBA
QCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHUHVyZVZhbHVlLmNwcAogICAgIGRmZy9ERkdSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1NTQUNhbGN1bGF0b3Iu
Y3BwCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU1NBTG93
ZXJpbmdQaGFzZS5jcHAKICAgICBkZmcvREZHU2FmZXBvaW50LmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTEsNiArNDUxLDcgQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBQ2FsY3VsYXRvci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNlLmNwcCIg
Lz4KQEAgLTExMDEsNiArMTEwMiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdTU0FDYWxjdWxhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHU1NBQ29udmVyc2lvblBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHU1NBTG93ZXJpbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1N0YWNrTGF5b3V0UGhhc2UuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzQxLDYgKzM0MSw4IEBACiAJCTBGNjY2RUNEMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNl
bmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QzE0REYzRjE2
MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY4MkZCMjE5QkNC
MzY0MDBGQTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY4MkZCMDE5QkNCMzY0MDBGQTNCQUQgLyogREZH
U1NBQ2FsY3VsYXRvci5jcHAgKi87IH07CisJCTBGNjgyRkIzMTlCQ0IzNjQwMEZBM0JBRCAvKiBE
RkdTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjY4MkZCMTE5QkNCMzY0MDBGQTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjlDQzg4
MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY5Q0M4NjE5M0FDNjBBMDA0NTc1OUUgLyog
REZHRnJvemVuVmFsdWUuY3BwICovOyB9OwogCQkwRjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyog
REZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjlDQzg3MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkIxQ0I1MTg1
RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjMxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5jcHAgKi87IH07CkBAIC0yMjYwLDYgKzIyNjIsOCBAQAogCQkwRjY2NkVDQjE4MzZCMzdFMDBE
MDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5o
OyBwYXRoID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRq
YWNlbmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2Vu
Y3lMaXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY4MkZCMDE5QkNCMzY0MDBGQTNC
QUQgLyogREZHU1NBQ2FsY3VsYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdTU0FDYWxjdWxhdG9yLmNwcDsgcGF0aCA9IGRmZy9ERkdTU0FDYWxjdWxhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2ODJGQjExOUJDQjM2NDAwRkEz
QkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU1NBQ2FsY3VsYXRvci5oOyBwYXRoID0gZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlFIC8qIERG
R0Zyb3plblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0Zyb3plblZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdGcm96ZW5WYWx1ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjlDQzg3MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96
ZW5WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGcm96ZW5WYWx1
ZS5oOyBwYXRoID0gZGZnL0RGR0Zyb3plblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsgcGF0aCA9IGZ0bC9G
VExKU0NhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTAxMiw2ICs1MDE2
LDggQEAKIAkJCQk4NkVDOURDMzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQu
aCAqLywKIAkJCQk4Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAgKi8sCiAJCQkJODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUNjQuY3BwICovLAorCQkJCTBGNjgyRkIwMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FD
YWxjdWxhdG9yLmNwcCAqLywKKwkJCQkwRjY4MkZCMTE5QkNCMzY0MDBGQTNCQUQgLyogREZHU1NB
Q2FsY3VsYXRvci5oICovLAogCQkJCUE3RDg5Q0YwMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwICovLAogCQkJCUE3RDg5Q0YxMTdBMEI4Q0MwMDc3M0FEOCAvKiBE
RkdTU0FDb252ZXJzaW9uUGhhc2UuaCAqLywKIAkJCQkwRkMyMENCNzE4NTU2QTM1MDBDOUU5NTQg
LyogREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAgKi8sCkBAIC02NDc4LDYgKzY0ODQsNyBAQAogCQkJ
CTBGQzMxNDEyMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1MEFGM0MxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3RDIzRUUxODkxQjU1NDAwMzFDN0ZBIC8qIFJlZ3Vs
YXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY4MkZCMzE5QkNCMzY0MDBGQTNC
QUQgLyogREZHU1NBQ2FsY3VsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUQxNUVE
OEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERUExOTgz
MkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1
RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MjIxLDYgKzcyMjgsNyBAQAogCQkJCTJBQUNFNjNDMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0Fj
dGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMTcxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NkRFMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY4MkZC
MjE5QkNCMzY0MDBGQTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDMzEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0N0YzOUM0MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlQ29udmVyc2lv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNTEwN0VDMzc2MDA0MjdBNDggLyogRGF0
ZUluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQW5hbHlzaXMuaAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw3
ICszNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZ3JhcGguaW5pdGlhbGl6ZU5vZGVPd25lcnMo
KTsKICAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3Jh
cGgpOwogICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKG1fcHJl
T3JkZXIpOworICAgICAgICBtX3ByZU9yZGVyID0gbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCk7
CiAgICAgICAgIAogICAgICAgICAvLyBGaXJzdCBmaWd1cmUgb3V0IHdoYXQgZ2V0cyBjbG9iYmVy
ZWQgYnkgYmxvY2tzLiBOb2RlIHRoYXQgdGhpcyB1c2VzIHRoZSBwcmVPcmRlciBsaXN0CiAgICAg
ICAgIC8vIGZvciBjb252ZW5pZW5jZSBvbmx5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTAgKzEx
Niw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IFNTQSkgewotICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZp
cnN0OwotICAgICAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKGRlcHRoRmlyc3Qp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICAgICAgZml4dXBCbG9jayhkZXB0aEZpcnN0W2ldKTsKKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIo
KSkKKyAgICAgICAgICAgICAgICBmaXh1cEJsb2NrKGJsb2NrKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BT
KTsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21p
bmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21p
bmF0b3JzLmgJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBmcm9tID09IHRvIHx8IHN0cmljdGx5RG9taW5hdGVzKGZyb20sIHRv
KTsKICAgICB9CiAgICAgCisgICAgQmFzaWNCbG9jayogaW1tZWRpYXRlRG9taW5hdG9yT2YoQmFz
aWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2Nr
XS5pZG9tUGFyZW50OworICAgIH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgogICAgIHZvaWQgZm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAogICAgIHsKQEAgLTExOSwxNCArMTI0LDI4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9m
KAogICAgICAgICBjb25zdCBCbG9ja0xpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CiAgICAgeworICAgICAgICBmb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJv
bnRpZXJPZigKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sq
IGJsb2NrKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAg
ICAvLyBUaGlzIGlzIGEgY2xvc2UgcmVsYXRpdmUgb2YgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERv
bWluYW5jZUZyb250aWVyT2YoKSwgd2hpY2ggYWxsb3dzIHRoZQorICAgIC8vIGdpdmVuIGZ1bmN0
b3IgdG8gcmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIHRoYXQgd2UgZG9uJ3Qgd2lzaCB0byBjb25z
aWRlciB0aGUgZ2l2ZW4gYmxvY2suCisgICAgLy8gVXNlZnVsIGZvciBjb21wdXRpbmcgcHJ1bmVk
IFNTQSBmb3JtLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JB
bGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgY29u
c3QgQmxvY2tMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKICAgICAg
ICAgQmxvY2tTZXQgc2V0OwogICAgICAgICBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNl
RnJvbnRpZXJPZkltcGwoCiAgICAgICAgICAgICBmcm9tLAogICAgICAgICAgICAgWyZdIChCYXNp
Y0Jsb2NrKiBibG9jaykgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgaWYgKCFzZXQuYWRkKGJs
b2NrKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IGZ1bmN0b3IoYmxvY2spOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgIHJldHVybiBmdW5jdG9yKGJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
NzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIzLDEwICs0MjMsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgY29udGV4dCA9ICZteUNv
bnRleHQ7CiAgICAgCi0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkYXRhTG9nKCJERkcgZm9yICIs
IENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpLCAiOlxu
Iik7Ci0gICAgZGF0YUxvZygiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAi
OyBGb3JtOiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9u
U3RhdGUsICI7IFJlZiBjb3VudCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAiXG4iKTsKLSAg
ICBkYXRhTG9nKCJcbiIpOworICAgIG91dC5wcmludCgiXG4iKTsKKyAgICBvdXQucHJpbnQoIkRG
RyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJ
VCksICI6XG4iKTsKKyAgICBvdXQucHJpbnQoIiAgRml4cG9pbnQgc3RhdGU6ICIsIG1fZml4cG9p
bnRTdGF0ZSwgIjsgRm9ybTogIiwgbV9mb3JtLCAiOyBVbmlmaWNhdGlvbiBzdGF0ZTogIiwgbV91
bmlmaWNhdGlvblN0YXRlLCAiOyBSZWYgY291bnQgc3RhdGU6ICIsIG1fcmVmQ291bnRTdGF0ZSwg
IlxuIik7CisgICAgb3V0LnByaW50KCJcbiIpOwogICAgIAogICAgIE5vZGUqIGxhc3ROb2RlID0g
MDsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNpemUoKTsgKytiKSB7CkBA
IC00OTUsMTIgKzQ5NSwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1
bXBDCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgVmFsdWVzOiAiLCBub2RlTWFwRHVtcChibG9j
ay0+c3NhLT52YWx1ZXNBdFRhaWwsIGNvbnRleHQpLCAiXG4iKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9IH0KLSAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgb3V0LnByaW50
KCJcbiIpOwogICAgIH0KICAgICAKICAgICBpZiAoIW15Q29udGV4dC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbXlDb250ZXh0LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgZGF0YUxvZygi
XG4iKTsKKyAgICAgICAgbXlDb250ZXh0LmR1bXAob3V0KTsKKyAgICAgICAgb3V0LnByaW50KCJc
biIpOwogICAgIH0KIH0KIApAQCAtNjI2LDggKzYyNiw5IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1
dGVHZXRMb2NhbChCYXNpY0Jsb2MKICAgICB9CiB9CiAKLXZvaWQgR3JhcGg6OmdldEJsb2Nrc0lu
UHJlT3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQorQmxvY2tMaXN0IEdyYXBoOjpi
bG9ja3NJblByZU9yZGVyKCkKIHsKKyAgICBCbG9ja0xpc3QgcmVzdWx0OwogICAgIEJsb2NrV29y
a2xpc3Qgd29ya2xpc3Q7CiAgICAgd29ya2xpc3QucHVzaChibG9jaygwKSk7CiAgICAgd2hpbGUg
KEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKQEAgLTYzNSwxMCArNjM2LDEy
IEBAIHZvaWQgR3JhcGg6OmdldEJsb2Nrc0luUHJlT3JkZXIoVmVjdG9yPEIKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKICAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2goYmxvY2stPnN1Y2Nlc3NvcihpKSk7CiAgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXZvaWQgR3JhcGg6OmdldEJsb2Nrc0luUG9zdE9yZGVyKFZlY3RvcjxCYXNp
Y0Jsb2NrKj4mIHJlc3VsdCkKK0Jsb2NrTGlzdCBHcmFwaDo6YmxvY2tzSW5Qb3N0T3JkZXIoKQog
eworICAgIEJsb2NrTGlzdCByZXN1bHQ7CiAgICAgUG9zdE9yZGVyQmxvY2tXb3JrbGlzdCB3b3Jr
bGlzdDsKICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsKICAgICB3aGlsZSAoQmxvY2tXaXRo
T3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CkBAIC02NTMsNiArNjU2LDcgQEAgdm9pZCBH
cmFwaDo6Z2V0QmxvY2tzSW5Qb3N0T3JkZXIoVmVjdG9yPAogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBHcmFwaDo6Y2xl
YXJSZXBsYWNlbWVudHMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NzYsOCArNjc2LDggQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXJSZXBsYWNlbWVudHMoKTsKICAgICB2b2lkIGluaXRpYWxpemVOb2RlT3duZXJzKCk7CiAgICAg
Ci0gICAgdm9pZCBnZXRCbG9ja3NJblByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3Vs
dCk7Ci0gICAgdm9pZCBnZXRCbG9ja3NJblBvc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiBy
ZXN1bHQpOworICAgIEJsb2NrTGlzdCBibG9ja3NJblByZU9yZGVyKCk7CisgICAgQmxvY2tMaXN0
IGJsb2Nrc0luUG9zdE9yZGVyKCk7CiAgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBj
b21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNp
b24gMTczMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsMTYgKzE1MCw5IEBAIHB1YmxpYzoKICAgICAgICAgLy8K
ICAgICAgICAgLy8gRm9yIG1heGltdW0gcHJvZml0LCB3ZSB3YWxrIGJsb2NrcyBpbiBERlMgb3Jk
ZXIgdG8gZW5zdXJlIHRoYXQgd2UgZ2VuZXJhbGx5CiAgICAgICAgIC8vIHRlbmQgdG8gaG9pc3Qg
ZG9taW5hdG9ycyBiZWZvcmUgZG9taW5hdGVlcy4KLSAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sq
PiBkZXB0aEZpcnN0OwotICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIoZGVwdGhG
aXJzdCk7CiAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3BTdGFjazsKICAg
ICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoCi0gICAgICAgICAgICB1
bnNpZ25lZCBkZXB0aEZpcnN0SW5kZXggPSAwOwotICAgICAgICAgICAgZGVwdGhGaXJzdEluZGV4
IDwgZGVwdGhGaXJzdC5zaXplKCk7Ci0gICAgICAgICAgICArK2RlcHRoRmlyc3RJbmRleCkgewot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3Rb
ZGVwdGhGaXJzdEluZGV4XTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCog
bG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKICAg
ICAgICAgICAgIGlmICghbG9vcCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTczMzM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2luZyBjb3B5
KQpAQCAtNjgsNyArNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNk
ZWZpbmUgTm9kZVJlbGV2YW50VG9PU1IgICAgICAgICAgICAgICAweDEwMDAwCiAKLSNkZWZpbmUg
Tm9kZUlzRmx1c2hlZCAgICAgICAgICAgICAgICAgICAweDIwMDAwIC8vIFVzZWQgYnkgR3JhcGg6
OmNvbXB1dGVJc0ZsdXNoZWQoKSwgd2lsbCB0ZWxsIHlvdSB3aGljaCBsb2NhbCBub2RlcyBhcmUg
YmFja3dhcmRzLXJlYWNoYWJsZSBmcm9tIGEgRmx1c2guCisjZGVmaW5lIE5vZGVJc0ZsdXNoZWQg
ICAgICAgICAgICAgICAgICAgMHgyMDAwMCAvLyBDb21wdXRlZCBieSBDUFNSZXRocmVhZGluZ1Bo
YXNlLCB3aWxsIHRlbGwgeW91IHdoaWNoIGxvY2FsIG5vZGVzIGFyZSBiYWNrd2FyZHMtcmVhY2hh
YmxlIGZyb20gYSBGbHVzaC4KIAogI2RlZmluZSBOb2RlTWlzY0ZsYWcxICAgICAgICAgICAgICAg
ICAgIDB4NDAwMDAKICNkZWZpbmUgTm9kZU1pc2NGbGFnMiAgICAgICAgICAgICAgICAgICAweDgw
MDAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAkocmV2aXNpb24g
MTczMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDggKzM1LDE1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogdm9pZCBQaGFzZTo6YmVnaW5QaGFzZSgpCiB7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VWYWxpZGF0aW9uRmFpbHVyZSgpKSB7CisgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsK
KyAgICAgICAgbV9ncmFwaC5kdW1wKG91dCk7CisgICAgICAgIG1fZ3JhcGhEdW1wQmVmb3JlUGhh
c2UgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgfQorICAgIAogICAgIGlmICghc2hvdWxkRHVtcEdy
YXBoQXRFYWNoUGhhc2UoKSkKICAgICAgICAgcmV0dXJuOworICAgIAogICAgIGRhdGFMb2coIkJl
Z2lubmluZyBERkcgcGhhc2UgIiwgbV9uYW1lLCAiLlxuIik7CiAgICAgZGF0YUxvZygiQmVmb3Jl
ICIsIG1fbmFtZSwgIjpcbiIpOwogICAgIG1fZ3JhcGguZHVtcCgpOwpAQCAtNDYsNyArNTMsNyBA
QCB2b2lkIFBoYXNlOjplbmRQaGFzZSgpCiB7CiAgICAgaWYgKCFPcHRpb25zOjp2YWxpZGF0ZUdy
YXBoQXRFYWNoUGhhc2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHZhbGlkYXRlKG1fZ3JhcGgs
IER1bXBHcmFwaCk7CisgICAgdmFsaWRhdGUobV9ncmFwaCwgRHVtcEdyYXBoLCBtX2dyYXBoRHVt
cEJlZm9yZVBoYXNlKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2
Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gQ2FsbCB0aGVzZSBob29rcyB3aGVuIHN0YXJ0aW5nIGFu
ZCBmaW5pc2hpbmcuCiAgICAgdm9pZCBiZWdpblBoYXNlKCk7CiAgICAgdm9pZCBlbmRQaGFzZSgp
OworICAgIAorICAgIENTdHJpbmcgbV9ncmFwaER1bXBCZWZvcmVQaGFzZTsKIH07CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFBoYXNlVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NTQUNhbGN1bGF0b3IuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInZh
ciIsIG1faW5kZXgpOworfQorCit2b2lkIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlOjpkdW1wVmVy
Ym9zZShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXAob3V0KTsKKyAgICBpZiAo
IW1fYmxvY2tzV2l0aERlZnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5wcmludCgiKGRlZnM6
ICIpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2Jsb2Nrc1dpdGhEZWZzKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAqYmxvY2spOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICB9Cit9CisKK3ZvaWQgU1NB
Q2FsY3VsYXRvcjo6RGVmOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJkZWYoIiwgKm1fdmFyaWFibGUsICIsICIsICptX2Jsb2NrLCAiLCAiLCBtX3ZhbHVl
LCAiKSIpOworfQorCitTU0FDYWxjdWxhdG9yOjpTU0FDYWxjdWxhdG9yKEdyYXBoJiBncmFwaCkK
KyAgICA6IG1fZGF0YShncmFwaCkKKyAgICAsIG1fZ3JhcGgoZ3JhcGgpCit7Cit9CisKK1NTQUNh
bGN1bGF0b3I6On5TU0FDYWxjdWxhdG9yKCkKK3sKK30KKworU1NBQ2FsY3VsYXRvcjo6VmFyaWFi
bGUqIFNTQUNhbGN1bGF0b3I6Om5ld1ZhcmlhYmxlKCkKK3sKKyAgICByZXR1cm4gJm1fdmFyaWFi
bGVzLmFsbG9jKFZhcmlhYmxlKG1fdmFyaWFibGVzLnNpemUoKSkpOworfQorCitTU0FDYWxjdWxh
dG9yOjpEZWYqIFNTQUNhbGN1bGF0b3I6Om5ld0RlZihWYXJpYWJsZSogdmFyaWFibGUsIEJhc2lj
QmxvY2sqIGJsb2NrLCBOb2RlKiB2YWx1ZSkKK3sKKyAgICBEZWYqIGRlZiA9IG1fZGVmcy5hZGQo
RGVmKHZhcmlhYmxlLCBibG9jaywgdmFsdWUpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fZGF0YVti
bG9ja10ubV9kZWZzLmFkZCh2YXJpYWJsZSwgZGVmKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgIHZhcmlhYmxlLT5tX2Jsb2Nrc1dpdGhEZWZzLmFwcGVuZChibG9jayk7Cisg
ICAgZWxzZQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZGVmOworICAgIHJldHVy
biBkZWY7Cit9CisKK1NTQUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3VsYXRvcjo6bm9uTG9jYWxS
ZWFjaGluZ0RlZihCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQoreworICAg
IHJldHVybiByZWFjaGluZ0RlZkF0VGFpbChtX2dyYXBoLm1fZG9taW5hdG9ycy5pbW1lZGlhdGVE
b21pbmF0b3JPZihibG9jayksIHZhcmlhYmxlKTsKK30KKworU1NBQ2FsY3VsYXRvcjo6RGVmKiBT
U0FDYWxjdWxhdG9yOjpyZWFjaGluZ0RlZkF0VGFpbChCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFi
bGUqIHZhcmlhYmxlKQoreworICAgIGZvciAoOyBibG9jazsgYmxvY2sgPSBtX2dyYXBoLm1fZG9t
aW5hdG9ycy5pbW1lZGlhdGVEb21pbmF0b3JPZihibG9jaykpIHsKKyAgICAgICAgaWYgKERlZiog
ZGVmID0gbV9kYXRhW2Jsb2NrXS5tX2RlZnMuZ2V0KHZhcmlhYmxlKSkKKyAgICAgICAgICAgIHJl
dHVybiBkZWY7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFNTQUNhbGN1
bGF0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIjxW
YXJpYWJsZXM6IFsiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIG91dC5wcmlu
dChjb21tYSk7CisgICAgICAgIG1fdmFyaWFibGVzW2ldLmR1bXBWZXJib3NlKG91dCk7CisgICAg
fQorICAgIG91dC5wcmludCgiXSwgRGVmczogWyIpOworICAgIGNvbW1hID0gQ29tbWFQcmludGVy
KCk7CisgICAgZm9yIChEZWYqIGRlZiA6IGNvbnN0X2Nhc3Q8U1NBQ2FsY3VsYXRvcio+KHRoaXMp
LT5tX2RlZnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKmRlZik7CisgICAgb3V0LnByaW50
KCJdLCBQaGlzOiBbIik7CisgICAgY29tbWEgPSBDb21tYVByaW50ZXIoKTsKKyAgICBmb3IgKERl
ZiogZGVmIDogY29uc3RfY2FzdDxTU0FDYWxjdWxhdG9yKj4odGhpcyktPm1fcGhpcykKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAqZGVmKTsKKyAgICBvdXQucHJpbnQoIl0sIEJsb2NrIGRhdGE6
IFsiKTsKKyAgICBjb21tYSA9IENvbW1hUHJpbnRlcigpOworICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJ
bmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJ
bmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIG91dC5wcmludChjb21tYSwgKmJsb2NrLCAiPT4oIik7CisgICAgICAgIG91
dC5wcmludCgiRGVmczogeyIpOworICAgICAgICBDb21tYVByaW50ZXIgaW5uZXJDb21tYTsKKyAg
ICAgICAgZm9yIChhdXRvIGVudHJ5IDogbV9kYXRhW2Jsb2NrXS5tX2RlZnMpCisgICAgICAgICAg
ICBvdXQucHJpbnQoaW5uZXJDb21tYSwgKmVudHJ5LmtleSwgIi0+IiwgKmVudHJ5LnZhbHVlKTsK
KyAgICAgICAgb3V0LnByaW50KCJ9LCBQaGlzOiB7Iik7CisgICAgICAgIGlubmVyQ29tbWEgPSBD
b21tYVByaW50ZXIoKTsKKyAgICAgICAgZm9yIChEZWYqIGRlZiA6IG1fZGF0YVtibG9ja10ubV9w
aGlzKQorICAgICAgICAgICAgb3V0LnByaW50KGlubmVyQ29tbWEsICpkZWYpOworICAgICAgICBv
dXQucHJpbnQoIn0pIik7CisgICAgfQorICAgIG91dC5wcmludCgiXT4iKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTU0FDYWxjdWxhdG9yX2gKKyNkZWZpbmUg
REZHU1NBQ2FsY3VsYXRvcl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKKy8vIFNTQUNhbGN1bGF0b3IgcHJvdmlkZXMgYSByZXVzYWJsZSB0
b29sIGZvciB1c2luZyB0aGUgQ3l0cm9uLCBGZXJyYW50ZSwgUm9zZW4sIFdlZ21hbiwgYW5kCisv
LyBaYWRlY2sgIkVmZmljaWVudGx5IENvbXB1dGluZyBTdGF0aWMgU2luZ2xlIEFzc2lnbm1lbnQg
Rm9ybSBhbmQgdGhlIENvbnRyb2wgRGVwZW5kZW5jZSBHcmFwaCIKKy8vIChUT1BMQVMnOTEpIGFs
Z29yaXRobSBmb3IgY29tcHV0aW5nIFNTQS4gU1NBQ2FsY3VsYXRvciBkb2Vzbid0IG1hZ2ljYWxs
eSBkbyBldmVyeXRoaW5nIGZvciB5b3UKKy8vIGJ1dCBpdCBtYWludGFpbnMgdGhlIG1ham9yIGRh
dGEgc3RydWN0dXJlcyBhbmQgaGFuZGxlcyBtb3N0IG9mIHRoZSBub24tbG9jYWwgcmVhc29uaW5n
LiBIZXJlJ3MKKy8vIHRoZSB3b3JrZmxvdyBvZiB1c2luZyBTU0FDYWxjdWxhdG9yIHRvIGV4ZWN1
dGUgdGhpcyBhbGdvcml0aG06CisvLworLy8gMCkgQ3JlYXRlIGEgZnJlc2ggU1NBQ2FsY3VsYXRv
ciBpbnN0YW5jZS4gWW91IHdpbGwgbmVlZCB0aGlzIGluc3RhbmNlIG9ubHkgZm9yIGFzIGxvbmcg
YXMKKy8vICAgIHlvdSdyZSBub3QgeWV0IGRvbmUgY29tcHV0aW5nIFNTQS4KKy8vCisvLyAxKSBD
cmVhdGUgYW4gU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgZm9yIGV2ZXJ5IHZhcmlhYmxlIHRoYXQg
eW91IHdhbnQgdG8gZG8gUGhpIGluc2VydGlvbgorLy8gICAgb24uIFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlOjppbmRleCgpIGlzIGEgZGVuc2UgaW5kZXhpbmcgb2YgdGhlIFZhcmlhYmxlcyB0aGF0
IHlvdQorLy8gICAgY3JlYXRlZCwgc28geW91IGNhbiBlYXNpbHkgdXNlIGEgVmVjdG9yIHRvIG1h
cCB0aGUgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGVzIHRvIHlvdXIKKy8vICAgIHZhcmlhYmxlcy4K
Ky8vCisvLyAyKSBDcmVhdGUgYSBTU0FDYWxjdWxhdG9yOjpEZWYgZm9yIGV2ZXJ5IGFzc2lnbm1l
bnQgdG8gdGhvc2UgdmFyaWFibGVzLiBBIERlZiBrbm93cyBhYm91dCB0aGUKKy8vICAgIHZhcmlh
YmxlLCB0aGUgYmxvY2ssIGFuZCB0aGUgREZHOjpOb2RlKiB0aGF0IGhhcyB0aGUgdmFsdWUgYmVp
bmcgcHV0IGludG8gdGhlIHZhcmlhYmxlLgorLy8gICAgTm90ZSB0aGF0IGNyZWF0aW5nIGEgRGVm
IGluIGJsb2NrIEIgZm9yIHZhcmlhYmxlIFYgaWYgYmxvY2sgQiBhbHJlYWR5IGhhcyBhIGRlZiBm
b3IgdmFyaWFibGUKKy8vICAgIFYgd2lsbCBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIERlZidzIERG
Rzo6Tm9kZSogdmFsdWUuIFRoaXMgZW5hYmxlcyB5b3UgdG8gY3JlYXRlIERlZnMgYnkKKy8vICAg
IHByb2Nlc3NpbmcgYmFzaWMgYmxvY2tzIGluIGZvcndhcmQgb3JkZXIuIElmIGEgYmxvY2sgaGFz
IG11bHRpcGxlIERlZnMgb2YgYSB2YXJpYWJsZSwgdGhpcworLy8gICAgImp1c3Qgd29ya3MiIGJl
Y2F1c2UgZWFjaCBibG9jayB3aWxsIHRoZW4gcmVtZW1iZXIgdGhlIGxhc3QgRGVmIG9mIGVhY2gg
dmFyaWFibGUuCisvLworLy8gMykgQ2FsbCBTU0FDYWxjdWxhdG9yOjpjb21wdXRlUGhpcygpLiBU
aGlzIHRha2VzIGEgZnVuY3RvciB0aGF0IHdpbGwgY3JlYXRlIHRoZSBQaGkgbm9kZXMuIFRoZQor
Ly8gICAgZnVuY3RvciByZXR1cm5zIGVpdGhlciB0aGUgUGhpIG5vZGUgaXQgY3JlYXRlZCwgb3Ig
bnVsbHB0ciwgaWYgaXQgY2hvb3NlcyB0byBwcnVuZS4gKEFzIGFuCisvLyAgICBhc2lkZSwgaXQn
cyBhbHdheXMgc291bmQgbm90IHRvIHBydW5lLCBhbmQgdGhlIHNhZmVzdCByZWFzb24gZm9yIHBy
dW5pbmcgaXMgbGl2ZW5lc3MuKSBUaGUKKy8vICAgIGNvbXB1dGVQaGlzKCkgY29kZSB3aWxsIHJl
Y29yZCB0aGUgY3JlYXRlZCBQaGkgbm9kZXMgYXMgRGVmcywgYW5kIGl0IHdpbGwgc2VwYXJhdGVs
eSByZWNvcmQKKy8vICAgIHRoZSBsaXN0IG9mIFBoaXMgaW5zZXJ0ZWQgYXQgZWFjaCBibG9jay4g
SXQncyBPSyBmb3IgdGhlIGZ1bmN0b3IgeW91IHBhc3MgaGVyZSB0byBtb2RpZnkgdGhlCisvLyAg
ICBERkc6OkdyYXBoIG9uIHRoZSBmbHksIGJ1dCB0aGUgZWFzaWVzdCB3YXkgdG8gd3JpdGUgdGhp
cyBpcyB0byBqdXN0IGNyZWF0ZSB0aGUgUGhpIG5vZGVzIGJ5CisvLyAgICBkb2luZyBHcmFwaDo6
YWRkTm9kZSgpIGFuZCByZXR1cm4gdGhlbS4gSXQncyB0aGVuIGJlc3QgdG8gaW5zZXJ0IGFsbCBQ
aGkgbm9kZXMgZm9yIGEgYmxvY2sKKy8vICAgIGluIGJ1bGsgYXMgcGFydCBvZiB0aGUgcGFzcyB5
b3UgZG8gYmVsb3csIGluIHN0ZXAgKDQpLgorLy8KKy8vIDQpIE1vZGlmeSB0aGUgZ3JhcGggdG8g
Y3JlYXRlIHRoZSBTU0EgZGF0YSBmbG93LiBGb3IgZWFjaCBibG9jaywgdGhpcyBzaG91bGQ6Cisv
LworLy8gICAgNC4wKSBDb21wdXRlIHRoZSBzZXQgb2YgcmVhY2hpbmcgZGVmcyAoYWthIGF2YWls
YWJsZSB2YWx1ZXMpIGZvciBlYWNoIHZhcmlhYmxlIGJ5IGNhbGxpbmcKKy8vICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZBdEhlYWQoKSBmb3IgZWFjaCB2YXJpYWJsZS4gUmVjb3Jk
IHRoaXMgaW4gYSBsb2NhbCB0YWJsZSB0aGF0CisvLyAgICAgICAgIHdpbGwgYmUgaW5jcmVtZW50
YWxseSB1cGRhdGVkIGFzIHlvdSBwcm9jZWVkIHRocm91Z2ggdGhlIGJsb2NrIGluIGZvcndhcmQg
b3JkZXIgaW4gdGhlCisvLyAgICAgICAgIG5leHQgc3RlcHM6CisvLworLy8gICAgICAgICBGSVhN
RTogSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGNvbXB1dGUgcmVhY2hpbmcgZGVmcyBmb3IgYWxsIGxp
dmUgdmFyaWFibGVzIGluIG9uZSBnbywgdG8KKy8vICAgICAgICAgYXZvaWQgZG9pbmcgcmVwZWF0
ZWQgZG9tIHRyZWUgdHJhdmVyc2Fscy4KKy8vICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNjYxMAorLy8KKy8vICAgIDQuMSkgSW5zZXJ0IGFsbCBvZiB0
aGUgUGhpIG5vZGVzIGZvciB0aGUgYmxvY2sgYnkgdXNpbmcgU1NBQ2FsY3VsYXRvcjo6cGhpc0Zv
ckJsb2NrKCksIGFuZAorLy8gICAgICAgICByZWNvcmQgdGhvc2UgUGhpIG5vZGVzIGFzIGJlaW5n
IGF2YWlsYWJsZSB2YWx1ZXMuCisvLworLy8gICAgNC4yKSBQcm9jZXNzIHRoZSBibG9jayBpbiBm
b3J3YXJkIG9yZGVyLiBGb3IgZWFjaCBsb2FkIGZyb20gYSB2YXJpYWJsZSwgcmVwbGFjZSBpdCB3
aXRoIHRoZQorLy8gICAgICAgICBhdmFpbGFibGUgU1NBIHZhbHVlIGZvciB0aGF0IHZhcmlhYmxl
LiBGb3IgZWFjaCBzdG9yZSwgZGVsZXRlIGl0IGFuZCByZWNvcmQgdGhlIHN0b3JlZAorLy8gICAg
ICAgICB2YWx1ZSBhcyBiZWluZyBhdmFpbGFibGUuCisvLworLy8gICAgICAgICBOb3RlIHRoYXQg
eW91IGhhdmUgdHdvIG9wdGlvbnMgb2YgaG93IHRvIHJlcGxhY2UgbG9hZHMgd2l0aCBTU0EgdmFs
dWVzLiBZb3UgY2FuIHJlcGxhY2UKKy8vICAgICAgICAgdGhlIGxvYWQgd2l0aCBhbiBJZGVudGl0
eSBub2RlOyB0aGlzIHdpbGwgZW5kIHVwIHdvcmtpbmcgZmFpcmx5IG5hdHVyYWxseSBzbyBsb25n
IGFzCisvLyAgICAgICAgIHlvdSBydW4gR0NTRSBhZnRlciB5b3VyIHBoYXNlLiBPciwgeW91IGNh
biByZXBsYWNlIGFsbCB1c2VzIG9mIHRoZSBsb2FkIHdpdGggdGhlIFNTQQorLy8gICAgICAgICB2
YWx1ZSB5b3Vyc2VsZiAodXNpbmcgdGhlIEdyYXBoOjpwZXJmb3JtU3Vic3RpdHV0aW9uKCkgaWRp
b20pLCBidXQgdGhhdCByZXF1aXJlcyB0aGF0CisvLyAgICAgICAgIHlvdXIgbG9vcCBvdmVyIGJh
c2ljIGJsb2NrcyBwcm9jZWVkcyBpbiB0aGUgYXBwcm9wcmlhdGUgZ3JhcGggb3JkZXIsIGZvciBl
eGFtcGxlCisvLyAgICAgICAgIHByZW9yZGVyLgorLy8KKy8vICAgICAgICAgRklYTUU6IE1ha2Ug
aXQgZWFzaWVyIHRvIGRvIHRoaXMsIHRoYXQgZG9lc24ndCBpbnZvbHZlIHJlcnVubmluZyBHQ1NF
LgorLy8gICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2
NjM5CisvLworLy8gICAgNC4zKSBJbnNlcnQgVXBzaWxvbnMgZm9yIGVhY2ggUGhpIGluIGVhY2gg
c3VjY2Vzc29yIGJsb2NrLiBVc2UgdGhlIGF2YWlsYWJsZSB2YWx1ZXMgdGFibGUgdG8KKy8vICAg
ICAgICAgZGVjaWRlIHRoZSBzb3VyY2UgdmFsdWUgZm9yIGVhY2ggUGhpJ3MgdmFyaWFibGUuIE5v
dGUgdGhhdCB5b3UgY291bGQgYWxzbyB1c2UKKy8vICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6cmVh
Y2hpbmdEZWZBdFRhaWwoKSBpbnN0ZWFkIG9mIHRoZSBhdmFpbGFibGUgdmFsdWVzIHRhYmxlLCB0
aG91Z2ggeW91cgorLy8gICAgICAgICBsb2NhbCBhdmFpbGFibGUgdmFsdWVzIHRhYmxlIGlzIGxp
a2VseSB0byBiZSBtb3JlIGVmZmljaWVudC4KKy8vCisvLyBUaGUgbW9zdCBvYnZpb3VzIHVzZSBv
ZiBTU0FDYWxjdWxhdG9yIGlzIGZvciB0aGUgQ1BTLT5TU0EgY29udmVyc2lvbiBpdHNlbGYsIGJ1
dCBpdCdzIG1lYW50IHRvCisvLyBhbHNvIGJlIHVzZWQgZm9yIFNTQSB1cGRhdGUgYW5kIGZvciB0
aGluZ3MgbGlrZSB0aGUgcHJvbW90aW9uIG9mIGhlYXAgZmllbGRzIHRvIGxvY2FsIFNTQQorLy8g
dmFyaWFibGVzLgorCitjbGFzcyBTU0FDYWxjdWxhdG9yIHsKK3B1YmxpYzoKKyAgICBTU0FDYWxj
dWxhdG9yKEdyYXBoJik7CisgICAgflNTQUNhbGN1bGF0b3IoKTsKKyAgICAKKyAgICBjbGFzcyBW
YXJpYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXg7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgICAgICB2b2lkIGR1bXBWZXJib3NlKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBTU0FDYWxjdWxh
dG9yOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGUoKQorICAgICAgICAgICAgOiBtX2luZGV4
KFVJTlRfTUFYKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhcmlh
YmxlKHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBCbG9ja0xpc3QgbV9ibG9ja3NXaXRoRGVmczsKKyAg
ICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworICAgIAorICAgIGNsYXNzIERlZiB7Cisg
ICAgcHVibGljOgorICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhYmxlOyB9CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9jazsgfQorICAgICAgICAKKyAgICAgICAgTm9kZSogdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNTQUNh
bGN1bGF0b3I7CisgICAgICAgIAorICAgICAgICBEZWYoKQorICAgICAgICAgICAgOiBtX3Zhcmlh
YmxlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgICAg
ICwgbV92YWx1ZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIERlZihWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiB2YWx1
ZSkKKyAgICAgICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJsZSkKKyAgICAgICAgICAgICwgbV9i
bG9jayhibG9jaykKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZSogbV92YXJpYWJsZTsKKyAgICAgICAg
QmFzaWNCbG9jayogbV9ibG9jazsKKyAgICAgICAgTm9kZSogbV92YWx1ZTsKKyAgICB9OworICAg
IAorICAgIFZhcmlhYmxlKiBuZXdWYXJpYWJsZSgpOworICAgIERlZiogbmV3RGVmKFZhcmlhYmxl
KiwgQmFzaWNCbG9jayosIE5vZGUqKTsKKyAgICAKKyAgICBWYXJpYWJsZSogdmFyaWFibGUodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuICZtX3ZhcmlhYmxlc1tpbmRleF07IH0KKyAgICAKKyAgICAv
LyBUaGUgUGhpSW5zZXJ0aW9uRnVuY3RvciB0YWtlcyBhIFZhcmlhYmxlIGFuZCBhIEJhc2ljQmxv
Y2sgYW5kIGVpdGhlciBpbnNlcnRzIGEgUGhpIGFuZAorICAgIC8vIHJldHVybnMgdGhlIE5vZGUg
Zm9yIHRoYXQgUGhpLCBvciBpdCBkZWNpZGVzIHRoYXQgaXQncyBub3Qgd29ydGggaXQgdG8gaW5z
ZXJ0IGEgUGhpIGF0IHRoYXQKKyAgICAvLyBibG9jayBiZWNhdXNlIG9mIHNvbWUgYWRkaXRpb25h
bCBwcnVuaW5nIGNvbmRpdGlvbiAodHlwaWNhbGx5IGxpdmVuZXNzKSBhbmQgcmV0dXJucworICAg
IC8vIG51bGxwdHIuIElmIGEgbm9uLW51bGwgTm9kZSogaXMgcmV0dXJuZWQsIGEgbmV3IERlZiBp
cyBjcmVhdGVkLCBzbyB0aGF0CisgICAgLy8gbm9uTG9jYWxSZWFjaGluZ0RlZigpIHdpbGwgZmlu
ZCBpdCBsYXRlci4gTm90ZSB0aGF0IGl0IGlzIGdlbmVyYWxseSBhbHdheXMgc291bmQgdG8gbm90
CisgICAgLy8gcHJ1bmUgYW55IFBoaXMgKHRoYXQgaXMsIHRvIGFsd2F5cyBoYXZlIHRoZSBmdW5j
dG9yIGluc2VydCBhIFBoaSBhbmQgbmV2ZXIgcmV0dXJuIG51bGxwdHIpLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFBoaUluc2VydGlvbkZ1bmN0b3I+CisgICAgdm9pZCBjb21wdXRlUGhpcyhQaGlJ
bnNlcnRpb25GdW5jdG9yIGZ1bmN0b3IpCisgICAgeworICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG51bGxwdHIsIG1fZ3JhcGgubV9kb21pbmF0b3JzLmlzVmFsaWQoKSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKFZhcmlhYmxlJiB2YXJpYWJsZSA6IG1fdmFyaWFibGVzKSB7CisgICAgICAg
ICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5mb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9t
aW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS5tX2Jsb2Nrc1dpdGhE
ZWZzLAorICAgICAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2spIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gZnVuY3RvcigmdmFyaWFibGUsIGJs
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgQmxvY2tEYXRhJiBkYXRhID0gbV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgICAg
ICAgICAgRGVmKiBwaGlEZWYgPSBtX3BoaXMuYWRkKERlZigmdmFyaWFibGUsIGJsb2NrLCBwaGlO
b2RlKSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEubV9waGlzLmFwcGVuZChwaGlEZWYpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0
J3MgcG9zc2libGUgdG8gaGF2ZSBhIGJsb2NrIHRoYXQgbG9va3MgbGlrZSB0aGlzIGJlZm9yZSBT
U0EKKyAgICAgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbjoKKyAgICAgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gbGFiZWw6CisgICAgICAgICAgICAgICAgICAg
IC8vICAgICBwcmludCh4KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgeCA9IDQyOworICAgICAgICAgICAgICAgICAgICAvLyAgICAg
Z290byBsYWJlbDsKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gQW5kIGl0IG1heSBsb29rIGxpa2UgdGhpcyBhZnRlciBTU0EgY29udmVyc2lvbjoKKyAgICAg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gbGFiZWw6CisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICB4MTogUGhpKCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
IC4uLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgVXBzaWxvbig0MiwgXngxKQorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgZ290byBsYWJlbDsKKyAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSB3aWxsIHdhbnQgdG8gaW5z
ZXJ0IGEgUGhpIGluIHRoaXMgYmxvY2ssIGFuZCB0aGUgYmxvY2sKKyAgICAgICAgICAgICAgICAg
ICAgLy8gd2lsbCBhbHJlYWR5IGhhdmUgYSBEZWYgZm9yIHRoZSB2YXJpYWJsZS4gV2hlbiB0aGlz
IGhhcHBlbnMsIHdlIGRvbid0IHdhbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFBoaSB0
byBvdmVycmlkZSB0aGUgb3JpZ2luYWwgRGVmLCBzaW5jZSB0aGUgUGhpIGlzIGF0IHRoZSB0b3As
IHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCBEZWYgaW4gdGhlIG1fZGVmcyB0
YWJsZSB3b3VsZCBoYXZlIGJlZW4gYXQgdGhlIGJvdHRvbSwgYW5kIHdlIHdhbnQKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbV9kZWZzIHRvIHRlbGwgdXMgYWJvdXQgZGVmcyBhdCB0YWlsLgorICAg
ICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBTbywgd2UgcmVseSBv
biB0aGUgZmFjdCB0aGF0IEhhc2hNYXA6OmFkZCgpIGRvZXMgbm90aGluZyBpZiB0aGUga2V5IHdh
cworICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IHByZXNlbnQuCisgICAgICAgICAgICAg
ICAgICAgIGRhdGEubV9kZWZzLmFkZCgmdmFyaWFibGUsIHBoaURlZik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIGNvbnN0IFZlY3RvcjxEZWYqPiYgcGhpc0ZvckJsb2NrKEJhc2ljQmxvY2sq
IGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVtibG9ja10ubV9waGlzOworICAg
IH0KKyAgICAKKyAgICAvLyBJZ25vcmVzIGRlZnMgd2l0aGluIHRoZSBnaXZlbiBibG9jazsgaXQg
YXNzdW1lcyB0aGF0IHlvdSd2ZSB0YWtlbiBjYXJlIG9mIHRob3NlCisgICAgLy8geW91cnNlbGYu
CisgICAgRGVmKiBub25Mb2NhbFJlYWNoaW5nRGVmKEJhc2ljQmxvY2sqLCBWYXJpYWJsZSopOwor
ICAgIERlZiogcmVhY2hpbmdEZWZBdEhlYWQoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiB2
YXJpYWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub25Mb2NhbFJlYWNoaW5nRGVmKGJsb2Nr
LCB2YXJpYWJsZSk7CisgICAgfQorICAgIAorICAgIC8vIENvbnNpZGVycyB0aGUgZGVmIHdpdGhp
biB0aGUgZ2l2ZW4gYmxvY2ssIGJ1dCBvbmx5IHdvcmtzIGF0IHRoZSB0YWlsIG9mIHRoZSBibG9j
ay4KKyAgICBEZWYqIHJlYWNoaW5nRGVmQXRUYWlsKEJhc2ljQmxvY2sqLCBWYXJpYWJsZSopOwor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToK
KyAgICBTZWdtZW50ZWRWZWN0b3I8VmFyaWFibGU+IG1fdmFyaWFibGVzOworICAgIEJhZzxEZWY+
IG1fZGVmczsKKyAgICAKKyAgICBCYWc8RGVmPiBtX3BoaXM7CisgICAgCisgICAgc3RydWN0IEJs
b2NrRGF0YSB7CisgICAgICAgIEhhc2hNYXA8VmFyaWFibGUqLCBEZWYqPiBtX2RlZnM7CisgICAg
ICAgIFZlY3RvcjxEZWYqPiBtX3BoaXM7CisgICAgfTsKKyAgICAgICAgICAgIAorICAgIEJsb2Nr
TWFwPEJsb2NrRGF0YT4gbV9kYXRhOworICAgIAorICAgIEdyYXBoJiBtX2dyYXBoOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdTU0FDYWxjdWxhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMTcz
MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNyArMzIsMTkgQEAKICNpbmNsdWRlICJERkdHcmFw
aC5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgi
CisjaW5jbHVkZSAiREZHU1NBQ2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgU1NBQ29udmVyc2lvblBoYXNlIDogcHVibGljIFBo
YXNlIHsKICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgZHVtcEdyYXBoID0gZmFsc2U7CiAgICAgCiBwdWJsaWM6CiAgICAgU1NBQ29u
dmVyc2lvblBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgIlNTQSBj
b252ZXJzaW9uIikKKyAgICAgICAgLCBtX2NhbGN1bGF0b3IoZ3JhcGgpCiAgICAgICAgICwgbV9p
bnNlcnRpb25TZXQoZ3JhcGgpCiAgICAgICAgICwgbV9jaGFuZ2VkKGZhbHNlKQogICAgIHsKQEAg
LTUyLDI5NyArNTQsMjY2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKICAgICAgICAgCi0gICAgICAgIGlmIChk
dW1wR3JhcGgpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGR1bXAgYXQgdG9wIG9mIFNT
QSBjb252ZXJzaW9uOlxuIik7CisgICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVudHMoKTsK
KyAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3JhcGgp
OworICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2co
IkdyYXBoIGJlZm9yZSBTU0EgdHJhbnNmb3JtYXRpb246XG4iKTsKICAgICAgICAgICAgIG1fZ3Jh
cGguZHVtcCgpOwogICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUgZm9yIGV2ZXJ5IHJvb3QgVmFyaWFibGVBY2Nlc3NEYXRhLgorICAgICAgICBm
b3IgKFZhcmlhYmxlQWNjZXNzRGF0YSYgdmFyaWFibGUgOiBtX2dyYXBoLm1fdmFyaWFibGVBY2Nl
c3NEYXRhKSB7CisgICAgICAgICAgICBpZiAoIXZhcmlhYmxlLmlzUm9vdCgpIHx8IHZhcmlhYmxl
LmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9jYWxj
dWxhdG9yLm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBBU1NFUlQoc3NhVmFyaWFibGUtPmlu
ZGV4KCkgPT0gbV92YXJpYWJsZUZvclNTQUluZGV4LnNpemUoKSk7CisgICAgICAgICAgICBtX3Zh
cmlhYmxlRm9yU1NBSW5kZXguYXBwZW5kKCZ2YXJpYWJsZSk7CisgICAgICAgICAgICBtX3NzYVZh
cmlhYmxlRm9yVmFyaWFibGUuYWRkKCZ2YXJpYWJsZSwgc3NhVmFyaWFibGUpOworICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICAvLyBFbGltaW5hdGUgYWxsIGR1cGxpY2F0ZSBvciBzZWxmLXBv
aW50aW5nIFBoaSBlZGdlcy4gVGhpcyBtZWFucyB0aGF0Ci0gICAgICAgIC8vIHdlIHRyYW5zZm9y
bToKLSAgICAgICAgLy8KLSAgICAgICAgLy8gcDogUGhpKEBuMSwgQG4yLCBAbjMpCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIGludG86Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIHA6IFBoaShAeCkK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gaWYgZWFjaCBAbmkgaW4ge0BuMSwgQG4yLCBAbjN9IGlz
IGVpdGhlciBlcXVhbCB0byBAcCB0byBpcyBlcXVhbAotICAgICAgICAvLyB0byBAeCwgZm9yIGV4
YWN0bHkgb25lIG90aGVyIEB4LiBBZGRpdGlvbmFsbHksIHRyaXZpYWwgUGhpcyAoaS5lLgotICAg
ICAgICAvLyBwOiBQaGkoQHgpKSBhcmUgZm9yd2FyZGVkLCBzbyB0aGF0IGlmIGhhdmUgYW4gZWRn
ZSB0byBzdWNoIEBwLCB3ZQotICAgICAgICAvLyByZXBsYWNlIGl0IHdpdGggQHguIFRoaXMgbG9v
cCBkb2VzIHRoaXMgZm9yIFBoaXMgb25seTsgbGF0ZXIgd2UgZG8KLSAgICAgICAgLy8gc3VjaCBm
b3J3YXJkaW5nIGZvciBQaGkgcmVmZXJlbmNlcyBmb3VuZCBpbiBvdGhlciBub2Rlcy4KLSAgICAg
ICAgLy8KLSAgICAgICAgLy8gU2VlIEF5Y29jayBhbmQgSG9yc3Bvb2wgaW4gQ0MnMDAgZm9yIGEg
YmV0dGVyIGRlc2NyaXB0aW9uIG9mIHdoYXQKLSAgICAgICAgLy8gd2UncmUgZG9pbmcgaGVyZS4K
LSAgICAgICAgZG8gewotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJ
bmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcGhpID0gYmxvY2stPnBoaXNbcGhpSW5kZXhdOwotICAgICAgICAgICAgICAg
ICAgICBpZiAocGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGZvcndhcmRQ
aGlDaGlsZHJlbihwaGkpOwotICAgICAgICAgICAgICAgICAgICBkZWR1cGxpY2F0ZUNoaWxkcmVu
KHBoaSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxl
IChtX2NoYW5nZWQpOwotICAgICAgICAKLSAgICAgICAgLy8gRm9yIGVhY2ggYmFzaWMgYmxvY2ss
IGZvciBlYWNoIGxvY2FsIGxpdmUgYXQgdGhlIGhlYWQgb2YgdGhhdCBibG9jaywKLSAgICAgICAg
Ly8gZmlndXJlIG91dCB3aGF0IG5vZGUgd2Ugc2hvdWxkIGJlIHJlZmVycmluZyB0byBpbnN0ZWFk
IG9mIHRoYXQgbG9jYWwuCi0gICAgICAgIC8vIElmIGl0IHR1cm5zIG91dCB0byBiZSBhIG5vbi10
cml2aWFsIFBoaSwgbWFrZSBzdXJlIHRoYXQgd2UgY3JlYXRlIGFuCi0gICAgICAgIC8vIFNTQSBQ
aGkgYW5kIFVwc2lsb25zIGluIHByZWRlY2Vzc29yIGJsb2Nrcy4gV2UgcmV1c2UKLSAgICAgICAg
Ly8gQmFzaWNCbG9jazo6dmFyaWFibGVzQXRIZWFkIGZvciB0cmFja2luZyB3aGljaCBub2RlcyB0
byByZWZlciB0by4KLSAgICAgICAgT3BlcmFuZHM8Ym9vbD4gbm9uVHJpdmlhbFBoaXMoT3BlcmFu
ZHNMaWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAvLyBG
aW5kIGFsbCBTZXRMb2NhbHMgYW5kIGNyZWF0ZSBEZWZzIGZvciB0aGVtLiBXZSBoYW5kbGUgU2V0
QXJndW1lbnQgYnkgY3JlYXRpbmcgYQorICAgICAgICAvLyBHZXRBcmd1bWVudC4KICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgICAgICBub25Ucml2aWFsUGhpcy5maWxsKGZhbHNlKTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5waGlzLnNpemUoKTsgaS0tOykgewotICAg
ICAgICAgICAgICAgIE5vZGUqIHBoaSA9IGJsb2NrLT5waGlzW2ldOwotICAgICAgICAgICAgICAg
IGlmICghcGhpLT5jaGlsZHJlbi5qdXN0T25lQ2hpbGQoKSkKLSAgICAgICAgICAgICAgICAgICAg
bm9uVHJpdmlhbFBoaXMub3BlcmFuZChwaGktPmxvY2FsKCkpID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFu
b2RlKQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBNdXN0IHByb2Nlc3MgdGhlIGJsb2Nr
IGluIGZvcndhcmQgZGlyZWN0aW9uIGJlY2F1c2Ugd2Ugd2FudCB0byBzZWUgdGhlIGxhc3QKKyAg
ICAgICAgICAgIC8vIGFzc2lnbm1lbnQgZm9yIGV2ZXJ5IGxvY2FsLgorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25v
ZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBTZXRMb2NhbCAmJiBub2Rl
LT5vcCgpICE9IFNldEFyZ3VtZW50KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiQXQgYmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgZm9yIG9wZXJhbmQg
ciIsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpLCAiIGhhdmUgbm9k
ZSAiLCBub2RlLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gUG9pc29uIHRoaXMgZW50cnkgaW4gdmFyaWFibGVzQXRIZWFkIGJlY2F1c2Ug
d2UgZG9uJ3QKLSAgICAgICAgICAgICAgICAgICAgLy8gd2FudCBhbnlvbmUgdG8gdHJ5IHRvIHJl
ZmVyIHRvIGl0LCBpZiB0aGUgdmFyaWFibGUgaXMKLSAgICAgICAgICAgICAgICAgICAgLy8gY2Fw
dHVyZWQuCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV0gPSAw
OworICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBQaGk6Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgot
ICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IE5vZGUqIGNoaWxkTm9kZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudCk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9k
ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBHZXRBcmd1bWVudCwgbm9kZS0+b3JpZ2luLCBPcEluZm8obm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbCBpc0Zs
dXNoZWQgPSAhIShub2RlLT5mbGFncygpICYgTm9kZUlzRmx1c2hlZCk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghbm9uVHJpdmlhbFBoaXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVzdE9u
ZUNoaWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZWRnZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgT25lIGNoaWxkOiAiLCBlZGdlLCAiLCAiLCBSYXdQb2ludGVyKGVkZ2Uu
bm9kZSgpKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWRnZS5ub2Rl
KCk7IC8vIEl0J3Mgc29tZXRoaW5nIGZyb20gYSBkaWZmZXJlbnQgYmFzaWMgYmxvY2suCi0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgTm9uLXRyaXZp
YWwuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgYSBub24tdHJpdmlhbCBQ
aGkuCi0gICAgICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJs
ZS0+Zmx1c2hGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVGbGFncyByZXN1
bHQgPSByZXN1bHRGb3IoZm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZUtpbmQg
dXNlS2luZCA9IHVzZUtpbmRGb3IoZm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
MCwgU3BlY05vbmUsIFBoaSwgTm9kZU9yaWdpbigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJ
bnNlcnRlZCBuZXcgbm9kZTogIiwgbm9kZSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5tZXJnZUZsYWdzKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCgobm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSA9PSByZXN1bHQpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRl
Y2Vzc29yc1tqXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3Nvci0+YXBw
ZW5kTm9uVGVybWluYWwoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgs
IFNwZWNOb25lLCBVcHNpbG9uLCBwcmVkZWNlc3Nvci0+bGFzdCgpLT5vcmlnaW4sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlKSwgRWRnZShwcmVkZWNlc3Nvci0+
dmFyaWFibGVzQXRUYWlsW2ldLCB1c2VLaW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
c0ZsdXNoZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLiBG
b3IgbXVsdGlwbGUgcmVhc29ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFzb24gIzE6IElmIHRoZSBsb2NhbCBpcyBmbHVz
aGVkIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBib3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB3aXRoIGEgTW92SGludCBzaW5jZSBldmVyeSBwYXRoIHRvIHRoaXMgcG9pbnQgaW4g
dGhlIGNvZGUgd2lsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZmx1c2hl
ZCB0aGUgYnl0ZWNvZGUgdmFyaWFibGUgdXNpbmcgYSBTZXRMb2NhbCBhbmQgaGVuY2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgQXZhaWxhYmlsaXR5OjpmbHVzaGVkQXQoKSB3
aWxsIGFncmVlLCBhbmQgdGhhdCB3aWxsIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gc3VmZmljaWVudCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0byByZWNvdmVyIHRoZSB2YXJpYWJs
ZSdzIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJlYXNvbiAjMjogSWYgd2UgaGFkIGluc2VydGVkIGEgTW92SGludCBh
bmQgdGhlIFBoaSBmdW5jdGlvbiBoYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBk
aWVkIChiZWNhdXNlIHRoZSBvbmx5IHVzZXIgb2YgdGhlIHZhbHVlIHdhcyB0aGUgImZsdXNoIiAt
IGkuZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGFzeW5jaHJvbm91cyBy
dW50aW1lIHRoaW5neSkgdGhlbiB0aGUgTW92SGludCB3b3VsZCB0dXJuCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaW50byBhIFpvbWJpZUhpbnQsIHdoaWNoIHdvdWxkIGZvb2wgdXMg
aW50byB0aGlua2luZyB0aGF0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZh
cmlhYmxlIGlzIGRlYWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMzOiBJZiB3ZSBoYWQgaW5zZXJ0ZWQgYSBNb3ZI
aW50IHRoZW4gZXZlbiBpZiB0aGUgUGhpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
c3RheWVkIGFsaXZlLCB3ZSB3b3VsZCBzdGlsbCBlbmQgdXAgZ2VuZXJhdGluZyBpbmVmZmljaWVu
dCBjb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd291bGQgYmUg
dGVsbGluZyB0aGUgT1NSIGV4aXQgY29tcGlsZXIgdG8gdXNlIHNvbWUgU1NBCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgZm9yIHRoZSBieXRlY29kZSB2YXJpYWJsZSByYXRo
ZXIgdGhhbiBqdXN0IHRlbGxpbmcgaXQgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBvbiB0aGUgc3RhY2suCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNO
b25lLCBNb3ZIaW50LCBOb2RlT3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksIG5vZGUtPmRlZmF1bHRFZGdl
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWRbaV0gPSBub2RlOworICAgICAgICAgICAgICAgIG1fY2FsY3VsYXRv
ci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgIG1fc3NhVmFyaWFibGVGb3JWYXJpYWJsZS5n
ZXQodmFyaWFibGUpLCBibG9jaywgY2hpbGROb2RlKTsKICAgICAgICAgICAgIH0KLQorICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAg
ICAgfQogICAgICAgICAKKyAgICAgICAgLy8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRvIGJlIGlu
c2VydGVkLiBUaGlzIGNyZWF0ZXMgdGhlIFBoaSdzIGJ1dCBkb2Vzbid0IGluc2VydCB0aGVtCisg
ICAgICAgIC8vIHlldC4gV2Ugd2lsbCBsYXRlciBrbm93IHdoZXJlIHRvIGluc2VydCB0aGVtIGJl
Y2F1c2UgU1NBQ2FsY3VsYXRvciBpcyBzdWNoIGEgYnJvLgorICAgICAgICBtX2NhbGN1bGF0b3Iu
Y29tcHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBz
c2FWYXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3Nz
YVZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyBQcnVuZSBieSBsaXZlbmVzcy4gVGhpcyBkb2Vzbid0IGJ1eSB1cyBtdWNoIG90aGVyIHRoYW4g
Y29tcGlsZSB0aW1lcy4KKyAgICAgICAgICAgICAgICBOb2RlKiBoZWFkTm9kZSA9IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFoZWFkTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyB0aGUgcG9zc2liaWx0aXkgb2YgInJlYmlydGhz
Ii4gVGhlIFNTQSBjYWxjdWxhdG9yIHdpbGwgYWxyZWFkeSBwcnVuZQorICAgICAgICAgICAgICAg
IC8vIHJlYmlydGhzIGZvciB0aGUgc2FtZSBWYXJpYWJsZUFjY2Vzc0RhdGEuIEJ1dCBpdCB3aWxs
IG5vdCBiZSBhYmxlIHRvIHBydW5lCisgICAgICAgICAgICAgICAgLy8gcmViaXJ0aHMgdGhhdCBh
cm9zZSBmcm9tIHRoZSBzYW1lIGxvY2FsIHZhcmlhYmxlIG51bWJlciBidXQgYSBkaWZmZXJlbnQK
KyAgICAgICAgICAgICAgICAvLyBWYXJpYWJsZUFjY2Vzc0RhdGEuIFdlIGRvIHRoYXQgcHJ1bmlu
ZyBoZXJlLgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBmZWVkaW5nIGxvY2Fs
IHZhcmlhYmxlIG51bWJlcnMsIG5vdCBWYXJpYWJsZUFjY2Vzc0RhdGEqJ3MsIGFzCisgICAgICAg
ICAgICAgICAgLy8gdGhlICJ2YXJpYWJsZXMiIGZvciBTU0FDYWxjdWxhdG9yLiBUaGF0IHdvdWxk
IGFsbG93IHVzIHRvIGVsaW1pbmF0ZSB0aGlzCisgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBj
YXNlLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzY2NDEKKyAgICAgICAgICAgICAgICBpZiAoaGVhZE5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpICE9IHZhcmlhYmxlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9n
cmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+cHJlZGljdGlvbigp
LCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0
ID0gdmFyaWFibGUtPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAgICAgICAgTm9kZUZsYWdzIHJl
c3VsdCA9IHJlc3VsdEZvcihmb3JtYXQpOworICAgICAgICAgICAgICAgIHBoaU5vZGUtPm1lcmdl
RmxhZ3MocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgIGRh
dGFMb2coIlZhcmlhYmxlcyBhdCBoZWFkIGFmdGVyIFNTQSBQaGkgaW5zZXJ0aW9uOlxuIik7Ci0g
ICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFibG9jaykK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgICIsICpibG9jaywgIjogIiwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgIlxuIik7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBkYXRhTG9nKCJDb21wdXRlZCBQaGlzLCBhYm91dCB0byB0
cmFuc2Zvcm0gdGhlIGdyYXBoLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAg
ICAgICAgICAgZGF0YUxvZygiR3JhcGg6XG4iKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgp
OworICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIk1hcHBp
bmdzOlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YXJpYWJs
ZUZvclNTQUluZGV4LnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAi
LCBpLCAiOiAiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKG1fZ3JhcGgsIG1fdmFyaWFibGVGb3JT
U0FJbmRleFtpXSksICJcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAg
ICAgIGRhdGFMb2coIlNTQSBjYWxjdWxhdG9yOiAiLCBtX2NhbGN1bGF0b3IsICJcbiIpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHZhcmlhYmxlc0F0SGVh
ZCBpbiBlYWNoIGJsb2NrIHJlZmVycyB0byBlaXRoZXI6CisgICAgICAgIC8vIERvIHRoZSBidWxr
IG9mIHRoZSBTU0EgY29udmVyc2lvbi4gRm9yIGVhY2ggYmxvY2ssIHRoaXMgdHJhY2tzIHRoZSBv
cGVyYW5kLT5Ob2RlCisgICAgICAgIC8vIG1hcHBpbmcgYmFzZWQgb24gYSBjb21iaW5hdGlvbiBv
ZiB3aGF0IHRoZSBTU0FDYWxjdWxhdG9yIHRlbGxzIHVzLCBhbmQgdXMgd2Fsa2luZyBvdmVyCisg
ICAgICAgIC8vIHRoZSBibG9jayBpbiBmb3J3YXJkIG9yZGVyLiBXZSB1c2Ugb3VyIG93biBkYXRh
IHN0cnVjdHVyZSwgdmFsdWVGb3JPcGVyYW5kLCBmb3IKKyAgICAgICAgLy8gZGV0ZXJtaW5pbmcg
dGhlIGxvY2FsIG1hcHBpbmcsIGJ1dCB3ZSByZWx5IG9uIFNTQUNhbGN1bGF0b3IgZm9yIHRoZSBu
b24tbG9jYWwgbWFwcGluZy4KICAgICAgICAgLy8KLSAgICAgICAgLy8gMSkgQSBuZXcgU1NBIHBo
aSBpbiB0aGUgY3VycmVudCBibG9jay4KLSAgICAgICAgLy8gMikgQSBTZXRBcmd1bWVudCwgd2hp
Y2ggd2lsbCBzb29uIGdldCBjb252ZXJ0ZWQgaW50byBhIEdldEFyZ3VtZW50LgotICAgICAgICAv
LyAzKSBBbiBvbGQgQ1BTIHBoaSBpbiBhIGRpZmZlcmVudCBibG9jay4KKyAgICAgICAgLy8gVGhp
cyBkb2VzIHRocmVlIHRoaW5ncyBhdCBvbmNlOgogICAgICAgICAvLwotICAgICAgICAvLyBXZSBk
b24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGZvciAoMSkgYW5kICgyKSwgYnV0IHdlIGRvIG5lZWQg
dG8KLSAgICAgICAgLy8gZG8gYSByZXBsYWNlbWVudCBmb3IgKDMpLgotICAgICAgICAKLSAgICAg
ICAgLy8gQ2xlYXIgYWxsIHJlcGxhY2VtZW50cywgc2luY2Ugb3RoZXIgcGhhc2VzIG1heSBoYXZl
IHVzZWQgdGhlbS4KLSAgICAgICAgbV9ncmFwaC5jbGVhclJlcGxhY2VtZW50cygpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKGR1bXBHcmFwaCkgewotICAgICAgICAgICAgZGF0YUxvZygiR3JhcGgg
anVzdCBiZWZvcmUgaWRlbnRpZnlpbmcgcmVwbGFjZW1lbnRzOlxuIik7Ci0gICAgICAgICAgICBt
X2dyYXBoLmR1bXAoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRm9yIGFsbCBv
ZiB0aGUgb2xkIENQUyBQaGlzLCBmaWd1cmUgb3V0IHdoYXQgdGhleSBjb3JyZXNwb25kIHRvIGlu
IFNTQS4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZygiRGVhbGluZyB3aXRoIGJsb2NrICMiLCBibG9ja0luZGV4LCAiXG4i
KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXpl
KCk7IHBoaUluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogcGhpID0gYmxvY2stPnBo
aXNbcGhpSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ29uc2lkZXJpbmcg
IiwgcGhpLCAiICgiLCBSYXdQb2ludGVyKHBoaSksICIpLCBmb3IgciIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwaGktPmxvY2FsKCksICIsIGFuZCBpdHMgcmVwbGFjZW1lbnQgaW4gIiwgKmJs
b2NrLCAiLCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5vcGVyYW5kKHBoaS0+bG9jYWwoKSksICJcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBBU1NFUlQocGhpICE9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChw
aGktPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBwaGktPnJlcGxhY2VtZW50ID0gYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHBoaS0+bG9jYWwoKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyBtYWtlIHN1cmUgdGhhdCBhbGwgdmFy
aWFibGVzQXRIZWFkIGluIGVhY2ggYmxvY2sgcG9pbnRzIHRvIHRoZQotICAgICAgICAvLyBjYW5v
bmljYWwgU1NBIHZhbHVlLiBQcmlvciB0byB0aGlzLCB2YXJpYWJsZXNBdEhlYWRbbG9jYWxdIG1h
eSBwb2ludCB0bwotICAgICAgICAvLyBhbiBvbGQgQ1BTIFBoaSBpbiBhIGRpZmZlcmVudCBibG9j
ay4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCFub2Rl
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB3aGlsZSAo
bm9kZS0+cmVwbGFjZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUgIT0g
bm9kZS0+cmVwbGFjZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+cmVw
bGFjZW1lbnQ7CisgICAgICAgIC8vIC0gSW5zZXJ0cyB0aGUgUGhpcyBpbiBhbGwgb2YgdGhlIHBs
YWNlcyB3aGVyZSB0aGV5IG5lZWQgdG8gZ28uIFdlJ3ZlIGFscmVhZHkgY3JlYXRlZAorICAgICAg
ICAvLyAgIHRoZW0gYW5kIHRoZXkgYXJlIGFjY291bnRlZCBmb3IgaW4gdGhlIFNTQUNhbGN1bGF0
b3IncyBkYXRhIHN0cnVjdHVyZXMsIGJ1dCB3ZQorICAgICAgICAvLyAgIGhhdmVuJ3QgaW5zZXJ0
ZWQgdGhlbSB5ZXQsIG1vc3RseSBiZWNhdXNlIHdlIHdhbnQgdG8gaW5zZXJ0IGFsbCBvZiBhIGJs
b2NrJ3MgUGhpcyBpbgorICAgICAgICAvLyAgIG9uZSBnbyB0byBhbW9ydGl6ZSB0aGUgY29zdCBv
ZiBub2RlIGluc2VydGlvbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBDcmVhdGUgYW5kIGlu
c2VydCBVcHNpbG9ucy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBDb252ZXJ0IGFsbCBvZiB0
aGUgcHJlZXhpc3RpbmcgU1NBIG5vZGVzIChvdGhlciB0aGFuIHRoZSBvbGQgQ1BTIFBoaSBub2Rl
cykgaW50byBTU0EKKyAgICAgICAgLy8gICBmb3JtIGJ5IHJlcGxhY2luZyBhcyBmb2xsb3dzOgor
ICAgICAgICAvLworICAgICAgICAvLyAgIC0gR2V0TG9jYWwgb3ZlciBjYXB0dXJlZCB2YXJpYWJs
ZXMgbG9zZSB0aGVpciBwaGlzLgorICAgICAgICAvLworICAgICAgICAvLyAgIC0gR2V0TG9jYWwg
b3ZlciB1bmNhcHR1cmVkIHZhcmlhYmxlcyBkaWUgYW5kIGdldCByZXBsYWNlZCB3aXRoIHJlZmVy
ZW5jZXMgdG8gdGhlIG5vZGUKKyAgICAgICAgLy8gICAgIHNwZWNpZmllZCBieSB2YWx1ZUZvck9w
ZXJhbmQuCisgICAgICAgIC8vCisgICAgICAgIC8vICAgLSBTZXRMb2NhbCBnZXRzIE5vZGVNdXN0
R2VuZXJhdGUgaWYgaXQncyBmbHVzaGVkLCBvciB0dXJucyBpbnRvIGEgQ2hlY2sgb3RoZXJ3aXNl
LgorICAgICAgICAvLworICAgICAgICAvLyAgIC0gRmx1c2ggbG9zZXMgaXRzIGNoaWxkcmVuIGFu
ZCB0dXJucyBpbnRvIGEgUGhhbnRvbS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAtIFBoYW50
b21Mb2NhbCBiZWNvbWVzIFBoYW50b20sIGFuZCBpdHMgY2hpbGQgaXMgd2hhdGV2ZXIgaXMgc3Bl
Y2lmaWVkIGJ5CisgICAgICAgIC8vICAgICB2YWx1ZUZvck9wZXJhbmQuCisgICAgICAgIC8vCisg
ICAgICAgIC8vICAgLSBTZXRBcmd1bWVudCBpcyByZW1vdmVkIHVubGVzcyBpdCdzIGEgY2FwdHVy
ZWQgdmFyaWFibGUuIE5vdGUgdGhhdCBHZXRBcmd1bWVudCBub2RlcworICAgICAgICAvLyAgICAg
aGF2ZSBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQuCisgICAgICAgIE9wZXJhbmRzPE5vZGUqPiB2YWx1
ZUZvck9wZXJhbmQoT3BlcmFuZHNMaWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQpOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJblBy
ZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5jbGVhcigpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBDUFMgd2lsbCBjbGFpbSB0aGF0IHRoZSByb290IGJsb2Nr
IGhhcyBhbGwgYXJndW1lbnRzIGxpdmUuIEJ1dCB3ZSBoYXZlIGFscmVhZHkgZG9uZQorICAgICAg
ICAgICAgLy8gdGhlIGZpcnN0IHN0ZXAgb2YgU1NBIGNvbnZlcnNpb246IGFyZ3VtZW50IGxvY2Fs
cyBhcmUgbm8gbG9uZ2VyIGxpdmUgYXQgaGVhZDsKKyAgICAgICAgICAgIC8vIGluc3RlYWQgd2Ug
aGF2ZSBHZXRBcmd1bWVudCBub2RlcyBmb3IgZXh0cmFjdGluZyB0aGUgdmFsdWVzIG9mIGFyZ3Vt
ZW50cy4gU28sIHdlCisgICAgICAgICAgICAvLyBza2lwIHRoZSBhdC1oZWFkIGF2YWlsYWJsZSB2
YWx1ZSBjYWxjdWxhdGlvbiBmb3IgdGhlIHJvb3QgYmxvY2suCisgICAgICAgICAgICBpZiAoYmxv
Y2sgIT0gbV9ncmFwaC5ibG9jaygwKSkgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSB2YWx1ZUZvck9wZXJhbmQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGVBdEhlYWQgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIW5vZGVBdEhlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlQXRIZWFkLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
Q29uc2lkZXJpbmcgbGl2ZSB2YXJpYWJsZSAiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKG1fZ3Jh
cGgsIHZhcmlhYmxlKSwgIiBhdCBoZWFkIG9mIGJsb2NrICIsICpibG9jaywgIlxuIik7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSogc3NhVmFyaWFibGUgPSBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlhYmxl
KTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBtX2NhbGN1
bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHNzYVZhcmlhYmxlKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFkZWYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFy
ZSByZXF1aXJlZCB0byBpbnNlcnQgYSBQaGksIHRoZW4gd2Ugd29uJ3QgaGF2ZSBhIHJlYWNoaW5n
IGRlZgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgaGVhZC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gZGVmLT52YWx1ZSgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+cmVwbGFjZW1lbnQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBvY2N1ciB3aGVuIGEgU2V0TG9jYWwgaGFkIGEgR2V0
TG9jYWwgYXMgaXRzIHNvdXJjZS4gVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXRM
b2NhbCB3b3VsZCBnZXQgcmVwbGFjZWQgd2l0aCBhbiBhY3R1YWwgU1NBIHZhbHVlIGJ5IHRoZSB0
aW1lIHdlIGdldAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGVyZS4gTm90ZSB0aGF0IHRo
ZSBTU0EgdmFsdWUgd2l0aCB3aGljaCB0aGUgR2V0TG9jYWwgZ290IHJlcGxhY2VkCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB3b3VsZCBub3QgaW4gdHVybiBoYXZlIGEgcmVwbGFjZW1lbnQu
CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+cmVwbGFjZW1lbnQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPnJlcGxhY2VtZW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6IHIiLCB2YWx1ZUZvck9wZXJhbmQub3Bl
cmFuZEZvckluZGV4KGkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAg
ICB2YWx1ZUZvck9wZXJhbmRbaV0gPSBub2RlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gbm9kZTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAg
IGRhdGFMb2coIlZhcmlhYmxlcyBhdCBoZWFkIGFmdGVyIGNvbnZlcmdlbmNlOlxuIik7Ci0gICAg
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFibG9jaykKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
ICIsICpibG9jaywgIjogIiwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgIlxuIik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIENvbnZlcnQgb3BlcmF0aW9u
cyBvdmVyIGxvY2FscyBpbnRvIG9wZXJhdGlvbnMgb3ZlciBTU0Egbm9kZXMuCi0gICAgICAgIC8v
IC0gR2V0TG9jYWwgb3ZlciBjYXB0dXJlZCB2YXJpYWJsZXMgbG9zZSB0aGVpciBwaGlzLgotICAg
ICAgICAvLyAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQg
cmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzCi0gICAgICAgIC8vICAgdG8gdGhlIG5vZGUgc3BlY2lm
aWVkIGJ5IHZhcmlhYmxlc0F0SGVhZC4KLSAgICAgICAgLy8gLSBTZXRMb2NhbCBnZXRzIE5vZGVN
dXN0R2VuZXJhdGUgaWYgaXQncyBmbHVzaGVkLCBvciB0dXJucyBpbnRvIGEKLSAgICAgICAgLy8g
ICBDaGVjayBvdGhlcndpc2UuCi0gICAgICAgIC8vIC0gRmx1c2ggbG9zZXMgaXRzIGNoaWxkcmVu
IGFuZCB0dXJucyBpbnRvIGEgUGhhbnRvbS4KLSAgICAgICAgLy8gLSBQaGFudG9tTG9jYWwgYmVj
b21lcyBQaGFudG9tLCBhbmQgaXRzIGNoaWxkIGlzIHdoYXRldmVyIGlzIHNwZWNpZmllZAotICAg
ICAgICAvLyAgIGJ5IHZhcmlhYmxlc0F0SGVhZC4KLSAgICAgICAgLy8gLSBTZXRBcmd1bWVudCB0
dXJucyBpbnRvIEdldEFyZ3VtZW50IHVubGVzcyBpdCdzIGEgY2FwdHVyZWQgdmFyaWFibGUuCi0g
ICAgICAgIC8vIC0gVXBzaWxvbnMgZ2V0IHRoZWlyIGNoaWxkcmVuIGZpeGVkIHRvIHJlZmVyIHRv
IHRoZSB0cnVlIHZhbHVlIG9mIHRoYXQgbG9jYWwKLSAgICAgICAgLy8gICBhdCB0aGUgZW5kIG9m
IHRoZSBibG9jay4gUHJpb3IgdG8gdGhpcyBsb29wLCBVcHNpbG9ucyB3aWxsIHJlZmVyIHRvCi0g
ICAgICAgIC8vICAgdmFyaWFibGVBdFRhaWxbb3BlcmFuZF0sIHdoaWNoIG1heSBiZSBhbnkgb2Yg
Rmx1c2gsIFBoYW50b21Mb2NhbCwgR2V0TG9jYWwsCi0gICAgICAgIC8vICAgU2V0TG9jYWwsIFNl
dEFyZ3VtZW50LCBvciBQaGkuIFdlIGFjY29tcGxpc2ggdGhpcyBieSBzZXR0aW5nIHRoZQotICAg
ICAgICAvLyAgIHJlcGxhY2VtZW50IHBvaW50ZXJzIG9mIGFsbCBvZiB0aG9zZSBub2RlcyB0byBy
ZWZlciB0byBlaXRoZXIKLSAgICAgICAgLy8gICB2YXJpYWJsZXNBdEhlYWRbb3BlcmFuZF0sIG9y
IHRoZSBjaGlsZCBvZiB0aGUgU2V0TG9jYWwuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAg
ICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUo
KTsgcGhpSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleF0t
PnJlcGxhY2VtZW50ID0KLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5vcGVyYW5kKGJsb2NrLT5waGlzW3BoaUluZGV4XS0+bG9jYWwoKSk7CisgICAgICAgICAgICAv
LyBJbnNlcnQgUGhpcyBieSBhc2tpbmcgdGhlIGNhbGN1bGF0b3Igd2hhdCBwaGlzIHRoZXJlIGFy
ZSBpbiB0aGlzIGJsb2NrLiBBbHNvIHVwZGF0ZQorICAgICAgICAgICAgLy8gdmFsdWVGb3JPcGVy
YW5kIHdpdGggdGhvc2UgUGhpcy4gRm9yIFBoaXMgYXNzb2NpYXRlZCB3aXRoIHZhcmlhYmxlcyB0
aGF0IGFyZSBub3QKKyAgICAgICAgICAgIC8vIGZsdXNoZWQsIHdlIGFsc28gaW5zZXJ0IGEgTW92
SGludC4KKyAgICAgICAgICAgIHNpemVfdCBwaGlJbnNlcnRpb25Qb2ludCA9IDA7CisgICAgICAg
ICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogbV9jYWxjdWxhdG9yLnBoaXNG
b3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgo
KV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCBpZiB0
aGUgbG9jYWwgaXMgbWVhbnQgdG8gYmUgZmx1c2hlZCBoZXJlLgorICAgICAgICAgICAgICAgIGJv
b2wgaXNGbHVzaGVkID0gISEoCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSktPmZsYWdzKCkgJiBOb2RlSXNGbHVzaGVk
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQocGhpSW5zZXJ0aW9uUG9pbnQsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhpRGVmLT52YWx1
ZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0ZsdXNoZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZy4gRm9yIG11bHRpcGxlIHJlYXNvbnMu
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBSZWFzb24gIzE6
IElmIHRoZSBsb2NhbCBpcyBmbHVzaGVkIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0
aCBhCisgICAgICAgICAgICAgICAgICAgIC8vIE1vdkhpbnQgc2luY2UgZXZlcnkgcGF0aCB0byB0
aGlzIHBvaW50IGluIHRoZSBjb2RlIHdpbGwgaGF2ZSBmbHVzaGVkIHRoZQorICAgICAgICAgICAg
ICAgICAgICAvLyBieXRlY29kZSB2YXJpYWJsZSB1c2luZyBhIFNldExvY2FsIGFuZCBoZW5jZSB0
aGUgQXZhaWxhYmlsaXR5OjpmbHVzaGVkQXQoKQorICAgICAgICAgICAgICAgICAgICAvLyB3aWxs
IGFncmVlLCBhbmQgdGhhdCB3aWxsIGJlIHN1ZmZpY2llbnQgZm9yIGZpZ3VyaW5nIG91dCBob3cg
dG8gcmVjb3ZlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUncyB2YWx1ZS4K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMjog
SWYgd2UgaGFkIGluc2VydGVkIGEgTW92SGludCBhbmQgdGhlIFBoaSBmdW5jdGlvbiBoYWQgZGll
ZAorICAgICAgICAgICAgICAgICAgICAvLyAoYmVjYXVzZSB0aGUgb25seSB1c2VyIG9mIHRoZSB2
YWx1ZSB3YXMgdGhlICJmbHVzaCIgLSBpLmUuIHNvbWUKKyAgICAgICAgICAgICAgICAgICAgLy8g
YXN5bmNocm9ub3VzIHJ1bnRpbWUgdGhpbmd5KSB0aGVuIHRoZSBNb3ZIaW50IHdvdWxkIHR1cm4g
aW50byBhIFpvbWJpZUhpbnQsCisgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIHdvdWxkIGZv
b2wgdXMgaW50byB0aGlua2luZyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBkZWFkLiBOb3RlIHRoYXQg
dGhpcworICAgICAgICAgICAgICAgICAgICAvLyByZWFzb24gaGFzIGEgbG90IHRvIGRvIHdpdGgg
dGhlIGZhY3QgdGhhdCBGbHVzaGVzIGRvIG5vdCB0dXJuIGludG8KKyAgICAgICAgICAgICAgICAg
ICAgLy8gUGhhbnRvbXMsIGJlY2F1c2Ugb3VyIGhhbmRsaW5nIG9mIEZsdXNoZXMgYXNzdW1lIHRo
YXQgd2UgKDEpIGFsd2F5cyBsZWF2ZQorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZmx1c2hl
ZCBTZXRMb2NhbHMgYWxvbmUgYW5kICgyKSBPU1IgYXZhaWxhYmlsaXR5IGFuYWx5c2lzIGFsd2F5
cyBzZWVzCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhdmFpbGFibGUgZmx1c2guIFRoZSBw
cmVzZW5jZSBvZiBhIE1vdkhpbnQgb3IgWm9tYmllSGludCB3b3VsZCBtYWtlIHRoZQorICAgICAg
ICAgICAgICAgICAgICAvLyBmbHVzaCBzZWVtIHVuYXZhaWxhYmxlLgorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMzOiBJZiB3ZSBoYWQgaW5zZXJ0
ZWQgYSBNb3ZIaW50IHRoZW4gZXZlbiBpZiB0aGUgUGhpIHN0YXllZCBhbGl2ZSwKKyAgICAgICAg
ICAgICAgICAgICAgLy8gd2Ugd291bGQgc3RpbGwgZW5kIHVwIGdlbmVyYXRpbmcgaW5lZmZpY2ll
bnQgY29kZSBzaW5jZSB3ZSB3b3VsZCBiZSB0ZWxsaW5nCisgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBPU1IgZXhpdCBjb21waWxlciB0byB1c2Ugc29tZSBTU0EgdmFsdWUgZm9yIHRoZSBieXRl
Y29kZSB2YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAvLyByYXRoZXIgdGhhbiBqdXN0IHRl
bGxpbmcgaXQgdGhhdCB0aGUgdmFsdWUgd2FzIGFscmVhZHkgb24gdGhlIHN0YWNrLgorICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBwaGlJbnNlcnRpb25Qb2ludCwgU3Bl
Y05vbmUsIE1vdkhpbnQsIE5vZGVPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVs
dEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKCFibG9jay0+YXQobm9kZUluZGV4KS0+cmVwbGFjZW1lbnQp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIlByb2Nlc3Npbmcgbm9kZSAiLCBub2RlLCAiOlxuIik7CisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguZHVtcChXVEY6OmRhdGFGaWxlKCksICIgICAgIiwgbm9kZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fZ3JhcGgucGVyZm9y
bVN1YnN0aXR1dGlvbihub2RlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CiAg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8ICEhKG5vZGUtPmZsYWdzKCkgJiBO
b2RlSXNGbHVzaGVkKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1lcmdlRmxhZ3Mo
Tm9kZU11c3RHZW5lcmF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENoZWNrKTsKLSAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7IC8v
IE9ubHkgZm9yIFVwc2lsb25zLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCF2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJN
YXBwaW5nOiByIiwgdmFyaWFibGUtPmxvY2FsKCksICIgLT4gIiwgbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSXQgc2VlbXMgdGVtcHRpbmcgdG8ganVzdCBkbyBm
b3J3YXJkUGhpKEdldExvY2FsKSwgZXhjZXB0IHRoYXQgd2UKLSAgICAgICAgICAgICAgICAgICAg
Ly8gY291bGQgaGF2ZSBjcmVhdGVkIGEgbmV3IChTU0EpIFBoaSwgYW5kIHRoZSBHZXRMb2NhbCBj
b3VsZCBzdGlsbCBiZQotICAgICAgICAgICAgICAgICAgICAvLyByZWZlcnJpbmcgdG8gYW4gb2xk
IChDUFMpIFBoaS4gVXNlcyB2YXJpYWJsZXNBdEhlYWQgdG8gdGVsbCB1cyB3aGF0Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIHRvIHJlZmVyIHRvLgogICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5yZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9kZSwgIiB3
aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIlxuIik7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gdmFsdWVGb3JPcGVyYW5k
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGNhc2UgRmx1c2g6IHsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQo
KTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwotICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgZm9yIFVwc2lsb25zLiBBbiBVcHNpbG9uIHdp
bGwgb25seSByZWZlciB0byBhIEZsdXNoIGlmCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZXJl
IHdlcmUgbm8gU2V0TG9jYWxzIG9yIEdldExvY2FscyBpbiB0aGUgYmxvY2suCi0gICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzYwLDE0ICszMzEsOSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbCB3b3VsZG4ndCBoYXZlIGJlZW4g
Y29tcHV0ZWQgYnkgdGhlIFBoaSByZWR1Y3Rpb24gYWxnb3JpdGhtCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhYm92ZS4KICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LnJlc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKS0+ZGVmYXVsdEVk
Z2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gdmFsdWVGb3JPcGVyYW5k
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5kZWZhdWx0RWRnZSgpOwogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFRoaXMgaXMgb25seSBmb3IgVXBzaWxvbnMuIEFuIFVwc2lsb24gd2lsbCBvbmx5IHJlZmVyIHRv
IGEKLSAgICAgICAgICAgICAgICAgICAgLy8gUGhhbnRvbUxvY2FsIGlmIHRoZXJlIHdlcmUgbm8g
U2V0TG9jYWxzIG9yIEdldExvY2FscyBpbiB0aGUgYmxvY2suCi0gICAgICAgICAgICAgICAgICAg
IG5vZGUtPnJlcGxhY2VtZW50ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM3NSwxNSArMzQxLDQ4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUt
PmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRBcmd1bWVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlc3VsdChyZXN1bHRGb3Iobm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBH
ZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghdmFyaWFibGUtPmlzQ2FwdHVyZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogciIs
IHZhcmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAg
ICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBub2RlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBpbnNlcnQgVXBzaWxvbnMganVzdCBiZWZvcmUgdGhl
IGVuZCBvZiB0aGUgYmxvY2suIE9uIHRoZSBzdXJmYWNlIHRoaXMKKyAgICAgICAgICAgIC8vIHNl
ZW1zIGRhbmdlcm91cyBiZWNhdXNlIHRoZSBVcHNpbG9uIHdpbGwgaGF2ZSBhIGNoZWNraW5nIFVz
ZUtpbmQuIEJ1dCwgd2Ugd2lsbCBub3QKKyAgICAgICAgICAgIC8vIGFjdHVhbGx5IGJlIHBlcmZv
cm1pbmcgdGhlIGNoZWNrIGF0IHRoZSBwb2ludCBvZiB0aGUgVXBzaWxvbjsgdGhlIGNoZWNrIHdp
bGwKKyAgICAgICAgICAgIC8vIGFscmVhZHkgaGF2ZSBiZWVuIHBlcmZvcm1lZCBhdCB0aGUgcG9p
bnQgd2hlcmUgdGhlIG9yaWdpbmFsIFNldExvY2FsIHdhcy4KKyAgICAgICAgICAgIHNpemVfdCB1
cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIE5v
ZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdpbjsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBibG9jay0+bnVtU3VjY2Vzc29ycygp
OyBzdWNjZXNzb3JJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvckJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CisgICAgICAgICAg
ICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2FsY3VsYXRvci5waGlz
Rm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBo
aU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JT
U0FJbmRleFtzc2FWYXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIEZsdXNo
Rm9ybWF0IGZvcm1hdCA9IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpOworICAgICAgICAgICAgICAg
ICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1c2VLaW5kRm9yKGZvcm1hdCk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwg
VXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhw
aGlOb2RlKSwgRWRnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJh
bmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNlS2luZCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIC8vIEZyZWUgYWxsIENQUyBwaGlzIGFuZCByZXNldCB2YXJp
YWJsZXMgdmVjdG9ycy4KQEAgLTQwNCw3MyArNDAzLDE5IEBAIHB1YmxpYzoKICAgICAgICAgbV9n
cmFwaC5tX2FyZ3VtZW50cy5jbGVhcigpOwogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX2Zv
cm0gPSBTU0E7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KIAotcHJpdmF0ZToKLSAgICB2
b2lkIGZvcndhcmRQaGlDaGlsZHJlbihOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgewotICAgICAgICAg
ICAgRWRnZSYgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwotICAgICAgICAgICAgaWYg
KCFlZGdlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbV9jaGFuZ2VkIHw9
IGZvcndhcmRQaGlFZGdlKGVkZ2UpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIE5vZGUq
IGZvcndhcmRQaGkoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBQaGk6IHsKLSAg
ICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5qdXN0T25lQ2hpbGQoKTsK
LSAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlOwotICAgICAgICAgICAgICAgIG5vZGUgPSBlZGdlLm5vZGUoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAg
ICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZTsKLSAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAg
ICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFNTQSB0cmFuc2Zvcm1hdGlvbjpcbiIpOwor
ICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBmb3J3YXJkUGhpRWRnZShFZGdlJiBlZGdlKQotICAgIHsKLSAgICAgICAgTm9kZSogbmV3
Tm9kZSA9IGZvcndhcmRQaGkoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAobmV3Tm9kZSA9PSBl
ZGdlLm5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZWRnZS5zZXRO
b2RlKG5ld05vZGUpOworCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKLSAgICB2
b2lkIGRlZHVwbGljYXRlQ2hpbGRyZW4oTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKLSAgICAgICAg
ICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOwotICAgICAgICAgICAgaWYg
KCFlZGdlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGVkZ2UgPT0g
bm9kZSkgewotICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2UoaS0tKTsK
LSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7
IGogPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGRyZW4uY2hpbGQoaikgPT0gZWRnZSkgewotICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5yZW1vdmVFZGdlKGotLSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIAorCisgICAgU1NBQ2FsY3VsYXRvciBtX2NhbGN1bGF0b3I7CiAgICAgSW5zZXJ0
aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwg
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGU7CisgICAg
VmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSo+IG1fdmFyaWFibGVGb3JTU0FJbmRleDsKICAgICBi
b29sIG1fY2hhbmdlZDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U1NBQ29udmVyc2lvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzQsMTAgKzM0LDkgQEAgY2xhc3MgR3JhcGg7CiAKIC8vIENvbnZlcnQgVGhyZWFkZWRDUFMg
Zm9ybSBpbnRvIFNTQSBmb3JtLiBUaGlzIHJlc3VsdHMgaW4gYSBmb3JtIHRoYXQgaGFzOgogLy8K
LS8vIC0gUm91Z2hseSBtaW5pbWFsIFBoaSdzLiBXZSB1c2UgdGhlIEF5Y29jayAmIEhvcnNwb29s
IGZpeHBvaW50IGZvcgotLy8gICBjb252ZXJ0aW5nIHRoZSBDUFMgbWF4aW1hbCBQaGlzIGludG8g
U1NBIG1pbmltYWwgUGhpcywgd2l0aCB0aGUgY2F2ZWF0Ci0vLyAgIHRoYXQgaXJyZWR1Y2libGUg
Y29udHJvbCBmbG93IG1heSByZXN1bHQgaW4gc29tZSBtaXNzZWQgb3Bwb3J0dW5pdGllcwotLy8g
ICBmb3IgUGhpIHJlZHVjdGlvbi4KKy8vIC0gTWluaW1hbCBQaGkncy4gV2UgdXNlIHRoZSB0aGUg
Q3l0cm9uIGV0IGFsIChUT1BMQVMnOTEpIGFsZ29yaXRobSBmb3IKKy8vICAgUGhpIGluc2VydGlv
bi4gTW9zdCBvZiB0aGUgYWxnb3JpdGhtIGlzIGltcGxlbWVudGVkIGluIFNTQUNhbGN1bGF0b3IK
Ky8vICAgYW5kIERvbWluYXRvcnMuCiAvLwogLy8gLSBObyB1c2VzIG9mIEdldExvY2FsL1NldExv
Y2FsIGV4Y2VwdCBmb3IgY2FwdHVyZWQgdmFyaWFibGVzIGFuZCBmbHVzaGVzLgogLy8gICBBZnRl
ciB0aGlzLCBhbnkgcmVtYWluaW5nIFNldExvY2FsIG1lYW5zIEZsdXNoLiBQaGFudG9tTG9jYWxz
IGJlY29tZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJ
KHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIFZhbGlkYXRlIHsKIHB1YmxpYzoKLSAgICBWYWxpZGF0
ZShHcmFwaCYgZ3JhcGgsIEdyYXBoRHVtcE1vZGUgZ3JhcGhEdW1wTW9kZSkKKyAgICBWYWxpZGF0
ZShHcmFwaCYgZ3JhcGgsIEdyYXBoRHVtcE1vZGUgZ3JhcGhEdW1wTW9kZSwgQ1N0cmluZyBncmFw
aER1bXBCZWZvcmVQaGFzZSkKICAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQogICAgICAgICAsIG1f
Z3JhcGhEdW1wTW9kZShncmFwaER1bXBNb2RlKQorICAgICAgICAsIG1fZ3JhcGhEdW1wQmVmb3Jl
UGhhc2UoZ3JhcGhEdW1wQmVmb3JlUGhhc2UpCiAgICAgewogICAgIH0KICAgICAKQEAgLTI2Niw2
ICsyNjcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIEdy
YXBoRHVtcE1vZGUgbV9ncmFwaER1bXBNb2RlOworICAgIENTdHJpbmcgbV9ncmFwaER1bXBCZWZv
cmVQaGFzZTsKICAgICAKICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gbV9teVJlZkNvdW50
czsKICAgICBIYXNoU2V0PE5vZGUqPiBtX2FjY2VwdGFibGVOb2RlczsKQEAgLTU2NCwxNCArNTY2
LDE5IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAobV9ncmFwaER1bXBNb2RlID09IERv
bnREdW1wR3JhcGgpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRhdGFMb2coIlxuIik7
CisgICAgICAgIGlmICghbV9ncmFwaER1bXBCZWZvcmVQaGFzZS5pc051bGwoKSkgeworICAgICAg
ICAgICAgZGF0YUxvZygiQmVmb3JlIHBoYXNlOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKG1f
Z3JhcGhEdW1wQmVmb3JlUGhhc2UpOworICAgICAgICB9CiAgICAgICAgIGRhdGFMb2coIkF0IHRp
bWUgb2YgZmFpbHVyZTpcbiIpOwogICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICB9CiB9Owog
Ci12b2lkIHZhbGlkYXRlKEdyYXBoJiBncmFwaCwgR3JhcGhEdW1wTW9kZSBncmFwaER1bXBNb2Rl
KQordm9pZCB2YWxpZGF0ZShHcmFwaCYgZ3JhcGgsIEdyYXBoRHVtcE1vZGUgZ3JhcGhEdW1wTW9k
ZSwgQ1N0cmluZyBncmFwaER1bXBCZWZvcmVQaGFzZSkKIHsKLSAgICBWYWxpZGF0ZSB2YWxpZGF0
aW9uT2JqZWN0KGdyYXBoLCBncmFwaER1bXBNb2RlKTsKKyAgICBWYWxpZGF0ZSB2YWxpZGF0aW9u
T2JqZWN0KGdyYXBoLCBncmFwaER1bXBNb2RlLCBncmFwaER1bXBCZWZvcmVQaGFzZSk7CiAgICAg
dmFsaWRhdGlvbk9iamVjdC52YWxpZGF0ZSgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5oCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBlbnVtIEdyYXBoRHVtcE1vZGUg
eyBEb250RHVtcEdyYXBoLCBEdW1wR3JhcGggfTsKIAotdm9pZCB2YWxpZGF0ZShHcmFwaCYsIEdy
YXBoRHVtcE1vZGUgPSBEdW1wR3JhcGgpOwordm9pZCB2YWxpZGF0ZShHcmFwaCYsIEdyYXBoRHVt
cE1vZGUgPSBEdW1wR3JhcGgsIENTdHJpbmcgZ3JhcGhEdW1wQmVmb3JlUGhhc2UgPSBDU3RyaW5n
KCkpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzMzMzcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ1LDEyICsxNDUsMTAgQEAgcHVibGljOgogICAgICAgICBtX291dC5h
cHBlbmRUbyhtX3Byb2xvZ3VlLCBzdGFja092ZXJmbG93KTsKICAgICAgICAgY3JlYXRlUGhpVmFy
aWFibGVzKCk7CiAKLSAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZpcnN0OwotICAg
ICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIoZGVwdGhGaXJzdCk7CisgICAgICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKj4gcHJlT3JkZXIgPSBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKTsK
IAogICAgICAgICBpbnQgbWF4TnVtYmVyT2ZBcmd1bWVudHMgPSAtMTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBibG9ja0luZGV4ID0gZGVwdGhGaXJzdC5zaXplKCk7IGJsb2NrSW5kZXgtLTsgKSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3RbYmxvY2tJbmRleF07
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcmVPcmRlcikgewogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTsg
KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwog
ICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewpAQCAtMjExLDkgKzIwOSw4IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1h
eEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwog
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBjb21waWxlQmxvY2soZGVwdGhGaXJzdFtpXSk7CisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcmVPcmRlcikKKyAgICAgICAgICAgIGNvbXBpbGVCbG9j
ayhibG9jayk7CiAgICAgICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6ZHVtcExMVk1JUigpKQog
ICAgICAgICAgICAgZHVtcE1vZHVsZShtX2Z0bFN0YXRlLm1vZHVsZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
OCw2ICsxMjgsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJv
b2wsIHByaW50RWFjaE9TUkV4aXQsIGZhbHNlKSBcCiAgICAgdihib29sLCB2YWxpZGF0ZUdyYXBo
LCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlLCBmYWxzZSkg
XAorICAgIHYoYm9vbCwgdmVyYm9zZVZhbGlkYXRpb25GYWlsdXJlLCBmYWxzZSkgXAogICAgIHYo
Ym9vbCwgdmVyYm9zZU9TUiwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VGVExPU1JFeGl0
LCBmYWxzZSkgXAogICAgIHYoYm9vbCwgdmVyYm9zZUNhbGxMaW5rLCBmYWxzZSkgXApJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE3MzM2NikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTQtMDktMDcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KKworICAgICAgICBERkcgc2hvdWxkIGhhdmUgYSByZXVzYWJsZSBTU0EgYnVpbGRlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MzMxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBV
cGRhdGUgdGhlIGFsbG9jKCkgbWV0aG9kIHRvIHVzZSB2YXJpYWRpYyB0ZW1wbGF0ZXMuIFRoaXMg
bWFrZXMgaXQgbW9yZSBuYXR1cmFsIHRvIHVzZS4KKworICAgICAgICAqIHd0Zi9TZWdtZW50ZWRW
ZWN0b3IuaDoKKyAgICAgICAgKFdURjo6U2VnbWVudGVkVmVjdG9yOjphbGxvYyk6CisKIDIwMTQt
MDktMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgdXBk
YXRlcyBzdWdnZXN0ZWQgYnkgbmV3IHZlcnNpb24gb2YgWGNvZGUKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1NlZ21lbnRlZFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NlZ21l
bnRlZFZlY3Rvci5oCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvV1RGL3d0Zi9TZWdtZW50
ZWRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDkgKzE1NywxMCBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgICAgIHNlZ21lbnRGb3IobV9zaXplIC0gMSktPnVuY2hlY2tlZEFwcGVu
ZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKICAgICAgICAgfQogCi0gICAgICAgIFQmIGFsbG9j
KCkKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgVCYgYWxsb2Mo
QXJncy4uLiBhcmdzKQogICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmQ8VD4oVCgpKTsKKyAg
ICAgICAgICAgIGFwcGVuZDxUPihUKGFyZ3MuLi4pKTsKICAgICAgICAgICAgIHJldHVybiBsYXN0
KCk7CiAgICAgICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237804</attachid>
            <date>2014-09-08 12:31:51 -0700</date>
            <delta_ts>2014-09-08 12:59:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79659</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMzkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBA
QAorMjAxNC0wOS0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgaGF2ZSBhIHJldXNhYmxlIFNTQSBidWlsZGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzYzMzEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdlIHdhbnQgdG8gaW1wbGVt
ZW50IHNvcGhpc3RpY2F0ZWQgU1NBIHRyYW5zZm9ybWF0aW9ucyBsaWtlIG9iamVjdCBhbGxvY2F0
aW9uIHNpbmtpbmcKKyAgICAgICAgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzYzMzApLCBidXQgdG8gZG8gdGhhdCwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGRvCisg
ICAgICAgIHVwZGF0ZXMgdG8gU1NBIHRoYXQgcmVxdWlyZSBpbnNlcnRpbmcgbmV3IFBoaSdzLiBU
aGlzIHJlcXVpcmVzIGNhbGN1bGF0aW5nIHdoZXJlIFBoaXMgZ28uCisgICAgICAgIFByZXZpb3Vz
bHksIG91ciBQaGkgY2FsY3VsYXRpb24gd2FzIGJhc2VkIG9uIEF5Y29jayBhbmQgSG9yc3Bvb2wn
cyBhbGdvcml0aG0sIGFuZCBvdXIKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBhbGdv
cml0aG0gb25seSB3b3JrZWQgd2hlbiBkb2luZyBDUFMtPlNTQSBjb252ZXJzaW9uLiBUaGUgY29k
ZQorICAgICAgICBjb3VsZCBub3QgYmUgcmV1c2VkIGZvciBjYXNlcyB3aGVyZSBzb21lIHBoYXNl
IGhhcHBlbnMgdG8ga25vdyB0aGF0IGl0IGludHJvZHVjZWQgYSBmZXcKKyAgICAgICAgZGVmcyBp
biBzb21lIGJsb2NrcyBhbmQgaXQgd2FudHMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgUGhpcyBz
aG91bGQgZ28uIE1vcmVvdmVyLCBldmVuCisgICAgICAgIHRoZSBnZW5lcmFsIGFsZ29yaXRobSBv
ZiBBeWNvY2sgYW5kIEhvcnNwb29sIGlzIG5vdCB3ZWxsIHN1aXRlZCB0byBzdWNoIHRhcmdldHRl
ZCBTU0EKKyAgICAgICAgdXBkYXRlcywgc2luY2UgaXQgcmVxdWlyZXMgZmlyc3QgaW5zZXJ0aW5n
IG1heGltYWwgUGhpcy4gVGhhdCBzY2FsZXMgd2VsbCB3aGVuIHRoZSBQaGlzCisgICAgICAgIHdl
cmUgYWxyZWFkeSB0aGVyZSAobGlrZSBpbiBvdXIgQ1BTIGZvcm0pIGJ1dCBvdGhlcndpc2UgaXQn
cyBxdWl0ZSB1bm5hdHVyYWwgYW5kIG1heSBiZQorICAgICAgICBkaWZmaWN1bHQgdG8gbWFrZSBl
ZmZpY2llbnQuCisgICAgICAgIAorICAgICAgICBUaGUgdXN1YWwgd2F5IG9mIGhhbmRsaW5nIGJv
dGggU1NBIGNvbnZlcnNpb24gYW5kIFNTQSB1cGRhdGUgaXMgdG8gdXNlIEN5dHJvbiBldCBhbCdz
CisgICAgICAgIGFsZ29yaXRobSBiYXNlZCBvbiBkb21pbmFuY2UgZnJvbnRpZXJzLiBGb3IgYSB3
aGlsZSBub3csIEkndmUgYmVlbiB3b3JraW5nIG9uIGNyZWF0aW5nIGEKKyAgICAgICAgQ3l0cm9u
LWJhc2VkIFNTQSBjYWxjdWxhdG9yIHRoYXQgY2FuIGJlIHVzZWQgYm90aCBhcyBhIHJlcGxhY2Vt
ZW50IGZvciBvdXIgY3VycmVudCBTU0EKKyAgICAgICAgY29udmVydGVyIGFuZCBhcyBhIHJldXNh
YmxlIHRvb2wgZm9yIGFueSBwaGFzZSB0aGF0IG5lZWRzIHRvIGRvIFNTQSB1cGRhdGUuIEkgcHJl
dmlvdXNseQorICAgICAgICBvcHRpbWl6ZWQgb3VyIGRvbWluYXRvciBjYWxjdWxhdGlvbiBhbmQg
cmVwcmVzZW50YXRpb24gdG8gdXNlIGRvbWluYXRvciB0cmVlcyBjb21wdXRlZAorICAgICAgICB1
c2luZyBMZW5nYXVlciBhbmQgVGFyamFuJ3MgYWxnb3JpdGhtIC0gbWFpbmx5IHRvIG1ha2UgaXQg
bW9yZSBzY2FsYWJsZSB0byBlbnVtZXJhdGUgb3ZlcgorICAgICAgICB0aGUgc2V0IG9mIGJsb2Nr
cyB0aGF0IGRvbWluYXRlIHlvdSBvciB2aWNlLXZlcnNhLCBhbmQgdGhlbiBJIGltcGxlbWVudGVk
IGEgZG9taW5hbmNlCisgICAgICAgIGZyb250aWVyIGNhbGN1bGF0b3IuIFRoaXMgcGF0Y2ggaW1w
bGVtZW50cyB0aGUgZmluYWwgc3RlcCB0b3dhcmRzIG1ha2luZyBTU0EgdXBkYXRlCisgICAgICAg
IGF2YWlsYWJsZSB0byBhbGwgU1NBIHBoYXNlczogaXQgaW1wbGVtZW50cyBhbiBTU0FDYWxjdWxh
dG9yIHRoYXQgY2FuIHRlbGwgeW91IHdoZXJlIFBoaXMKKyAgICAgICAgZ28gd2hlbiBnaXZlbiBh
biBhcmJpdHJhcnkgc2V0IG9mIERlZnMuIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSwgYW5kIHRvIGVu
c3VyZSB0aGF0IHdlIGhhdmUKKyAgICAgICAgZ29vZCB0ZXN0IGNvdmVyYWdlIGZvciB0aGlzIFNT
QUNhbGN1bGF0b3IsIHRoaXMgcGF0Y2ggcmVwbGFjZXMgdGhlIG9sZCBBeWNvY2stSG9yc3Bvb2wK
KyAgICAgICAgU1NBIGNvbnZlcnRlciB3aXRoIG9uZSBiYXNlZCBvbiB0aGUgU1NBQ2FsY3VsYXRv
ci4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaGFzIG5vIG9ic2VydmFibGUgaW1wYWN0LiBJdCBk
b2VzIHJlZHVjZSB0aGUgYW1vdW50IG9mIGNvZGUgaW4gU1NBQ29udmVyc2lvblBoYXNlLgorICAg
ICAgICBCdXQgZXZlbiBiZXR0ZXIsIGl0IG1ha2VzIFNTQUNvbnZlcnNpb25QaGFzZSBoYXZlIHNp
Z25pZmljYW50bHkgbGVzcyB0cmlja3kgbG9naWMuIEl0CisgICAgICAgIG1vc3RseSBqdXN0IHJl
bGllcyBvbiBTU0FDYWxjdWxhdG9yIHRvIGRvIHRoZSB0cmlja3kgc3R1ZmYsIGFuZCBTU0FDb252
ZXJzaW9uUGhhc2UgbW9zdGx5CisgICAgICAgIGp1c3QgcmVhc29ucyBhYm91dCB0aGUgd2VpcmRu
ZXNzZXMgdW5pcXVlIHRvIHRoZSBUaHJlYWRlZENQUyBmb3JtIHRoYXQgaXQgc2VlcyBhcyBpbnB1
dC4KKyAgICAgICAgSW4gZmFjdCwgdXNpbmcgdGhlIEN5dHJvbiBldCBhbCBhcHByb2FjaCBtZWFu
cyB0aGF0IHRoZXJlIGlzbid0IHJlYWxseSBhbnkgInNtb2tlIGFuZAorICAgICAgICBtaXJyb3Jz
IiB0cmlja3luZXNzIHJlbGF0ZWQgdG8gU1NBLiBTU0FDYWxjdWxhdG9yJ3Mgb25seSAidHJpY2tz
IiBhcmUgdXNpbmcgdGhlIHBydW5lZAorICAgICAgICBpdGVyYXRlZCBkb21pbmFuY2UgZnJvbnRp
ZXIgdG8gcGxhY2UgUGhpJ3MgYW5kIHVzaW5nIHRoZSBkb20gdHJlZSB0byBmaW5kIHJlYWNoaW5n
IGRlZnMuCisgICAgICAgIFRoZSBjb21wbGV4aXR5IGlzIG1vc2x0eSBjb25maW5lZCB0byBEb21p
bmF0b3JzLCB3aGljaCBjb21wdXRlcyB2YXJpb3VzIGRvbWluYXRvci1yZWxhdGVkCisgICAgICAg
IHByb3BlcnRpZXMgb3ZlciB0aGUgY29udHJvbCBmbG93IGdyYXBoLiBUaGF0IGNsYXNzIGNhbiBi
ZSBkaWZmaWN1bHQgdG8gdW5kZXJzdGFuZCwgYnV0IGF0CisgICAgICAgIGxlYXN0IGl0IGZvbGxv
d3Mgd2VsbC1rbm93biBncmFwaCB0aGVvcnkgd2lzZG9tLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogZGZnL0RGR0FuYWx5c2lzLmg6CisgICAgICAgICogZGZnL0RGR0NTRVBo
YXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHRENFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkRDRVBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdEb21pbmF0b3JzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6aW1tZWRpYXRlRG9taW5hdG9yT2YpOgorICAgICAg
ICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VG
cm9udGllck9mKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpmb3JBbGxCbG9ja3NJ
blBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZik6CisgICAgICAgICogZGZnL0RGR0dy
YXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmJsb2Nrc0luUHJlT3JkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpibG9ja3NJblBvc3RPcmRlcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldEJsb2Nr
c0luUHJlT3JkZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnZXRCbG9j
a3NJblBvc3RPcmRlcik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAg
ICAgICogZGZnL0RGR0xJQ01QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TElDTVBoYXNl
OjpydW4pOgorICAgICAgICAqIGRmZy9ERkdOb2RlRmxhZ3MuaDoKKyAgICAgICAgKiBkZmcvREZH
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBoYXNlOjpiZWdpblBoYXNlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQaGFzZTo6ZW5kUGhhc2UpOgorICAgICAgICAqIGRmZy9ERkdQaGFzZS5o
OgorICAgICAgICAqIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGU6OmR1bXApOgorICAgICAgICAoSlNDOjpE
Rkc6OlNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlOjpkdW1wVmVyYm9zZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U1NBQ2FsY3VsYXRvcjo6RGVmOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FD
YWxjdWxhdG9yOjpTU0FDYWxjdWxhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxh
dG9yOjp+U1NBQ2FsY3VsYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6
bmV3VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6Om5ld0RlZik6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6bm9uTG9jYWxSZWFjaGluZ0RlZik6
CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZBdFRhaWwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OmR1bXApOgorICAgICAgICAqIGRmZy9E
RkdTU0FDYWxjdWxhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlOjppbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGU6OlZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpE
ZWY6OnZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpEZWY6OmJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpEZWY6OnZhbHVlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9yOjpEZWY6OkRlZik6CisgICAgICAgIChKU0M6
OkRGRzo6U1NBQ2FsY3VsYXRvcjo6dmFyaWFibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNh
bGN1bGF0b3I6OmNvbXB1dGVQaGlzKToKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDYWxjdWxhdG9y
OjpwaGlzRm9yQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNhbGN1bGF0b3I6OnJlYWNo
aW5nRGVmQXRIZWFkKToKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OlNTQUNvbnZlcnNpb25QaGFz
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2FyZFBoaUNoaWxkcmVuKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OmZvcndhcmRQaGkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFzZTo6Zm9yd2Fy
ZFBoaUVkZ2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZlcnNpb25QaGFz
ZTo6ZGVkdXBsaWNhdGVDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5oOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VmFsaWRhdGU6OlZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWxp
ZGF0ZTo6ZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6dmFsaWRh
dGUpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd2Vy
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0wOS0wOCAgU2FhbSBCYXJh
dGkgIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CiAKICAgICAgICAgTWVyZ2UgU3RydWN0dXJlU2hh
cGVzIHRoYXQgc2hhcmUgdGhlIHNhbWUgcHJvdG90eXBlIGNoYWluCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw2ICsyMDEsNyBA
QCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHUHVyZVZhbHVlLmNwcAogICAgIGRmZy9ERkdSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1NTQUNhbGN1bGF0b3Iu
Y3BwCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU1NBTG93
ZXJpbmdQaGFzZS5jcHAKICAgICBkZmcvREZHU2FmZXBvaW50LmNwcApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTEsNiArNDUxLDcgQEAKICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBQ2FsY3VsYXRvci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNlLmNwcCIg
Lz4KQEAgLTExMDEsNiArMTEwMiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdTU0FDYWxjdWxhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHU1NBQ29udmVyc2lvblBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHU1NBTG93ZXJpbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1N0YWNrTGF5b3V0UGhhc2UuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzQxLDYgKzM0MSw4IEBACiAJCTBGNjY2RUNEMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNl
bmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QzE0REYzRjE2
MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY4MkZCMjE5QkNC
MzY0MDBGQTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY4MkZCMDE5QkNCMzY0MDBGQTNCQUQgLyogREZH
U1NBQ2FsY3VsYXRvci5jcHAgKi87IH07CisJCTBGNjgyRkIzMTlCQ0IzNjQwMEZBM0JBRCAvKiBE
RkdTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjY4MkZCMTE5QkNCMzY0MDBGQTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjlDQzg4
MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY5Q0M4NjE5M0FDNjBBMDA0NTc1OUUgLyog
REZHRnJvemVuVmFsdWUuY3BwICovOyB9OwogCQkwRjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyog
REZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjlDQzg3MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkIxQ0I1MTg1
RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjMxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2Fs
bC5jcHAgKi87IH07CkBAIC0yMjYwLDYgKzIyNjIsOCBAQAogCQkwRjY2NkVDQjE4MzZCMzdFMDBE
MDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5o
OyBwYXRoID0gZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2RTE2ODE0REYzRjEzMDBCN0IyRTQgLyogREZHQWRq
YWNlbmN5TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBZGphY2Vu
Y3lMaXN0Lmg7IHBhdGggPSBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2RTE2OTE0REYzRjEzMDBCN0IyRTQgLyogREZHRWRnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdFZGdlLmg7IHBhdGggPSBkZmcvREZHRWRn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY4MkZCMDE5QkNCMzY0MDBGQTNC
QUQgLyogREZHU1NBQ2FsY3VsYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdTU0FDYWxjdWxhdG9yLmNwcDsgcGF0aCA9IGRmZy9ERkdTU0FDYWxjdWxhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2ODJGQjExOUJDQjM2NDAwRkEz
QkFEIC8qIERGR1NTQUNhbGN1bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHU1NBQ2FsY3VsYXRvci5oOyBwYXRoID0gZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlFIC8qIERG
R0Zyb3plblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0Zyb3plblZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdGcm96ZW5WYWx1ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjlDQzg3MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96
ZW5WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGcm96ZW5WYWx1
ZS5oOyBwYXRoID0gZGZnL0RGR0Zyb3plblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsgcGF0aCA9IGZ0bC9G
VExKU0NhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTAxMiw2ICs1MDE2
LDggQEAKIAkJCQk4NkVDOURDMzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQu
aCAqLywKIAkJCQk4Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAgKi8sCiAJCQkJODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUNjQuY3BwICovLAorCQkJCTBGNjgyRkIwMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FD
YWxjdWxhdG9yLmNwcCAqLywKKwkJCQkwRjY4MkZCMTE5QkNCMzY0MDBGQTNCQUQgLyogREZHU1NB
Q2FsY3VsYXRvci5oICovLAogCQkJCUE3RDg5Q0YwMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwICovLAogCQkJCUE3RDg5Q0YxMTdBMEI4Q0MwMDc3M0FEOCAvKiBE
RkdTU0FDb252ZXJzaW9uUGhhc2UuaCAqLywKIAkJCQkwRkMyMENCNzE4NTU2QTM1MDBDOUU5NTQg
LyogREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAgKi8sCkBAIC02NDc4LDYgKzY0ODQsNyBAQAogCQkJ
CTBGQzMxNDEyMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1MEFGM0MxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3RDIzRUUxODkxQjU1NDAwMzFDN0ZBIC8qIFJlZ3Vs
YXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY4MkZCMzE5QkNCMzY0MDBGQTNC
QUQgLyogREZHU1NBQ2FsY3VsYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUQxNUVE
OEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERUExOTgz
MkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1
RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MjIxLDYgKzcyMjgsNyBAQAogCQkJCTJBQUNFNjNDMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0Fj
dGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMTcxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NkRFMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY4MkZC
MjE5QkNCMzY0MDBGQTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDMzEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0N0YzOUM0MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlQ29udmVyc2lv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNTEwN0VDMzc2MDA0MjdBNDggLyogRGF0
ZUluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBbmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQW5hbHlzaXMuaAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw3
ICszNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZ3JhcGguaW5pdGlhbGl6ZU5vZGVPd25lcnMo
KTsKICAgICAgICAgbV9ncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KG1fZ3Jh
cGgpOwogICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKG1fcHJl
T3JkZXIpOworICAgICAgICBtX3ByZU9yZGVyID0gbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCk7
CiAgICAgICAgIAogICAgICAgICAvLyBGaXJzdCBmaWd1cmUgb3V0IHdoYXQgZ2V0cyBjbG9iYmVy
ZWQgYnkgYmxvY2tzLiBOb2RlIHRoYXQgdGhpcyB1c2VzIHRoZSBwcmVPcmRlciBsaXN0CiAgICAg
ICAgIC8vIGZvciBjb252ZW5pZW5jZSBvbmx5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTAgKzEx
Niw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IFNTQSkgewotICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBkZXB0aEZp
cnN0OwotICAgICAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKGRlcHRoRmlyc3Qp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoRmlyc3Quc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICAgICAgZml4dXBCbG9jayhkZXB0aEZpcnN0W2ldKTsKKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIo
KSkKKyAgICAgICAgICAgICAgICBmaXh1cEJsb2NrKGJsb2NrKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BT
KTsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21p
bmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21p
bmF0b3JzLmgJKHJldmlzaW9uIDE3MzMzNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBmcm9tID09IHRvIHx8IHN0cmljdGx5RG9taW5hdGVzKGZyb20sIHRv
KTsKICAgICB9CiAgICAgCisgICAgQmFzaWNCbG9jayogaW1tZWRpYXRlRG9taW5hdG9yT2YoQmFz
aWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2Nr
XS5pZG9tUGFyZW50OworICAgIH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgogICAgIHZvaWQgZm9yQWxsU3RyaWN0RG9taW5hdG9yc09mKEJhc2ljQmxvY2sqIHRvLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAogICAgIHsKQEAgLTExOSwxNCArMTI0LDI4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGZvckFsbEJsb2Nrc0luSXRlcmF0ZWREb21pbmFuY2VGcm9udGllck9m
KAogICAgICAgICBjb25zdCBCbG9ja0xpc3QmIGZyb20sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CiAgICAgeworICAgICAgICBmb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJv
bnRpZXJPZigKKyAgICAgICAgICAgIGZyb20sCisgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sq
IGJsb2NrKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGJsb2NrKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAg
ICAvLyBUaGlzIGlzIGEgY2xvc2UgcmVsYXRpdmUgb2YgZm9yQWxsQmxvY2tzSW5JdGVyYXRlZERv
bWluYW5jZUZyb250aWVyT2YoKSwgd2hpY2ggYWxsb3dzIHRoZQorICAgIC8vIGdpdmVuIGZ1bmN0
b3IgdG8gcmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIHRoYXQgd2UgZG9uJ3Qgd2lzaCB0byBjb25z
aWRlciB0aGUgZ2l2ZW4gYmxvY2suCisgICAgLy8gVXNlZnVsIGZvciBjb21wdXRpbmcgcHJ1bmVk
IFNTQSBmb3JtLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JB
bGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9taW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgY29u
c3QgQmxvY2tMaXN0JiBmcm9tLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKICAgICAg
ICAgQmxvY2tTZXQgc2V0OwogICAgICAgICBmb3JBbGxCbG9ja3NJbkl0ZXJhdGVkRG9taW5hbmNl
RnJvbnRpZXJPZkltcGwoCiAgICAgICAgICAgICBmcm9tLAogICAgICAgICAgICAgWyZdIChCYXNp
Y0Jsb2NrKiBibG9jaykgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgaWYgKCFzZXQuYWRkKGJs
b2NrKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IGZ1bmN0b3IoYmxvY2spOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgIHJldHVybiBmdW5jdG9yKGJsb2NrKTsKICAgICAgICAgICAgIH0pOwogICAgIH0KICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
NzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIzLDEwICs0MjMsMTAgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgY29udGV4dCA9ICZteUNv
bnRleHQ7CiAgICAgCi0gICAgZGF0YUxvZygiXG4iKTsKLSAgICBkYXRhTG9nKCJERkcgZm9yICIs
IENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpLCAiOlxu
Iik7Ci0gICAgZGF0YUxvZygiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAi
OyBGb3JtOiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9u
U3RhdGUsICI7IFJlZiBjb3VudCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAiXG4iKTsKLSAg
ICBkYXRhTG9nKCJcbiIpOworICAgIG91dC5wcmludCgiXG4iKTsKKyAgICBvdXQucHJpbnQoIkRG
RyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJ
VCksICI6XG4iKTsKKyAgICBvdXQucHJpbnQoIiAgRml4cG9pbnQgc3RhdGU6ICIsIG1fZml4cG9p
bnRTdGF0ZSwgIjsgRm9ybTogIiwgbV9mb3JtLCAiOyBVbmlmaWNhdGlvbiBzdGF0ZTogIiwgbV91
bmlmaWNhdGlvblN0YXRlLCAiOyBSZWYgY291bnQgc3RhdGU6ICIsIG1fcmVmQ291bnRTdGF0ZSwg
IlxuIik7CisgICAgb3V0LnByaW50KCJcbiIpOwogICAgIAogICAgIE5vZGUqIGxhc3ROb2RlID0g
MDsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNpemUoKTsgKytiKSB7CkBA
IC00OTUsMTIgKzQ5NSwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1
bXBDCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgVmFsdWVzOiAiLCBub2RlTWFwRHVtcChibG9j
ay0+c3NhLT52YWx1ZXNBdFRhaWwsIGNvbnRleHQpLCAiXG4iKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9IH0KLSAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgb3V0LnByaW50
KCJcbiIpOwogICAgIH0KICAgICAKICAgICBpZiAoIW15Q29udGV4dC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbXlDb250ZXh0LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgZGF0YUxvZygi
XG4iKTsKKyAgICAgICAgbXlDb250ZXh0LmR1bXAob3V0KTsKKyAgICAgICAgb3V0LnByaW50KCJc
biIpOwogICAgIH0KIH0KIApAQCAtNjI2LDggKzYyNiw5IEBAIHZvaWQgR3JhcGg6OnN1YnN0aXR1
dGVHZXRMb2NhbChCYXNpY0Jsb2MKICAgICB9CiB9CiAKLXZvaWQgR3JhcGg6OmdldEJsb2Nrc0lu
UHJlT3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQorQmxvY2tMaXN0IEdyYXBoOjpi
bG9ja3NJblByZU9yZGVyKCkKIHsKKyAgICBCbG9ja0xpc3QgcmVzdWx0OwogICAgIEJsb2NrV29y
a2xpc3Qgd29ya2xpc3Q7CiAgICAgd29ya2xpc3QucHVzaChibG9jaygwKSk7CiAgICAgd2hpbGUg
KEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKQEAgLTYzNSwxMCArNjM2LDEy
IEBAIHZvaWQgR3JhcGg6OmdldEJsb2Nrc0luUHJlT3JkZXIoVmVjdG9yPEIKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKICAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2goYmxvY2stPnN1Y2Nlc3NvcihpKSk7CiAgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXZvaWQgR3JhcGg6OmdldEJsb2Nrc0luUG9zdE9yZGVyKFZlY3RvcjxCYXNp
Y0Jsb2NrKj4mIHJlc3VsdCkKK0Jsb2NrTGlzdCBHcmFwaDo6YmxvY2tzSW5Qb3N0T3JkZXIoKQog
eworICAgIEJsb2NrTGlzdCByZXN1bHQ7CiAgICAgUG9zdE9yZGVyQmxvY2tXb3JrbGlzdCB3b3Jr
bGlzdDsKICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsKICAgICB3aGlsZSAoQmxvY2tXaXRo
T3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CkBAIC02NTMsNiArNjU2LDcgQEAgdm9pZCBH
cmFwaDo6Z2V0QmxvY2tzSW5Qb3N0T3JkZXIoVmVjdG9yPAogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBHcmFwaDo6Y2xl
YXJSZXBsYWNlbWVudHMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NzYsOCArNjc2LDggQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXJSZXBsYWNlbWVudHMoKTsKICAgICB2b2lkIGluaXRpYWxpemVOb2RlT3duZXJzKCk7CiAgICAg
Ci0gICAgdm9pZCBnZXRCbG9ja3NJblByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3Vs
dCk7Ci0gICAgdm9pZCBnZXRCbG9ja3NJblBvc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiBy
ZXN1bHQpOworICAgIEJsb2NrTGlzdCBibG9ja3NJblByZU9yZGVyKCk7CisgICAgQmxvY2tMaXN0
IGJsb2Nrc0luUG9zdE9yZGVyKCk7CiAgICAgCiAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBj
b21waWxhdGlvbigpIHsgcmV0dXJuIG1fcGxhbi5jb21waWxhdGlvbi5nZXQoKTsgfQogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNp
b24gMTczMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsMTYgKzE1MCw5IEBAIHB1YmxpYzoKICAgICAgICAgLy8K
ICAgICAgICAgLy8gRm9yIG1heGltdW0gcHJvZml0LCB3ZSB3YWxrIGJsb2NrcyBpbiBERlMgb3Jk
ZXIgdG8gZW5zdXJlIHRoYXQgd2UgZ2VuZXJhbGx5CiAgICAgICAgIC8vIHRlbmQgdG8gaG9pc3Qg
ZG9taW5hdG9ycyBiZWZvcmUgZG9taW5hdGVlcy4KLSAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sq
PiBkZXB0aEZpcnN0OwotICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIoZGVwdGhG
aXJzdCk7CiAgICAgICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3BTdGFjazsKICAg
ICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoCi0gICAgICAgICAgICB1
bnNpZ25lZCBkZXB0aEZpcnN0SW5kZXggPSAwOwotICAgICAgICAgICAgZGVwdGhGaXJzdEluZGV4
IDwgZGVwdGhGaXJzdC5zaXplKCk7Ci0gICAgICAgICAgICArK2RlcHRoRmlyc3RJbmRleCkgewot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGRlcHRoRmlyc3Rb
ZGVwdGhGaXJzdEluZGV4XTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICBjb25zdCBOYXR1cmFsTG9vcCog
bG9vcCA9IG1fZ3JhcGgubV9uYXR1cmFsTG9vcHMuaW5uZXJNb3N0TG9vcE9mKGJsb2NrKTsKICAg
ICAgICAgICAgIGlmICghbG9vcCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTczMzM3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2luZyBjb3B5
KQpAQCAtNjgsNyArNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNk
ZWZpbmUgTm9kZVJlbGV2YW50VG9PU1IgICAgICAgICAgICAgICAweDEwMDAwCiAKLSNkZWZpbmUg
Tm9kZUlzRmx1c2hlZCAgICAgICAgICAgICAgICAgICAweDIwMDAwIC8vIFVzZWQgYnkgR3JhcGg6
OmNvbXB1dGVJc0ZsdXNoZWQoKSwgd2lsbCB0ZWxsIHlvdSB3aGljaCBsb2NhbCBub2RlcyBhcmUg
YmFja3dhcmRzLXJlYWNoYWJsZSBmcm9tIGEgRmx1c2guCisjZGVmaW5lIE5vZGVJc0ZsdXNoZWQg
ICAgICAgICAgICAgICAgICAgMHgyMDAwMCAvLyBDb21wdXRlZCBieSBDUFNSZXRocmVhZGluZ1Bo
YXNlLCB3aWxsIHRlbGwgeW91IHdoaWNoIGxvY2FsIG5vZGVzIGFyZSBiYWNrd2FyZHMtcmVhY2hh
YmxlIGZyb20gYSBGbHVzaC4KIAogI2RlZmluZSBOb2RlTWlzY0ZsYWcxICAgICAgICAgICAgICAg
ICAgIDB4NDAwMDAKICNkZWZpbmUgTm9kZU1pc2NGbGFnMiAgICAgICAgICAgICAgICAgICAweDgw
MDAwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAkocmV2aXNpb24g
MTczMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDggKzM1LDE1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogdm9pZCBQaGFzZTo6YmVnaW5QaGFzZSgpCiB7CisgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VWYWxpZGF0aW9uRmFpbHVyZSgpKSB7CisgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsK
KyAgICAgICAgbV9ncmFwaC5kdW1wKG91dCk7CisgICAgICAgIG1fZ3JhcGhEdW1wQmVmb3JlUGhh
c2UgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgfQorICAgIAogICAgIGlmICghc2hvdWxkRHVtcEdy
YXBoQXRFYWNoUGhhc2UoKSkKICAgICAgICAgcmV0dXJuOworICAgIAogICAgIGRhdGFMb2coIkJl
Z2lubmluZyBERkcgcGhhc2UgIiwgbV9uYW1lLCAiLlxuIik7CiAgICAgZGF0YUxvZygiQmVmb3Jl
ICIsIG1fbmFtZSwgIjpcbiIpOwogICAgIG1fZ3JhcGguZHVtcCgpOwpAQCAtNDYsNyArNTMsNyBA
QCB2b2lkIFBoYXNlOjplbmRQaGFzZSgpCiB7CiAgICAgaWYgKCFPcHRpb25zOjp2YWxpZGF0ZUdy
YXBoQXRFYWNoUGhhc2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHZhbGlkYXRlKG1fZ3JhcGgs
IER1bXBHcmFwaCk7CisgICAgdmFsaWRhdGUobV9ncmFwaCwgRHVtcEdyYXBoLCBtX2dyYXBoRHVt
cEJlZm9yZVBoYXNlKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2
Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gQ2FsbCB0aGVzZSBob29rcyB3aGVuIHN0YXJ0aW5nIGFu
ZCBmaW5pc2hpbmcuCiAgICAgdm9pZCBiZWdpblBoYXNlKCk7CiAgICAgdm9pZCBlbmRQaGFzZSgp
OworICAgIAorICAgIENTdHJpbmcgbV9ncmFwaER1bXBCZWZvcmVQaGFzZTsKIH07CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFBoYXNlVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ2FsY3VsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NTQUNhbGN1bGF0b3IuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInZh
ciIsIG1faW5kZXgpOworfQorCit2b2lkIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlOjpkdW1wVmVy
Ym9zZShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXAob3V0KTsKKyAgICBpZiAo
IW1fYmxvY2tzV2l0aERlZnMuaXNFbXB0eSgpKSB7CisgICAgICAgIG91dC5wcmludCgiKGRlZnM6
ICIpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2Jsb2Nrc1dpdGhEZWZzKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAqYmxvY2spOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICB9Cit9CisKK3ZvaWQgU1NB
Q2FsY3VsYXRvcjo6RGVmOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJkZWYoIiwgKm1fdmFyaWFibGUsICIsICIsICptX2Jsb2NrLCAiLCAiLCBtX3ZhbHVl
LCAiKSIpOworfQorCitTU0FDYWxjdWxhdG9yOjpTU0FDYWxjdWxhdG9yKEdyYXBoJiBncmFwaCkK
KyAgICA6IG1fZGF0YShncmFwaCkKKyAgICAsIG1fZ3JhcGgoZ3JhcGgpCit7Cit9CisKK1NTQUNh
bGN1bGF0b3I6On5TU0FDYWxjdWxhdG9yKCkKK3sKK30KKworU1NBQ2FsY3VsYXRvcjo6VmFyaWFi
bGUqIFNTQUNhbGN1bGF0b3I6Om5ld1ZhcmlhYmxlKCkKK3sKKyAgICByZXR1cm4gJm1fdmFyaWFi
bGVzLmFsbG9jKFZhcmlhYmxlKG1fdmFyaWFibGVzLnNpemUoKSkpOworfQorCitTU0FDYWxjdWxh
dG9yOjpEZWYqIFNTQUNhbGN1bGF0b3I6Om5ld0RlZihWYXJpYWJsZSogdmFyaWFibGUsIEJhc2lj
QmxvY2sqIGJsb2NrLCBOb2RlKiB2YWx1ZSkKK3sKKyAgICBEZWYqIGRlZiA9IG1fZGVmcy5hZGQo
RGVmKHZhcmlhYmxlLCBibG9jaywgdmFsdWUpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fZGF0YVti
bG9ja10ubV9kZWZzLmFkZCh2YXJpYWJsZSwgZGVmKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgIHZhcmlhYmxlLT5tX2Jsb2Nrc1dpdGhEZWZzLmFwcGVuZChibG9jayk7Cisg
ICAgZWxzZQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gZGVmOworICAgIHJldHVy
biBkZWY7Cit9CisKK1NTQUNhbGN1bGF0b3I6OkRlZiogU1NBQ2FsY3VsYXRvcjo6bm9uTG9jYWxS
ZWFjaGluZ0RlZihCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFibGUqIHZhcmlhYmxlKQoreworICAg
IHJldHVybiByZWFjaGluZ0RlZkF0VGFpbChtX2dyYXBoLm1fZG9taW5hdG9ycy5pbW1lZGlhdGVE
b21pbmF0b3JPZihibG9jayksIHZhcmlhYmxlKTsKK30KKworU1NBQ2FsY3VsYXRvcjo6RGVmKiBT
U0FDYWxjdWxhdG9yOjpyZWFjaGluZ0RlZkF0VGFpbChCYXNpY0Jsb2NrKiBibG9jaywgVmFyaWFi
bGUqIHZhcmlhYmxlKQoreworICAgIGZvciAoOyBibG9jazsgYmxvY2sgPSBtX2dyYXBoLm1fZG9t
aW5hdG9ycy5pbW1lZGlhdGVEb21pbmF0b3JPZihibG9jaykpIHsKKyAgICAgICAgaWYgKERlZiog
ZGVmID0gbV9kYXRhW2Jsb2NrXS5tX2RlZnMuZ2V0KHZhcmlhYmxlKSkKKyAgICAgICAgICAgIHJl
dHVybiBkZWY7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFNTQUNhbGN1
bGF0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIjxW
YXJpYWJsZXM6IFsiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIG91dC5wcmlu
dChjb21tYSk7CisgICAgICAgIG1fdmFyaWFibGVzW2ldLmR1bXBWZXJib3NlKG91dCk7CisgICAg
fQorICAgIG91dC5wcmludCgiXSwgRGVmczogWyIpOworICAgIGNvbW1hID0gQ29tbWFQcmludGVy
KCk7CisgICAgZm9yIChEZWYqIGRlZiA6IGNvbnN0X2Nhc3Q8U1NBQ2FsY3VsYXRvcio+KHRoaXMp
LT5tX2RlZnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgKmRlZik7CisgICAgb3V0LnByaW50
KCJdLCBQaGlzOiBbIik7CisgICAgY29tbWEgPSBDb21tYVByaW50ZXIoKTsKKyAgICBmb3IgKERl
ZiogZGVmIDogY29uc3RfY2FzdDxTU0FDYWxjdWxhdG9yKj4odGhpcyktPm1fcGhpcykKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAqZGVmKTsKKyAgICBvdXQucHJpbnQoIl0sIEJsb2NrIGRhdGE6
IFsiKTsKKyAgICBjb21tYSA9IENvbW1hUHJpbnRlcigpOworICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJ
bmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJ
bmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIG91dC5wcmludChjb21tYSwgKmJsb2NrLCAiPT4oIik7CisgICAgICAgIG91
dC5wcmludCgiRGVmczogeyIpOworICAgICAgICBDb21tYVByaW50ZXIgaW5uZXJDb21tYTsKKyAg
ICAgICAgZm9yIChhdXRvIGVudHJ5IDogbV9kYXRhW2Jsb2NrXS5tX2RlZnMpCisgICAgICAgICAg
ICBvdXQucHJpbnQoaW5uZXJDb21tYSwgKmVudHJ5LmtleSwgIi0+IiwgKmVudHJ5LnZhbHVlKTsK
KyAgICAgICAgb3V0LnByaW50KCJ9LCBQaGlzOiB7Iik7CisgICAgICAgIGlubmVyQ29tbWEgPSBD
b21tYVByaW50ZXIoKTsKKyAgICAgICAgZm9yIChEZWYqIGRlZiA6IG1fZGF0YVtibG9ja10ubV9w
aGlzKQorICAgICAgICAgICAgb3V0LnByaW50KGlubmVyQ29tbWEsICpkZWYpOworICAgICAgICBv
dXQucHJpbnQoIn0pIik7CisgICAgfQorICAgIG91dC5wcmludCgiXT4iKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTU0FDYWxjdWxhdG9yX2gKKyNkZWZpbmUg
REZHU1NBQ2FsY3VsYXRvcl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKKy8vIFNTQUNhbGN1bGF0b3IgcHJvdmlkZXMgYSByZXVzYWJsZSB0
b29sIGZvciB1c2luZyB0aGUgQ3l0cm9uLCBGZXJyYW50ZSwgUm9zZW4sIFdlZ21hbiwgYW5kCisv
LyBaYWRlY2sgIkVmZmljaWVudGx5IENvbXB1dGluZyBTdGF0aWMgU2luZ2xlIEFzc2lnbm1lbnQg
Rm9ybSBhbmQgdGhlIENvbnRyb2wgRGVwZW5kZW5jZSBHcmFwaCIKKy8vIChUT1BMQVMnOTEpIGFs
Z29yaXRobSBmb3IgY29tcHV0aW5nIFNTQS4gU1NBQ2FsY3VsYXRvciBkb2Vzbid0IG1hZ2ljYWxs
eSBkbyBldmVyeXRoaW5nIGZvciB5b3UKKy8vIGJ1dCBpdCBtYWludGFpbnMgdGhlIG1ham9yIGRh
dGEgc3RydWN0dXJlcyBhbmQgaGFuZGxlcyBtb3N0IG9mIHRoZSBub24tbG9jYWwgcmVhc29uaW5n
LiBIZXJlJ3MKKy8vIHRoZSB3b3JrZmxvdyBvZiB1c2luZyBTU0FDYWxjdWxhdG9yIHRvIGV4ZWN1
dGUgdGhpcyBhbGdvcml0aG06CisvLworLy8gMCkgQ3JlYXRlIGEgZnJlc2ggU1NBQ2FsY3VsYXRv
ciBpbnN0YW5jZS4gWW91IHdpbGwgbmVlZCB0aGlzIGluc3RhbmNlIG9ubHkgZm9yIGFzIGxvbmcg
YXMKKy8vICAgIHlvdSdyZSBub3QgeWV0IGRvbmUgY29tcHV0aW5nIFNTQS4KKy8vCisvLyAxKSBD
cmVhdGUgYW4gU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgZm9yIGV2ZXJ5IHZhcmlhYmxlIHRoYXQg
eW91IHdhbnQgdG8gZG8gUGhpIGluc2VydGlvbgorLy8gICAgb24uIFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlOjppbmRleCgpIGlzIGEgZGVuc2UgaW5kZXhpbmcgb2YgdGhlIFZhcmlhYmxlcyB0aGF0
IHlvdQorLy8gICAgY3JlYXRlZCwgc28geW91IGNhbiBlYXNpbHkgdXNlIGEgVmVjdG9yIHRvIG1h
cCB0aGUgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGVzIHRvIHlvdXIKKy8vICAgIHZhcmlhYmxlcy4K
Ky8vCisvLyAyKSBDcmVhdGUgYSBTU0FDYWxjdWxhdG9yOjpEZWYgZm9yIGV2ZXJ5IGFzc2lnbm1l
bnQgdG8gdGhvc2UgdmFyaWFibGVzLiBBIERlZiBrbm93cyBhYm91dCB0aGUKKy8vICAgIHZhcmlh
YmxlLCB0aGUgYmxvY2ssIGFuZCB0aGUgREZHOjpOb2RlKiB0aGF0IGhhcyB0aGUgdmFsdWUgYmVp
bmcgcHV0IGludG8gdGhlIHZhcmlhYmxlLgorLy8gICAgTm90ZSB0aGF0IGNyZWF0aW5nIGEgRGVm
IGluIGJsb2NrIEIgZm9yIHZhcmlhYmxlIFYgaWYgYmxvY2sgQiBhbHJlYWR5IGhhcyBhIGRlZiBm
b3IgdmFyaWFibGUKKy8vICAgIFYgd2lsbCBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIERlZidzIERG
Rzo6Tm9kZSogdmFsdWUuIFRoaXMgZW5hYmxlcyB5b3UgdG8gY3JlYXRlIERlZnMgYnkKKy8vICAg
IHByb2Nlc3NpbmcgYmFzaWMgYmxvY2tzIGluIGZvcndhcmQgb3JkZXIuIElmIGEgYmxvY2sgaGFz
IG11bHRpcGxlIERlZnMgb2YgYSB2YXJpYWJsZSwgdGhpcworLy8gICAgImp1c3Qgd29ya3MiIGJl
Y2F1c2UgZWFjaCBibG9jayB3aWxsIHRoZW4gcmVtZW1iZXIgdGhlIGxhc3QgRGVmIG9mIGVhY2gg
dmFyaWFibGUuCisvLworLy8gMykgQ2FsbCBTU0FDYWxjdWxhdG9yOjpjb21wdXRlUGhpcygpLiBU
aGlzIHRha2VzIGEgZnVuY3RvciB0aGF0IHdpbGwgY3JlYXRlIHRoZSBQaGkgbm9kZXMuIFRoZQor
Ly8gICAgZnVuY3RvciByZXR1cm5zIGVpdGhlciB0aGUgUGhpIG5vZGUgaXQgY3JlYXRlZCwgb3Ig
bnVsbHB0ciwgaWYgaXQgY2hvb3NlcyB0byBwcnVuZS4gKEFzIGFuCisvLyAgICBhc2lkZSwgaXQn
cyBhbHdheXMgc291bmQgbm90IHRvIHBydW5lLCBhbmQgdGhlIHNhZmVzdCByZWFzb24gZm9yIHBy
dW5pbmcgaXMgbGl2ZW5lc3MuKSBUaGUKKy8vICAgIGNvbXB1dGVQaGlzKCkgY29kZSB3aWxsIHJl
Y29yZCB0aGUgY3JlYXRlZCBQaGkgbm9kZXMgYXMgRGVmcywgYW5kIGl0IHdpbGwgc2VwYXJhdGVs
eSByZWNvcmQKKy8vICAgIHRoZSBsaXN0IG9mIFBoaXMgaW5zZXJ0ZWQgYXQgZWFjaCBibG9jay4g
SXQncyBPSyBmb3IgdGhlIGZ1bmN0b3IgeW91IHBhc3MgaGVyZSB0byBtb2RpZnkgdGhlCisvLyAg
ICBERkc6OkdyYXBoIG9uIHRoZSBmbHksIGJ1dCB0aGUgZWFzaWVzdCB3YXkgdG8gd3JpdGUgdGhp
cyBpcyB0byBqdXN0IGNyZWF0ZSB0aGUgUGhpIG5vZGVzIGJ5CisvLyAgICBkb2luZyBHcmFwaDo6
YWRkTm9kZSgpIGFuZCByZXR1cm4gdGhlbS4gSXQncyB0aGVuIGJlc3QgdG8gaW5zZXJ0IGFsbCBQ
aGkgbm9kZXMgZm9yIGEgYmxvY2sKKy8vICAgIGluIGJ1bGsgYXMgcGFydCBvZiB0aGUgcGFzcyB5
b3UgZG8gYmVsb3csIGluIHN0ZXAgKDQpLgorLy8KKy8vIDQpIE1vZGlmeSB0aGUgZ3JhcGggdG8g
Y3JlYXRlIHRoZSBTU0EgZGF0YSBmbG93LiBGb3IgZWFjaCBibG9jaywgdGhpcyBzaG91bGQ6Cisv
LworLy8gICAgNC4wKSBDb21wdXRlIHRoZSBzZXQgb2YgcmVhY2hpbmcgZGVmcyAoYWthIGF2YWls
YWJsZSB2YWx1ZXMpIGZvciBlYWNoIHZhcmlhYmxlIGJ5IGNhbGxpbmcKKy8vICAgICAgICAgU1NB
Q2FsY3VsYXRvcjo6cmVhY2hpbmdEZWZBdEhlYWQoKSBmb3IgZWFjaCB2YXJpYWJsZS4gUmVjb3Jk
IHRoaXMgaW4gYSBsb2NhbCB0YWJsZSB0aGF0CisvLyAgICAgICAgIHdpbGwgYmUgaW5jcmVtZW50
YWxseSB1cGRhdGVkIGFzIHlvdSBwcm9jZWVkIHRocm91Z2ggdGhlIGJsb2NrIGluIGZvcndhcmQg
b3JkZXIgaW4gdGhlCisvLyAgICAgICAgIG5leHQgc3RlcHM6CisvLworLy8gICAgICAgICBGSVhN
RTogSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGNvbXB1dGUgcmVhY2hpbmcgZGVmcyBmb3IgYWxsIGxp
dmUgdmFyaWFibGVzIGluIG9uZSBnbywgdG8KKy8vICAgICAgICAgYXZvaWQgZG9pbmcgcmVwZWF0
ZWQgZG9tIHRyZWUgdHJhdmVyc2Fscy4KKy8vICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNjYxMAorLy8KKy8vICAgIDQuMSkgSW5zZXJ0IGFsbCBvZiB0
aGUgUGhpIG5vZGVzIGZvciB0aGUgYmxvY2sgYnkgdXNpbmcgU1NBQ2FsY3VsYXRvcjo6cGhpc0Zv
ckJsb2NrKCksIGFuZAorLy8gICAgICAgICByZWNvcmQgdGhvc2UgUGhpIG5vZGVzIGFzIGJlaW5n
IGF2YWlsYWJsZSB2YWx1ZXMuCisvLworLy8gICAgNC4yKSBQcm9jZXNzIHRoZSBibG9jayBpbiBm
b3J3YXJkIG9yZGVyLiBGb3IgZWFjaCBsb2FkIGZyb20gYSB2YXJpYWJsZSwgcmVwbGFjZSBpdCB3
aXRoIHRoZQorLy8gICAgICAgICBhdmFpbGFibGUgU1NBIHZhbHVlIGZvciB0aGF0IHZhcmlhYmxl
LiBGb3IgZWFjaCBzdG9yZSwgZGVsZXRlIGl0IGFuZCByZWNvcmQgdGhlIHN0b3JlZAorLy8gICAg
ICAgICB2YWx1ZSBhcyBiZWluZyBhdmFpbGFibGUuCisvLworLy8gICAgICAgICBOb3RlIHRoYXQg
eW91IGhhdmUgdHdvIG9wdGlvbnMgb2YgaG93IHRvIHJlcGxhY2UgbG9hZHMgd2l0aCBTU0EgdmFs
dWVzLiBZb3UgY2FuIHJlcGxhY2UKKy8vICAgICAgICAgdGhlIGxvYWQgd2l0aCBhbiBJZGVudGl0
eSBub2RlOyB0aGlzIHdpbGwgZW5kIHVwIHdvcmtpbmcgZmFpcmx5IG5hdHVyYWxseSBzbyBsb25n
IGFzCisvLyAgICAgICAgIHlvdSBydW4gR0NTRSBhZnRlciB5b3VyIHBoYXNlLiBPciwgeW91IGNh
biByZXBsYWNlIGFsbCB1c2VzIG9mIHRoZSBsb2FkIHdpdGggdGhlIFNTQQorLy8gICAgICAgICB2
YWx1ZSB5b3Vyc2VsZiAodXNpbmcgdGhlIEdyYXBoOjpwZXJmb3JtU3Vic3RpdHV0aW9uKCkgaWRp
b20pLCBidXQgdGhhdCByZXF1aXJlcyB0aGF0CisvLyAgICAgICAgIHlvdXIgbG9vcCBvdmVyIGJh
c2ljIGJsb2NrcyBwcm9jZWVkcyBpbiB0aGUgYXBwcm9wcmlhdGUgZ3JhcGggb3JkZXIsIGZvciBl
eGFtcGxlCisvLyAgICAgICAgIHByZW9yZGVyLgorLy8KKy8vICAgICAgICAgRklYTUU6IE1ha2Ug
aXQgZWFzaWVyIHRvIGRvIHRoaXMsIHRoYXQgZG9lc24ndCBpbnZvbHZlIHJlcnVubmluZyBHQ1NF
LgorLy8gICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2
NjM5CisvLworLy8gICAgNC4zKSBJbnNlcnQgVXBzaWxvbnMgZm9yIGVhY2ggUGhpIGluIGVhY2gg
c3VjY2Vzc29yIGJsb2NrLiBVc2UgdGhlIGF2YWlsYWJsZSB2YWx1ZXMgdGFibGUgdG8KKy8vICAg
ICAgICAgZGVjaWRlIHRoZSBzb3VyY2UgdmFsdWUgZm9yIGVhY2ggUGhpJ3MgdmFyaWFibGUuIE5v
dGUgdGhhdCB5b3UgY291bGQgYWxzbyB1c2UKKy8vICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6cmVh
Y2hpbmdEZWZBdFRhaWwoKSBpbnN0ZWFkIG9mIHRoZSBhdmFpbGFibGUgdmFsdWVzIHRhYmxlLCB0
aG91Z2ggeW91cgorLy8gICAgICAgICBsb2NhbCBhdmFpbGFibGUgdmFsdWVzIHRhYmxlIGlzIGxp
a2VseSB0byBiZSBtb3JlIGVmZmljaWVudC4KKy8vCisvLyBUaGUgbW9zdCBvYnZpb3VzIHVzZSBv
ZiBTU0FDYWxjdWxhdG9yIGlzIGZvciB0aGUgQ1BTLT5TU0EgY29udmVyc2lvbiBpdHNlbGYsIGJ1
dCBpdCdzIG1lYW50IHRvCisvLyBhbHNvIGJlIHVzZWQgZm9yIFNTQSB1cGRhdGUgYW5kIGZvciB0
aGluZ3MgbGlrZSB0aGUgcHJvbW90aW9uIG9mIGhlYXAgZmllbGRzIHRvIGxvY2FsIFNTQQorLy8g
dmFyaWFibGVzLgorCitjbGFzcyBTU0FDYWxjdWxhdG9yIHsKK3B1YmxpYzoKKyAgICBTU0FDYWxj
dWxhdG9yKEdyYXBoJik7CisgICAgflNTQUNhbGN1bGF0b3IoKTsKKyAgICAKKyAgICBjbGFzcyBW
YXJpYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXg7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgICAgICB2b2lkIGR1bXBWZXJib3NlKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBTU0FDYWxjdWxh
dG9yOworICAgICAgICAKKyAgICAgICAgVmFyaWFibGUoKQorICAgICAgICAgICAgOiBtX2luZGV4
KFVJTlRfTUFYKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhcmlh
YmxlKHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBCbG9ja0xpc3QgbV9ibG9ja3NXaXRoRGVmczsKKyAg
ICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworICAgIAorICAgIGNsYXNzIERlZiB7Cisg
ICAgcHVibGljOgorICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhYmxlOyB9CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9jazsgfQorICAgICAgICAKKyAgICAgICAgTm9kZSogdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNTQUNh
bGN1bGF0b3I7CisgICAgICAgIAorICAgICAgICBEZWYoKQorICAgICAgICAgICAgOiBtX3Zhcmlh
YmxlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1fYmxvY2sobnVsbHB0cikKKyAgICAgICAgICAg
ICwgbV92YWx1ZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIERlZihWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiB2YWx1
ZSkKKyAgICAgICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJsZSkKKyAgICAgICAgICAgICwgbV9i
bG9jayhibG9jaykKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZSogbV92YXJpYWJsZTsKKyAgICAgICAg
QmFzaWNCbG9jayogbV9ibG9jazsKKyAgICAgICAgTm9kZSogbV92YWx1ZTsKKyAgICB9OworICAg
IAorICAgIFZhcmlhYmxlKiBuZXdWYXJpYWJsZSgpOworICAgIERlZiogbmV3RGVmKFZhcmlhYmxl
KiwgQmFzaWNCbG9jayosIE5vZGUqKTsKKyAgICAKKyAgICBWYXJpYWJsZSogdmFyaWFibGUodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuICZtX3ZhcmlhYmxlc1tpbmRleF07IH0KKyAgICAKKyAgICAv
LyBUaGUgUGhpSW5zZXJ0aW9uRnVuY3RvciB0YWtlcyBhIFZhcmlhYmxlIGFuZCBhIEJhc2ljQmxv
Y2sgYW5kIGVpdGhlciBpbnNlcnRzIGEgUGhpIGFuZAorICAgIC8vIHJldHVybnMgdGhlIE5vZGUg
Zm9yIHRoYXQgUGhpLCBvciBpdCBkZWNpZGVzIHRoYXQgaXQncyBub3Qgd29ydGggaXQgdG8gaW5z
ZXJ0IGEgUGhpIGF0IHRoYXQKKyAgICAvLyBibG9jayBiZWNhdXNlIG9mIHNvbWUgYWRkaXRpb25h
bCBwcnVuaW5nIGNvbmRpdGlvbiAodHlwaWNhbGx5IGxpdmVuZXNzKSBhbmQgcmV0dXJucworICAg
IC8vIG51bGxwdHIuIElmIGEgbm9uLW51bGwgTm9kZSogaXMgcmV0dXJuZWQsIGEgbmV3IERlZiBp
cyBjcmVhdGVkLCBzbyB0aGF0CisgICAgLy8gbm9uTG9jYWxSZWFjaGluZ0RlZigpIHdpbGwgZmlu
ZCBpdCBsYXRlci4gTm90ZSB0aGF0IGl0IGlzIGdlbmVyYWxseSBhbHdheXMgc291bmQgdG8gbm90
CisgICAgLy8gcHJ1bmUgYW55IFBoaXMgKHRoYXQgaXMsIHRvIGFsd2F5cyBoYXZlIHRoZSBmdW5j
dG9yIGluc2VydCBhIFBoaSBhbmQgbmV2ZXIgcmV0dXJuIG51bGxwdHIpLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFBoaUluc2VydGlvbkZ1bmN0b3I+CisgICAgdm9pZCBjb21wdXRlUGhpcyhQaGlJ
bnNlcnRpb25GdW5jdG9yIGZ1bmN0b3IpCisgICAgeworICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG51bGxwdHIsIG1fZ3JhcGgubV9kb21pbmF0b3JzLmlzVmFsaWQoKSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKFZhcmlhYmxlJiB2YXJpYWJsZSA6IG1fdmFyaWFibGVzKSB7CisgICAgICAg
ICAgICBtX2dyYXBoLm1fZG9taW5hdG9ycy5mb3JBbGxCbG9ja3NJblBydW5lZEl0ZXJhdGVkRG9t
aW5hbmNlRnJvbnRpZXJPZigKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS5tX2Jsb2Nrc1dpdGhE
ZWZzLAorICAgICAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2spIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gZnVuY3RvcigmdmFyaWFibGUsIGJs
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwaGlOb2RlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgQmxvY2tEYXRhJiBkYXRhID0gbV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgICAg
ICAgICAgRGVmKiBwaGlEZWYgPSBtX3BoaXMuYWRkKERlZigmdmFyaWFibGUsIGJsb2NrLCBwaGlO
b2RlKSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEubV9waGlzLmFwcGVuZChwaGlEZWYpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0
J3MgcG9zc2libGUgdG8gaGF2ZSBhIGJsb2NrIHRoYXQgbG9va3MgbGlrZSB0aGlzIGJlZm9yZSBT
U0EKKyAgICAgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbjoKKyAgICAgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gbGFiZWw6CisgICAgICAgICAgICAgICAgICAg
IC8vICAgICBwcmludCh4KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIC4uLgorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgeCA9IDQyOworICAgICAgICAgICAgICAgICAgICAvLyAgICAg
Z290byBsYWJlbDsKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gQW5kIGl0IG1heSBsb29rIGxpa2UgdGhpcyBhZnRlciBTU0EgY29udmVyc2lvbjoKKyAgICAg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gbGFiZWw6CisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICB4MTogUGhpKCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
IC4uLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgVXBzaWxvbig0MiwgXngxKQorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgZ290byBsYWJlbDsKKyAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSB3aWxsIHdhbnQgdG8gaW5z
ZXJ0IGEgUGhpIGluIHRoaXMgYmxvY2ssIGFuZCB0aGUgYmxvY2sKKyAgICAgICAgICAgICAgICAg
ICAgLy8gd2lsbCBhbHJlYWR5IGhhdmUgYSBEZWYgZm9yIHRoZSB2YXJpYWJsZS4gV2hlbiB0aGlz
IGhhcHBlbnMsIHdlIGRvbid0IHdhbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIFBoaSB0
byBvdmVycmlkZSB0aGUgb3JpZ2luYWwgRGVmLCBzaW5jZSB0aGUgUGhpIGlzIGF0IHRoZSB0b3As
IHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCBEZWYgaW4gdGhlIG1fZGVmcyB0
YWJsZSB3b3VsZCBoYXZlIGJlZW4gYXQgdGhlIGJvdHRvbSwgYW5kIHdlIHdhbnQKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbV9kZWZzIHRvIHRlbGwgdXMgYWJvdXQgZGVmcyBhdCB0YWlsLgorICAg
ICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBTbywgd2UgcmVseSBv
biB0aGUgZmFjdCB0aGF0IEhhc2hNYXA6OmFkZCgpIGRvZXMgbm90aGluZyBpZiB0aGUga2V5IHdh
cworICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IHByZXNlbnQuCisgICAgICAgICAgICAg
ICAgICAgIGRhdGEubV9kZWZzLmFkZCgmdmFyaWFibGUsIHBoaURlZik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIGNvbnN0IFZlY3RvcjxEZWYqPiYgcGhpc0ZvckJsb2NrKEJhc2ljQmxvY2sq
IGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVtibG9ja10ubV9waGlzOworICAg
IH0KKyAgICAKKyAgICAvLyBJZ25vcmVzIGRlZnMgd2l0aGluIHRoZSBnaXZlbiBibG9jazsgaXQg
YXNzdW1lcyB0aGF0IHlvdSd2ZSB0YWtlbiBjYXJlIG9mIHRob3NlCisgICAgLy8geW91cnNlbGYu
CisgICAgRGVmKiBub25Mb2NhbFJlYWNoaW5nRGVmKEJhc2ljQmxvY2sqLCBWYXJpYWJsZSopOwor
ICAgIERlZiogcmVhY2hpbmdEZWZBdEhlYWQoQmFzaWNCbG9jayogYmxvY2ssIFZhcmlhYmxlKiB2
YXJpYWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub25Mb2NhbFJlYWNoaW5nRGVmKGJsb2Nr
LCB2YXJpYWJsZSk7CisgICAgfQorICAgIAorICAgIC8vIENvbnNpZGVycyB0aGUgZGVmIHdpdGhp
biB0aGUgZ2l2ZW4gYmxvY2ssIGJ1dCBvbmx5IHdvcmtzIGF0IHRoZSB0YWlsIG9mIHRoZSBibG9j
ay4KKyAgICBEZWYqIHJlYWNoaW5nRGVmQXRUYWlsKEJhc2ljQmxvY2sqLCBWYXJpYWJsZSopOwor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToK
KyAgICBTZWdtZW50ZWRWZWN0b3I8VmFyaWFibGU+IG1fdmFyaWFibGVzOworICAgIEJhZzxEZWY+
IG1fZGVmczsKKyAgICAKKyAgICBCYWc8RGVmPiBtX3BoaXM7CisgICAgCisgICAgc3RydWN0IEJs
b2NrRGF0YSB7CisgICAgICAgIEhhc2hNYXA8VmFyaWFibGUqLCBEZWYqPiBtX2RlZnM7CisgICAg
ICAgIFZlY3RvcjxEZWYqPiBtX3BoaXM7CisgICAgfTsKKyAgICAKKyAgICBCbG9ja01hcDxCbG9j
a0RhdGE+IG1fZGF0YTsKKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHU1NBQ2FsY3VsYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3MzMzNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE5IEBACiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNp
bmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1
ZGUgIkRGR1NTQUNhbGN1bGF0b3IuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKIGNsYXNzIFNTQUNvbnZlcnNpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdCBi
b29sIGR1bXBHcmFwaCA9IGZhbHNlOwogICAgIAogcHVibGljOgogICAgIFNTQUNvbnZlcnNpb25Q
aGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJTU0EgY29udmVyc2lv
biIpCisgICAgICAgICwgbV9jYWxjdWxhdG9yKGdyYXBoKQogICAgICAgICAsIG1faW5zZXJ0aW9u
U2V0KGdyYXBoKQogICAgICAgICAsIG1fY2hhbmdlZChmYWxzZSkKICAgICB7CkBAIC01MiwyOTcg
KzU0LDI4MyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBo
Lm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CiAgICAgICAgIAotICAgICAgICBpZiAoZHVtcEdyYXBo
KSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBkdW1wIGF0IHRvcCBvZiBTU0EgY29udmVy
c2lvbjpcbiIpOworICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7CisgICAgICAg
IG1fZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShtX2dyYXBoKTsKKyAgICAg
ICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBi
ZWZvcmUgU1NBIHRyYW5zZm9ybWF0aW9uOlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKICAgICAgICAgfQorCisgICAgICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlIGZvciBldmVyeSByb290IFZhcmlhYmxlQWNjZXNzRGF0YS4KKyAgICAgICAgZm9yIChWYXJp
YWJsZUFjY2Vzc0RhdGEmIHZhcmlhYmxlIDogbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YSkg
eworICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS5pc1Jvb3QoKSB8fCB2YXJpYWJsZS5pc0NhcHR1
cmVkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJpYWJsZSA9IG1fY2FsY3VsYXRvci5u
ZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgQVNTRVJUKHNzYVZhcmlhYmxlLT5pbmRleCgpID09
IG1fdmFyaWFibGVGb3JTU0FJbmRleC5zaXplKCkpOworICAgICAgICAgICAgbV92YXJpYWJsZUZv
clNTQUluZGV4LmFwcGVuZCgmdmFyaWFibGUpOworICAgICAgICAgICAgbV9zc2FWYXJpYWJsZUZv
clZhcmlhYmxlLmFkZCgmdmFyaWFibGUsIHNzYVZhcmlhYmxlKTsKKyAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgLy8gRWxpbWluYXRlIGFsbCBkdXBsaWNhdGUgb3Igc2VsZi1wb2ludGluZyBQ
aGkgZWRnZXMuIFRoaXMgbWVhbnMgdGhhdAotICAgICAgICAvLyB3ZSB0cmFuc2Zvcm06Ci0gICAg
ICAgIC8vCi0gICAgICAgIC8vIHA6IFBoaShAbjEsIEBuMiwgQG4zKQotICAgICAgICAvLwotICAg
ICAgICAvLyBpbnRvOgotICAgICAgICAvLwotICAgICAgICAvLyBwOiBQaGkoQHgpCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIGlmIGVhY2ggQG5pIGluIHtAbjEsIEBuMiwgQG4zfSBpcyBlaXRoZXIg
ZXF1YWwgdG8gQHAgdG8gaXMgZXF1YWwKLSAgICAgICAgLy8gdG8gQHgsIGZvciBleGFjdGx5IG9u
ZSBvdGhlciBAeC4gQWRkaXRpb25hbGx5LCB0cml2aWFsIFBoaXMgKGkuZS4KLSAgICAgICAgLy8g
cDogUGhpKEB4KSkgYXJlIGZvcndhcmRlZCwgc28gdGhhdCBpZiBoYXZlIGFuIGVkZ2UgdG8gc3Vj
aCBAcCwgd2UKLSAgICAgICAgLy8gcmVwbGFjZSBpdCB3aXRoIEB4LiBUaGlzIGxvb3AgZG9lcyB0
aGlzIGZvciBQaGlzIG9ubHk7IGxhdGVyIHdlIGRvCi0gICAgICAgIC8vIHN1Y2ggZm9yd2FyZGlu
ZyBmb3IgUGhpIHJlZmVyZW5jZXMgZm91bmQgaW4gb3RoZXIgbm9kZXMuCi0gICAgICAgIC8vCi0g
ICAgICAgIC8vIFNlZSBBeWNvY2sgYW5kIEhvcnNwb29sIGluIENDJzAwIGZvciBhIGJldHRlciBk
ZXNjcmlwdGlvbiBvZiB3aGF0Ci0gICAgICAgIC8vIHdlJ3JlIGRvaW5nIGhlcmUuCi0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07
KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBi
bG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHBoaSA9IGJsb2NrLT5waGlzW3BoaUluZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBmb3J3YXJkUGhpQ2hpbGRy
ZW4ocGhpKTsKLSAgICAgICAgICAgICAgICAgICAgZGVkdXBsaWNhdGVDaGlsZHJlbihwaGkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAobV9jaGFu
Z2VkKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZvciBlYWNoIGJhc2ljIGJsb2NrLCBmb3IgZWFj
aCBsb2NhbCBsaXZlIGF0IHRoZSBoZWFkIG9mIHRoYXQgYmxvY2ssCi0gICAgICAgIC8vIGZpZ3Vy
ZSBvdXQgd2hhdCBub2RlIHdlIHNob3VsZCBiZSByZWZlcnJpbmcgdG8gaW5zdGVhZCBvZiB0aGF0
IGxvY2FsLgotICAgICAgICAvLyBJZiBpdCB0dXJucyBvdXQgdG8gYmUgYSBub24tdHJpdmlhbCBQ
aGksIG1ha2Ugc3VyZSB0aGF0IHdlIGNyZWF0ZSBhbgotICAgICAgICAvLyBTU0EgUGhpIGFuZCBV
cHNpbG9ucyBpbiBwcmVkZWNlc3NvciBibG9ja3MuIFdlIHJldXNlCi0gICAgICAgIC8vIEJhc2lj
QmxvY2s6OnZhcmlhYmxlc0F0SGVhZCBmb3IgdHJhY2tpbmcgd2hpY2ggbm9kZXMgdG8gcmVmZXIg
dG8uCi0gICAgICAgIE9wZXJhbmRzPGJvb2w+IG5vblRyaXZpYWxQaGlzKE9wZXJhbmRzTGlrZSwg
bV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgLy8gRmluZCBhbGwg
U2V0TG9jYWxzIGFuZCBjcmVhdGUgRGVmcyBmb3IgdGhlbS4gV2UgaGFuZGxlIFNldEFyZ3VtZW50
IGJ5IGNyZWF0aW5nIGEKKyAgICAgICAgLy8gR2V0QXJndW1lbnQuCiAgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykg
ewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgbm9uVHJpdmlhbFBoaXMuZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cGhpcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAg
ICAgICBOb2RlKiBwaGkgPSBibG9jay0+cGhpc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoIXBo
aS0+Y2hpbGRyZW4uanVzdE9uZUNoaWxkKCkpCi0gICAgICAgICAgICAgICAgICAgIG5vblRyaXZp
YWxQaGlzLm9wZXJhbmQocGhpLT5sb2NhbCgpKSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwotICAgICAgICAgICAgICAgIGlmICghbm9kZSkKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gTXVzdCBwcm9jZXNzIHRoZSBibG9jayBpbiBmb3J3
YXJkIGRpcmVjdGlvbiBiZWNhdXNlIHdlIHdhbnQgdG8gc2VlIHRoZSBsYXN0CisgICAgICAgICAg
ICAvLyBhc3NpZ25tZW50IGZvciBldmVyeSBsb2NhbC4KKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gU2V0TG9jYWwgJiYgbm9kZS0+b3AoKSAh
PSBTZXRBcmd1bWVudCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkF0IGJsb2NrICMiLCBibG9ja0luZGV4LCAiIGZvciBvcGVyYW5kIHIiLCBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKSwgIiBoYXZlIG5vZGUgIiwgbm9k
ZSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAg
ICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFBvaXNvbiB0aGlzIGVudHJ5IGluIHZhcmlhYmxlc0F0SGVhZCBiZWNhdXNlIHdlIGRvbid0
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHdhbnQgYW55b25lIHRvIHRyeSB0byByZWZlciB0byBp
dCwgaWYgdGhlIHZhcmlhYmxlIGlzCi0gICAgICAgICAgICAgICAgICAgIC8vIGNhcHR1cmVkLgot
ICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldID0gMDsKKyAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgUGhp
OgotICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAg
ICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBj
aGlsZE5vZGU7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpCisg
ICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnQpOworICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgR2V0QXJndW1lbnQsIG5vZGUtPm9yaWdpbiwgT3BJbmZvKG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpIHx8IG5vZGUtPm9wKCkgPT0gU2V0QXJndW1l
bnQpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wgaXNGbHVzaGVkID0g
ISEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVJc0ZsdXNoZWQpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFBoaSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vblRyaXZpYWxQaGlzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmp1c3RPbmVDaGlsZCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGVkZ2UpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIE9uZSBjaGlsZDogIiwgZWRnZSwgIiwgIiwgUmF3UG9pbnRlcihlZGdlLm5vZGUoKSks
ICJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVkZ2Uubm9kZSgpOyAvLyBJ
dCdzIHNvbWV0aGluZyBmcm9tIGEgZGlmZmVyZW50IGJhc2ljIGJsb2NrLgotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIE5vbi10cml2aWFsLlxuIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGEgbm9uLXRyaXZpYWwgUGhpLgotICAg
ICAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGUtPmZsdXNo
Rm9ybWF0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlRmxhZ3MgcmVzdWx0ID0gcmVz
dWx0Rm9yKGZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQg
PSB1c2VLaW5kRm9yKGZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKDAsIFNwZWNO
b25lLCBQaGksIE5vZGVPcmlnaW4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW5zZXJ0ZWQg
bmV3IG5vZGU6ICIsIG5vZGUsICJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
bWVyZ2VGbGFncyhyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoKG5vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgPT0gcmVzdWx0KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNb
al07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3ItPmFwcGVuZE5vblRl
cm1pbmFsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9u
ZSwgVXBzaWxvbiwgcHJlZGVjZXNzb3ItPmxhc3QoKS0+b3JpZ2luLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8obm9kZSksIEVkZ2UocHJlZGVjZXNzb3ItPnZhcmlhYmxl
c0F0VGFpbFtpXSwgdXNlS2luZCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGbHVzaGVk
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZy4gRm9yIG11bHRp
cGxlIHJlYXNvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gUmVhc29uICMxOiBJZiB0aGUgbG9jYWwgaXMgZmx1c2hlZCB0aGVu
IHdlIGRvbid0IG5lZWQgdG8gYm90aGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
d2l0aCBhIE1vdkhpbnQgc2luY2UgZXZlcnkgcGF0aCB0byB0aGlzIHBvaW50IGluIHRoZSBjb2Rl
IHdpbGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGZsdXNoZWQgdGhlIGJ5
dGVjb2RlIHZhcmlhYmxlIHVzaW5nIGEgU2V0TG9jYWwgYW5kIGhlbmNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhlIEF2YWlsYWJpbGl0eTo6Zmx1c2hlZEF0KCkgd2lsbCBhZ3Jl
ZSwgYW5kIHRoYXQgd2lsbCBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1ZmZp
Y2llbnQgZm9yIGZpZ3VyaW5nIG91dCBob3cgdG8gcmVjb3ZlciB0aGUgdmFyaWFibGUncyB2YWx1
ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBSZWFzb24gIzI6IElmIHdlIGhhZCBpbnNlcnRlZCBhIE1vdkhpbnQgYW5kIHRoZSBQ
aGkgZnVuY3Rpb24gaGFkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGllZCAoYmVj
YXVzZSB0aGUgb25seSB1c2VyIG9mIHRoZSB2YWx1ZSB3YXMgdGhlICJmbHVzaCIgLSBpLmUuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc29tZSBhc3luY2hyb25vdXMgcnVudGltZSB0
aGluZ3kpIHRoZW4gdGhlIE1vdkhpbnQgd291bGQgdHVybgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGludG8gYSBab21iaWVIaW50LCB3aGljaCB3b3VsZCBmb29sIHVzIGludG8gdGhp
bmtpbmcgdGhhdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSBp
cyBkZWFkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlYXNvbiAjMzogSWYgd2UgaGFkIGluc2VydGVkIGEgTW92SGludCB0aGVu
IGV2ZW4gaWYgdGhlIFBoaQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXllZCBh
bGl2ZSwgd2Ugd291bGQgc3RpbGwgZW5kIHVwIGdlbmVyYXRpbmcgaW5lZmZpY2llbnQgY29kZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdvdWxkIGJlIHRlbGxpbmcg
dGhlIE9TUiBleGl0IGNvbXBpbGVyIHRvIHVzZSBzb21lIFNTQQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHZhbHVlIGZvciB0aGUgYnl0ZWNvZGUgdmFyaWFibGUgcmF0aGVyIHRoYW4g
anVzdCB0ZWxsaW5nIGl0IHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUg
dmFsdWUgd2FzIGFscmVhZHkgb24gdGhlIHN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgTW92
SGludCwgTm9kZU9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpLCBub2RlLT5kZWZhdWx0RWRnZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkW2ldID0gbm9kZTsKKyAgICAgICAgICAgICAgICBtX2NhbGN1bGF0b3IubmV3RGVm
KAorICAgICAgICAgICAgICAgICAgICBtX3NzYVZhcmlhYmxlRm9yVmFyaWFibGUuZ2V0KHZhcmlh
YmxlKSwgYmxvY2ssIGNoaWxkTm9kZSk7CiAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAgIH0KICAg
ICAgICAgCisgICAgICAgIC8vIERlY2lkZSB3aGVyZSBQaGlzIGFyZSB0byBiZSBpbnNlcnRlZC4g
VGhpcyBjcmVhdGVzIHRoZSBQaGkncyBidXQgZG9lc24ndCBpbnNlcnQgdGhlbQorICAgICAgICAv
LyB5ZXQuIFdlIHdpbGwgbGF0ZXIga25vdyB3aGVyZSB0byBpbnNlcnQgdGhlbSBiZWNhdXNlIFNT
QUNhbGN1bGF0b3IgaXMgc3VjaCBhIGJyby4KKyAgICAgICAgbV9jYWxjdWxhdG9yLmNvbXB1dGVQ
aGlzKAorICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFi
bGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7CisgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FWYXJpYWJs
ZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gUHJ1bmUg
YnkgbGl2ZW5lc3MuIFRoaXMgZG9lc24ndCBidXkgdXMgbXVjaCBvdGhlciB0aGFuIGNvbXBpbGUg
dGltZXMuCisgICAgICAgICAgICAgICAgTm9kZSogaGVhZE5vZGUgPSBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgIGlmICgh
aGVhZE5vZGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
ICAgICAgICAgLy8gVGhlcmUgaXMgdGhlIHBvc3NpYmlsdGl5IG9mICJyZWJpcnRocyIuIFRoZSBT
U0EgY2FsY3VsYXRvciB3aWxsIGFscmVhZHkgcHJ1bmUKKyAgICAgICAgICAgICAgICAvLyByZWJp
cnRocyBmb3IgdGhlIHNhbWUgVmFyaWFibGVBY2Nlc3NEYXRhLiBCdXQgaXQgd2lsbCBub3QgYmUg
YWJsZSB0byBwcnVuZQorICAgICAgICAgICAgICAgIC8vIHJlYmlydGhzIHRoYXQgYXJvc2UgZnJv
bSB0aGUgc2FtZSBsb2NhbCB2YXJpYWJsZSBudW1iZXIgYnV0IGEgZGlmZmVyZW50CisgICAgICAg
ICAgICAgICAgLy8gVmFyaWFibGVBY2Nlc3NEYXRhLiBXZSBkbyB0aGF0IHBydW5pbmcgaGVyZS4K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEhlcmUncyBhbiBleGFtcGxl
IG9mIGEgcmViaXJ0aCB0aGF0IHRoaXMgd291bGQgY2F0Y2g6CisgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAvLyAgICAgdmFyIHg7CisgICAgICAgICAgICAgICAgLy8gICAgIGlm
IChmb28pIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgIGlmIChiYXIpIHsKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICB4ID0gNDI7CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIHggPSA0MzsKKyAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgICAgICAgIHByaW50
KHgpOworICAgICAgICAgICAgICAgIC8vICAgICAgICAgeCA9IDQ0OworICAgICAgICAgICAgICAg
IC8vICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vICAgICAgICAgeCA9IDQ1OworICAg
ICAgICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAgICAgLy8gICAgIHByaW50KHgpOyAv
LyBXaXRob3V0IHRoaXMgY2hlY2ssIHdlJ2QgaGF2ZSBhIFBoaSBmb3IgeCA9IDQyfDQzIGhlcmUu
CisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIg
ZmVlZGluZyBsb2NhbCB2YXJpYWJsZSBudW1iZXJzLCBub3QgVmFyaWFibGVBY2Nlc3NEYXRhKidz
LCBhcworICAgICAgICAgICAgICAgIC8vIHRoZSAidmFyaWFibGVzIiBmb3IgU1NBQ2FsY3VsYXRv
ci4gVGhhdCB3b3VsZCBhbGxvdyB1cyB0byBlbGltaW5hdGUgdGhpcworICAgICAgICAgICAgICAg
IC8vIHNwZWNpYWwgY2FzZS4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NjQxCisgICAgICAgICAgICAgICAgaWYgKGhlYWROb2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUt
PnByZWRpY3Rpb24oKSwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgICAgIEZsdXNo
Rm9ybWF0IGZvcm1hdCA9IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpOworICAgICAgICAgICAgICAg
IE5vZGVGbGFncyByZXN1bHQgPSByZXN1bHRGb3IoZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBw
aGlOb2RlLT5tZXJnZUZsYWdzKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5v
ZGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKSB7Ci0g
ICAgICAgICAgICBkYXRhTG9nKCJWYXJpYWJsZXMgYXQgaGVhZCBhZnRlciBTU0EgUGhpIGluc2Vy
dGlvbjpcbiIpOwotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgICAg
IGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAiLCAqYmxvY2ssICI6ICIsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQs
ICJcbiIpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiQ29tcHV0ZWQgUGhp
cywgYWJvdXQgdG8gdHJhbnNmb3JtIHRoZSBncmFwaC5cbiIpOworICAgICAgICAgICAgZGF0YUxv
ZygiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoOlxuIik7CisgICAgICAgICAgICBt
X2dyYXBoLmR1bXAoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCJNYXBwaW5nczpcbiIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdmFyaWFibGVGb3JTU0FJbmRleC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgIiwgaSwgIjogIiwgVmFyaWFibGVBY2Nlc3NEYXRhRHVtcChtX2dyYXBoLCBt
X3ZhcmlhYmxlRm9yU1NBSW5kZXhbaV0pLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIlxu
Iik7CisgICAgICAgICAgICBkYXRhTG9nKCJTU0EgY2FsY3VsYXRvcjogIiwgbV9jYWxjdWxhdG9y
LCAiXG4iKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB2
YXJpYWJsZXNBdEhlYWQgaW4gZWFjaCBibG9jayByZWZlcnMgdG8gZWl0aGVyOgorICAgICAgICAv
LyBEbyB0aGUgYnVsayBvZiB0aGUgU1NBIGNvbnZlcnNpb24uIEZvciBlYWNoIGJsb2NrLCB0aGlz
IHRyYWNrcyB0aGUgb3BlcmFuZC0+Tm9kZQorICAgICAgICAvLyBtYXBwaW5nIGJhc2VkIG9uIGEg
Y29tYmluYXRpb24gb2Ygd2hhdCB0aGUgU1NBQ2FsY3VsYXRvciB0ZWxscyB1cywgYW5kIHVzIHdh
bGtpbmcgb3ZlcgorICAgICAgICAvLyB0aGUgYmxvY2sgaW4gZm9yd2FyZCBvcmRlci4gV2UgdXNl
IG91ciBvd24gZGF0YSBzdHJ1Y3R1cmUsIHZhbHVlRm9yT3BlcmFuZCwgZm9yCisgICAgICAgIC8v
IGRldGVybWluaW5nIHRoZSBsb2NhbCBtYXBwaW5nLCBidXQgd2UgcmVseSBvbiBTU0FDYWxjdWxh
dG9yIGZvciB0aGUgbm9uLWxvY2FsIG1hcHBpbmcuCiAgICAgICAgIC8vCi0gICAgICAgIC8vIDEp
IEEgbmV3IFNTQSBwaGkgaW4gdGhlIGN1cnJlbnQgYmxvY2suCi0gICAgICAgIC8vIDIpIEEgU2V0
QXJndW1lbnQsIHdoaWNoIHdpbGwgc29vbiBnZXQgY29udmVydGVkIGludG8gYSBHZXRBcmd1bWVu
dC4KLSAgICAgICAgLy8gMykgQW4gb2xkIENQUyBwaGkgaW4gYSBkaWZmZXJlbnQgYmxvY2suCisg
ICAgICAgIC8vIFRoaXMgZG9lcyB0aHJlZSB0aGluZ3MgYXQgb25jZToKICAgICAgICAgLy8KLSAg
ICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBmb3IgKDEpIGFuZCAoMiksIGJ1
dCB3ZSBkbyBuZWVkIHRvCi0gICAgICAgIC8vIGRvIGEgcmVwbGFjZW1lbnQgZm9yICgzKS4KLSAg
ICAgICAgCi0gICAgICAgIC8vIENsZWFyIGFsbCByZXBsYWNlbWVudHMsIHNpbmNlIG90aGVyIHBo
YXNlcyBtYXkgaGF2ZSB1c2VkIHRoZW0uCi0gICAgICAgIG1fZ3JhcGguY2xlYXJSZXBsYWNlbWVu
dHMoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkdW1wR3JhcGgpIHsKLSAgICAgICAgICAgIGRh
dGFMb2coIkdyYXBoIGp1c3QgYmVmb3JlIGlkZW50aWZ5aW5nIHJlcGxhY2VtZW50czpcbiIpOwot
ICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IC8vIEZvciBhbGwgb2YgdGhlIG9sZCBDUFMgUGhpcywgZmlndXJlIG91dCB3aGF0IHRoZXkgY29y
cmVzcG9uZCB0byBpbiBTU0EuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYg
KCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBibG9jayAjIiwgYmxv
Y2tJbmRleCwgIlxuIik7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxv
Y2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykgewotICAgICAgICAgICAgICAgIE5vZGUqIHBo
aSA9IGJsb2NrLT5waGlzW3BoaUluZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkg
ewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICAgICAgICAg
IkNvbnNpZGVyaW5nICIsIHBoaSwgIiAoIiwgUmF3UG9pbnRlcihwaGkpLCAiKSwgZm9yIHIiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgcGhpLT5sb2NhbCgpLCAiLCBhbmQgaXRzIHJlcGxhY2Vt
ZW50IGluICIsICpibG9jaywgIiwgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQub3BlcmFuZChwaGktPmxvY2FsKCkpLCAiXG4iKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBoaSAhPSBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQocGhpLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgcGhpLT5yZXBsYWNl
bWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChwaGktPmxvY2FsKCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBOb3cgbWFrZSBzdXJl
IHRoYXQgYWxsIHZhcmlhYmxlc0F0SGVhZCBpbiBlYWNoIGJsb2NrIHBvaW50cyB0byB0aGUKLSAg
ICAgICAgLy8gY2Fub25pY2FsIFNTQSB2YWx1ZS4gUHJpb3IgdG8gdGhpcywgdmFyaWFibGVzQXRI
ZWFkW2xvY2FsXSBtYXkgcG9pbnQgdG8KLSAgICAgICAgLy8gYW4gb2xkIENQUyBQaGkgaW4gYSBk
aWZmZXJlbnQgYmxvY2suCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9n
cmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFi
bG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOwotICAgICAgICAgICAg
ICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgd2hpbGUgKG5vZGUtPnJlcGxhY2VtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFT
U0VSVChub2RlICE9IG5vZGUtPnJlcGxhY2VtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZSA9IG5vZGUtPnJlcGxhY2VtZW50OworICAgICAgICAvLyAtIEluc2VydHMgdGhlIFBoaXMgaW4g
YWxsIG9mIHRoZSBwbGFjZXMgd2hlcmUgdGhleSBuZWVkIHRvIGdvLiBXZSd2ZSBhbHJlYWR5IGNy
ZWF0ZWQKKyAgICAgICAgLy8gICB0aGVtIGFuZCB0aGV5IGFyZSBhY2NvdW50ZWQgZm9yIGluIHRo
ZSBTU0FDYWxjdWxhdG9yJ3MgZGF0YSBzdHJ1Y3R1cmVzLCBidXQgd2UKKyAgICAgICAgLy8gICBo
YXZlbid0IGluc2VydGVkIHRoZW0geWV0LCBtb3N0bHkgYmVjYXVzZSB3ZSB3YW50IHRvIGluc2Vy
dCBhbGwgb2YgYSBibG9jaydzIFBoaXMgaW4KKyAgICAgICAgLy8gICBvbmUgZ28gdG8gYW1vcnRp
emUgdGhlIGNvc3Qgb2Ygbm9kZSBpbnNlcnRpb24uCisgICAgICAgIC8vCisgICAgICAgIC8vIC0g
Q3JlYXRlIGFuZCBpbnNlcnQgVXBzaWxvbnMuCisgICAgICAgIC8vCisgICAgICAgIC8vIC0gQ29u
dmVydCBhbGwgb2YgdGhlIHByZWV4aXN0aW5nIFNTQSBub2RlcyAob3RoZXIgdGhhbiB0aGUgb2xk
IENQUyBQaGkgbm9kZXMpIGludG8gU1NBCisgICAgICAgIC8vICAgZm9ybSBieSByZXBsYWNpbmcg
YXMgZm9sbG93czoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAtIEdldExvY2FsIG92ZXIgY2Fw
dHVyZWQgdmFyaWFibGVzIGxvc2UgdGhlaXIgcGhpcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
ICAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQgcmVwbGFj
ZWQgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBub2RlCisgICAgICAgIC8vICAgICBzcGVjaWZpZWQg
YnkgdmFsdWVGb3JPcGVyYW5kLgorICAgICAgICAvLworICAgICAgICAvLyAgIC0gU2V0TG9jYWwg
Z2V0cyBOb2RlTXVzdEdlbmVyYXRlIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50byBhIENo
ZWNrIG90aGVyd2lzZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAtIEZsdXNoIGxvc2VzIGl0
cyBjaGlsZHJlbiBhbmQgdHVybnMgaW50byBhIFBoYW50b20uCisgICAgICAgIC8vCisgICAgICAg
IC8vICAgLSBQaGFudG9tTG9jYWwgYmVjb21lcyBQaGFudG9tLCBhbmQgaXRzIGNoaWxkIGlzIHdo
YXRldmVyIGlzIHNwZWNpZmllZCBieQorICAgICAgICAvLyAgICAgdmFsdWVGb3JPcGVyYW5kLgor
ICAgICAgICAvLworICAgICAgICAvLyAgIC0gU2V0QXJndW1lbnQgaXMgcmVtb3ZlZCB1bmxlc3Mg
aXQncyBhIGNhcHR1cmVkIHZhcmlhYmxlLiBOb3RlIHRoYXQgR2V0QXJndW1lbnQgbm9kZXMKKyAg
ICAgICAgLy8gICAgIGhhdmUgYWxyZWFkeSBiZWVuIGluc2VydGVkLgorICAgICAgICBPcGVyYW5k
czxOb2RlKj4gdmFsdWVGb3JPcGVyYW5kKE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+
dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQuY2xl
YXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ1BTIHdpbGwgY2xhaW0gdGhhdCB0
aGUgcm9vdCBibG9jayBoYXMgYWxsIGFyZ3VtZW50cyBsaXZlLiBCdXQgd2UgaGF2ZSBhbHJlYWR5
IGRvbmUKKyAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBzdGVwIG9mIFNTQSBjb252ZXJzaW9uOiBh
cmd1bWVudCBsb2NhbHMgYXJlIG5vIGxvbmdlciBsaXZlIGF0IGhlYWQ7CisgICAgICAgICAgICAv
LyBpbnN0ZWFkIHdlIGhhdmUgR2V0QXJndW1lbnQgbm9kZXMgZm9yIGV4dHJhY3RpbmcgdGhlIHZh
bHVlcyBvZiBhcmd1bWVudHMuIFNvLCB3ZQorICAgICAgICAgICAgLy8gc2tpcCB0aGUgYXQtaGVh
ZCBhdmFpbGFibGUgdmFsdWUgY2FsY3VsYXRpb24gZm9yIHRoZSByb290IGJsb2NrLgorICAgICAg
ICAgICAgaWYgKGJsb2NrICE9IG1fZ3JhcGguYmxvY2soMCkpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gdmFsdWVGb3JPcGVyYW5kLnNpemUoKTsgaS0tOykgeworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlQXRIZWFkID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlQXRIZWFkKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZUF0SGVhZC0+dmFyaWFibGVBY2Nl
c3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGxpdmUgdmFyaWFibGUgIiwgVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcChtX2dyYXBoLCB2YXJpYWJsZSksICIgYXQgaGVhZCBvZiBibG9jayAiLCAqYmxvY2ss
ICJcbiIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIHNzYVZhcmlhYmxlID0gbV9zc2FWYXJpYWJsZUZvclZhcmlhYmxl
LmdldCh2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiog
ZGVmID0gbV9jYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCBzc2FWYXJpYWJsZSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghZGVmKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSBhcmUgcmVxdWlyZWQgdG8gaW5zZXJ0IGEgUGhpLCB0aGVuIHdlIHdvbid0IGhh
dmUgYSByZWFjaGluZyBkZWYKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IGhlYWQuCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGRl
Zi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnJlcGxhY2VtZW50KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgb2NjdXIgd2hlbiBhIFNldExv
Y2FsIGhhZCBhIEdldExvY2FsIGFzIGl0cyBzb3VyY2UuIFRoZQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gR2V0TG9jYWwgd291bGQgZ2V0IHJlcGxhY2VkIHdpdGggYW4gYWN0dWFsIFNTQSB2
YWx1ZSBieSB0aGUgdGltZSB3ZSBnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlcmUu
IE5vdGUgdGhhdCB0aGUgU1NBIHZhbHVlIHdpdGggd2hpY2ggdGhlIEdldExvY2FsIGdvdCByZXBs
YWNlZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gd291bGQgbm90IGluIHR1cm4gaGF2ZSBh
IHJlcGxhY2VtZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnJlcGxh
Y2VtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5yZXBsYWNlbWVu
dCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiByIiwgdmFsdWVG
b3JPcGVyYW5kLm9wZXJhbmRGb3JJbmRleChpKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kW2ldID0gbm9kZTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXSA9IG5vZGU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICh2ZXJib3NlKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nKCJWYXJpYWJsZXMgYXQgaGVhZCBhZnRlciBjb252ZXJnZW5j
ZTpcbiIpOwotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgICAgIGlm
ICghYmxvY2spCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAiLCAqYmxvY2ssICI6ICIsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsICJc
biIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBDb252
ZXJ0IG9wZXJhdGlvbnMgb3ZlciBsb2NhbHMgaW50byBvcGVyYXRpb25zIG92ZXIgU1NBIG5vZGVz
LgotICAgICAgICAvLyAtIEdldExvY2FsIG92ZXIgY2FwdHVyZWQgdmFyaWFibGVzIGxvc2UgdGhl
aXIgcGhpcy4KLSAgICAgICAgLy8gLSBHZXRMb2NhbCBvdmVyIHVuY2FwdHVyZWQgdmFyaWFibGVz
IGRpZSBhbmQgZ2V0IHJlcGxhY2VkIHdpdGggcmVmZXJlbmNlcwotICAgICAgICAvLyAgIHRvIHRo
ZSBub2RlIHNwZWNpZmllZCBieSB2YXJpYWJsZXNBdEhlYWQuCi0gICAgICAgIC8vIC0gU2V0TG9j
YWwgZ2V0cyBOb2RlTXVzdEdlbmVyYXRlIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50byBh
Ci0gICAgICAgIC8vICAgQ2hlY2sgb3RoZXJ3aXNlLgotICAgICAgICAvLyAtIEZsdXNoIGxvc2Vz
IGl0cyBjaGlsZHJlbiBhbmQgdHVybnMgaW50byBhIFBoYW50b20uCi0gICAgICAgIC8vIC0gUGhh
bnRvbUxvY2FsIGJlY29tZXMgUGhhbnRvbSwgYW5kIGl0cyBjaGlsZCBpcyB3aGF0ZXZlciBpcyBz
cGVjaWZpZWQKLSAgICAgICAgLy8gICBieSB2YXJpYWJsZXNBdEhlYWQuCi0gICAgICAgIC8vIC0g
U2V0QXJndW1lbnQgdHVybnMgaW50byBHZXRBcmd1bWVudCB1bmxlc3MgaXQncyBhIGNhcHR1cmVk
IHZhcmlhYmxlLgotICAgICAgICAvLyAtIFVwc2lsb25zIGdldCB0aGVpciBjaGlsZHJlbiBmaXhl
ZCB0byByZWZlciB0byB0aGUgdHJ1ZSB2YWx1ZSBvZiB0aGF0IGxvY2FsCi0gICAgICAgIC8vICAg
YXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suIFByaW9yIHRvIHRoaXMgbG9vcCwgVXBzaWxvbnMgd2ls
bCByZWZlciB0bwotICAgICAgICAvLyAgIHZhcmlhYmxlQXRUYWlsW29wZXJhbmRdLCB3aGljaCBt
YXkgYmUgYW55IG9mIEZsdXNoLCBQaGFudG9tTG9jYWwsIEdldExvY2FsLAotICAgICAgICAvLyAg
IFNldExvY2FsLCBTZXRBcmd1bWVudCwgb3IgUGhpLiBXZSBhY2NvbXBsaXNoIHRoaXMgYnkgc2V0
dGluZyB0aGUKLSAgICAgICAgLy8gICByZXBsYWNlbWVudCBwb2ludGVycyBvZiBhbGwgb2YgdGhv
c2Ugbm9kZXMgdG8gcmVmZXIgdG8gZWl0aGVyCi0gICAgICAgIC8vICAgdmFyaWFibGVzQXRIZWFk
W29wZXJhbmRdLCBvciB0aGUgY2hpbGQgb2YgdGhlIFNldExvY2FsLgotICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9j
ay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgYmxvY2stPnBo
aXNbcGhpSW5kZXhdLT5yZXBsYWNlbWVudCA9Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQub3BlcmFuZChibG9jay0+cGhpc1twaGlJbmRleF0tPmxvY2FsKCkpOwor
ICAgICAgICAgICAgLy8gSW5zZXJ0IFBoaXMgYnkgYXNraW5nIHRoZSBjYWxjdWxhdG9yIHdoYXQg
cGhpcyB0aGVyZSBhcmUgaW4gdGhpcyBibG9jay4gQWxzbyB1cGRhdGUKKyAgICAgICAgICAgIC8v
IHZhbHVlRm9yT3BlcmFuZCB3aXRoIHRob3NlIFBoaXMuIEZvciBQaGlzIGFzc29jaWF0ZWQgd2l0
aCB2YXJpYWJsZXMgdGhhdCBhcmUgbm90CisgICAgICAgICAgICAvLyBmbHVzaGVkLCB3ZSBhbHNv
IGluc2VydCBhIE1vdkhpbnQuCisgICAgICAgICAgICBzaXplX3QgcGhpSW5zZXJ0aW9uUG9pbnQg
PSAwOworICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fY2Fs
Y3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtwaGlEZWYtPnZhcmlh
YmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEZp
Z3VyZSBvdXQgaWYgdGhlIGxvY2FsIGlzIG1lYW50IHRvIGJlIGZsdXNoZWQgaGVyZS4KKyAgICAg
ICAgICAgICAgICBib29sIGlzRmx1c2hlZCA9ICEhKAorICAgICAgICAgICAgICAgICAgICBibG9j
ay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLT5mbGFncygpICYg
Tm9kZUlzRmx1c2hlZCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlvblBvaW50LCBwaGlEZWYtPnZhbHVlKCkpOworICAg
ICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
aXNGbHVzaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuIEZvciBtdWx0
aXBsZSByZWFzb25zLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUmVhc29uICMxOiBJZiB0aGUgbG9jYWwgaXMgZmx1c2hlZCB0aGVuIHdlIGRvbid0IG5lZWQg
dG8gYm90aGVyIHdpdGggYQorICAgICAgICAgICAgICAgICAgICAvLyBNb3ZIaW50IHNpbmNlIGV2
ZXJ5IHBhdGggdG8gdGhpcyBwb2ludCBpbiB0aGUgY29kZSB3aWxsIGhhdmUgZmx1c2hlZCB0aGUK
KyAgICAgICAgICAgICAgICAgICAgLy8gYnl0ZWNvZGUgdmFyaWFibGUgdXNpbmcgYSBTZXRMb2Nh
bCBhbmQgaGVuY2UgdGhlIEF2YWlsYWJpbGl0eTo6Zmx1c2hlZEF0KCkKKyAgICAgICAgICAgICAg
ICAgICAgLy8gd2lsbCBhZ3JlZSwgYW5kIHRoYXQgd2lsbCBiZSBzdWZmaWNpZW50IGZvciBmaWd1
cmluZyBvdXQgaG93IHRvIHJlY292ZXIgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlh
YmxlJ3MgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAv
LyBSZWFzb24gIzI6IElmIHdlIGhhZCBpbnNlcnRlZCBhIE1vdkhpbnQgYW5kIHRoZSBQaGkgZnVu
Y3Rpb24gaGFkIGRpZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gKGJlY2F1c2UgdGhlIG9ubHkg
dXNlciBvZiB0aGUgdmFsdWUgd2FzIHRoZSAiZmx1c2giIC0gaS5lLiBzb21lCisgICAgICAgICAg
ICAgICAgICAgIC8vIGFzeW5jaHJvbm91cyBydW50aW1lIHRoaW5neSkgdGhlbiB0aGUgTW92SGlu
dCB3b3VsZCB0dXJuIGludG8gYSBab21iaWVIaW50LAorICAgICAgICAgICAgICAgICAgICAvLyB3
aGljaCB3b3VsZCBmb29sIHVzIGludG8gdGhpbmtpbmcgdGhhdCB0aGUgdmFyaWFibGUgaXMgZGVh
ZC4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVhc29uIGhhcyBhIGxv
dCB0byBkbyB3aXRoIHRoZSBmYWN0IHRoYXQgRmx1c2hlcyBkbyBub3QgdHVybiBpbnRvCisgICAg
ICAgICAgICAgICAgICAgIC8vIFBoYW50b21zLCBiZWNhdXNlIG91ciBoYW5kbGluZyBvZiBGbHVz
aGVzIGFzc3VtZSB0aGF0IHdlICgxKSBhbHdheXMgbGVhdmUKKyAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIGZsdXNoZWQgU2V0TG9jYWxzIGFsb25lIGFuZCAoMikgT1NSIGF2YWlsYWJpbGl0eSBh
bmFseXNpcyBhbHdheXMgc2VlcworICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYXZhaWxhYmxl
IGZsdXNoLiBUaGUgcHJlc2VuY2Ugb2YgYSBNb3ZIaW50IG9yIFpvbWJpZUhpbnQgd291bGQgbWFr
ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gZmx1c2ggc2VlbSB1bmF2YWlsYWJsZS4KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMzogSWYg
d2UgaGFkIGluc2VydGVkIGEgTW92SGludCB0aGVuIGV2ZW4gaWYgdGhlIFBoaSBzdGF5ZWQgYWxp
dmUsCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIHdvdWxkIHN0aWxsIGVuZCB1cCBnZW5lcmF0
aW5nIGluZWZmaWNpZW50IGNvZGUgc2luY2Ugd2Ugd291bGQgYmUgdGVsbGluZworICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgT1NSIGV4aXQgY29tcGlsZXIgdG8gdXNlIHNvbWUgU1NBIHZhbHVl
IGZvciB0aGUgYnl0ZWNvZGUgdmFyaWFibGUKKyAgICAgICAgICAgICAgICAgICAgLy8gcmF0aGVy
IHRoYW4ganVzdCB0ZWxsaW5nIGl0IHRoYXQgdGhlIHZhbHVlIHdhcyBhbHJlYWR5IG9uIHRoZSBz
dGFjay4KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgcGhpSW5zZXJ0
aW9uUG9pbnQsIFNwZWNOb25lLCBNb3ZIaW50LCBOb2RlT3JpZ2luKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpLCBwaGlEZWYtPnZh
bHVlKCktPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9k
ZUluZGV4LS07KQotICAgICAgICAgICAgICAgIEFTU0VSVCghYmxvY2stPmF0KG5vZGVJbmRleCkt
PnJlcGxhY2VtZW50KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewog
ICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJQcm9jZXNzaW5nIG5vZGUgIiwgbm9kZSwgIjpcbiIpOworICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIsIG5vZGUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBt
X2dyYXBoLnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBT
ZXRMb2NhbDogewogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCAhIShub2Rl
LT5mbGFncygpICYgTm9kZUlzRmx1c2hlZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5tZXJnZUZsYWdzKE5vZGVNdXN0R2VuZXJhdGUpOwogICAgICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDaGVj
ayk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlcGxhY2VtZW50ID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOyAvLyBPbmx5IGZvciBVcHNpbG9ucy4KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiTWFwcGluZzogciIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIsIG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZv
ck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEdldExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEl0IHNlZW1zIHRlbXB0aW5n
IHRvIGp1c3QgZG8gZm9yd2FyZFBoaShHZXRMb2NhbCksIGV4Y2VwdCB0aGF0IHdlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGNvdWxkIGhhdmUgY3JlYXRlZCBhIG5ldyAoU1NBKSBQaGksIGFuZCB0
aGUgR2V0TG9jYWwgY291bGQgc3RpbGwgYmUKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVmZXJy
aW5nIHRvIGFuIG9sZCAoQ1BTKSBQaGkuIFVzZXMgdmFyaWFibGVzQXRIZWFkIHRvIHRlbGwgdXMg
d2hhdAotICAgICAgICAgICAgICAgICAgICAvLyB0byByZWZlciB0by4KICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0Nh
cHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2Rl
ICIsIG5vZGUsICIgd2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIEZsdXNoOiB7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkcmVuLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50
b20oKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IGZvciBVcHNpbG9ucy4g
QW4gVXBzaWxvbiB3aWxsIG9ubHkgcmVmZXIgdG8gYSBGbHVzaCBpZgotICAgICAgICAgICAgICAg
ICAgICAvLyB0aGVyZSB3ZXJlIG5vIFNldExvY2FscyBvciBHZXRMb2NhbHMgaW4gdGhlIGJsb2Nr
LgotICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM2MCwxNCAr
MzQ4LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWwgd291bGRu
J3QgaGF2ZSBiZWVuIGNvbXB1dGVkIGJ5IHRoZSBQaGkgcmVkdWN0aW9uIGFsZ29yaXRobQogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYWJvdmUuCiAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZHJlbi5yZXNldCgpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSktPmRlZmF1bHRFZGdlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IHZh
bHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKS0+ZGVmYXVsdEVkZ2UoKTsK
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgZm9yIFVwc2lsb25zLiBBbiBVcHNpbG9uIHdpbGwg
b25seSByZWZlciB0byBhCi0gICAgICAgICAgICAgICAgICAgIC8vIFBoYW50b21Mb2NhbCBpZiB0
aGVyZSB3ZXJlIG5vIFNldExvY2FscyBvciBHZXRMb2NhbHMgaW4gdGhlIGJsb2NrLgotICAgICAg
ICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0zNzUsMTUgKzM1OCw0
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0QXJn
dW1lbnQpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQocmVzdWx0Rm9yKG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpKSk7CisgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQotCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGNhc2UgR2V0QXJndW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
Ik1hcHBpbmc6IHIiLCB2YXJpYWJsZS0+bG9jYWwoKSwgIiAtPiAiLCBub2RlLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpID0gbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IFVwc2lsb25zIGp1
c3QgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGJsb2NrLiBPbiB0aGUgc3VyZmFjZSB0aGlzCisgICAg
ICAgICAgICAvLyBzZWVtcyBkYW5nZXJvdXMgYmVjYXVzZSB0aGUgVXBzaWxvbiB3aWxsIGhhdmUg
YSBjaGVja2luZyBVc2VLaW5kLiBCdXQsIHdlIHdpbGwgbm90CisgICAgICAgICAgICAvLyBhY3R1
YWxseSBiZSBwZXJmb3JtaW5nIHRoZSBjaGVjayBhdCB0aGUgcG9pbnQgb2YgdGhlIFVwc2lsb247
IHRoZSBjaGVjayB3aWxsCisgICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmUgYmVlbiBwZXJmb3Jt
ZWQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBvcmlnaW5hbCBTZXRMb2NhbCB3YXMuCisgICAgICAg
ICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7Cisg
ICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmln
aW47CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Y2Nlc3NvckluZGV4ID0gYmxvY2stPm51
bVN1Y2Nlc3NvcnMoKTsgc3VjY2Vzc29ySW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgp
OworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2Nh
bGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAg
ICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxl
KCk7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBt
X3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAg
ICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2luZEZvcihmb3JtYXQpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2lu
dCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8ocGhpTm9kZSksIEVkZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZUtpbmQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxv
Y2spOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBGcmVlIGFsbCBDUFMgcGhpcyBh
bmQgcmVzZXQgdmFyaWFibGVzIHZlY3RvcnMuCkBAIC00MDQsNzMgKzQyMCwxOSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMuY2xlYXIoKTsKICAgICAgICAgCiAgICAgICAg
IG1fZ3JhcGgubV9mb3JtID0gU1NBOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CiAKLXBy
aXZhdGU6Ci0gICAgdm9pZCBmb3J3YXJkUGhpQ2hpbGRyZW4oTm9kZSogbm9kZSkKLSAgICB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kp
IHsKLSAgICAgICAgICAgIEVkZ2UmIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKLSAg
ICAgICAgICAgIGlmICghZWRnZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IG1fY2hhbmdlZCB8PSBmb3J3YXJkUGhpRWRnZShlZGdlKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICBOb2RlKiBmb3J3YXJkUGhpKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBmb3Ig
KDs7KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgUGhpOiB7Ci0gICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uanVz
dE9uZUNoaWxkKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlZGdlKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKLSAgICAgICAgICAgICAgICBub2RlID0gZWRnZS5ub2RlKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEdl
dExvY2FsOgotICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmICh2
ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBTU0EgdHJhbnNmb3Jt
YXRpb246XG4iKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIGJvb2wgZm9yd2FyZFBoaUVkZ2UoRWRnZSYgZWRnZSkKLSAgICB7Ci0gICAg
ICAgIE5vZGUqIG5ld05vZGUgPSBmb3J3YXJkUGhpKGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYg
KG5ld05vZGUgPT0gZWRnZS5ub2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
Ci0gICAgCi0gICAgdm9pZCBkZWR1cGxpY2F0ZUNoaWxkcmVuKE5vZGUqIG5vZGUpCi0gICAgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytp
KSB7Ci0gICAgICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKLSAg
ICAgICAgICAgIGlmICghZWRnZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGlmIChlZGdlID09IG5vZGUpIHsKLSAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1v
dmVFZGdlKGktLSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGkgKyAxOyBqIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytqKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGopID09IGVkZ2UpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZShqLS0pOwotICAgICAgICAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICAKKworICAgIFNTQUNhbGN1bGF0b3IgbV9jYWxjdWxhdG9y
OwogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBIYXNoTWFwPFZhcmlhYmxl
QWNjZXNzRGF0YSosIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gbV9zc2FWYXJpYWJsZUZvclZh
cmlhYmxlOworICAgIFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBtX3ZhcmlhYmxlRm9yU1NB
SW5kZXg7CiAgICAgYm9vbCBtX2NoYW5nZWQ7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHJldmlzaW9uIDE3MzMz
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM0LDEwICszNCw5IEBAIGNsYXNzIEdyYXBoOwogCiAvLyBDb252ZXJ0
IFRocmVhZGVkQ1BTIGZvcm0gaW50byBTU0EgZm9ybS4gVGhpcyByZXN1bHRzIGluIGEgZm9ybSB0
aGF0IGhhczoKIC8vCi0vLyAtIFJvdWdobHkgbWluaW1hbCBQaGkncy4gV2UgdXNlIHRoZSBBeWNv
Y2sgJiBIb3JzcG9vbCBmaXhwb2ludCBmb3IKLS8vICAgY29udmVydGluZyB0aGUgQ1BTIG1heGlt
YWwgUGhpcyBpbnRvIFNTQSBtaW5pbWFsIFBoaXMsIHdpdGggdGhlIGNhdmVhdAotLy8gICB0aGF0
IGlycmVkdWNpYmxlIGNvbnRyb2wgZmxvdyBtYXkgcmVzdWx0IGluIHNvbWUgbWlzc2VkIG9wcG9y
dHVuaXRpZXMKLS8vICAgZm9yIFBoaSByZWR1Y3Rpb24uCisvLyAtIE1pbmltYWwgUGhpJ3MuIFdl
IHVzZSB0aGUgdGhlIEN5dHJvbiBldCBhbCAoVE9QTEFTJzkxKSBhbGdvcml0aG0gZm9yCisvLyAg
IFBoaSBpbnNlcnRpb24uIE1vc3Qgb2YgdGhlIGFsZ29yaXRobSBpcyBpbXBsZW1lbnRlZCBpbiBT
U0FDYWxjdWxhdG9yCisvLyAgIGFuZCBEb21pbmF0b3JzLgogLy8KIC8vIC0gTm8gdXNlcyBvZiBH
ZXRMb2NhbC9TZXRMb2NhbCBleGNlcHQgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcyBhbmQgZmx1c2hl
cy4KIC8vICAgQWZ0ZXIgdGhpcywgYW55IHJlbWFpbmluZyBTZXRMb2NhbCBtZWFucyBGbHVzaC4g
UGhhbnRvbUxvY2FscyBiZWNvbWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNzMzMzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOSArMzgsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBWYWxpZGF0ZSB7CiBwdWJsaWM6
Ci0gICAgVmFsaWRhdGUoR3JhcGgmIGdyYXBoLCBHcmFwaER1bXBNb2RlIGdyYXBoRHVtcE1vZGUp
CisgICAgVmFsaWRhdGUoR3JhcGgmIGdyYXBoLCBHcmFwaER1bXBNb2RlIGdyYXBoRHVtcE1vZGUs
IENTdHJpbmcgZ3JhcGhEdW1wQmVmb3JlUGhhc2UpCiAgICAgICAgIDogbV9ncmFwaChncmFwaCkK
ICAgICAgICAgLCBtX2dyYXBoRHVtcE1vZGUoZ3JhcGhEdW1wTW9kZSkKKyAgICAgICAgLCBtX2dy
YXBoRHVtcEJlZm9yZVBoYXNlKGdyYXBoRHVtcEJlZm9yZVBoYXNlKQogICAgIHsKICAgICB9CiAg
ICAgCkBAIC0yNjYsNiArMjY3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9n
cmFwaDsKICAgICBHcmFwaER1bXBNb2RlIG1fZ3JhcGhEdW1wTW9kZTsKKyAgICBDU3RyaW5nIG1f
Z3JhcGhEdW1wQmVmb3JlUGhhc2U7CiAgICAgCiAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+
IG1fbXlSZWZDb3VudHM7CiAgICAgSGFzaFNldDxOb2RlKj4gbV9hY2NlcHRhYmxlTm9kZXM7CkBA
IC01NjQsMTQgKzU2NiwxOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGhE
dW1wTW9kZSA9PSBEb250RHVtcEdyYXBoKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBk
YXRhTG9nKCJcbiIpOworICAgICAgICBpZiAoIW1fZ3JhcGhEdW1wQmVmb3JlUGhhc2UuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkJlZm9yZSBwaGFzZTpcbiIpOworICAgICAgICAg
ICAgZGF0YUxvZyhtX2dyYXBoRHVtcEJlZm9yZVBoYXNlKTsKKyAgICAgICAgfQogICAgICAgICBk
YXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKICAgICAgICAgbV9ncmFwaC5kdW1wKCk7
CiAgICAgfQogfTsKIAotdm9pZCB2YWxpZGF0ZShHcmFwaCYgZ3JhcGgsIEdyYXBoRHVtcE1vZGUg
Z3JhcGhEdW1wTW9kZSkKK3ZvaWQgdmFsaWRhdGUoR3JhcGgmIGdyYXBoLCBHcmFwaER1bXBNb2Rl
IGdyYXBoRHVtcE1vZGUsIENTdHJpbmcgZ3JhcGhEdW1wQmVmb3JlUGhhc2UpCiB7Ci0gICAgVmFs
aWRhdGUgdmFsaWRhdGlvbk9iamVjdChncmFwaCwgZ3JhcGhEdW1wTW9kZSk7CisgICAgVmFsaWRh
dGUgdmFsaWRhdGlvbk9iamVjdChncmFwaCwgZ3JhcGhEdW1wTW9kZSwgZ3JhcGhEdW1wQmVmb3Jl
UGhhc2UpOwogICAgIHZhbGlkYXRpb25PYmplY3QudmFsaWRhdGUoKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuaAkocmV2aXNpb24gMTczMzM3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogZW51bSBH
cmFwaER1bXBNb2RlIHsgRG9udER1bXBHcmFwaCwgRHVtcEdyYXBoIH07CiAKLXZvaWQgdmFsaWRh
dGUoR3JhcGgmLCBHcmFwaER1bXBNb2RlID0gRHVtcEdyYXBoKTsKK3ZvaWQgdmFsaWRhdGUoR3Jh
cGgmLCBHcmFwaER1bXBNb2RlID0gRHVtcEdyYXBoLCBDU3RyaW5nIGdyYXBoRHVtcEJlZm9yZVBo
YXNlID0gQ1N0cmluZygpKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTczMzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMiArMTQ1LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSwgc3RhY2tPdmVyZmxvdyk7CiAgICAgICAg
IGNyZWF0ZVBoaVZhcmlhYmxlcygpOwogCi0gICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gZGVw
dGhGaXJzdDsKLSAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKGRlcHRoRmlyc3Qp
OworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IHByZU9yZGVyID0gbV9ncmFwaC5ibG9ja3NJ
blByZU9yZGVyKCk7CiAKICAgICAgICAgaW50IG1heE51bWJlck9mQXJndW1lbnRzID0gLTE7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgYmxvY2tJbmRleCA9IGRlcHRoRmlyc3Quc2l6ZSgpOyBibG9j
a0luZGV4LS07ICkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBkZXB0aEZpcnN0
W2Jsb2NrSW5kZXhdOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJlT3JkZXIp
IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsg
bm9kZUluZGV4LS07ICkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
bm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKQEAgLTIx
MSw5ICsyMDksOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hY3Jv
QXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKICAgICAgICAgbV9vdXQudW5y
ZWFjaGFibGUoKTsKIAotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aEZp
cnN0LnNpemUoKTsgKytpKQotICAgICAgICAgICAgY29tcGlsZUJsb2NrKGRlcHRoRmlyc3RbaV0p
OworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJlT3JkZXIpCisgICAgICAgICAg
ICBjb21waWxlQmxvY2soYmxvY2spOwogICAgICAgICAKICAgICAgICAgaWYgKE9wdGlvbnM6OmR1
bXBMTFZNSVIoKSkKICAgICAgICAgICAgIGR1bXBNb2R1bGUobV9mdGxTdGF0ZS5tb2R1bGUpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTcz
MzM3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjgsNiArMTI4LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJp
bmc7CiAgICAgdihib29sLCBwcmludEVhY2hPU1JFeGl0LCBmYWxzZSkgXAogICAgIHYoYm9vbCwg
dmFsaWRhdGVHcmFwaCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHZhbGlkYXRlR3JhcGhBdEVhY2hQ
aGFzZSwgZmFsc2UpIFwKKyAgICB2KGJvb2wsIHZlcmJvc2VWYWxpZGF0aW9uRmFpbHVyZSwgZmFs
c2UpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VPU1IsIGZhbHNlKSBcCiAgICAgdihib29sLCB2ZXJi
b3NlRlRMT1NSRXhpdCwgZmFsc2UpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VDYWxsTGluaywgZmFs
c2UpIFwKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzMzNjYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA5LTA3ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgREZHIHNob3VsZCBoYXZlIGEgcmV1c2FibGUg
U1NBIGJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNjMzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgVXBkYXRlIHRoZSBhbGxvYygpIG1ldGhvZCB0byB1c2UgdmFyaWFkaWMgdGVt
cGxhdGVzLiBUaGlzIG1ha2VzIGl0IG1vcmUgbmF0dXJhbCB0byB1c2UuCisKKyAgICAgICAgKiB3
dGYvU2VnbWVudGVkVmVjdG9yLmg6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvcjo6YWxs
b2MpOgorCiAyMDE0LTA5LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBNYWtlIHVwZGF0ZXMgc3VnZ2VzdGVkIGJ5IG5ldyB2ZXJzaW9uIG9mIFhjb2RlCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaAkocmV2aXNpb24gMTczMzM3KQorKysgU291cmNlL1dU
Ri93dGYvU2VnbWVudGVkVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw5ICsxNTcsMTAg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBzZWdtZW50Rm9yKG1fc2l6ZSAtIDEpLT51
bmNoZWNrZWRBcHBlbmQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBUJiBhbGxvYygpCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAg
ICAgIFQmIGFsbG9jKEFyZ3MuLi4gYXJncykKICAgICAgICAgewotICAgICAgICAgICAgYXBwZW5k
PFQ+KFQoKSk7CisgICAgICAgICAgICBhcHBlbmQ8VD4oVChhcmdzLi4uKSk7CiAgICAgICAgICAg
ICByZXR1cm4gbGFzdCgpOwogICAgICAgICB9CiAK
</data>
<flag name="review"
          id="262533"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>