<?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>183545</bug_id>
          
          <creation_ts>2018-03-10 13:19:47 -0800</creation_ts>
          <short_desc>PerProcess&lt;&gt; should be safe by default</short_desc>
          <delta_ts>2020-02-05 11:40:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>bmalloc</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1405499</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-10 13:19:47 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405500</commentid>
    <comment_count>1</comment_count>
      <attachid>335519</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-10 13:20:25 -0800</bug_when>
    <thetext>Created attachment 335519
maybe this will work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405503</commentid>
    <comment_count>2</comment_count>
      <attachid>335520</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-10 15:24:03 -0800</bug_when>
    <thetext>Created attachment 335520
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405506</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-10 15:27:15 -0800</bug_when>
    <thetext>Attachment 335520 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/PerProcess.h:64:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/PerProcess.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 8 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>1405550</commentid>
    <comment_count>4</comment_count>
      <attachid>335520</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-11 01:34:22 -0800</bug_when>
    <thetext>Comment on attachment 335520
the patch

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

r=me with a micro nit.

&gt; Source/bmalloc/bmalloc/PerProcess.cpp:49
&gt; +static unsigned stringHash(const char* string)
&gt; +{
&gt; +    unsigned result = 5381;
&gt; +    while (char c = *string++)
&gt; +        result = result * 33 + c;
&gt; +    return result;
&gt; +}

Nits: you can make this `constexpr` function, move it to a header, and calculate hash value at compile time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405561</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-11 10:15:15 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #4)
&gt; Comment on attachment 335520 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=335520&amp;action=review
&gt; 
&gt; r=me with a micro nit.
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/PerProcess.cpp:49
&gt; &gt; +static unsigned stringHash(const char* string)
&gt; &gt; +{
&gt; &gt; +    unsigned result = 5381;
&gt; &gt; +    while (char c = *string++)
&gt; &gt; +        result = result * 33 + c;
&gt; &gt; +    return result;
&gt; &gt; +}
&gt; 
&gt; Nits: you can make this `constexpr` function, move it to a header, and
&gt; calculate hash value at compile time.

Really, the compiler will execute a constexpr loop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405563</commentid>
    <comment_count>6</comment_count>
      <attachid>335540</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-11 10:18:50 -0700</bug_when>
    <thetext>Created attachment 335540
patch for landing

With Yusuke&apos;s suggested change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405564</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-11 10:20:44 -0700</bug_when>
    <thetext>Attachment 335540 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/PerProcess.h:72:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/bmalloc/bmalloc/PerProcess.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 8 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>1405565</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-11 10:21:23 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #5)
&gt; &gt; Nits: you can make this `constexpr` function, move it to a header, and
&gt; &gt; calculate hash value at compile time.
&gt; 
&gt; Really, the compiler will execute a constexpr loop?

Yeah, C++14 relaxed constexpr is super powerful. You can check our wtf/text/StringHasher.h&apos;s computeLiteralHash for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405567</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-11 10:46:22 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/229516/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405999</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-12 17:24:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/38397867&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615160</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2020-02-05 11:40:08 -0800</bug_when>
    <thetext>*** Bug 182496 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335519</attachid>
            <date>2018-03-10 13:20:25 -0800</date>
            <delta_ts>2018-03-10 15:24:03 -0800</delta_ts>
            <desc>maybe this will work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>14418</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjk0NzEpCisrKyBTb3VyY2UvYm1h
bGxvYy9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQCBzZXQo
Ym1hbGxvY19TT1VSQ0VTCiAgICAgYm1hbGxvYy9MYXJnZU1hcC5jcHAKICAgICBibWFsbG9jL0xv
Z2dpbmcuY3BwCiAgICAgYm1hbGxvYy9PYmplY3RUeXBlLmNwcAorICAgIGJtYWxsb2MvUGVyUHJv
Y2Vzcy5jcHAKICAgICBibWFsbG9jL1NjYXZlbmdlci5jcHAKICAgICBibWFsbG9jL1N0YXRpY011
dGV4LmNwcAogICAgIGJtYWxsb2MvVk1IZWFwLmNwcApJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI5NDcxKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAvKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNl
Y3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJMEYyNkE3QTUy
MDU0ODMxMzAwOTBBMTQxIC8qIFBlclByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNkE3QTQyMDU0ODMwRDAwOTBBMTQxIC8qIFBlclBy
b2Nlc3MuY3BwICovOyB9OwogCQkwRjUxNjc3NDFGQUQ2ODVDMDA4MjM2QTggLyogYm1hbGxvYy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUxNjc3
MzFGQUQ2ODUyMDA4MjM2QTggLyogYm1hbGxvYy5jcHAgKi87IH07CiAJCTBGNTU0OUVGMUZCNTQ3
MDQwMDdGRjc1QSAvKiBJc29QYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNTU0OUVFMUZCNTQ3MDEwMDdGRjc1QSAvKiBJc29QYWdlLmNwcCAq
LzsgfTsKIAkJMEY1QkYxNDcxRjIyQThCMTAwMjlEOTFEIC8qIEhlYXBLaW5kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE0NjFGMjJBOEIxMDAy
OUQ5MUQgLyogSGVhcEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTc0LDYgKzE3NSw3IEBACiAvKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwor
CQkwRjI2QTdBNDIwNTQ4MzBEMDA5MEExNDEgLyogUGVyUHJvY2Vzcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQZXJQcm9jZXNzLmNwcDsgcGF0aCA9IGJtYWxsb2Mv
UGVyUHJvY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTE2NzczMUZB
RDY4NTIwMDgyMzZBOCAvKiBibWFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IGJtYWxsb2MuY3BwOyBwYXRoID0gYm1hbGxvYy9ibWFsbG9jLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NTQ5RUUxRkI1NDcwMTAwN0ZGNzVBIC8qIElzb1Bh
Z2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSXNvUGFnZS5jcHA7
IHBhdGggPSBibWFsbG9jL0lzb1BhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjVCRjE0NjFGMjJBOEIxMDAyOUQ5MUQgLyogSGVhcEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SGVhcEtpbmQuaDsgcGF0aCA9IGJtYWxsb2MvSGVhcEtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTUyMSw2ICs1MjMsNyBAQAogCQkJCTQ0MjZFMjdGMUM4MzhFRTAwMDhFQjA0
MiAvKiBMb2dnaW5nLmggKi8sCiAJCQkJMTRDODk5MkExQ0M0ODVFNzAwMjdBMDU3IC8qIE1hcC5o
ICovLAogCQkJCTE0NERDRUQ2MTdBNjQ5RDkwMDkzQjJGMiAvKiBNdXRleC5oICovLAorCQkJCTBG
MjZBN0E0MjA1NDgzMEQwMDkwQTE0MSAvKiBQZXJQcm9jZXNzLmNwcCAqLywKIAkJCQkwRjVCRjE0
ODFGMjJBOEQ4MDAyOUQ5MUQgLyogUGVySGVhcEtpbmQuaCAqLywKIAkJCQkxNDQ0NkEwNzE3QTYx
RkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5oICovLAogCQkJCTE0NDQ2OUZEMTdBNjFGMUYwMEY5
RUExRCAvKiBQZXJUaHJlYWQuaCAqLywKQEAgLTc2OCw2ICs3NzEsNyBAQAogCQkJCTE0RjI3MUMz
MThFQTM5NzgwMDhDMTUyRiAvKiBBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU5
OUM1Q0MxRUMzRjE1OTAwQTJGN0JCIC8qIEF2YWlsYWJsZU1lbW9yeS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNEYyNzFDNDE4RUEzOTdCMDA4QzE1MkYgLyogQ2FjaGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYyNkE3QTUyMDU0ODMxMzAwOTBBMTQxIC8qIFBlclByb2Nlc3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJGIC8qIERlYWxsb2NhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkI0NDM2MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hl
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4OTVEOTExQTNBMzE5QzAwMDYyMzVEIC8qIEVu
dmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3Bw
CShyZXZpc2lvbiAyMjk0NzEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwg
c3RkOjpsb2NrX2d1YXIKICNlbmRpZgogICAgIH0KICAgICAKLSAgICBtX3NjYXZlbmdlciA9IFNh
ZmVQZXJQcm9jZXNzPFNjYXZlbmdlcj46OmdldCgpOworICAgIG1fc2NhdmVuZ2VyID0gUGVyUHJv
Y2VzczxTY2F2ZW5nZXI+OjpnZXQoKTsKIH0KIAogYm9vbCBIZWFwOjp1c2luZ0dpZ2FjYWdlKCkK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oCShy
ZXZpc2lvbiAyMjk0NzEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9yeUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBFbGlnaWJpbGl0eVJlc3Vs
dDxDb25maWc+IElzb0RpcmVjdG9yeTxDCiAgICAgaWYgKHBhZ2VJbmRleCA+PSBudW1QYWdlcykK
ICAgICAgICAgcmV0dXJuIEVsaWdpYmlsaXR5S2luZDo6RnVsbDsKICAgICAKLSAgICBTY2F2ZW5n
ZXImIHNjYXZlbmdlciA9ICpTYWZlUGVyUHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQoKTsKKyAgICBT
Y2F2ZW5nZXImIHNjYXZlbmdlciA9ICpQZXJQcm9jZXNzPFNjYXZlbmdlcj46OmdldCgpOwogICAg
IHNjYXZlbmdlci5kaWRTdGFydEdyb3dpbmcoKTsKICAgICAKICAgICBJc29QYWdlPENvbmZpZz4q
IHBhZ2UgPSBtX3BhZ2VzW3BhZ2VJbmRleF07CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBJc29E
aXJlY3Rvcnk8Q29uZmlnLCBwYXNzZWROdW1QYWdlcwogICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXA6ICVwIGRpZCBiZWNvbWUgZW1wdHkuXG4iLCB0
aGlzLCBwYWdlKTsKICAgICAgICAgbV9lbXB0eVtwYWdlSW5kZXhdID0gdHJ1ZTsKLSAgICAgICAg
U2FmZVBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPnNjaGVkdWxlKElzb1BhZ2VCYXNlOjpw
YWdlU2l6ZSk7CisgICAgICAgIFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPnNjaGVkdWxl
KElzb1BhZ2VCYXNlOjpwYWdlU2l6ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQkNS
QVNIKCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgorCitu
YW1lc3BhY2UgYm1hbGxvYyB7CisKK3N0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdGFibGVTaXpl
ID0gMTAwOworCitzdGF0aWMgU3RhdGljTXV0ZXggc19tdXRleDsKKworc3RhdGljIGNoYXIqIHNf
YnVtcEJhc2U7CitzdGF0aWMgc2l6ZV90IHNfYnVtcE9mZnNldDsKK3N0YXRpYyBzaXplX3Qgc19i
dW1wTGltaXQ7CisKK3N0YXRpYyBQZXJQcm9jZXNzRGF0YSogc190YWJsZVt0YWJsZVNpemVdOwor
CitzdGF0aWMgdW5zaWduZWQgc3RyaW5nSGFzaChjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAg
dW5zaWduZWQgcmVzdWx0ID0gNTM4MTsKKyAgICB3aGlsZSAoY2hhciBjID0gKnN0cmluZysrKQor
ICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAzMyArIGM7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworLy8gUmV0dXJucyB6ZXJvLWZpbGxlZCBtZW1vcnkgYnkgdmlydHVhbCBvZiB1c2luZyB2bUFs
bG9jYXRlLgorc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25t
ZW50KQoreworICAgIHNfYnVtcE9mZnNldCA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50
LCBzX2J1bXBPZmZzZXQpOworICAgIHZvaWQqIHJlc3VsdCA9IHNfYnVtcEJhc2UgKyBzX2J1bXBP
ZmZzZXQ7CisgICAgc19idW1wT2Zmc2V0ICs9IHNpemU7CisgICAgaWYgKHNfYnVtcE9mZnNldCA8
PSBzX2J1bXBMaW1pdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBzaXplX3Qg
YWxsb2NhdGlvblNpemUgPSB2bVNpemUoc2l6ZSk7CisgICAgdm9pZCogYWxsb2NhdGlvbiA9IHZt
QWxsb2NhdGUoYWxsb2NhdGlvblNpemUpOworICAgIHNfYnVtcEJhc2UgPSBhbGxvY2F0aW9uOwor
ICAgIHNfYnVtcE9mZnNldCA9IDA7CisgICAgc19idW1wTGltaXQgPSBhbGxvY2F0aW9uU2l6ZTsK
KyAgICByZXR1cm4gYWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKK30KKworUGVyUHJvY2Vzc0Rh
dGEqIGNvYWxlc2NlUGVyUHJvY2Vzcyhjb25zdCBjaGFyKiBkaXNhbWJpZ3VhdG9yLCBzaXplX3Qg
c2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+IGxvY2soc19tdXRleCk7CisgICAgCisgICAgLy8gVGhpcyBoYXNodGFibGUgZG9lcyBub3Qg
aGF2ZSB0byBiZSBzdXBlciBlZmZpY2llbnQuIFdlIHdpbGwgaGF2ZSAxMDAwcyBvZiBQZXJQcm9j
ZXNzIGluc3RhbmNlcworICAgIC8vIGJ1dCB0aGV5IGFyZSBjcmVhdGVkIG9uY2UgcGVyIHByb2Nl
c3MuCisgICAgdW5zaWduZWQgaGFzaCA9IHN0cmluZ0hhc2goZGlzYW1iaWd1YXRvcikgJSB0YWJs
ZVNpemU7CisgICAgCisgICAgZm9yIChQZXJQcm9jZXNzRGF0YSogZGF0YSA9IHNfdGFibGVbaGFz
aF07IGRhdGE7IGRhdGEgPSBkYXRhLT5uZXh0KSB7CisgICAgICAgIGlmICghc3RyY21wKGRhdGEt
PmRpc2FtYmlndWF0b3IsIGRpc2FtYmlndWF0b3IpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0JB
U1NFUlQoZGF0YS0+c2l6ZSA9PSBzaXplKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQkFTU0VSVChk
YXRhLT5hbGlnbm1lbnQgPT0gYWxpZ25tZW50KTsKKyAgICAgICAgICAgIHJldHVybiBkYXRhOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIFBlclByb2Nlc3NEYXRhKiBkYXRhID0gYWxsb2Nh
dGUoc2l6ZW9mKFBlclByb2Nlc3NEYXRhKSwgc3RkOjphbGlnbm1lbnRfb2Y8UGVyUHJvY2Vzc0Rh
dGE+Ojp2YWx1ZSk7CisgICAgZGF0YS0+ZGlzYW1iaWd1YXRvciA9IGRpc2FtYmlndWF0b3I7Cisg
ICAgZGF0YS0+bWVtb3J5ID0gYWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKKyAgICBkYXRhLT5z
aXplID0gc2l6ZTsKKyAgICBkYXRhLT5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAgZGF0YS0+
bmV4dCA9IHNfdGFibGVbaGFzaF07CisgICAgc190YWJsZVtoYXNoXSA9IGRhdGE7CisgICAgcmV0
dXJuIGRhdGE7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKKwpJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9QZXJQcm9jZXNzLmgJKHJldmlzaW9uIDIyOTQ3MSkKKysrIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvUGVyUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsNiBAQCBu
YW1lc3BhY2UgYm1hbGxvYyB7CiAvLwogLy8gT2JqZWN0IHdpbGwgYmUgaW5zdGFudGlhdGVkIG9u
bHkgb25jZSwgZXZlbiBpbiB0aGUgZmFjZSBvZiBjb25jdXJyZW5jeS4KIC8vCi0vLyBXQVJOSU5H
OiBQZXJQcm9jZXNzPFQ+IGRvZXMgbm90IGV4cG9ydCBpdHMgc3RvcmFnZS4gU28gaW4gYWN0dWFs
aXR5IHdoZW4KLS8vIHVzZWQgaW4gbXVsdGlwbGUgbGlicmFyaWVzIC8gaW1hZ2VzIGl0IGVuZHMg
dXAgYmVpbmcgcGVyLWltYWdlLiBUbyB0cnVseQotLy8gZGVjbGFyZSBhIHBlci1wcm9jZXNzIHNp
bmdsZXRvbiB1c2UgU2FmZVBlclByb2Nlc3M8VD4uCi0vLwogLy8gTk9URTogSWYgeW91IG9ic2Vy
dmUgZ2xvYmFsIHNpZGUtZWZmZWN0cyBvZiB0aGUgT2JqZWN0IGNvbnN0cnVjdG9yLCBiZQogLy8g
c3VyZSB0byBsb2NrIHRoZSBPYmplY3QgbXV0ZXguIEZvciBleGFtcGxlOgogLy8KQEAgLTU1LDYg
KzUxLDE4IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIC8vIE9iamVjdCogb2JqZWN0ID0gUGVyUHJv
Y2VzczxPYmplY3Q+OjpnZXQobG9jayk7CiAvLyBpZiAoZ2xvYmFsRmxhZykgeyAuLi4gfSAvLyBP
Sy4KIAorc3RydWN0IFBlclByb2Nlc3NEYXRhIHsKKyAgICBjb25zdCBjaGFyKiBkaXNhbWJpZ3Vh
dG9yOworICAgIHZvaWQqIG1lbW9yeTsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzaXplX3QgYWxp
Z25tZW50OworICAgIFN0YXRpY011dGV4IG11dGV4OworICAgIGJvb2wgaXNJbml0aWFsaXplZDsK
KyAgICBQZXJQcm9jZXNzRGF0YSogbmV4dDsKK307CisKK0JFWFBPUlQgUGVyUHJvY2Vzc0RhdGEq
IGdldFBlclByb2Nlc3NEYXRhKGNvbnN0IGNoYXIqIGRpc2FtYmlndWF0b3IsIHNpemVfdCBzaXpl
LCBzaXplX3QgYWxpZ25tZW50KTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIFBlclBy
b2Nlc3MgewogcHVibGljOgpAQCAtNzEsODggKzc5LDQzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHNfb2JqZWN0LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiAgICAgfQogICAg
IAotICAgIHN0YXRpYyBTdGF0aWNNdXRleCYgbXV0ZXgoKSB7IHJldHVybiBzX211dGV4OyB9Cisg
ICAgc3RhdGljIFN0YXRpY011dGV4JiBtdXRleCgpCisgICAgeworICAgICAgICBpZiAoIXNfZGF0
YSkKKyAgICAgICAgICAgIGNvYWxlc2NlKCk7CisgICAgICAgIHJldHVybiBzX2RhdGEtPm11dGV4
OworICAgIH0KIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBjb2FsZXNjZSgpCisgICAgewor
ICAgICAgICBpZiAoIXNfZGF0YSkKKyAgICAgICAgICAgIHNfZGF0YSA9IGdldFBlclByb2Nlc3NE
YXRhKF9fUFJFVFRZX0ZVTkNUSU9OX18sIHNpemVvZihUKSwgc3RkOjphbGlnbm1lbnRfb2Y8VD46
OnZhbHVlKTsKKyAgICB9CisgICAgCiAgICAgQk5PX0lOTElORSBzdGF0aWMgVCogZ2V0U2xvd0Nh
c2UoKQogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKHNf
bXV0ZXgpOwotICAgICAgICBpZiAoIXNfb2JqZWN0LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfY29u
c3VtZSkpIHsKLSAgICAgICAgICAgIFQqIHQgPSBuZXcgKCZzX21lbW9yeSkgVChsb2NrKTsKLSAg
ICAgICAgICAgIHNfb2JqZWN0LnN0b3JlKHQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwor
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2sobXV0ZXgoKSk7CisgICAg
ICAgIGlmICghc19vYmplY3QubG9hZCgpKSB7CisgICAgICAgICAgICBpZiAoc19kYXRhLT5pc0lu
aXRpYWxpemVkKQorICAgICAgICAgICAgICAgIHNfb2JqZWN0LnN0b3JlKHN0YXRpY19jYXN0PFQq
PihzX2RhdGEtPm1lbW9yeSkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
VCogdCA9IG5ldyAoc19kYXRhLT5tZW1vcnkpIFQobG9jayk7CisgICAgICAgICAgICAgICAgc19v
YmplY3Quc3RvcmUodCk7CisgICAgICAgICAgICAgICAgc19kYXRhLT5pc0luaXRpYWxpemVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gc19vYmplY3Qu
bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lKTsKKyAgICAgICAgcmV0dXJuIHNfb2JqZWN0
LmxvYWQoKTsKICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjphdG9taWM8VCo+IHNfb2JqZWN0Owot
ICAgIHN0YXRpYyBTdGF0aWNNdXRleCBzX211dGV4OwotCi0gICAgdHlwZWRlZiB0eXBlbmFtZSBz
dGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoVCksIHN0ZDo6YWxpZ25tZW50X29mPFQ+Ojp2YWx1
ZT46OnR5cGUgTWVtb3J5OwotICAgIHN0YXRpYyBNZW1vcnkgc19tZW1vcnk7CisgICAgc3RhdGlj
IFBlclByb2Nlc3NEYXRhKiBzX2RhdGE7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3Rk
OjphdG9taWM8VCo+IFBlclByb2Nlc3M8VD46OnNfb2JqZWN0OwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotU3RhdGljTXV0ZXggUGVyUHJvY2VzczxUPjo6c19tdXRleDsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLXR5cGVuYW1lIFBlclByb2Nlc3M8VD46Ok1lbW9yeSBQZXJQcm9jZXNzPFQ+Ojpz
X21lbW9yeTsKLQotCi0vLyBTYWZlUGVyUHJvY2VzczxUPiBiZWhhdmVzIGxpa2UgUGVyUHJvY2Vz
czxUPiwgYnV0IGl0cyB1c2FnZQotLy8gcmVxdWlyZXMgREVDTEFSRS9ERUZJTkUgbWFjcm9zIHRo
YXQgZXhwb3J0IHN5bWJvbHMgdGhhdCBhbGxvdyBmb3IKLS8vIGEgc2luZ2xlIHNoYXJlZCBpbnN0
YW5jZSBpcyBhY3Jvc3MgaW1hZ2VzIGluIHRoZSBwcm9jZXNzLgotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgU2FmZVBlclByb2Nlc3NTdG9yYWdlVHJhaXRzOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotY2xhc3MgQkVYUE9SVCBTYWZlUGVyUHJvY2VzcyB7Ci1wdWJsaWM6Ci0gICAgdXNp
bmcgU3RvcmFnZSA9IHR5cGVuYW1lIFNhZmVQZXJQcm9jZXNzU3RvcmFnZVRyYWl0czxUPjo6U3Rv
cmFnZTsKLQotICAgIHN0YXRpYyBUKiBnZXQoKQotICAgIHsKLSAgICAgICAgVCogb2JqZWN0ID0g
Z2V0RmFzdENhc2UoKTsKLSAgICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICByZXR1cm4g
Z2V0U2xvd0Nhc2UoKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgVCogZ2V0RmFzdENhc2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChTdG9yYWdlOjpzX29i
amVjdCkubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgU3RhdGljTXV0ZXgmIG11dGV4KCkgeyByZXR1cm4gU3RvcmFnZTo6c19tdXRleDsgfQotCi0g
ICAgdXNpbmcgTWVtb3J5ID0gdHlwZW5hbWUgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKFQp
LCBzdGQ6OmFsaWdubWVudF9vZjxUPjo6dmFsdWU+Ojp0eXBlOwotCi1wcml2YXRlOgotICAgIEJO
T19JTkxJTkUgc3RhdGljIFQqIGdldFNsb3dDYXNlKCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhTdG9yYWdlOjpzX211dGV4KTsKLSAgICAgICAgaWYg
KCFTdG9yYWdlOjpzX29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpKSB7Ci0g
ICAgICAgICAgICBUKiB0ID0gbmV3ICgmU3RvcmFnZTo6c19tZW1vcnkpIFQobG9jayk7Ci0gICAg
ICAgICAgICBTdG9yYWdlOjpzX29iamVjdC5zdG9yZSh0LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxl
YXNlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RvcmFnZTo6c19vYmplY3QubG9hZChz
dGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lKTsKLSAgICB9Ci19OwotCi0jZGVmaW5lIERFQ0xBUkVf
U0FGRV9QRVJfUFJPQ0VTU19TVE9SQUdFKFR5cGUpIFwKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBT
YWZlUGVyUHJvY2Vzc1N0b3JhZ2VUcmFpdHM8VHlwZT4geyBcCi0gICAgICAgIHN0cnVjdCBCRVhQ
T1JUIFN0b3JhZ2UgeyBcCi0gICAgICAgICAgICBCRVhQT1JUIHN0YXRpYyBzdGQ6OmF0b21pYzxU
eXBlKj4gc19vYmplY3Q7IFwKLSAgICAgICAgICAgIEJFWFBPUlQgc3RhdGljIFN0YXRpY011dGV4
IHNfbXV0ZXg7IFwKLSAgICAgICAgICAgIEJFWFBPUlQgc3RhdGljIFNhZmVQZXJQcm9jZXNzPFR5
cGU+OjpNZW1vcnkgc19tZW1vcnk7IFwKLSAgICAgICAgfTsgXAotICAgIH07Ci0KLSNkZWZpbmUg
REVGSU5FX1NBRkVfUEVSX1BST0NFU1NfU1RPUkFHRShUeXBlKSBcCi0gICAgc3RkOjphdG9taWM8
VHlwZSo+IFNhZmVQZXJQcm9jZXNzU3RvcmFnZVRyYWl0czxUeXBlPjo6U3RvcmFnZTo6c19vYmpl
Y3Q7IFwKLSAgICBTdGF0aWNNdXRleCBTYWZlUGVyUHJvY2Vzc1N0b3JhZ2VUcmFpdHM8VHlwZT46
OlN0b3JhZ2U6OnNfbXV0ZXg7IFwKLSAgICBTYWZlUGVyUHJvY2VzczxUeXBlPjo6TWVtb3J5IFNh
ZmVQZXJQcm9jZXNzU3RvcmFnZVRyYWl0czxUeXBlPjo6U3RvcmFnZTo6c19tZW1vcnk7CitQZXJQ
cm9jZXNzRGF0YSogUGVyUHJvY2VzczxUPjo6c19kYXRhOwogCiB9IC8vIG5hbWVzcGFjZSBibWFs
bG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCShyZXZpc2lvbiAyMjk0
NzEpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDggKzMyLDYgQEAKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCi1ERUZJTkVfU0FG
RV9QRVJfUFJPQ0VTU19TVE9SQUdFKFNjYXZlbmdlcik7Ci0KIFNjYXZlbmdlcjo6U2NhdmVuZ2Vy
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKQogewogI2lmIEJPUyhEQVJXSU4pCkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmgJKHJldmlzaW9uIDIyOTQ3MSkKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDggKzkz
LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8RGVmZXJyZWREZWNvbW1pdD4gbV9kZWZlcnJlZERl
Y29tbWl0czsKIH07CiAKLURFQ0xBUkVfU0FGRV9QRVJfUFJPQ0VTU19TVE9SQUdFKFNjYXZlbmdl
cik7Ci0KIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKIAogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL2JtYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Ym1hbGxvYy5jcHAJKHJldmlzaW9uIDIyOTQ3MSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Ym1hbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBzY2F2ZW5n
ZSgpCiB7CiAgICAgc2NhdmVuZ2VUaGlzVGhyZWFkKCk7CiAKLSAgICBTYWZlUGVyUHJvY2VzczxT
Y2F2ZW5nZXI+OjpnZXQoKS0+c2NhdmVuZ2UoKTsKKyAgICBQZXJQcm9jZXNzPFNjYXZlbmdlcj46
OmdldCgpLT5zY2F2ZW5nZSgpOwogfQogCiBib29sIGlzRW5hYmxlZChIZWFwS2luZCBraW5kKQpA
QCAtODcsNyArODcsNyBAQCBib29sIGlzRW5hYmxlZChIZWFwS2luZCBraW5kKQogdm9pZCBzZXRT
Y2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvdmVycmlkZUNsYXNzKQogewogICAg
IHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAg
U2FmZVBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPnNldFNjYXZlbmdlclRocmVhZFFPU0Ns
YXNzKG92ZXJyaWRlQ2xhc3MpOworICAgIFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPnNl
dFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKG92ZXJyaWRlQ2xhc3MpOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335520</attachid>
            <date>2018-03-10 15:24:03 -0800</date>
            <delta_ts>2018-03-11 10:18:50 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16763</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyOTUwOSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE4LTAzLTEwICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgUGVyUHJvY2Vzczw+IHNob3VsZCBi
ZSBzYWZlIGJ5IGRlZmF1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4MzU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBtYWtlcyBQZXJQcm9jZXNzPD4gc2FmZSBieSBkZWZhdWx0
LCBzbyB3ZSBkb24ndCBuZWVkIFNhZmVQZXJQcm9jZXNzPD4uCisgICAgICAgIAorICAgICAgICBU
aGUgbmV3IFBlclByb2Nlc3M8PiBkZXNpZ24gcmVsaWVzIG9uIGEgaGFzaC1jb25zaW5nIG1lY2hh
bmlzbSBmb3IgUGVyUHJvY2Vzczw+IHN0b3JhZ2UgYmFzZWQKKyAgICAgICAgb24gdGhlIF9fUFJF
VFRZX0ZVTkNUSU9OX18gZnJvbSBpbnNpZGUgUGVyUHJvY2Vzczw+LCB3aGljaCBjYXB0dXJlcyB0
aGUgaW5zdGFudGlhdGVkIHR5cGUgaW4KKyAgICAgICAgdGhlIHN0cmluZy4gVGhlcmVmb3JlLCB0
aGlzIGNhbiBiZSB1c2VkIHRvIHJ1bnRpbWUtY29hbGVzY2UgUGVyUHJvY2Vzczw+IGluc3RhbmNl
cyBiYXNlZCBvbgorICAgICAgICB0eXBlLgorICAgICAgICAKKyAgICAgICAgSSBleHBlY3QgdGhp
cyB0byBiZSBwZXJmLW5ldXRyYWwuIEl0J3MgYW4gaW1wb3J0YW50IHByZXJlcXVpc2l0ZSB0byBt
b3JlIGJtYWxsb2Mgd29yaywgc2luY2UgSQorICAgICAgICBkb24ndCB3YW50IHRvIGhhdmUgbW9y
ZSBQZXJQcm9jZXNzPD4gdnMgU2FmZVBlclByb2Nlc3M8PiBidWdzLCBhbmQgU2FmZVBlclByb2Nl
c3M8PiBjYW4ndCBiZQorICAgICAgICB1c2VkIGZvciBldmVyeXRoaW5nIChJIGRvbid0IHNlZSBo
b3cgdG8gdXNlIGl0IGZvciBpc29oZWFwcykuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
Ym1hbGxvYy9IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OkhlYXApOgorICAgICAg
ICAqIGJtYWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oOgorICAgICAgICAoYm1hbGxvYzo6cGFz
c2VkTnVtUGFnZXM+Ojp0YWtlRmlyc3RFbGlnaWJsZSk6CisgICAgICAgIChibWFsbG9jOjpwYXNz
ZWROdW1QYWdlcz46OmRpZEJlY29tZSk6CisgICAgICAgICogYm1hbGxvYy9QZXJQcm9jZXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChibWFsbG9jOjpzdHJpbmdIYXNoKToKKyAgICAgICAgKGJtYWxs
b2M6OmFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxsb2M6OmdldFBlclByb2Nlc3NEYXRhKToKKyAg
ICAgICAgKiBibWFsbG9jL1BlclByb2Nlc3MuaDoKKyAgICAgICAgKGJtYWxsb2M6OlBlclByb2Nl
c3M6Om11dGV4KToKKyAgICAgICAgKGJtYWxsb2M6OlBlclByb2Nlc3M6OmNvYWxlc2NlKToKKyAg
ICAgICAgKGJtYWxsb2M6OlBlclByb2Nlc3M6OmdldFNsb3dDYXNlKToKKyAgICAgICAgKCk6IERl
bGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9TY2F2ZW5nZXIuY3BwOgorICAgICAgICAqIGJtYWxs
b2MvU2NhdmVuZ2VyLmg6CisgICAgICAgICogYm1hbGxvYy9ibWFsbG9jLmNwcDoKKyAgICAgICAg
KGJtYWxsb2M6OmFwaTo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjpzZXRTY2F2
ZW5nZXJUaHJlYWRRT1NDbGFzcyk6CisKIDIwMTgtMDMtMTAgIENvbW1pdCBRdWV1ZSAgPGNvbW1p
dC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIy
Mjk0MzYuCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjI5NTA5KQorKysgU291
cmNlL2JtYWxsb2MvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAgc2V0KGJtYWxsb2NfU09VUkNFUwogICAgIGJtYWxsb2MvTGFyZ2VNYXAuY3BwCiAgICAgYm1h
bGxvYy9Mb2dnaW5nLmNwcAogICAgIGJtYWxsb2MvT2JqZWN0VHlwZS5jcHAKKyAgICBibWFsbG9j
L1BlclByb2Nlc3MuY3BwCiAgICAgYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCiAgICAgYm1hbGxvYy9T
dGF0aWNNdXRleC5jcHAKICAgICBibWFsbG9jL1ZNSGVhcC5jcHAKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIy
OTUwOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogLyogRW5kIFBCWEFnZ3JlZ2F0ZVRh
cmdldCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTBG
MjZBN0E1MjA1NDgzMTMwMDkwQTE0MSAvKiBQZXJQcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjZBN0E0MjA1NDgzMEQwMDkwQTE0MSAv
KiBQZXJQcm9jZXNzLmNwcCAqLzsgfTsKIAkJMEY1MTY3NzQxRkFENjg1QzAwODIzNkE4IC8qIGJt
YWxsb2MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY1MTY3NzMxRkFENjg1MjAwODIzNkE4IC8qIGJtYWxsb2MuY3BwICovOyB9OwogCQkwRjU1NDlF
RjFGQjU0NzA0MDA3RkY3NUEgLyogSXNvUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU1NDlFRTFGQjU0NzAxMDA3RkY3NUEgLyogSXNvUGFn
ZS5jcHAgKi87IH07CiAJCTBGNUJGMTQ3MUYyMkE4QjEwMDI5RDkxRCAvKiBIZWFwS2luZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNDYxRjIy
QThCMTAwMjlEOTFEIC8qIEhlYXBLaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE3NCw2ICsxNzUsNyBAQAogLyogRW5kIFBCWENvcHlGaWxl
c0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rp
b24gKi8KKwkJMEYyNkE3QTQyMDU0ODMwRDAwOTBBMTQxIC8qIFBlclByb2Nlc3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGVyUHJvY2Vzcy5jcHA7IHBhdGggPSBi
bWFsbG9jL1BlclByb2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUx
Njc3MzFGQUQ2ODUyMDA4MjM2QTggLyogYm1hbGxvYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBibWFsbG9jLmNwcDsgcGF0aCA9IGJtYWxsb2MvYm1hbGxvYy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTU0OUVFMUZCNTQ3MDEwMDdGRjc1QSAv
KiBJc29QYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IElzb1Bh
Z2UuY3BwOyBwYXRoID0gYm1hbGxvYy9Jc29QYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1QkYxNDYxRjIyQThCMTAwMjlEOTFEIC8qIEhlYXBLaW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEhlYXBLaW5kLmg7IHBhdGggPSBibWFsbG9jL0hlYXBLaW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC01MjEsNiArNTIzLDcgQEAKIAkJCQk0NDI2RTI3RjFDODM4RUUw
MDA4RUIwNDIgLyogTG9nZ2luZy5oICovLAogCQkJCTE0Qzg5OTJBMUNDNDg1RTcwMDI3QTA1NyAv
KiBNYXAuaCAqLywKIAkJCQkxNDREQ0VENjE3QTY0OUQ5MDA5M0IyRjIgLyogTXV0ZXguaCAqLywK
KwkJCQkwRjI2QTdBNDIwNTQ4MzBEMDA5MEExNDEgLyogUGVyUHJvY2Vzcy5jcHAgKi8sCiAJCQkJ
MEY1QkYxNDgxRjIyQThEODAwMjlEOTFEIC8qIFBlckhlYXBLaW5kLmggKi8sCiAJCQkJMTQ0NDZB
MDcxN0E2MUZBNDAwRjlFQTFEIC8qIFBlclByb2Nlc3MuaCAqLywKIAkJCQkxNDQ0NjlGRDE3QTYx
RjFGMDBGOUVBMUQgLyogUGVyVGhyZWFkLmggKi8sCkBAIC03NjgsNiArNzcxLDcgQEAKIAkJCQkx
NEYyNzFDMzE4RUEzOTc4MDA4QzE1MkYgLyogQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTY1OTlDNUNDMUVDM0YxNTkwMEEyRjdCQiAvKiBBdmFpbGFibGVNZW1vcnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRGMjcxQzQxOEVBMzk3QjAwOEMxNTJGIC8qIENhY2hlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGMjZBN0E1MjA1NDgzMTMwMDkwQTE0MSAvKiBQZXJQcm9jZXNzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM1MThFQTM5N0UwMDhDMTUyRiAvKiBEZWFsbG9j
YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJCNDQzNjFFMjgzOUU3MDAxREE2RTkgLyog
RGVidWdIZWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODk1RDkxMUEzQTMxOUMwMDA2MjM1
RCAvKiBFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9I
ZWFwLmNwcAkocmV2aXNpb24gMjI5NTA5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBIZWFwOjpIZWFwKEhlYXBLaW5k
IGtpbmQsIHN0ZDo6bG9ja19ndWFyCiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgbV9zY2F2ZW5n
ZXIgPSBTYWZlUGVyUHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQoKTsKKyAgICBtX3NjYXZlbmdlciA9
IFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCk7CiB9CiAKIGJvb2wgSGVhcDo6dXNpbmdHaWdh
Y2FnZSgpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9yeUlubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9yeUlubGlu
ZXMuaAkocmV2aXNpb24gMjI5NTA5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJl
Y3RvcnlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgRWxpZ2liaWxp
dHlSZXN1bHQ8Q29uZmlnPiBJc29EaXJlY3Rvcnk8QwogICAgIGlmIChwYWdlSW5kZXggPj0gbnVt
UGFnZXMpCiAgICAgICAgIHJldHVybiBFbGlnaWJpbGl0eUtpbmQ6OkZ1bGw7CiAgICAgCi0gICAg
U2NhdmVuZ2VyJiBzY2F2ZW5nZXIgPSAqU2FmZVBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCk7
CisgICAgU2NhdmVuZ2VyJiBzY2F2ZW5nZXIgPSAqUGVyUHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQo
KTsKICAgICBzY2F2ZW5nZXIuZGlkU3RhcnRHcm93aW5nKCk7CiAgICAgCiAgICAgSXNvUGFnZTxD
b25maWc+KiBwYWdlID0gbV9wYWdlc1twYWdlSW5kZXhdOwpAQCAtMTAwLDcgKzEwMCw3IEBAIHZv
aWQgSXNvRGlyZWN0b3J5PENvbmZpZywgcGFzc2VkTnVtUGFnZXMKICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwOiAlcCBkaWQgYmVjb21lIGVtcHR5
LlxuIiwgdGhpcywgcGFnZSk7CiAgICAgICAgIG1fZW1wdHlbcGFnZUluZGV4XSA9IHRydWU7Ci0g
ICAgICAgIFNhZmVQZXJQcm9jZXNzPFNjYXZlbmdlcj46OmdldCgpLT5zY2hlZHVsZShJc29QYWdl
QmFzZTo6cGFnZVNpemUpOworICAgICAgICBQZXJQcm9jZXNzPFNjYXZlbmdlcj46OmdldCgpLT5z
Y2hlZHVsZShJc29QYWdlQmFzZTo6cGFnZVNpemUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIEJDUkFTSCgpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKKworI2luY2x1ZGUg
IlZNQWxsb2NhdGUuaCIKKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIHRhYmxlU2l6ZSA9IDEwMDsKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3Nl
ID0gZmFsc2U7CisKK3N0YXRpYyBTdGF0aWNNdXRleCBzX211dGV4OworCitzdGF0aWMgY2hhciog
c19idW1wQmFzZTsKK3N0YXRpYyBzaXplX3Qgc19idW1wT2Zmc2V0Oworc3RhdGljIHNpemVfdCBz
X2J1bXBMaW1pdDsKKworc3RhdGljIFBlclByb2Nlc3NEYXRhKiBzX3RhYmxlW3RhYmxlU2l6ZV07
CisKK3N0YXRpYyB1bnNpZ25lZCBzdHJpbmdIYXNoKGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAg
ICB1bnNpZ25lZCByZXN1bHQgPSA1MzgxOworICAgIHdoaWxlIChjaGFyIGMgPSAqc3RyaW5nKysp
CisgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDMzICsgYzsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCisvLyBSZXR1cm5zIHplcm8tZmlsbGVkIG1lbW9yeSBieSB2aXJ0dWFsIG9mIHVzaW5nIHZt
QWxsb2NhdGUuCitzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGln
bm1lbnQpCit7CisgICAgc19idW1wT2Zmc2V0ID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1l
bnQsIHNfYnVtcE9mZnNldCk7CisgICAgdm9pZCogcmVzdWx0ID0gc19idW1wQmFzZSArIHNfYnVt
cE9mZnNldDsKKyAgICBzX2J1bXBPZmZzZXQgKz0gc2l6ZTsKKyAgICBpZiAoc19idW1wT2Zmc2V0
IDw9IHNfYnVtcExpbWl0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIAorICAgIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZSA9IHZtU2l6ZShzaXplKTsKKyAgICB2b2lkKiBhbGxvY2F0aW9uID0g
dm1BbGxvY2F0ZShhbGxvY2F0aW9uU2l6ZSk7CisgICAgc19idW1wQmFzZSA9IHN0YXRpY19jYXN0
PGNoYXIqPihhbGxvY2F0aW9uKTsKKyAgICBzX2J1bXBPZmZzZXQgPSAwOworICAgIHNfYnVtcExp
bWl0ID0gYWxsb2NhdGlvblNpemU7CisgICAgcmV0dXJuIGFsbG9jYXRlKHNpemUsIGFsaWdubWVu
dCk7Cit9CisKK1BlclByb2Nlc3NEYXRhKiBnZXRQZXJQcm9jZXNzRGF0YShjb25zdCBjaGFyKiBk
aXNhbWJpZ3VhdG9yLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKK3sKKyAgICBzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soc19tdXRleCk7CisgICAgCisgICAgLy8gVGhp
cyBoYXNodGFibGUgZG9lcyBub3QgaGF2ZSB0byBiZSBzdXBlciBlZmZpY2llbnQuIFdlIHdpbGwg
aGF2ZSAxMDAwcyBvZiBQZXJQcm9jZXNzIGluc3RhbmNlcworICAgIC8vIGJ1dCB0aGV5IGFyZSBj
cmVhdGVkIG9uY2UgcGVyIHByb2Nlc3MuCisgICAgdW5zaWduZWQgaGFzaCA9IHN0cmluZ0hhc2go
ZGlzYW1iaWd1YXRvcikgJSB0YWJsZVNpemU7CisgICAgCisgICAgZm9yIChQZXJQcm9jZXNzRGF0
YSogZGF0YSA9IHNfdGFibGVbaGFzaF07IGRhdGE7IGRhdGEgPSBkYXRhLT5uZXh0KSB7CisgICAg
ICAgIGlmICghc3RyY21wKGRhdGEtPmRpc2FtYmlndWF0b3IsIGRpc2FtYmlndWF0b3IpKSB7Cisg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IiVkOiBVc2luZyBleGlzdGluZyAlc1xuIiwgZ2V0cGlkKCksIGRpc2FtYmlndWF0b3IpOworICAg
ICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKGRhdGEtPnNpemUgPT0gc2l6ZSk7CisgICAgICAgICAg
ICBSRUxFQVNFX0JBU1NFUlQoZGF0YS0+YWxpZ25tZW50ID09IGFsaWdubWVudCk7CisgICAgICAg
ICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlZDogQ3JlYXRpbmcgbmV3ICVzXG4iLCBnZXRw
aWQoKSwgZGlzYW1iaWd1YXRvcik7CisgICAgdm9pZCogcmF3RGF0YVB0ciA9IGFsbG9jYXRlKHNp
emVvZihQZXJQcm9jZXNzRGF0YSksIHN0ZDo6YWxpZ25tZW50X29mPFBlclByb2Nlc3NEYXRhPjo6
dmFsdWUpOworICAgIFBlclByb2Nlc3NEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8UGVyUHJvY2Vz
c0RhdGEqPihyYXdEYXRhUHRyKTsKKyAgICBkYXRhLT5kaXNhbWJpZ3VhdG9yID0gZGlzYW1iaWd1
YXRvcjsKKyAgICBkYXRhLT5tZW1vcnkgPSBhbGxvY2F0ZShzaXplLCBhbGlnbm1lbnQpOworICAg
IGRhdGEtPnNpemUgPSBzaXplOworICAgIGRhdGEtPmFsaWdubWVudCA9IGFsaWdubWVudDsKKyAg
ICBkYXRhLT5uZXh0ID0gc190YWJsZVtoYXNoXTsKKyAgICBzX3RhYmxlW2hhc2hdID0gZGF0YTsK
KyAgICByZXR1cm4gZGF0YTsKK30KKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYworCkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3MuaAkocmV2aXNpb24gMjI5NTA5KQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9QZXJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEwICsz
OCw2IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIC8vCiAvLyBPYmplY3Qgd2lsbCBiZSBpbnN0YW50
aWF0ZWQgb25seSBvbmNlLCBldmVuIGluIHRoZSBmYWNlIG9mIGNvbmN1cnJlbmN5LgogLy8KLS8v
IFdBUk5JTkc6IFBlclByb2Nlc3M8VD4gZG9lcyBub3QgZXhwb3J0IGl0cyBzdG9yYWdlLiBTbyBp
biBhY3R1YWxpdHkgd2hlbgotLy8gdXNlZCBpbiBtdWx0aXBsZSBsaWJyYXJpZXMgLyBpbWFnZXMg
aXQgZW5kcyB1cCBiZWluZyBwZXItaW1hZ2UuIFRvIHRydWx5Ci0vLyBkZWNsYXJlIGEgcGVyLXBy
b2Nlc3Mgc2luZ2xldG9uIHVzZSBTYWZlUGVyUHJvY2VzczxUPi4KLS8vCiAvLyBOT1RFOiBJZiB5
b3Ugb2JzZXJ2ZSBnbG9iYWwgc2lkZS1lZmZlY3RzIG9mIHRoZSBPYmplY3QgY29uc3RydWN0b3Is
IGJlCiAvLyBzdXJlIHRvIGxvY2sgdGhlIE9iamVjdCBtdXRleC4gRm9yIGV4YW1wbGU6CiAvLwpA
QCAtNTUsNiArNTEsMTggQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogLy8gT2JqZWN0KiBvYmplY3Qg
PSBQZXJQcm9jZXNzPE9iamVjdD46OmdldChsb2NrKTsKIC8vIGlmIChnbG9iYWxGbGFnKSB7IC4u
LiB9IC8vIE9LLgogCitzdHJ1Y3QgUGVyUHJvY2Vzc0RhdGEgeworICAgIGNvbnN0IGNoYXIqIGRp
c2FtYmlndWF0b3I7CisgICAgdm9pZCogbWVtb3J5OworICAgIHNpemVfdCBzaXplOworICAgIHNp
emVfdCBhbGlnbm1lbnQ7CisgICAgU3RhdGljTXV0ZXggbXV0ZXg7CisgICAgYm9vbCBpc0luaXRp
YWxpemVkOworICAgIFBlclByb2Nlc3NEYXRhKiBuZXh0OworfTsKKworQkVYUE9SVCBQZXJQcm9j
ZXNzRGF0YSogZ2V0UGVyUHJvY2Vzc0RhdGEoY29uc3QgY2hhciogZGlzYW1iaWd1YXRvciwgc2l6
ZV90IHNpemUsIHNpemVfdCBhbGlnbm1lbnQpOworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xh
c3MgUGVyUHJvY2VzcyB7CiBwdWJsaWM6CkBAIC03MSw4OCArNzksNDMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc19vYmplY3QubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIFN0YXRpY011dGV4JiBtdXRleCgpIHsgcmV0dXJuIHNfbXV0
ZXg7IH0KKyAgICBzdGF0aWMgU3RhdGljTXV0ZXgmIG11dGV4KCkKKyAgICB7CisgICAgICAgIGlm
ICghc19kYXRhKQorICAgICAgICAgICAgY29hbGVzY2UoKTsKKyAgICAgICAgcmV0dXJuIHNfZGF0
YS0+bXV0ZXg7CisgICAgfQogCiBwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGNvYWxlc2NlKCkK
KyAgICB7CisgICAgICAgIGlmICghc19kYXRhKQorICAgICAgICAgICAgc19kYXRhID0gZ2V0UGVy
UHJvY2Vzc0RhdGEoX19QUkVUVFlfRlVOQ1RJT05fXywgc2l6ZW9mKFQpLCBzdGQ6OmFsaWdubWVu
dF9vZjxUPjo6dmFsdWUpOworICAgIH0KKyAgICAKICAgICBCTk9fSU5MSU5FIHN0YXRpYyBUKiBn
ZXRTbG93Q2FzZSgpCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
IGxvY2soc19tdXRleCk7Ci0gICAgICAgIGlmICghc19vYmplY3QubG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9jb25zdW1lKSkgewotICAgICAgICAgICAgVCogdCA9IG5ldyAoJnNfbWVtb3J5KSBUKGxv
Y2spOwotICAgICAgICAgICAgc19vYmplY3Quc3RvcmUodCwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
ZWFzZSk7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhtdXRleCgp
KTsKKyAgICAgICAgaWYgKCFzX29iamVjdC5sb2FkKCkpIHsKKyAgICAgICAgICAgIGlmIChzX2Rh
dGEtPmlzSW5pdGlhbGl6ZWQpCisgICAgICAgICAgICAgICAgc19vYmplY3Quc3RvcmUoc3RhdGlj
X2Nhc3Q8VCo+KHNfZGF0YS0+bWVtb3J5KSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBUKiB0ID0gbmV3IChzX2RhdGEtPm1lbW9yeSkgVChsb2NrKTsKKyAgICAgICAgICAg
ICAgICBzX29iamVjdC5zdG9yZSh0KTsKKyAgICAgICAgICAgICAgICBzX2RhdGEtPmlzSW5pdGlh
bGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBz
X29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpOworICAgICAgICByZXR1cm4g
c19vYmplY3QubG9hZCgpOwogICAgIH0KIAogICAgIHN0YXRpYyBzdGQ6OmF0b21pYzxUKj4gc19v
YmplY3Q7Ci0gICAgc3RhdGljIFN0YXRpY011dGV4IHNfbXV0ZXg7Ci0KLSAgICB0eXBlZGVmIHR5
cGVuYW1lIHN0ZDo6YWxpZ25lZF9zdG9yYWdlPHNpemVvZihUKSwgc3RkOjphbGlnbm1lbnRfb2Y8
VD46OnZhbHVlPjo6dHlwZSBNZW1vcnk7Ci0gICAgc3RhdGljIE1lbW9yeSBzX21lbW9yeTsKKyAg
ICBzdGF0aWMgUGVyUHJvY2Vzc0RhdGEqIHNfZGF0YTsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBzdGQ6OmF0b21pYzxUKj4gUGVyUHJvY2VzczxUPjo6c19vYmplY3Q7CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1TdGF0aWNNdXRleCBQZXJQcm9jZXNzPFQ+OjpzX211dGV4OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotdHlwZW5hbWUgUGVyUHJvY2VzczxUPjo6TWVtb3J5IFBlclByb2Nl
c3M8VD46OnNfbWVtb3J5OwotCi0KLS8vIFNhZmVQZXJQcm9jZXNzPFQ+IGJlaGF2ZXMgbGlrZSBQ
ZXJQcm9jZXNzPFQ+LCBidXQgaXRzIHVzYWdlCi0vLyByZXF1aXJlcyBERUNMQVJFL0RFRklORSBt
YWNyb3MgdGhhdCBleHBvcnQgc3ltYm9scyB0aGF0IGFsbG93IGZvcgotLy8gYSBzaW5nbGUgc2hh
cmVkIGluc3RhbmNlIGlzIGFjcm9zcyBpbWFnZXMgaW4gdGhlIHByb2Nlc3MuCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBTYWZlUGVyUHJvY2Vzc1N0b3JhZ2VUcmFpdHM7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1jbGFzcyBCRVhQT1JUIFNhZmVQZXJQcm9jZXNzIHsKLXB1YmxpYzoK
LSAgICB1c2luZyBTdG9yYWdlID0gdHlwZW5hbWUgU2FmZVBlclByb2Nlc3NTdG9yYWdlVHJhaXRz
PFQ+OjpTdG9yYWdlOwotCi0gICAgc3RhdGljIFQqIGdldCgpCi0gICAgewotICAgICAgICBUKiBv
YmplY3QgPSBnZXRGYXN0Q2FzZSgpOwotICAgICAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgICAg
IHJldHVybiBnZXRTbG93Q2FzZSgpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQot
ICAgIHN0YXRpYyBUKiBnZXRGYXN0Q2FzZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKFN0b3Jh
Z2U6OnNfb2JqZWN0KS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBTdGF0aWNNdXRleCYgbXV0ZXgoKSB7IHJldHVybiBTdG9yYWdlOjpzX211dGV4
OyB9Ci0KLSAgICB1c2luZyBNZW1vcnkgPSB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxz
aXplb2YoVCksIHN0ZDo6YWxpZ25tZW50X29mPFQ+Ojp2YWx1ZT46OnR5cGU7Ci0KLXByaXZhdGU6
Ci0gICAgQk5PX0lOTElORSBzdGF0aWMgVCogZ2V0U2xvd0Nhc2UoKQotICAgIHsKLSAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFN0b3JhZ2U6OnNfbXV0ZXgpOwotICAg
ICAgICBpZiAoIVN0b3JhZ2U6OnNfb2JqZWN0LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfY29uc3Vt
ZSkpIHsKLSAgICAgICAgICAgIFQqIHQgPSBuZXcgKCZTdG9yYWdlOjpzX21lbW9yeSkgVChsb2Nr
KTsKLSAgICAgICAgICAgIFN0b3JhZ2U6OnNfb2JqZWN0LnN0b3JlKHQsIHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGVhc2UpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdG9yYWdlOjpzX29iamVj
dC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpOwotICAgIH0KLX07Ci0KLSNkZWZpbmUg
REVDTEFSRV9TQUZFX1BFUl9QUk9DRVNTX1NUT1JBR0UoVHlwZSkgXAotICAgIHRlbXBsYXRlPD4g
c3RydWN0IFNhZmVQZXJQcm9jZXNzU3RvcmFnZVRyYWl0czxUeXBlPiB7IFwKLSAgICAgICAgc3Ry
dWN0IEJFWFBPUlQgU3RvcmFnZSB7IFwKLSAgICAgICAgICAgIEJFWFBPUlQgc3RhdGljIHN0ZDo6
YXRvbWljPFR5cGUqPiBzX29iamVjdDsgXAotICAgICAgICAgICAgQkVYUE9SVCBzdGF0aWMgU3Rh
dGljTXV0ZXggc19tdXRleDsgXAotICAgICAgICAgICAgQkVYUE9SVCBzdGF0aWMgU2FmZVBlclBy
b2Nlc3M8VHlwZT46Ok1lbW9yeSBzX21lbW9yeTsgXAotICAgICAgICB9OyBcCi0gICAgfTsKLQot
I2RlZmluZSBERUZJTkVfU0FGRV9QRVJfUFJPQ0VTU19TVE9SQUdFKFR5cGUpIFwKLSAgICBzdGQ6
OmF0b21pYzxUeXBlKj4gU2FmZVBlclByb2Nlc3NTdG9yYWdlVHJhaXRzPFR5cGU+OjpTdG9yYWdl
OjpzX29iamVjdDsgXAotICAgIFN0YXRpY011dGV4IFNhZmVQZXJQcm9jZXNzU3RvcmFnZVRyYWl0
czxUeXBlPjo6U3RvcmFnZTo6c19tdXRleDsgXAotICAgIFNhZmVQZXJQcm9jZXNzPFR5cGU+OjpN
ZW1vcnkgU2FmZVBlclByb2Nlc3NTdG9yYWdlVHJhaXRzPFR5cGU+OjpTdG9yYWdlOjpzX21lbW9y
eTsKK1BlclByb2Nlc3NEYXRhKiBQZXJQcm9jZXNzPFQ+OjpzX2RhdGE7CiAKIH0gLy8gbmFtZXNw
YWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAJKHJldmlz
aW9uIDIyOTUwOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsOCArMzIsNiBAQAogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKLURF
RklORV9TQUZFX1BFUl9QUk9DRVNTX1NUT1JBR0UoU2NhdmVuZ2VyKTsKLQogU2NhdmVuZ2VyOjpT
Y2F2ZW5nZXIoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpCiB7CiAjaWYgQk9TKERBUldJ
TikKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuaAkocmV2aXNpb24gMjI5NTA5KQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
OTMsOCArOTMsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiBtX2Rl
ZmVycmVkRGVjb21taXRzOwogfTsKIAotREVDTEFSRV9TQUZFX1BFUl9QUk9DRVNTX1NUT1JBR0Uo
U2NhdmVuZ2VyKTsKLQogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCiAKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9ibWFsbG9jLmNwcAkocmV2aXNpb24gMjI5NTA5KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9ibWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lk
IHNjYXZlbmdlKCkKIHsKICAgICBzY2F2ZW5nZVRoaXNUaHJlYWQoKTsKIAotICAgIFNhZmVQZXJQ
cm9jZXNzPFNjYXZlbmdlcj46OmdldCgpLT5zY2F2ZW5nZSgpOworICAgIFBlclByb2Nlc3M8U2Nh
dmVuZ2VyPjo6Z2V0KCktPnNjYXZlbmdlKCk7CiB9CiAKIGJvb2wgaXNFbmFibGVkKEhlYXBLaW5k
IGtpbmQpCkBAIC04Nyw3ICs4Nyw3IEBAIGJvb2wgaXNFbmFibGVkKEhlYXBLaW5kIGtpbmQpCiB2
b2lkIHNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKHFvc19jbGFzc190IG92ZXJyaWRlQ2xhc3Mp
CiB7CiAgICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhIZWFwOjptdXRleCgp
KTsKLSAgICBTYWZlUGVyUHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQoKS0+c2V0U2NhdmVuZ2VyVGhy
ZWFkUU9TQ2xhc3Mob3ZlcnJpZGVDbGFzcyk7CisgICAgUGVyUHJvY2VzczxTY2F2ZW5nZXI+Ojpn
ZXQoKS0+c2V0U2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3Mob3ZlcnJpZGVDbGFzcyk7CiB9CiAjZW5k
aWYKIAo=
</data>
<flag name="review"
          id="354154"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335540</attachid>
            <date>2018-03-11 10:18:50 -0700</date>
            <delta_ts>2018-03-11 10:18:50 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17328</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyOTUwOSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE4LTAzLTEwICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgUGVyUHJvY2Vzczw+IHNob3VsZCBi
ZSBzYWZlIGJ5IGRlZmF1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4MzU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisg
ICAgICAgIAorICAgICAgICBUaGlzIG1ha2VzIFBlclByb2Nlc3M8PiBzYWZlIGJ5IGRlZmF1bHQs
IHNvIHdlIGRvbid0IG5lZWQgU2FmZVBlclByb2Nlc3M8Pi4KKyAgICAgICAgCisgICAgICAgIFRo
ZSBuZXcgUGVyUHJvY2Vzczw+IGRlc2lnbiByZWxpZXMgb24gYSBoYXNoLWNvbnNpbmcgbWVjaGFu
aXNtIGZvciBQZXJQcm9jZXNzPD4gc3RvcmFnZSBiYXNlZAorICAgICAgICBvbiB0aGUgX19QUkVU
VFlfRlVOQ1RJT05fXyBmcm9tIGluc2lkZSBQZXJQcm9jZXNzPD4sIHdoaWNoIGNhcHR1cmVzIHRo
ZSBpbnN0YW50aWF0ZWQgdHlwZSBpbgorICAgICAgICB0aGUgc3RyaW5nLiBUaGVyZWZvcmUsIHRo
aXMgY2FuIGJlIHVzZWQgdG8gcnVudGltZS1jb2FsZXNjZSBQZXJQcm9jZXNzPD4gaW5zdGFuY2Vz
IGJhc2VkIG9uCisgICAgICAgIHR5cGUuCisgICAgICAgIAorICAgICAgICBJIGV4cGVjdCB0aGlz
IHRvIGJlIHBlcmYtbmV1dHJhbC4gSXQncyBhbiBpbXBvcnRhbnQgcHJlcmVxdWlzaXRlIHRvIG1v
cmUgYm1hbGxvYyB3b3JrLCBzaW5jZSBJCisgICAgICAgIGRvbid0IHdhbnQgdG8gaGF2ZSBtb3Jl
IFBlclByb2Nlc3M8PiB2cyBTYWZlUGVyUHJvY2Vzczw+IGJ1Z3MsIGFuZCBTYWZlUGVyUHJvY2Vz
czw+IGNhbid0IGJlCisgICAgICAgIHVzZWQgZm9yIGV2ZXJ5dGhpbmcgKEkgZG9uJ3Qgc2VlIGhv
dyB0byB1c2UgaXQgZm9yIGlzb2hlYXBzKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIGJtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBi
bWFsbG9jL0hlYXAuY3BwOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6SGVhcCk6CisgICAgICAg
ICogYm1hbGxvYy9Jc29EaXJlY3RvcnlJbmxpbmVzLmg6CisgICAgICAgIChibWFsbG9jOjpwYXNz
ZWROdW1QYWdlcz46OnRha2VGaXJzdEVsaWdpYmxlKToKKyAgICAgICAgKGJtYWxsb2M6OnBhc3Nl
ZE51bVBhZ2VzPjo6ZGlkQmVjb21lKToKKyAgICAgICAgKiBibWFsbG9jL1BlclByb2Nlc3MuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKGJtYWxsb2M6OnN0cmluZ0hhc2gpOgorICAgICAgICAoYm1hbGxv
Yzo6YWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6Z2V0UGVyUHJvY2Vzc0RhdGEpOgorICAg
ICAgICAqIGJtYWxsb2MvUGVyUHJvY2Vzcy5oOgorICAgICAgICAoYm1hbGxvYzo6UGVyUHJvY2Vz
czo6bXV0ZXgpOgorICAgICAgICAoYm1hbGxvYzo6UGVyUHJvY2Vzczo6Y29hbGVzY2UpOgorICAg
ICAgICAoYm1hbGxvYzo6UGVyUHJvY2Vzczo6Z2V0U2xvd0Nhc2UpOgorICAgICAgICAoKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL1NjYXZlbmdlci5jcHA6CisgICAgICAgICogYm1hbGxv
Yy9TY2F2ZW5nZXIuaDoKKyAgICAgICAgKiBibWFsbG9jL2JtYWxsb2MuY3BwOgorICAgICAgICAo
Ym1hbGxvYzo6YXBpOjpzY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjphcGk6OnNldFNjYXZl
bmdlclRocmVhZFFPU0NsYXNzKToKKwogMjAxOC0wMy0xMCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIy
OTQzNi4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjk1MDkpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBA
QCBzZXQoYm1hbGxvY19TT1VSQ0VTCiAgICAgYm1hbGxvYy9MYXJnZU1hcC5jcHAKICAgICBibWFs
bG9jL0xvZ2dpbmcuY3BwCiAgICAgYm1hbGxvYy9PYmplY3RUeXBlLmNwcAorICAgIGJtYWxsb2Mv
UGVyUHJvY2Vzcy5jcHAKICAgICBibWFsbG9jL1NjYXZlbmdlci5jcHAKICAgICBibWFsbG9jL1N0
YXRpY011dGV4LmNwcAogICAgIGJtYWxsb2MvVk1IZWFwLmNwcApJbmRleDogU291cmNlL2JtYWxs
b2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjI5
NTA5KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAvKiBFbmQgUEJYQWdncmVnYXRlVGFy
Z2V0IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJMEYy
NkE3QTUyMDU0ODMxMzAwOTBBMTQxIC8qIFBlclByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNkE3QTQyMDU0ODMwRDAwOTBBMTQxIC8q
IFBlclByb2Nlc3MuY3BwICovOyB9OwogCQkwRjUxNjc3NDFGQUQ2ODVDMDA4MjM2QTggLyogYm1h
bGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjUxNjc3MzFGQUQ2ODUyMDA4MjM2QTggLyogYm1hbGxvYy5jcHAgKi87IH07CiAJCTBGNTU0OUVG
MUZCNTQ3MDQwMDdGRjc1QSAvKiBJc29QYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0OUVFMUZCNTQ3MDEwMDdGRjc1QSAvKiBJc29QYWdl
LmNwcCAqLzsgfTsKIAkJMEY1QkYxNDcxRjIyQThCMTAwMjlEOTFEIC8qIEhlYXBLaW5kLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE0NjFGMjJB
OEIxMDAyOUQ5MUQgLyogSGVhcEtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTc0LDYgKzE3NSw3IEBACiAvKiBFbmQgUEJYQ29weUZpbGVz
QnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlv
biAqLworCQkwRjI2QTdBNDIwNTQ4MzBEMDA5MEExNDEgLyogUGVyUHJvY2Vzcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQZXJQcm9jZXNzLmNwcDsgcGF0aCA9IGJt
YWxsb2MvUGVyUHJvY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTE2
NzczMUZBRDY4NTIwMDgyMzZBOCAvKiBibWFsbG9jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IGJtYWxsb2MuY3BwOyBwYXRoID0gYm1hbGxvYy9ibWFsbG9jLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NTQ5RUUxRkI1NDcwMTAwN0ZGNzVBIC8q
IElzb1BhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSXNvUGFn
ZS5jcHA7IHBhdGggPSBibWFsbG9jL0lzb1BhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjVCRjE0NjFGMjJBOEIxMDAyOUQ5MUQgLyogSGVhcEtpbmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSGVhcEtpbmQuaDsgcGF0aCA9IGJtYWxsb2MvSGVhcEtpbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTUyMSw2ICs1MjMsNyBAQAogCQkJCTQ0MjZFMjdGMUM4MzhFRTAw
MDhFQjA0MiAvKiBMb2dnaW5nLmggKi8sCiAJCQkJMTRDODk5MkExQ0M0ODVFNzAwMjdBMDU3IC8q
IE1hcC5oICovLAogCQkJCTE0NERDRUQ2MTdBNjQ5RDkwMDkzQjJGMiAvKiBNdXRleC5oICovLAor
CQkJCTBGMjZBN0E0MjA1NDgzMEQwMDkwQTE0MSAvKiBQZXJQcm9jZXNzLmNwcCAqLywKIAkJCQkw
RjVCRjE0ODFGMjJBOEQ4MDAyOUQ5MUQgLyogUGVySGVhcEtpbmQuaCAqLywKIAkJCQkxNDQ0NkEw
NzE3QTYxRkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5oICovLAogCQkJCTE0NDQ2OUZEMTdBNjFG
MUYwMEY5RUExRCAvKiBQZXJUaHJlYWQuaCAqLywKQEAgLTc2OCw2ICs3NzEsNyBAQAogCQkJCTE0
RjI3MUMzMThFQTM5NzgwMDhDMTUyRiAvKiBBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjU5OUM1Q0MxRUMzRjE1OTAwQTJGN0JCIC8qIEF2YWlsYWJsZU1lbW9yeS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNEYyNzFDNDE4RUEzOTdCMDA4QzE1MkYgLyogQ2FjaGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYyNkE3QTUyMDU0ODMxMzAwOTBBMTQxIC8qIFBlclByb2Nlc3MuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJGIC8qIERlYWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkI0NDM2MUUyODM5RTcwMDFEQTZFOSAvKiBE
ZWJ1Z0hlYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4OTVEOTExQTNBMzE5QzAwMDYyMzVE
IC8qIEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9DcnlwdG9SYW5kb20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQ3J5cHRvUmFuZG9tLmNwcAkocmV2aXNpb24gMjI5NTA5KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9DcnlwdG9SYW5kb20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw2
IEBAIGludCBDQ1JhbmRvbUNvcHlCeXRlcyhDQ1JhbmRvbVJlZiBybmQsIHYKIAogbmFtZXNwYWNl
IGJtYWxsb2MgewogCi1uYW1lc3BhY2UgewotCiBjbGFzcyBBUkM0U3RyZWFtIHsKIHB1YmxpYzoK
ICAgICBBUkM0U3RyZWFtKCk7CkBAIC0xODAsOCArMTc4LDYgQEAgdm9pZCBBUkM0UmFuZG9tTnVt
YmVyR2VuZXJhdG9yOjpyYW5kb21WYQogICAgIH0KIH0KIAotfQotCiB2b2lkIGNyeXB0b1JhbmRv
bSh2b2lkKiBidWZmZXIsIHNpemVfdCBsZW5ndGgpCiB7CiAgICAgUGVyUHJvY2VzczxBUkM0UmFu
ZG9tTnVtYmVyR2VuZXJhdG9yPjo6Z2V0KCktPnJhbmRvbVZhbHVlcyhidWZmZXIsIGxlbmd0aCk7
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9uIDIyOTUwOSkKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcg
QEAgSGVhcDo6SGVhcChIZWFwS2luZCBraW5kLCBzdGQ6OmxvY2tfZ3VhcgogI2VuZGlmCiAgICAg
fQogICAgIAotICAgIG1fc2NhdmVuZ2VyID0gU2FmZVBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0
KCk7CisgICAgbV9zY2F2ZW5nZXIgPSBQZXJQcm9jZXNzPFNjYXZlbmdlcj46OmdldCgpOwogfQog
CiBib29sIEhlYXA6OnVzaW5nR2lnYWNhZ2UoKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9Jc29EaXJlY3RvcnlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9Jc29EaXJlY3RvcnlJbmxpbmVzLmgJKHJldmlzaW9uIDIyOTUwOSkKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIEVsaWdpYmlsaXR5UmVzdWx0PENvbmZpZz4gSXNvRGlyZWN0b3J5PEMKICAg
ICBpZiAocGFnZUluZGV4ID49IG51bVBhZ2VzKQogICAgICAgICByZXR1cm4gRWxpZ2liaWxpdHlL
aW5kOjpGdWxsOwogICAgIAotICAgIFNjYXZlbmdlciYgc2NhdmVuZ2VyID0gKlNhZmVQZXJQcm9j
ZXNzPFNjYXZlbmdlcj46OmdldCgpOworICAgIFNjYXZlbmdlciYgc2NhdmVuZ2VyID0gKlBlclBy
b2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCk7CiAgICAgc2NhdmVuZ2VyLmRpZFN0YXJ0R3Jvd2luZygp
OwogICAgIAogICAgIElzb1BhZ2U8Q29uZmlnPiogcGFnZSA9IG1fcGFnZXNbcGFnZUluZGV4XTsK
QEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIElzb0RpcmVjdG9yeTxDb25maWcsIHBhc3NlZE51bVBh
Z2VzCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIl
cDogJXAgZGlkIGJlY29tZSBlbXB0eS5cbiIsIHRoaXMsIHBhZ2UpOwogICAgICAgICBtX2VtcHR5
W3BhZ2VJbmRleF0gPSB0cnVlOwotICAgICAgICBTYWZlUGVyUHJvY2VzczxTY2F2ZW5nZXI+Ojpn
ZXQoKS0+c2NoZWR1bGUoSXNvUGFnZUJhc2U6OnBhZ2VTaXplKTsKKyAgICAgICAgUGVyUHJvY2Vz
czxTY2F2ZW5nZXI+OjpnZXQoKS0+c2NoZWR1bGUoSXNvUGFnZUJhc2U6OnBhZ2VTaXplKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBCQ1JBU0goKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvUGVyUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9QZXJQcm9jZXNzLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1BlclByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgIlBlclBy
b2Nlc3MuaCIKKworI2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKKworbmFtZXNwYWNlIGJtYWxsb2Mg
eworCitzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHRhYmxlU2l6ZSA9IDEwMDsKK3N0YXRpYyBj
b25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK3N0YXRpYyBTdGF0aWNNdXRleCBzX211
dGV4OworCitzdGF0aWMgY2hhciogc19idW1wQmFzZTsKK3N0YXRpYyBzaXplX3Qgc19idW1wT2Zm
c2V0Oworc3RhdGljIHNpemVfdCBzX2J1bXBMaW1pdDsKKworc3RhdGljIFBlclByb2Nlc3NEYXRh
KiBzX3RhYmxlW3RhYmxlU2l6ZV07CisKKy8vIFJldHVybnMgemVyby1maWxsZWQgbWVtb3J5IGJ5
IHZpcnR1YWwgb2YgdXNpbmcgdm1BbGxvY2F0ZS4KK3N0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXpl
X3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkKK3sKKyAgICBzX2J1bXBPZmZzZXQgPSByb3VuZFVw
VG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc19idW1wT2Zmc2V0KTsKKyAgICB2b2lkKiByZXN1bHQg
PSBzX2J1bXBCYXNlICsgc19idW1wT2Zmc2V0OworICAgIHNfYnVtcE9mZnNldCArPSBzaXplOwor
ICAgIGlmIChzX2J1bXBPZmZzZXQgPD0gc19idW1wTGltaXQpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgCisgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gdm1TaXplKHNpemUpOworICAg
IHZvaWQqIGFsbG9jYXRpb24gPSB2bUFsbG9jYXRlKGFsbG9jYXRpb25TaXplKTsKKyAgICBzX2J1
bXBCYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGFsbG9jYXRpb24pOworICAgIHNfYnVtcE9mZnNl
dCA9IDA7CisgICAgc19idW1wTGltaXQgPSBhbGxvY2F0aW9uU2l6ZTsKKyAgICByZXR1cm4gYWxs
b2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKK30KKworUGVyUHJvY2Vzc0RhdGEqIGdldFBlclByb2Nl
c3NEYXRhKHVuc2lnbmVkIGhhc2gsIGNvbnN0IGNoYXIqIGRpc2FtYmlndWF0b3IsIHNpemVfdCBz
aXplLCBzaXplX3QgYWxpZ25tZW50KQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4gbG9jayhzX211dGV4KTsKKworICAgIFBlclByb2Nlc3NEYXRhKiYgYnVja2V0ID0gc190YWJs
ZVtoYXNoICUgdGFibGVTaXplXTsKKyAgICAKKyAgICBmb3IgKFBlclByb2Nlc3NEYXRhKiBkYXRh
ID0gYnVja2V0OyBkYXRhOyBkYXRhID0gZGF0YS0+bmV4dCkgeworICAgICAgICBpZiAoIXN0cmNt
cChkYXRhLT5kaXNhbWJpZ3VhdG9yLCBkaXNhbWJpZ3VhdG9yKSkgeworICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlZDogVXNpbmcgZXhp
c3RpbmcgJXNcbiIsIGdldHBpZCgpLCBkaXNhbWJpZ3VhdG9yKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQkFTU0VSVChkYXRhLT5zaXplID09IHNpemUpOworICAgICAgICAgICAgUkVMRUFTRV9CQVNT
RVJUKGRhdGEtPmFsaWdubWVudCA9PSBhbGlnbm1lbnQpOworICAgICAgICAgICAgcmV0dXJuIGRh
dGE7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiJWQ6IENyZWF0aW5nIG5ldyAlc1xuIiwgZ2V0cGlkKCksIGRpc2FtYmln
dWF0b3IpOworICAgIHZvaWQqIHJhd0RhdGFQdHIgPSBhbGxvY2F0ZShzaXplb2YoUGVyUHJvY2Vz
c0RhdGEpLCBzdGQ6OmFsaWdubWVudF9vZjxQZXJQcm9jZXNzRGF0YT46OnZhbHVlKTsKKyAgICBQ
ZXJQcm9jZXNzRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFBlclByb2Nlc3NEYXRhKj4ocmF3RGF0
YVB0cik7CisgICAgZGF0YS0+ZGlzYW1iaWd1YXRvciA9IGRpc2FtYmlndWF0b3I7CisgICAgZGF0
YS0+bWVtb3J5ID0gYWxsb2NhdGUoc2l6ZSwgYWxpZ25tZW50KTsKKyAgICBkYXRhLT5zaXplID0g
c2l6ZTsKKyAgICBkYXRhLT5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAgZGF0YS0+bmV4dCA9
IGJ1Y2tldDsKKyAgICBidWNrZXQgPSBkYXRhOworICAgIHJldHVybiBkYXRhOworfQorCit9IC8v
IG5hbWVzcGFjZSBibWFsbG9jCisKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJv
Y2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGVyUHJvY2Vzcy5o
CShyZXZpc2lvbiAyMjk1MDkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BlclByb2Nlc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDYgQEAgbmFtZXNwYWNlIGJtYWxsb2Mgewog
Ly8KIC8vIE9iamVjdCB3aWxsIGJlIGluc3RhbnRpYXRlZCBvbmx5IG9uY2UsIGV2ZW4gaW4gdGhl
IGZhY2Ugb2YgY29uY3VycmVuY3kuCiAvLwotLy8gV0FSTklORzogUGVyUHJvY2VzczxUPiBkb2Vz
IG5vdCBleHBvcnQgaXRzIHN0b3JhZ2UuIFNvIGluIGFjdHVhbGl0eSB3aGVuCi0vLyB1c2VkIGlu
IG11bHRpcGxlIGxpYnJhcmllcyAvIGltYWdlcyBpdCBlbmRzIHVwIGJlaW5nIHBlci1pbWFnZS4g
VG8gdHJ1bHkKLS8vIGRlY2xhcmUgYSBwZXItcHJvY2VzcyBzaW5nbGV0b24gdXNlIFNhZmVQZXJQ
cm9jZXNzPFQ+LgotLy8KIC8vIE5PVEU6IElmIHlvdSBvYnNlcnZlIGdsb2JhbCBzaWRlLWVmZmVj
dHMgb2YgdGhlIE9iamVjdCBjb25zdHJ1Y3RvciwgYmUKIC8vIHN1cmUgdG8gbG9jayB0aGUgT2Jq
ZWN0IG11dGV4LiBGb3IgZXhhbXBsZToKIC8vCkBAIC01NSw2ICs1MSwyNiBAQCBuYW1lc3BhY2Ug
Ym1hbGxvYyB7CiAvLyBPYmplY3QqIG9iamVjdCA9IFBlclByb2Nlc3M8T2JqZWN0Pjo6Z2V0KGxv
Y2spOwogLy8gaWYgKGdsb2JhbEZsYWcpIHsgLi4uIH0gLy8gT0suCiAKK3N0cnVjdCBQZXJQcm9j
ZXNzRGF0YSB7CisgICAgY29uc3QgY2hhciogZGlzYW1iaWd1YXRvcjsKKyAgICB2b2lkKiBtZW1v
cnk7CisgICAgc2l6ZV90IHNpemU7CisgICAgc2l6ZV90IGFsaWdubWVudDsKKyAgICBTdGF0aWNN
dXRleCBtdXRleDsKKyAgICBib29sIGlzSW5pdGlhbGl6ZWQ7CisgICAgUGVyUHJvY2Vzc0RhdGEq
IG5leHQ7Cit9OworCitjb25zdGV4cHIgdW5zaWduZWQgc3RyaW5nSGFzaChjb25zdCBjaGFyKiBz
dHJpbmcpCit7CisgICAgdW5zaWduZWQgcmVzdWx0ID0gNTM4MTsKKyAgICB3aGlsZSAoY2hhciBj
ID0gKnN0cmluZysrKQorICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAzMyArIGM7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworQkVYUE9SVCBQZXJQcm9jZXNzRGF0YSogZ2V0UGVyUHJvY2Vzc0Rh
dGEodW5zaWduZWQgZGlzYW1iaWd1YXRvckhhc2gsIGNvbnN0IGNoYXIqIGRpc2FtYmlndWF0b3Is
IHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50KTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
IGNsYXNzIFBlclByb2Nlc3MgewogcHVibGljOgpAQCAtNzEsODggKzg3LDQ2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHNfb2JqZWN0LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7
CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBTdGF0aWNNdXRleCYgbXV0ZXgoKSB7IHJldHVybiBz
X211dGV4OyB9CisgICAgc3RhdGljIFN0YXRpY011dGV4JiBtdXRleCgpCisgICAgeworICAgICAg
ICBpZiAoIXNfZGF0YSkKKyAgICAgICAgICAgIGNvYWxlc2NlKCk7CisgICAgICAgIHJldHVybiBz
X2RhdGEtPm11dGV4OworICAgIH0KIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBjb2FsZXNj
ZSgpCisgICAgeworICAgICAgICBpZiAoc19kYXRhKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgY29uc3QgY2hhciogZGlzYW1iaWd1YXRvciA9IF9fUFJFVFRZX0ZVTkNU
SU9OX187CisgICAgICAgIHNfZGF0YSA9IGdldFBlclByb2Nlc3NEYXRhKHN0cmluZ0hhc2goZGlz
YW1iaWd1YXRvciksIGRpc2FtYmlndWF0b3IsIHNpemVvZihUKSwgc3RkOjphbGlnbm1lbnRfb2Y8
VD46OnZhbHVlKTsKKyAgICB9CisgICAgCiAgICAgQk5PX0lOTElORSBzdGF0aWMgVCogZ2V0U2xv
d0Nhc2UoKQogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2Nr
KHNfbXV0ZXgpOwotICAgICAgICBpZiAoIXNfb2JqZWN0LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJf
Y29uc3VtZSkpIHsKLSAgICAgICAgICAgIFQqIHQgPSBuZXcgKCZzX21lbW9yeSkgVChsb2NrKTsK
LSAgICAgICAgICAgIHNfb2JqZWN0LnN0b3JlKHQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2Up
OworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2sobXV0ZXgoKSk7Cisg
ICAgICAgIGlmICghc19vYmplY3QubG9hZCgpKSB7CisgICAgICAgICAgICBpZiAoc19kYXRhLT5p
c0luaXRpYWxpemVkKQorICAgICAgICAgICAgICAgIHNfb2JqZWN0LnN0b3JlKHN0YXRpY19jYXN0
PFQqPihzX2RhdGEtPm1lbW9yeSkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgVCogdCA9IG5ldyAoc19kYXRhLT5tZW1vcnkpIFQobG9jayk7CisgICAgICAgICAgICAgICAg
c19vYmplY3Quc3RvcmUodCk7CisgICAgICAgICAgICAgICAgc19kYXRhLT5pc0luaXRpYWxpemVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gc19vYmpl
Y3QubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lKTsKKyAgICAgICAgcmV0dXJuIHNfb2Jq
ZWN0LmxvYWQoKTsKICAgICB9CiAKICAgICBzdGF0aWMgc3RkOjphdG9taWM8VCo+IHNfb2JqZWN0
OwotICAgIHN0YXRpYyBTdGF0aWNNdXRleCBzX211dGV4OwotCi0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoVCksIHN0ZDo6YWxpZ25tZW50X29mPFQ+Ojp2
YWx1ZT46OnR5cGUgTWVtb3J5OwotICAgIHN0YXRpYyBNZW1vcnkgc19tZW1vcnk7CisgICAgc3Rh
dGljIFBlclByb2Nlc3NEYXRhKiBzX2RhdGE7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
c3RkOjphdG9taWM8VCo+IFBlclByb2Nlc3M8VD46OnNfb2JqZWN0OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotU3RhdGljTXV0ZXggUGVyUHJvY2VzczxUPjo6c19tdXRleDsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXR5cGVuYW1lIFBlclByb2Nlc3M8VD46Ok1lbW9yeSBQZXJQcm9jZXNzPFQ+
OjpzX21lbW9yeTsKLQotCi0vLyBTYWZlUGVyUHJvY2VzczxUPiBiZWhhdmVzIGxpa2UgUGVyUHJv
Y2VzczxUPiwgYnV0IGl0cyB1c2FnZQotLy8gcmVxdWlyZXMgREVDTEFSRS9ERUZJTkUgbWFjcm9z
IHRoYXQgZXhwb3J0IHN5bWJvbHMgdGhhdCBhbGxvdyBmb3IKLS8vIGEgc2luZ2xlIHNoYXJlZCBp
bnN0YW5jZSBpcyBhY3Jvc3MgaW1hZ2VzIGluIHRoZSBwcm9jZXNzLgotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgU2FmZVBlclByb2Nlc3NTdG9yYWdlVHJhaXRzOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotY2xhc3MgQkVYUE9SVCBTYWZlUGVyUHJvY2VzcyB7Ci1wdWJsaWM6Ci0gICAg
dXNpbmcgU3RvcmFnZSA9IHR5cGVuYW1lIFNhZmVQZXJQcm9jZXNzU3RvcmFnZVRyYWl0czxUPjo6
U3RvcmFnZTsKLQotICAgIHN0YXRpYyBUKiBnZXQoKQotICAgIHsKLSAgICAgICAgVCogb2JqZWN0
ID0gZ2V0RmFzdENhc2UoKTsKLSAgICAgICAgaWYgKCFvYmplY3QpCi0gICAgICAgICAgICByZXR1
cm4gZ2V0U2xvd0Nhc2UoKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgVCogZ2V0RmFzdENhc2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChTdG9yYWdlOjpz
X29iamVjdCkubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgU3RhdGljTXV0ZXgmIG11dGV4KCkgeyByZXR1cm4gU3RvcmFnZTo6c19tdXRleDsgfQot
Ci0gICAgdXNpbmcgTWVtb3J5ID0gdHlwZW5hbWUgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9m
KFQpLCBzdGQ6OmFsaWdubWVudF9vZjxUPjo6dmFsdWU+Ojp0eXBlOwotCi1wcml2YXRlOgotICAg
IEJOT19JTkxJTkUgc3RhdGljIFQqIGdldFNsb3dDYXNlKCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhTdG9yYWdlOjpzX211dGV4KTsKLSAgICAgICAg
aWYgKCFTdG9yYWdlOjpzX29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpKSB7
Ci0gICAgICAgICAgICBUKiB0ID0gbmV3ICgmU3RvcmFnZTo6c19tZW1vcnkpIFQobG9jayk7Ci0g
ICAgICAgICAgICBTdG9yYWdlOjpzX29iamVjdC5zdG9yZSh0LCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxlYXNlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RvcmFnZTo6c19vYmplY3QubG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lKTsKLSAgICB9Ci19OwotCi0jZGVmaW5lIERFQ0xB
UkVfU0FGRV9QRVJfUFJPQ0VTU19TVE9SQUdFKFR5cGUpIFwKLSAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBTYWZlUGVyUHJvY2Vzc1N0b3JhZ2VUcmFpdHM8VHlwZT4geyBcCi0gICAgICAgIHN0cnVjdCBC
RVhQT1JUIFN0b3JhZ2UgeyBcCi0gICAgICAgICAgICBCRVhQT1JUIHN0YXRpYyBzdGQ6OmF0b21p
YzxUeXBlKj4gc19vYmplY3Q7IFwKLSAgICAgICAgICAgIEJFWFBPUlQgc3RhdGljIFN0YXRpY011
dGV4IHNfbXV0ZXg7IFwKLSAgICAgICAgICAgIEJFWFBPUlQgc3RhdGljIFNhZmVQZXJQcm9jZXNz
PFR5cGU+OjpNZW1vcnkgc19tZW1vcnk7IFwKLSAgICAgICAgfTsgXAotICAgIH07Ci0KLSNkZWZp
bmUgREVGSU5FX1NBRkVfUEVSX1BST0NFU1NfU1RPUkFHRShUeXBlKSBcCi0gICAgc3RkOjphdG9t
aWM8VHlwZSo+IFNhZmVQZXJQcm9jZXNzU3RvcmFnZVRyYWl0czxUeXBlPjo6U3RvcmFnZTo6c19v
YmplY3Q7IFwKLSAgICBTdGF0aWNNdXRleCBTYWZlUGVyUHJvY2Vzc1N0b3JhZ2VUcmFpdHM8VHlw
ZT46OlN0b3JhZ2U6OnNfbXV0ZXg7IFwKLSAgICBTYWZlUGVyUHJvY2VzczxUeXBlPjo6TWVtb3J5
IFNhZmVQZXJQcm9jZXNzU3RvcmFnZVRyYWl0czxUeXBlPjo6U3RvcmFnZTo6c19tZW1vcnk7CitQ
ZXJQcm9jZXNzRGF0YSogUGVyUHJvY2VzczxUPjo6c19kYXRhOwogCiB9IC8vIG5hbWVzcGFjZSBi
bWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCShyZXZpc2lvbiAy
Mjk1MDkpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDggKzMyLDYgQEAKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCi1ERUZJTkVf
U0FGRV9QRVJfUFJPQ0VTU19TVE9SQUdFKFNjYXZlbmdlcik7Ci0KIFNjYXZlbmdlcjo6U2NhdmVu
Z2VyKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKQogewogI2lmIEJPUyhEQVJXSU4pCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmgJKHJldmlzaW9uIDIyOTUwOSkKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDgg
KzkzLDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8RGVmZXJyZWREZWNvbW1pdD4gbV9kZWZlcnJl
ZERlY29tbWl0czsKIH07CiAKLURFQ0xBUkVfU0FGRV9QRVJfUFJPQ0VTU19TVE9SQUdFKFNjYXZl
bmdlcik7Ci0KIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKIAogCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL2JtYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvYm1hbGxvYy5jcHAJKHJldmlzaW9uIDIyOTUwOSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvYm1hbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBzY2F2
ZW5nZSgpCiB7CiAgICAgc2NhdmVuZ2VUaGlzVGhyZWFkKCk7CiAKLSAgICBTYWZlUGVyUHJvY2Vz
czxTY2F2ZW5nZXI+OjpnZXQoKS0+c2NhdmVuZ2UoKTsKKyAgICBQZXJQcm9jZXNzPFNjYXZlbmdl
cj46OmdldCgpLT5zY2F2ZW5nZSgpOwogfQogCiBib29sIGlzRW5hYmxlZChIZWFwS2luZCBraW5k
KQpAQCAtODcsNyArODcsNyBAQCBib29sIGlzRW5hYmxlZChIZWFwS2luZCBraW5kKQogdm9pZCBz
ZXRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyhxb3NfY2xhc3NfdCBvdmVycmlkZUNsYXNzKQogewog
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0g
ICAgU2FmZVBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPnNldFNjYXZlbmdlclRocmVhZFFP
U0NsYXNzKG92ZXJyaWRlQ2xhc3MpOworICAgIFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCkt
PnNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKG92ZXJyaWRlQ2xhc3MpOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>