<?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>68746</bug_id>
          
          <creation_ts>2011-09-23 17:49:13 -0700</creation_ts>
          <short_desc>wtf/BitVector.h has a variety of bugs which manifest when the vector grows beyond 63 bits</short_desc>
          <delta_ts>2011-09-23 20:24:29 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>472662</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-23 17:49:13 -0700</bug_when>
    <thetext>- The number of bytes that need to be malloc&apos;d is miscomputed.

- The index into the uintptr_t* is miscomputed.

- resize() sometimes exits too early.

- Far too much code is inline, when it could be trivially out-of-line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472665</commentid>
    <comment_count>1</comment_count>
      <attachid>108570</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-23 17:54:47 -0700</bug_when>
    <thetext>Created attachment 108570
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472667</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-23 17:56:50 -0700</bug_when>
    <thetext>Attachment 108570 did not pass style-queue:

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

Source/JavaScriptCore/wtf/BitVector.h:143:  The parameter name &quot;outOfLineBits&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 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>472670</commentid>
    <comment_count>3</comment_count>
      <attachid>108570</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-23 18:00:08 -0700</bug_when>
    <thetext>Comment on attachment 108570
the patch

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

r=me, but it would be worth considering whether ensureSize() should be inline or outline before landing

&gt; Source/JavaScriptCore/wtf/BitVector.h:79
&gt; -    void ensureSize(size_t numBits)
&gt; -    {
&gt; -        if (numBits &lt;= size())
&gt; -            return;
&gt; -        resizeOutOfLine(numBits);
&gt; -    }
&gt; +    void ensureSize(size_t numBits);

Do you really want to take ensureSize out of line? you already have resizeOutOfLine so it seems overkill to hoist the entire function out</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472671</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-23 18:02:36 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 108570 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108570&amp;action=review
&gt; 
&gt; r=me, but it would be worth considering whether ensureSize() should be inline or outline before landing
&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/BitVector.h:79
&gt; &gt; -    void ensureSize(size_t numBits)
&gt; &gt; -    {
&gt; &gt; -        if (numBits &lt;= size())
&gt; &gt; -            return;
&gt; &gt; -        resizeOutOfLine(numBits);
&gt; &gt; -    }
&gt; &gt; +    void ensureSize(size_t numBits);
&gt; 
&gt; Do you really want to take ensureSize out of line? you already have resizeOutOfLine so it seems overkill to hoist the entire function out

That&apos;s a really good point.  I&apos;ll change that so that ensureSize() inlines the trivial path, and land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472684</commentid>
    <comment_count>5</comment_count>
      <attachid>108573</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-23 18:33:01 -0700</bug_when>
    <thetext>Created attachment 108573
the patch - fix style, review

This is the patch I intend to land manually once I finish running the last batch of tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472685</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-23 18:36:58 -0700</bug_when>
    <thetext>It appears that this is a speed-up on a few benchmarks, presumably because previously we had corrupt liveness settings and OSR would fail spuriously.  I cannot find any other change in behavior, since any bugs arising from a corrupt OSR bitvector would be horribly annoying to track down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472688</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-23 19:07:22 -0700</bug_when>
    <thetext>Landed in r95895.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472706</commentid>
    <comment_count>8</comment_count>
      <attachid>108570</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-23 20:24:29 -0700</bug_when>
    <thetext>Comment on attachment 108570
the patch

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

&gt; Source/JavaScriptCore/wtf/BitVector.cpp:38
&gt; +    (*this) = other;

No need for these parentheses.

&gt; Source/JavaScriptCore/wtf/BitVector.cpp:41
&gt; +BitVector&amp; BitVector::operator=(const BitVector&amp; other)

It’s normally considered better style to write a swap function and a copy constructor and build the assignment operator from the copy constructor instead of the other way around.

Easier to get rid too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108570</attachid>
            <date>2011-09-23 17:54:47 -0700</date>
            <delta_ts>2011-09-23 20:24:29 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>betterbitvector_patch_1.diff</filename>
            <type>text/plain</type>
            <size>17279</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU4OTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAK
KzIwMTEtMDktMjMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICB3
dGYvQml0VmVjdG9yLmggaGFzIGEgdmFyaWV0eSBvZiBidWdzIHdoaWNoIG1hbmlmZXN0IHdoZW4g
dGhlCisgICAgICAgIHZlY3RvciBncm93cyBiZXlvbmQgNjMgYml0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3NDYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE91dC1vZi1saW5lZCBzbG93
IHBhdGggY29kZSBpbiBCaXRWZWN0b3Igc28gdGhhdCBub3QgZXZlcnkgdXNlcgorICAgICAgICBv
ZiBDb2RlQmxvY2sgZW5kcyB1cCBoYXZpbmcgdG8gY29tcGlsZSBpdC4gRml4ZWQgYSB2YXJpZXR5
IG9mCisgICAgICAgIGluZGV4IGNvbXB1dGF0aW9uIGFuZCBzaXplIGNvbXB1dGF0aW9uIGJ1Z3Mu
CisgICAgICAgIAorICAgICAgICBJIGhhdmUgbm90IHNlZW4gdGhlc2UgaXNzdWVzIG1hbmlmZXN0
IHRoZW1zZWx2ZXMsIGJ1dCB0aGV5IGFyZQorICAgICAgICBibG9ja2luZyBhIHBhdGNoIHRoYXQg
dXNlcyBCaXRWZWN0b3IgbW9yZSBhZ2dyZXNzaXZlbHkuCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJv
ajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEJpdFZlY3Rvcjo6
Qml0VmVjdG9yKToKKyAgICAgICAgKEJpdFZlY3Rvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKEJp
dFZlY3Rvcjo6ZW5zdXJlU2l6ZSk6CisgICAgICAgIChCaXRWZWN0b3I6OnJlc2l6ZSk6CisgICAg
ICAgIChCaXRWZWN0b3I6OmNsZWFyQWxsKToKKyAgICAgICAgKEJpdFZlY3Rvcjo6T3V0T2ZMaW5l
Qml0czo6Y3JlYXRlKToKKyAgICAgICAgKEJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6ZGVzdHJv
eSk6CisgICAgICAgIChCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGluZSk6CisgICAgICAgICogd3Rm
L0JpdFZlY3Rvci5oOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmdldCk6CisgICAgICAgIChX
VEY6OkJpdFZlY3Rvcjo6c2V0KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpjbGVhcik6Cisg
ICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Ynl0ZUNvdW50KToKKyAgICAgICAgKFdURjo6Qml0VmVj
dG9yOjpPdXRPZkxpbmVCaXRzOjpudW1Xb3Jkcyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6
T3V0T2ZMaW5lQml0czo6Yml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6b3V0T2ZMaW5l
Qml0cyk6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi93dGYu
cHJpOgorCiAyMDExLTA5LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVzb2x2ZSBvcGNvZGVzIHNob3VsZCBoYXZlIHZhbHVlIHByb2ZpbGluZy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NTg5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC00NjgsNiArNDY4LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Bc3NlcnRpb25zLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvQXRvbWljcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FWTFRy
ZWUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL0JpdG1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb2NrU3RhY2su
aCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dU
Ri9XVEYudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDk1ODkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29y
a2luZyBjb3B5KQpAQCAtNjM3LDYgKzYzNywxMCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxl
CisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxCaXRWZWN0b3IuY3BwIgorCQkJPgorCQk8L0Zp
bGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxCaXRWZWN0b3IuaCIKIAkJ
CT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDk1ODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKIAkJMEJE
RkZBRTEwRkM2MTkzMTAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQxMEZDNjE2RUMwMEQ2OUVG
NCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEJGMjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJGMjhB
MjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovOyB9OwogCQkwRjI0MkRBNzEz
RjNCMUU4MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRD
IC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYzNkRBQzE0MkQ1RUE4MDBCMkU2NkEgLyogQml0VmVj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NjM2REFBMTQyRDVFOEUwMEIyRTY2QSAvKiBCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjc3MDA5
MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAv
KiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjk2M0IyNzEzRjc1M0JCMDAwMkQ5QjIg
LyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjNCMkMxM0Y4
NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFB
bGxvY2F0b3IuY3BwICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLXN0cmlj
dC1hbGlhc2luZyI7IH07IH07CkBAIC03OTMsNiArNzk0LDcgQEAKIAkJMEJERkZBRDQwRkM2MTcx
MDAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFr
UmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MzZEQUExNDJENUU4RTAwQjJFNjZBIC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCaXRWZWN0b3IuY3BwOyBwYXRoID0gLi4vLi4vLi4vLi4vLi4v
T3BlblNvdXJjZS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1w
bGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdD
b3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgw
MDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE4MTIsNiArMTgxNCw3IEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1
NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTBGNjM2REFBMTQyRDVFOEUwMEIyRTY2QSAvKiBCaXRWZWN0b3IuY3BwICovLAogCQkJCTBG
RDgyRjQ5MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLywKIAkJCQlDMjJDNTI0ODEz
RkFGNkVGMDBCN0RDMEQgLyogZHRvYSAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUg
LyogbWFjICovLApAQCAtMzM0Niw2ICszMzQ5LDcgQEAKIAkJCQkxQTA4Mjc3OTE0MjE2OEQ3MDA5
MENDQUMgLyogQmluYXJ5U2VtYXBob3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDQ1NkIx
MTQyN0ZCOTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjYzNkRBQzE0MkQ1RUE4MDBCMkU2NkEgLyogQml0VmVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJp
dFZlY3Rvci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHN0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK0JpdFZlY3Rvcjo6Qml0VmVjdG9yKGNv
bnN0IEJpdFZlY3RvciYgb3RoZXIpCisgICAgOiBtX2JpdHNPclBvaW50ZXIobWFrZUlubGluZUJp
dHMoMCkpCit7CisgICAgKCp0aGlzKSA9IG90aGVyOworfQorCitCaXRWZWN0b3ImIEJpdFZlY3Rv
cjo6b3BlcmF0b3I9KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCit7CisgICAgdWludHB0cl90IG5l
d0JpdHNPclBvaW50ZXI7CisgICAgaWYgKG90aGVyLmlzSW5saW5lKCkpCisgICAgICAgIG5ld0Jp
dHNPclBvaW50ZXIgPSBvdGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAgZWxzZSB7CisgICAgICAg
IE91dE9mTGluZUJpdHMqIG5ld091dE9mTGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUo
b3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwg
b3RoZXIuYml0cygpLCBieXRlQ291bnQob3RoZXIuc2l6ZSgpKSk7CisgICAgICAgIG5ld0JpdHNP
clBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKTsKKyAg
ICB9CisgICAgaWYgKCFpc0lubGluZSgpKQorICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95
KG91dE9mTGluZUJpdHMoKSk7CisgICAgbV9iaXRzT3JQb2ludGVyID0gbmV3Qml0c09yUG9pbnRl
cjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgQml0VmVjdG9yOjplbnN1cmVTaXplKHNp
emVfdCBudW1CaXRzKQoreworICAgIGlmIChudW1CaXRzIDw9IHNpemUoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIHJlc2l6ZU91dE9mTGluZShudW1CaXRzKTsKK30KKwordm9pZCBCaXRWZWN0b3I6
OnJlc2l6ZShzaXplX3QgbnVtQml0cykKK3sKKyAgICBpZiAobnVtQml0cyA8PSBtYXhJbmxpbmVC
aXRzKCkpIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgICAgIE91dE9mTGluZUJpdHMqIG15T3V0T2ZMaW5lQml0cyA9IG91dE9mTGluZUJp
dHMoKTsKKyAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gbWFrZUlubGluZUJpdHMoKm15T3V0T2ZM
aW5lQml0cy0+Yml0cygpKTsKKyAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShteU91dE9m
TGluZUJpdHMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHJlc2l6ZU91dE9m
TGluZShudW1CaXRzKTsKK30KKwordm9pZCBCaXRWZWN0b3I6OmNsZWFyQWxsKCkKK3sKKyAgICBp
ZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gbWFrZUlubGluZUJpdHMo
MCk7CisgICAgZWxzZQorICAgICAgICBtZW1zZXQob3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIDAs
IGJ5dGVDb3VudChzaXplKCkpKTsKK30KKworQml0VmVjdG9yOjpPdXRPZkxpbmVCaXRzKiBCaXRW
ZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNyZWF0ZShzaXplX3QgbnVtQml0cykKK3sKKyAgICBudW1C
aXRzID0gKG51bUJpdHMgKyBiaXRzSW5Qb2ludGVyKCkgLSAxKSAmIH4oYml0c0luUG9pbnRlcigp
IC0gMSk7CisgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoT3V0T2ZMaW5lQml0cykgKyBzaXplb2Yo
dWludHB0cl90KSAqIChudW1CaXRzIC8gYml0c0luUG9pbnRlcigpKTsKKyAgICBPdXRPZkxpbmVC
aXRzKiByZXN1bHQgPSBuZXcgKGZhc3RNYWxsb2Moc2l6ZSkpIE91dE9mTGluZUJpdHMobnVtQml0
cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBCaXRWZWN0b3I6Ok91dE9mTGluZUJp
dHM6OmRlc3Ryb3koT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0cykKK3sKKyAgICBmYXN0RnJl
ZShvdXRPZkxpbmVCaXRzKTsKK30KKwordm9pZCBCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGluZShz
aXplX3QgbnVtQml0cykKK3sKKyAgICBBU1NFUlQobnVtQml0cyA+IG1heElubGluZUJpdHMoKSk7
CisgICAgT3V0T2ZMaW5lQml0cyogbmV3T3V0T2ZMaW5lQml0cyA9IE91dE9mTGluZUJpdHM6OmNy
ZWF0ZShudW1CaXRzKTsKKyAgICBtZW1jcHkobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBiaXRz
KCksIGJ5dGVDb3VudChzdGQ6Om1pbihzaXplKCksIG51bUJpdHMpKSk7CisgICAgaWYgKCFpc0lu
bGluZSgpKQorICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMoKSk7
CisgICAgbV9iaXRzT3JQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3T3V0T2ZM
aW5lQml0cyk7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAko
cmV2aXNpb24gOTU4OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsNyBAQAogI2lmbmRlZiBCaXRWZWN0b3JfaAog
I2RlZmluZSBCaXRWZWN0b3JfaAogCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHN0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewpAQCAtNjEsMTEgKzU4LDcgQEAgcHVibGljOiAKICAgICB7CiAgICAgfQogICAgIAotICAgIEJp
dFZlY3Rvcihjb25zdCBCaXRWZWN0b3ImIG90aGVyKQotICAgICAgICA6IG1fYml0c09yUG9pbnRl
cihtYWtlSW5saW5lQml0cygwKSkKLSAgICB7Ci0gICAgICAgICgqdGhpcykgPSBvdGhlcjsKLSAg
ICB9CisgICAgQml0VmVjdG9yKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpOwogICAgIAogICAgIH5C
aXRWZWN0b3IoKQogICAgIHsKQEAgLTc0LDIxICs2Nyw3IEBAIHB1YmxpYzogCiAgICAgICAgIE91
dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0T2ZMaW5lQml0cygpKTsKICAgICB9CiAgICAgCi0gICAg
Qml0VmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgQml0VmVjdG9yJiBvdGhlcikKLSAgICB7Ci0gICAg
ICAgIHVpbnRwdHJfdCBuZXdCaXRzT3JQb2ludGVyOwotICAgICAgICBpZiAob3RoZXIuaXNJbmxp
bmUoKSkKLSAgICAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBvdGhlci5tX2JpdHNPclBvaW50
ZXI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgT3V0T2ZMaW5lQml0cyogbmV3T3V0T2ZM
aW5lQml0cyA9IE91dE9mTGluZUJpdHM6OmNyZWF0ZShvdGhlci5zaXplKCkpOwotICAgICAgICAg
ICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3RoZXIuYml0cygpLCBieXRlQ291
bnQob3RoZXIuc2l6ZSgpKSk7Ci0gICAgICAgICAgICBuZXdCaXRzT3JQb2ludGVyID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KG5ld091dE9mTGluZUJpdHMpOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghaXNJbmxpbmUoKSkKLSAgICAgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3ko
b3V0T2ZMaW5lQml0cygpKTsKLSAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gbmV3Qml0c09yUG9p
bnRlcjsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KKyAgICBCaXRWZWN0b3ImIG9wZXJh
dG9yPShjb25zdCBCaXRWZWN0b3ImIG90aGVyKTsKIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QK
ICAgICB7CkBAIC05Nyw1MyArNzYsMjkgQEAgcHVibGljOiAKICAgICAgICAgcmV0dXJuIG91dE9m
TGluZUJpdHMoKS0+bnVtQml0cygpOwogICAgIH0KIAotICAgIHZvaWQgZW5zdXJlU2l6ZShzaXpl
X3QgbnVtQml0cykKLSAgICB7Ci0gICAgICAgIGlmIChudW1CaXRzIDw9IHNpemUoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgcmVzaXplT3V0T2ZMaW5lKG51bUJpdHMpOwotICAgIH0K
KyAgICB2b2lkIGVuc3VyZVNpemUoc2l6ZV90IG51bUJpdHMpOwogICAgIAogICAgIC8vIExpa2Ug
ZW5zdXJlU2l6ZSgpLCBidXQgc3VwcG9ydHMgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGJpdHZl
Y3Rvci4KLSAgICB2b2lkIHJlc2l6ZShzaXplX3QgbnVtQml0cykKLSAgICB7Ci0gICAgICAgIGlm
IChpc0lubGluZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYg
KG51bUJpdHMgPD0gbWF4SW5saW5lQml0cygpKSB7Ci0gICAgICAgICAgICBPdXRPZkxpbmVCaXRz
KiBteU91dE9mTGluZUJpdHMgPSBvdXRPZkxpbmVCaXRzKCk7Ci0gICAgICAgICAgICBtX2JpdHNP
clBvaW50ZXIgPSBtYWtlSW5saW5lQml0cygqbXlPdXRPZkxpbmVCaXRzLT5iaXRzKCkpOwotICAg
ICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShteU91dE9mTGluZUJpdHMpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXNpemVPdXRPZkxp
bmUobnVtQml0cyk7Ci0gICAgfQorICAgIHZvaWQgcmVzaXplKHNpemVfdCBudW1CaXRzKTsKICAg
ICAKLSAgICB2b2lkIGNsZWFyQWxsKCkKLSAgICB7Ci0gICAgICAgIGlmIChpc0lubGluZSgpKQot
ICAgICAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gbWFrZUlubGluZUJpdHMoMCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG1lbXNldChvdXRPZkxpbmVCaXRzKCktPmJpdHMoKSwgMCwgYnl0
ZUNvdW50KHNpemUoKSkpOwotICAgIH0KKyAgICB2b2lkIGNsZWFyQWxsKCk7CiAKICAgICBib29s
IGdldChzaXplX3QgYml0KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGJpdCA8IHNpemUo
KSk7Ci0gICAgICAgIHJldHVybiAhIShiaXRzKClbYml0ID4+IGJpdHNJblBvaW50ZXIoKV0gJiAo
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEp
KSkpOworICAgICAgICByZXR1cm4gISEoYml0cygpW2JpdCAvIGJpdHNJblBvaW50ZXIoKV0gJiAo
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEp
KSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldChzaXplX3QgYml0KQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGJpdCA8IHNpemUoKSk7Ci0gICAgICAgIGJpdHMoKVtiaXQgPj4gYml0c0luUG9p
bnRlcigpXSB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBv
aW50ZXIoKSAtIDEpKSk7CisgICAgICAgIGJpdHMoKVtiaXQgLyBiaXRzSW5Qb2ludGVyKCldIHw9
IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0g
MSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjbGVhcihzaXplX3QgYml0KQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGJpdCA8IHNpemUoKSk7Ci0gICAgICAgIGJpdHMoKVtiaXQgPj4gYml0c0lu
UG9pbnRlcigpXSAmPSB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRz
SW5Qb2ludGVyKCkgLSAxKSkpOworICAgICAgICBiaXRzKClbYml0IC8gYml0c0luUG9pbnRlcigp
XSAmPSB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVy
KCkgLSAxKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldChzaXplX3QgYml0LCBib29sIHZh
bHVlKQpAQCAtMTY1LDExICsxMjAsOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gYml0c0lu
UG9pbnRlcigpIC0gMTsKICAgICB9CiAgICAgCi0gICAgLy8gVGhpcyBmdW5jdGlvbiByZWxpZXMg
b24gYml0Q291bnQgYmVpbmcgYSBtdWx0aXBsZSBvZiBiaXRzSW5Qb2ludGVyKCkKICAgICBzdGF0
aWMgc2l6ZV90IGJ5dGVDb3VudChzaXplX3QgYml0Q291bnQpCiAgICAgewotICAgICAgICBBU1NF
UlQoIShiaXRDb3VudCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpOwotICAgICAgICByZXR1cm4g
Yml0Q291bnQgPj4gMzsKKyAgICAgICAgcmV0dXJuIChiaXRDb3VudCArIDcpID4+IDM7CiAgICAg
fQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZUlubGluZUJpdHModWludHB0cl90IGJp
dHMpCkBAIC0xODEsMjAgKzEzNCwxMyBAQCBwcml2YXRlOgogICAgIGNsYXNzIE91dE9mTGluZUJp
dHMgewogICAgIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IG51bUJpdHMoKSBjb25zdCB7IHJldHVy
biBtX251bUJpdHM7IH0KLSAgICAgICAgc2l6ZV90IG51bVdvcmRzKCkgY29uc3QgeyByZXR1cm4g
KG1fbnVtQml0cyArIGJpdHNJblBvaW50ZXIoKSAtIDEpID4+IGJpdHNJblBvaW50ZXIoKTsgfQot
ICAgICAgICB1aW50cHRyX3QqIGJpdHMoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdCo+KHRoaXMgKyAxKTsgfQotICAgICAgICBjb25zdCB1aW50cHRyX3QqIGJpdHMoKSBjb25z
dCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnRwdHJfdCo+KHRoaXMgKyAxKTsg
fQorICAgICAgICBzaXplX3QgbnVtV29yZHMoKSBjb25zdCB7IHJldHVybiAobV9udW1CaXRzICsg
Yml0c0luUG9pbnRlcigpIC0gMSkgLyBiaXRzSW5Qb2ludGVyKCk7IH0KKyAgICAgICAgdWludHB0
cl90KiBiaXRzKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdCo+KHRoaXMgKyAxKTsg
fQorICAgICAgICBjb25zdCB1aW50cHRyX3QqIGJpdHMoKSBjb25zdCB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8Y29uc3QgdWludHB0cl90Kj4odGhpcyArIDEpOyB9CiAgICAgICAgIAotICAgICAgICBz
dGF0aWMgT3V0T2ZMaW5lQml0cyogY3JlYXRlKHNpemVfdCBudW1CaXRzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBudW1CaXRzID0gKG51bUJpdHMgKyBiaXRzSW5Qb2ludGVyKCkgLSAxKSAmIH5i
aXRzSW5Qb2ludGVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChmYXN0TWFsbG9jKHNpemVv
ZihPdXRPZkxpbmVCaXRzKSArIChudW1CaXRzID4+IGJpdHNJblBvaW50ZXIoKSkpKSBPdXRPZkxp
bmVCaXRzKG51bUJpdHMpOwotICAgICAgICB9CisgICAgICAgIHN0YXRpYyBPdXRPZkxpbmVCaXRz
KiBjcmVhdGUoc2l6ZV90IG51bUJpdHMpOwogICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBmYXN0RnJlZShvdXRPZkxpbmVCaXRzKTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KE91dE9mTGluZUJpdHMqIG91dE9mTGluZUJpdHMpOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgT3V0T2ZMaW5lQml0cyhzaXplX3QgbnVtQml0cykKQEAgLTIwNywxOCArMTUz
LDEwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBpc0lubGluZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYml0c09yUG9pbnRlciA+PiBtYXhJbmxpbmVCaXRzKCk7IH0KICAgICAKLSAgICBjb25zdCBP
dXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRzKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBPdXRPZkxpbmVCaXRzKj4obV9iaXRzT3JQb2ludGVyKTsgfQotICAgIE91dE9m
TGluZUJpdHMqIG91dE9mTGluZUJpdHMoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PE91dE9m
TGluZUJpdHMqPihtX2JpdHNPclBvaW50ZXIpOyB9CisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyog
b3V0T2ZMaW5lQml0cygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxjb25zdCBPdXRPZkxp
bmVCaXRzKj4obV9iaXRzT3JQb2ludGVyKTsgfQorICAgIE91dE9mTGluZUJpdHMqIG91dE9mTGlu
ZUJpdHMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8T3V0T2ZMaW5lQml0cyo+KG1fYml0c09yUG9p
bnRlcik7IH0KICAgICAKLSAgICB2b2lkIHJlc2l6ZU91dE9mTGluZShzaXplX3QgbnVtQml0cykK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChudW1CaXRzID4gbWF4SW5saW5lQml0cygpKTsKLSAgICAg
ICAgT3V0T2ZMaW5lQml0cyogbmV3T3V0T2ZMaW5lQml0cyA9IE91dE9mTGluZUJpdHM6OmNyZWF0
ZShudW1CaXRzKTsKLSAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgYml0
cygpLCBieXRlQ291bnQoc3RkOjptaW4oc2l6ZSgpLCBudW1CaXRzKSkpOwotICAgICAgICBpZiAo
IWlzSW5saW5lKCkpCi0gICAgICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGlu
ZUJpdHMoKSk7Ci0gICAgICAgIG1fYml0c09yUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKTsKLSAgICB9CisgICAgdm9pZCByZXNpemVPdXRPZkxp
bmUoc2l6ZV90IG51bUJpdHMpOwogICAgIAogICAgIHVpbnRwdHJfdCogYml0cygpCiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5
NTg5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTUsNiArNSw3IEBAIFNFVChXVEZfSEVBREVSUwogICAgIEFsd2F5c0lubGlu
ZS5oCiAgICAgQXNzZXJ0aW9ucy5oCiAgICAgQXRvbWljcy5oCisgICAgQml0VmVjdG9yLmgKICAg
ICBCaXRtYXAuaAogICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyLmgKICAgICBCdW1wUG9pbnRlckFs
bG9jYXRvci5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCShyZXZpc2lvbiA5NTg5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQkod29ya2luZyBjb3B5KQpA
QCAtMiw2ICsyLDcgQEAKIAogU09VUkNFUyArPSBcCiAgICAgd3RmL0Fzc2VydGlvbnMuY3BwIFwK
KyAgICB3dGYvQml0VmVjdG9yLmNwcCBcCiAgICAgd3RmL0J5dGVBcnJheS5jcHAgXAogICAgIHd0
Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAgXAogICAgIHd0Zi9DdXJyZW50VGlt
ZS5jcHAgXAo=
</data>
<flag name="review"
          id="105566"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108573</attachid>
            <date>2011-09-23 18:33:01 -0700</date>
            <delta_ts>2011-09-23 18:33:01 -0700</delta_ts>
            <desc>the patch - fix style, review</desc>
            <filename>betterbitvector_patch_3.diff</filename>
            <type>text/plain</type>
            <size>16843</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU4OTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAK
KzIwMTEtMDktMjMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICB3
dGYvQml0VmVjdG9yLmggaGFzIGEgdmFyaWV0eSBvZiBidWdzIHdoaWNoIG1hbmlmZXN0IHdoZW4g
dGhlCisgICAgICAgIHZlY3RvciBncm93cyBiZXlvbmQgNjMgYml0cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3NDYKKworICAgICAgICBSZXZpZXdl
ZCBieSBPbGl2ZXIgSHVudC4KKyAgICAgICAgCisgICAgICAgIE91dC1vZi1saW5lZCBzbG93IHBh
dGggY29kZSBpbiBCaXRWZWN0b3Igc28gdGhhdCBub3QgZXZlcnkgdXNlcgorICAgICAgICBvZiBD
b2RlQmxvY2sgZW5kcyB1cCBoYXZpbmcgdG8gY29tcGlsZSBpdC4gRml4ZWQgYSB2YXJpZXR5IG9m
CisgICAgICAgIGluZGV4IGNvbXB1dGF0aW9uIGFuZCBzaXplIGNvbXB1dGF0aW9uIGJ1Z3MuCisg
ICAgICAgIAorICAgICAgICBJIGhhdmUgbm90IHNlZW4gdGhlc2UgaXNzdWVzIG1hbmlmZXN0IHRo
ZW1zZWx2ZXMsIGJ1dCB0aGV5IGFyZQorICAgICAgICBibG9ja2luZyBhIHBhdGNoIHRoYXQgdXNl
cyBCaXRWZWN0b3IgbW9yZSBhZ2dyZXNzaXZlbHkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHd0Zi9CaXRWZWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEJpdFZlY3Rvcjo6Qml0
VmVjdG9yKToKKyAgICAgICAgKEJpdFZlY3Rvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKEJpdFZl
Y3Rvcjo6cmVzaXplKToKKyAgICAgICAgKEJpdFZlY3Rvcjo6Y2xlYXJBbGwpOgorICAgICAgICAo
Qml0VmVjdG9yOjpPdXRPZkxpbmVCaXRzOjpjcmVhdGUpOgorICAgICAgICAoQml0VmVjdG9yOjpP
dXRPZkxpbmVCaXRzOjpkZXN0cm95KToKKyAgICAgICAgKEJpdFZlY3Rvcjo6cmVzaXplT3V0T2ZM
aW5lKToKKyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6ZW5zdXJlU2l6ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Z2V0KToKKyAgICAgICAg
KFdURjo6Qml0VmVjdG9yOjpzZXQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OmNsZWFyKToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpieXRlQ291bnQpOgorICAgICAgICAoV1RGOjpCaXRW
ZWN0b3I6Ok91dE9mTGluZUJpdHM6Om51bVdvcmRzKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9y
OjpPdXRPZkxpbmVCaXRzOjpiaXRzKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpvdXRPZkxp
bmVCaXRzKToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL3d0
Zi5wcmk6CisKIDIwMTEtMDktMjMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXNvbHZlIG9wY29kZXMgc2hvdWxkIGhhdmUgdmFsdWUgcHJvZmlsaW5nLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDk1
ODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTQ2OCw2ICs0NjgsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Fzc2VydGlvbnMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9BdG9taWNzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQVZM
VHJlZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvQml0bWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQmxvY2tTdGFj
ay5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
V1RGL1dURi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkocmV2aXNpb24gOTU4OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC02MzcsNiArNjM3LDEwIEBACiAJCQk+CiAJCTwvRmlsZT4KIAkJPEZp
bGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEJpdFZlY3Rvci5jcHAiCisJCQk+CisJCTwv
RmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEJpdFZlY3Rvci5oIgog
CQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gOTU4OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogCQkw
QkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5
RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYy
OEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi87IH07CiAJCTBGMjQyREE3
MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURE
NEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjA0RThCMTQyRDY5NkQwMDlDRUI5MiAvKiBCaXRW
ZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MDRFOEExNDJENjk2OTAwOUNFQjkyIC8qIEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGNzcw
MDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5
IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CiAJCTBGOTYzQjI3MTNGNzUzQkIwMDAyRDlC
MiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IyQzEz
Rjg1M0VDMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQjEzRjg1M0M3MDAwMkQ5QjIgLyogTWV0
YUFsbG9jYXRvci5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3Ry
aWN0LWFsaWFzaW5nIjsgfTsgfTsKQEAgLTc5Myw2ICs3OTQsNyBAQAogCQkwQkRGRkFENDBGQzYx
NzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjYwNEU4QTE0MkQ2OTY5MDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1w
bGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Ft
cGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMjYx
M0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE4MTIsNiArMTgxNCw3IEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjA0RThBMTQy
RDY5NjkwMDlDRUI5MiAvKiBCaXRWZWN0b3IuY3BwICovLAogCQkJCTBGRDgyRjQ5MTQyODA2OTIw
MDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLywKIAkJCQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RDMEQg
LyogZHRvYSAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLApAQCAt
MzM0Niw2ICszMzQ5LDcgQEAKIAkJCQkxQTA4Mjc3OTE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5
U2VtYXBob3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDQ1NkIxMTQyN0ZCOTUwMDM3REE2
OCAvKiBBbGxvY2F0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZGQTlFOTExNDJC
QkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjYwNEU4QjE0MkQ2OTZEMDA5Q0VCOTIgLyogQml0VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpdFZlY3Rvci5oIgorCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisKK0JpdFZlY3Rvcjo6Qml0VmVjdG9yKGNvbnN0IEJpdFZlY3RvciYg
b3RoZXIpCisgICAgOiBtX2JpdHNPclBvaW50ZXIobWFrZUlubGluZUJpdHMoMCkpCit7CisgICAg
KCp0aGlzKSA9IG90aGVyOworfQorCitCaXRWZWN0b3ImIEJpdFZlY3Rvcjo6b3BlcmF0b3I9KGNv
bnN0IEJpdFZlY3RvciYgb3RoZXIpCit7CisgICAgdWludHB0cl90IG5ld0JpdHNPclBvaW50ZXI7
CisgICAgaWYgKG90aGVyLmlzSW5saW5lKCkpCisgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBv
dGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAgZWxzZSB7CisgICAgICAgIE91dE9mTGluZUJpdHMq
IG5ld091dE9mTGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUob3RoZXIuc2l6ZSgpKTsK
KyAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3RoZXIuYml0cygpLCBi
eXRlQ291bnQob3RoZXIuc2l6ZSgpKSk7CisgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKTsKKyAgICB9CisgICAgaWYgKCFp
c0lubGluZSgpKQorICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMo
KSk7CisgICAgbV9iaXRzT3JQb2ludGVyID0gbmV3Qml0c09yUG9pbnRlcjsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK3ZvaWQgQml0VmVjdG9yOjpyZXNpemUoc2l6ZV90IG51bUJpdHMpCit7Cisg
ICAgaWYgKG51bUJpdHMgPD0gbWF4SW5saW5lQml0cygpKSB7CisgICAgICAgIGlmIChpc0lubGlu
ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIAorICAgICAgICBPdXRPZkxpbmVCaXRzKiBt
eU91dE9mTGluZUJpdHMgPSBvdXRPZkxpbmVCaXRzKCk7CisgICAgICAgIG1fYml0c09yUG9pbnRl
ciA9IG1ha2VJbmxpbmVCaXRzKCpteU91dE9mTGluZUJpdHMtPmJpdHMoKSk7CisgICAgICAgIE91
dE9mTGluZUJpdHM6OmRlc3Ryb3kobXlPdXRPZkxpbmVCaXRzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICByZXNpemVPdXRPZkxpbmUobnVtQml0cyk7Cit9CisKK3ZvaWQgQml0
VmVjdG9yOjpjbGVhckFsbCgpCit7CisgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgIG1fYml0
c09yUG9pbnRlciA9IG1ha2VJbmxpbmVCaXRzKDApOworICAgIGVsc2UKKyAgICAgICAgbWVtc2V0
KG91dE9mTGluZUJpdHMoKS0+Yml0cygpLCAwLCBieXRlQ291bnQoc2l6ZSgpKSk7Cit9CisKK0Jp
dFZlY3Rvcjo6T3V0T2ZMaW5lQml0cyogQml0VmVjdG9yOjpPdXRPZkxpbmVCaXRzOjpjcmVhdGUo
c2l6ZV90IG51bUJpdHMpCit7CisgICAgbnVtQml0cyA9IChudW1CaXRzICsgYml0c0luUG9pbnRl
cigpIC0gMSkgJiB+KGJpdHNJblBvaW50ZXIoKSAtIDEpOworICAgIHNpemVfdCBzaXplID0gc2l6
ZW9mKE91dE9mTGluZUJpdHMpICsgc2l6ZW9mKHVpbnRwdHJfdCkgKiAobnVtQml0cyAvIGJpdHNJ
blBvaW50ZXIoKSk7CisgICAgT3V0T2ZMaW5lQml0cyogcmVzdWx0ID0gbmV3IChmYXN0TWFsbG9j
KHNpemUpKSBPdXRPZkxpbmVCaXRzKG51bUJpdHMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgQml0VmVjdG9yOjpPdXRPZkxpbmVCaXRzOjpkZXN0cm95KE91dE9mTGluZUJpdHMqIG91
dE9mTGluZUJpdHMpCit7CisgICAgZmFzdEZyZWUob3V0T2ZMaW5lQml0cyk7Cit9CisKK3ZvaWQg
Qml0VmVjdG9yOjpyZXNpemVPdXRPZkxpbmUoc2l6ZV90IG51bUJpdHMpCit7CisgICAgQVNTRVJU
KG51bUJpdHMgPiBtYXhJbmxpbmVCaXRzKCkpOworICAgIE91dE9mTGluZUJpdHMqIG5ld091dE9m
TGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUobnVtQml0cyk7CisgICAgbWVtY3B5KG5l
d091dE9mTGluZUJpdHMtPmJpdHMoKSwgYml0cygpLCBieXRlQ291bnQoc3RkOjptaW4oc2l6ZSgp
LCBudW1CaXRzKSkpOworICAgIGlmICghaXNJbmxpbmUoKSkKKyAgICAgICAgT3V0T2ZMaW5lQml0
czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOworICAgIG1fYml0c09yUG9pbnRlciA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KG5ld091dE9mTGluZUJpdHMpOworfQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDk1ODkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2
LDcgQEAKICNpZm5kZWYgQml0VmVjdG9yX2gKICNkZWZpbmUgQml0VmVjdG9yX2gKIAotI2luY2x1
ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTYxLDExICs1OCw3IEBAIHB1YmxpYzog
CiAgICAgewogICAgIH0KICAgICAKLSAgICBCaXRWZWN0b3IoY29uc3QgQml0VmVjdG9yJiBvdGhl
cikKLSAgICAgICAgOiBtX2JpdHNPclBvaW50ZXIobWFrZUlubGluZUJpdHMoMCkpCi0gICAgewot
ICAgICAgICAoKnRoaXMpID0gb3RoZXI7Ci0gICAgfQorICAgIEJpdFZlY3Rvcihjb25zdCBCaXRW
ZWN0b3ImIG90aGVyKTsKICAgICAKICAgICB+Qml0VmVjdG9yKCkKICAgICB7CkBAIC03NCwyMSAr
NjcsNyBAQCBwdWJsaWM6IAogICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGlu
ZUJpdHMoKSk7CiAgICAgfQogICAgIAotICAgIEJpdFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IEJp
dFZlY3RvciYgb3RoZXIpCi0gICAgewotICAgICAgICB1aW50cHRyX3QgbmV3Qml0c09yUG9pbnRl
cjsKLSAgICAgICAgaWYgKG90aGVyLmlzSW5saW5lKCkpCi0gICAgICAgICAgICBuZXdCaXRzT3JQ
b2ludGVyID0gb3RoZXIubV9iaXRzT3JQb2ludGVyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIE91dE9mTGluZUJpdHMqIG5ld091dE9mTGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVh
dGUob3RoZXIuc2l6ZSgpKTsKLSAgICAgICAgICAgIG1lbWNweShuZXdPdXRPZkxpbmVCaXRzLT5i
aXRzKCksIG90aGVyLmJpdHMoKSwgYnl0ZUNvdW50KG90aGVyLnNpemUoKSkpOwotICAgICAgICAg
ICAgbmV3Qml0c09yUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihuZXdPdXRP
ZkxpbmVCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWlzSW5saW5lKCkpCi0gICAgICAg
ICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMoKSk7Ci0gICAgICAgIG1f
Yml0c09yUG9pbnRlciA9IG5ld0JpdHNPclBvaW50ZXI7Ci0gICAgICAgIHJldHVybiAqdGhpczsK
LSAgICB9CisgICAgQml0VmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgQml0VmVjdG9yJiBvdGhlcik7
CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgewpAQCAtMTA1LDQ1ICs4NCwyNiBAQCBw
dWJsaWM6IAogICAgIH0KICAgICAKICAgICAvLyBMaWtlIGVuc3VyZVNpemUoKSwgYnV0IHN1cHBv
cnRzIHJlZHVjaW5nIHRoZSBzaXplIG9mIHRoZSBiaXR2ZWN0b3IuCi0gICAgdm9pZCByZXNpemUo
c2l6ZV90IG51bUJpdHMpCi0gICAgewotICAgICAgICBpZiAoaXNJbmxpbmUoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmIChudW1CaXRzIDw9IG1heElubGluZUJp
dHMoKSkgewotICAgICAgICAgICAgT3V0T2ZMaW5lQml0cyogbXlPdXRPZkxpbmVCaXRzID0gb3V0
T2ZMaW5lQml0cygpOwotICAgICAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gbWFrZUlubGluZUJp
dHMoKm15T3V0T2ZMaW5lQml0cy0+Yml0cygpKTsKLSAgICAgICAgICAgIE91dE9mTGluZUJpdHM6
OmRlc3Ryb3kobXlPdXRPZkxpbmVCaXRzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgcmVzaXplT3V0T2ZMaW5lKG51bUJpdHMpOwotICAgIH0KKyAg
ICB2b2lkIHJlc2l6ZShzaXplX3QgbnVtQml0cyk7CiAgICAgCi0gICAgdm9pZCBjbGVhckFsbCgp
Ci0gICAgewotICAgICAgICBpZiAoaXNJbmxpbmUoKSkKLSAgICAgICAgICAgIG1fYml0c09yUG9p
bnRlciA9IG1ha2VJbmxpbmVCaXRzKDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZW1z
ZXQob3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIDAsIGJ5dGVDb3VudChzaXplKCkpKTsKLSAgICB9
CisgICAgdm9pZCBjbGVhckFsbCgpOwogCiAgICAgYm9vbCBnZXQoc2l6ZV90IGJpdCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChiaXQgPCBzaXplKCkpOwotICAgICAgICByZXR1cm4gISEo
Yml0cygpW2JpdCA+PiBiaXRzSW5Qb2ludGVyKCldICYgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpKTsKKyAgICAgICAgcmV0dXJuICEh
KGJpdHMoKVtiaXQgLyBiaXRzSW5Qb2ludGVyKCldICYgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBzZXQoc2l6ZV90IGJpdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChiaXQgPCBzaXplKCkp
OwotICAgICAgICBiaXRzKClbYml0ID4+IGJpdHNJblBvaW50ZXIoKV0gfD0gKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpOworICAgICAg
ICBiaXRzKClbYml0IC8gYml0c0luUG9pbnRlcigpXSB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90
PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgY2xlYXIoc2l6ZV90IGJpdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChiaXQgPCBzaXpl
KCkpOwotICAgICAgICBiaXRzKClbYml0ID4+IGJpdHNJblBvaW50ZXIoKV0gJj0gfihzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKTsKKyAg
ICAgICAgYml0cygpW2JpdCAvIGJpdHNJblBvaW50ZXIoKV0gJj0gfihzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBzZXQoc2l6ZV90IGJpdCwgYm9vbCB2YWx1ZSkKQEAgLTE2NSwxMSArMTI1LDkg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGJpdHNJblBvaW50ZXIoKSAtIDE7CiAgICAgfQog
ICAgIAotICAgIC8vIFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIGJpdENvdW50IGJlaW5nIGEgbXVs
dGlwbGUgb2YgYml0c0luUG9pbnRlcigpCiAgICAgc3RhdGljIHNpemVfdCBieXRlQ291bnQoc2l6
ZV90IGJpdENvdW50KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEoYml0Q291bnQgJiAoYml0c0lu
UG9pbnRlcigpIC0gMSkpKTsKLSAgICAgICAgcmV0dXJuIGJpdENvdW50ID4+IDM7CisgICAgICAg
IHJldHVybiAoYml0Q291bnQgKyA3KSA+PiAzOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgdWlu
dHB0cl90IG1ha2VJbmxpbmVCaXRzKHVpbnRwdHJfdCBiaXRzKQpAQCAtMTgxLDIwICsxMzksMTMg
QEAgcHJpdmF0ZToKICAgICBjbGFzcyBPdXRPZkxpbmVCaXRzIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaXRzOyB9Ci0gICAgICAg
IHNpemVfdCBudW1Xb3JkcygpIGNvbnN0IHsgcmV0dXJuIChtX251bUJpdHMgKyBiaXRzSW5Qb2lu
dGVyKCkgLSAxKSA+PiBiaXRzSW5Qb2ludGVyKCk7IH0KLSAgICAgICAgdWludHB0cl90KiBiaXRz
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPih0aGlzICsgMSk7IH0KLSAg
ICAgICAgY29uc3QgdWludHB0cl90KiBiaXRzKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50cHRyX3QqPih0aGlzICsgMSk7IH0KKyAgICAgICAgc2l6ZV90IG51bVdv
cmRzKCkgY29uc3QgeyByZXR1cm4gKG1fbnVtQml0cyArIGJpdHNJblBvaW50ZXIoKSAtIDEpIC8g
Yml0c0luUG9pbnRlcigpOyB9CisgICAgICAgIHVpbnRwdHJfdCogYml0cygpIHsgcmV0dXJuIGJp
dHdpc2VfY2FzdDx1aW50cHRyX3QqPih0aGlzICsgMSk7IH0KKyAgICAgICAgY29uc3QgdWludHB0
cl90KiBiaXRzKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PGNvbnN0IHVpbnRwdHJfdCo+
KHRoaXMgKyAxKTsgfQogICAgICAgICAKLSAgICAgICAgc3RhdGljIE91dE9mTGluZUJpdHMqIGNy
ZWF0ZShzaXplX3QgbnVtQml0cykKLSAgICAgICAgewotICAgICAgICAgICAgbnVtQml0cyA9IChu
dW1CaXRzICsgYml0c0luUG9pbnRlcigpIC0gMSkgJiB+Yml0c0luUG9pbnRlcigpOwotICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoZmFzdE1hbGxvYyhzaXplb2YoT3V0T2ZMaW5lQml0cykgKyAobnVt
Qml0cyA+PiBiaXRzSW5Qb2ludGVyKCkpKSkgT3V0T2ZMaW5lQml0cyhudW1CaXRzKTsKLSAgICAg
ICAgfQorICAgICAgICBzdGF0aWMgT3V0T2ZMaW5lQml0cyogY3JlYXRlKHNpemVfdCBudW1CaXRz
KTsKICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koT3V0T2ZMaW5lQml0cyog
b3V0T2ZMaW5lQml0cykKLSAgICAgICAgewotICAgICAgICAgICAgZmFzdEZyZWUob3V0T2ZMaW5l
Qml0cyk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShPdXRPZkxpbmVC
aXRzKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBPdXRPZkxpbmVCaXRzKHNpemVfdCBudW1C
aXRzKQpAQCAtMjA3LDE4ICsxNTgsMTAgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIGlzSW5s
aW5lKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzT3JQb2ludGVyID4+IG1heElubGluZUJpdHMoKTsg
fQogICAgIAotICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIG91dE9mTGluZUJpdHMoKSBjb25zdCB7
IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IE91dE9mTGluZUJpdHMqPihtX2JpdHNPclBv
aW50ZXIpOyB9Ci0gICAgT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0cygpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8T3V0T2ZMaW5lQml0cyo+KG1fYml0c09yUG9pbnRlcik7IH0KKyAgICBj
b25zdCBPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRzKCkgY29uc3QgeyByZXR1cm4gYml0d2lz
ZV9jYXN0PGNvbnN0IE91dE9mTGluZUJpdHMqPihtX2JpdHNPclBvaW50ZXIpOyB9CisgICAgT3V0
T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0cygpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxPdXRPZkxp
bmVCaXRzKj4obV9iaXRzT3JQb2ludGVyKTsgfQogICAgIAotICAgIHZvaWQgcmVzaXplT3V0T2ZM
aW5lKHNpemVfdCBudW1CaXRzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG51bUJpdHMgPiBtYXhJ
bmxpbmVCaXRzKCkpOwotICAgICAgICBPdXRPZkxpbmVCaXRzKiBuZXdPdXRPZkxpbmVCaXRzID0g
T3V0T2ZMaW5lQml0czo6Y3JlYXRlKG51bUJpdHMpOwotICAgICAgICBtZW1jcHkobmV3T3V0T2ZM
aW5lQml0cy0+Yml0cygpLCBiaXRzKCksIGJ5dGVDb3VudChzdGQ6Om1pbihzaXplKCksIG51bUJp
dHMpKSk7Ci0gICAgICAgIGlmICghaXNJbmxpbmUoKSkKLSAgICAgICAgICAgIE91dE9mTGluZUJp
dHM6OmRlc3Ryb3kob3V0T2ZMaW5lQml0cygpKTsKLSAgICAgICAgbV9iaXRzT3JQb2ludGVyID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5ld091dE9mTGluZUJpdHMpOwotICAgIH0KKyAg
ICB2b2lkIHJlc2l6ZU91dE9mTGluZShzaXplX3QgbnVtQml0cyk7CiAgICAgCiAgICAgdWludHB0
cl90KiBiaXRzKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDk1ODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDcgQEAgU0VUKFdURl9IRUFE
RVJTCiAgICAgQWx3YXlzSW5saW5lLmgKICAgICBBc3NlcnRpb25zLmgKICAgICBBdG9taWNzLmgK
KyAgICBCaXRWZWN0b3IuaAogICAgIEJpdG1hcC5oCiAgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXIu
aAogICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvd3RmLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0
Zi5wcmkJKHJldmlzaW9uIDk1ODkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYu
cHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogCiBTT1VSQ0VTICs9IFwKICAgICB3
dGYvQXNzZXJ0aW9ucy5jcHAgXAorICAgIHd0Zi9CaXRWZWN0b3IuY3BwIFwKICAgICB3dGYvQnl0
ZUFycmF5LmNwcCBcCiAgICAgd3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcCBc
CiAgICAgd3RmL0N1cnJlbnRUaW1lLmNwcCBcCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>