<?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>25126</bug_id>
          
          <creation_ts>2009-04-09 16:36:34 -0700</creation_ts>
          <short_desc>UString should allow its buffer to be shared.</short_desc>
          <delta_ts>2009-05-25 21:21:58 -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>
          
          <blocked>23175</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>117104</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-04-09 16:36:34 -0700</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117110</commentid>
    <comment_count>1</comment_count>
      <attachid>29381</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-04-09 17:19:26 -0700</bug_when>
    <thetext>Created attachment 29381
Proposed fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118561</commentid>
    <comment_count>2</comment_count>
      <attachid>29381</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-04-23 16:55:50 -0700</bug_when>
    <thetext>Comment on attachment 29381
Proposed fix.

 335         PassRefPtr&lt;SharedUChar&gt; sharedBuffer() { return m_rep-&gt;baseString()-&gt;sharedBuffer(); }

Should just return a raw pointer, right?  I don&apos;t see why it would need to return a PassRefPtr here.  I guess the idea is that since the UString doesn&apos;t hold it in a RefPtr, we should force the caller to?

I think new code should use clearer variable names:
 235 PassRefPtr&lt;UString::Rep&gt; UString::Rep::share(UChar* d, int l, PassRefPtr&lt;UString::SharedUChar&gt; sharedBuffer)
to match our modern style guidelines (which this class predates by forever :)

     // It make doesn&apos;t sense to share &lt; 6 bytes of data.
 386     ASSERT(len &gt; 2);
Agreed.  But how do we come up with this heuristic?

releaseRef is not needed here:
 396     m_sharedBuffer = sharedBuffer.releaseRef();

At least if m_sharedBuffer is a RefPtr.  I&apos;m confused as to why it wouldn&apos;t be.  If it shouldn&apos;t be that at least deserves a changelog comment. :)

I guess you named OwnMallocPtr with Malloc to differentiate it from OwnPtr which calls delete.  However, it seems odd that OwnMallocPtr actually calls fastFree instead of free.  Seems it should be OwnFastMallocPtr in that case.

Otherwise I think the general idea is fine.  I expect that Darin Adler will want to weigh in here eventually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122624</commentid>
    <comment_count>3</comment_count>
      <attachid>29381</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-05-22 02:44:27 -0700</bug_when>
    <thetext>Comment on attachment 29381
Proposed fix.

In the absence of any other reviewers i&apos;ve gone through this and think it looks good.  Alas the delay in reviewing means we should retest performance before landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122696</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-22 11:04:23 -0700</bug_when>
    <thetext>Thanks Oliver.

Ok, I&apos;ll re-perf test it before landing.  Also, I&apos;ll address Eric&apos;s comments.  (Lastly, it doesn&apos;t apply cleanly right now due to changes in the code, so I&apos;ll fix that as well of course.)
 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122740</commentid>
    <comment_count>5</comment_count>
      <attachid>29381</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-22 15:09:58 -0700</bug_when>
    <thetext>Comment on attachment 29381
Proposed fix.

I&apos;m removing the r+ for now, so this doesn&apos;t get landed.  I&apos;ve done some perf test and I see a regression that I need to investigate.

I&apos;ll resubmit once I can figure that out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123091</commentid>
    <comment_count>6</comment_count>
      <attachid>30661</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-25 19:25:45 -0700</bug_when>
    <thetext>Created attachment 30661
Proposed fix.

The only changes from the last patch were:
1. Addressing previous given feedback and catching up with recent changes to UString.*
2. I switch the conditional around in Rep::baseString which (helped branch prediction enough to) made the performance equivalent to what it was before on Sunspider.  So there is no change in Sunspider results (as noted by running it 1000 times with and without the change).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123098</commentid>
    <comment_count>7</comment_count>
      <attachid>30661</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-05-25 20:06:49 -0700</bug_when>
    <thetext>Comment on attachment 30661
Proposed fix.

r=me

Thanks for checking performance!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123103</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-25 21:21:58 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/44145</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29381</attachid>
            <date>2009-04-09 17:19:26 -0700</date>
            <delta_ts>2009-05-22 15:09:58 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug25126.txt</filename>
            <type>text/plain</type>
            <size>22543</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBlNzYyY2M4Li41OTJkODY3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQg
QEAKKzIwMDktMDQtMDkgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTEyNgorICAgICAgICBBbGxvdyB0aGUgYnVmZmVy
IHVuZGVybHlpbmcgVVN0cmluZyB0byBiZSBzaGFyZWQuCisKKyAgICAgICAgTm8gY2hhbmdlIGlu
IHN1bnNwaWRlciBwZXJmLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9X
VEYudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6VVN0
cmluZzo6UmVwOjpzaGFyZSk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6ZGVzdHJveSk6
CisgICAgICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OnNoYXJlZEJ1ZmZlcik6CisgICAg
ICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OnNldFNoYXJlZEJ1ZmZlcik6CisgICAgICAg
IChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OnNsb3dJc0J1ZmZlclJlYWRPbmx5KToKKyAgICAg
ICAgKEpTQzo6ZXhwYW5kQ2FwYWNpdHkpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpleHBhbmRQ
cmVDYXBhY2l0eSk6CisgICAgICAgIChKU0M6OmNvbmNhdGVuYXRlKToKKyAgICAgICAgKEpTQzo6
VVN0cmluZzo6YXBwZW5kKToKKyAgICAgICAgKiBydW50aW1lL1VTdHJpbmcuaDoKKyAgICAgICAg
KEpTQzo6VVN0cmluZzo6UmVwOjpSZXApOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6Oik6
CisgICAgICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6OmlzU2hhcmVkKToKKyAgICAgICAg
KEpTQzo6VVN0cmluZzo6QmFzZVN0cmluZzo6aXNCdWZmZXJSZWFkT25seSk6CisgICAgICAgIChK
U0M6OlVTdHJpbmc6OnNoYXJlZEJ1ZmZlcik6CisgICAgICAgICogd3RmL0Nyb3NzVGhyZWFkUmVm
Q291bnRlZC5oOgorICAgICAgICAoV1RGOjpDcm9zc1RocmVhZFJlZkNvdW50ZWQ6OmlzU2hhcmVk
KToKKyAgICAgICAgKiB3dGYvT3duTWFsbG9jUHRyLmg6IEFkZGVkLgorCiAyMDA5LTA0LTA5ICBC
ZW4gTXVyZG9jaCAgPGJlbm1AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4
ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL1dURi9XVEYudmNwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL1dURi9XVEYudmNwcm9qCmluZGV4IDJkOGU2ZjguLmU4NDkwZmYgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagorKysg
Yi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKQEAg
LTM2Myw2ICszNjMsMTAgQEAKIAkJCT4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQorCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlx3dGZcT3duTWFsbG9jUHRyLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZp
bGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXE93blB0ci5oIg0KIAkJCT4NCiAJCTwvRmls
ZT4NCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBjMWY5MzhhLi41ZmVlMjM0IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTQwLDYgKzQwLDggQEAKIAkJMDg4RkE1QkMwRUY3NkQ0MzAwNTc4RTZGIC8qIFJhbmRvbU51
bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg4
RkE1QkEwRUY3NkQ0MzAwNTc4RTZGIC8qIFJhbmRvbU51bWJlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4RTI3OUU5MEVGODNCMTAwMDdEQjUy
MyAvKiBSYW5kb21OdW1iZXJTZWVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwOEUyNzlFODBFRjgzQjEwMDA3REI1MjMgLyogUmFuZG9tTnVtYmVyU2Vl
ZC5oICovOyB9OwogCQkwQjFGOTIxRDBGMTc1MzUwMDAzNjQ2OEUgLyogUHRyQW5kRmxhZ3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCMUY5MjFCMEYx
NzUwMkQwMDM2NDY4RSAvKiBQdHJBbmRGbGFncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBCMzE2RUYwMEY4RUI0RTAwMDdDNTRGQSAvKiBPd25N
YWxsb2NQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBCMzE2RUU0MEY4RUFGQzQwMDdDNTRGQSAvKiBPd25NYWxsb2NQdHIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwQjMzMEJGNzBGMzdCQjE0MDA2
OTJERTMgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjMzMEJEODBGMzc5MkMxMDA2OTJERTMgLyogQ3Jvc3NU
aHJlYWRSZWZDb3VudGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEIzMzBDMjcwRjM4QzYyMzAwNjkyREUzIC8qIFR5cGVUcmFpdHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEIzMzBDMjYwRjM4
QzYyMzAwNjkyREUzIC8qIFR5cGVUcmFpdHMuY3BwICovOyB9OwogCQkwQjREN0U2MzBGMzE5QUM4
MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEI0RDdFNjIwRjMxOUFDODAwQUQ3RTU4IC8qIFR5cGVUcmFpdHMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDBCN0Qx
RDBEQzY5QUY3MDA5QzQyQjggLyogSlNBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0REE4MThGMEQ5OUZEMjAwMEIwQTRGQiAvKiBK
U0FjdGl2YXRpb24uY3BwICovOyB9OwpAQCAtNDM3LDYgKzQzOSw4IEBACiAJCTA4OEZBNUJBMEVG
NzZENDMwMDU3OEU2RiAvKiBSYW5kb21OdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmFuZG9tTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4
RTI3OUU4MEVGODNCMTAwMDdEQjUyMyAvKiBSYW5kb21OdW1iZXJTZWVkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmRvbU51bWJlclNlZWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEIxRjkyMUIwRjE3NTAyRDAwMzY0NjhFIC8qIFB0ckFuZEZsYWdzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB0ckFuZEZsYWdzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBCMzE2RUU0MEY4RUFGQzQwMDdDNTRGQSAvKiBPd25NYWxs
b2NQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3duTWFsbG9jUHRyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBCMzMwQkQ4MEYzNzkyQzEwMDY5MkRFMyAv
KiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBCMzMwQzI2MEYzOEM2MjMwMDY5MkRFMyAvKiBUeXBlVHJhaXRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVUcmFpdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwQjREN0U2MjBGMzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlVHJhaXRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMDksNiArMTExMyw4IEBACiAJCTY1MTYy
RUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTBCMzE2RUU0MEY4RUFGQzQwMDdDNTRGQSAvKiBPd25NYWxsb2NQ
dHIuaCAqLywKKwkJCQkwQjMzMEJEODBGMzc5MkMxMDA2OTJERTMgLyogQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmggKi8sCiAJCQkJMEIzMzBDMjYwRjM4QzYyMzAwNjkyREUzIC8qIFR5cGVUcmFpdHMu
Y3BwICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8sCiAJCQkJRTE5
NTY3OEQwOUU3Q0YxMjAwQjg5RDEzIC8qIHVuaWNvZGUgKi8sCkBAIC0xNzQ1LDYgKzE3NTEsNyBA
QAogCQkJCUJDMThDNDcyMEUxNkY1Q0QwMEIzNDQ2MCAvKiB1Y3BpbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdBMUY3QUQwRjI1MkIzQzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMzMTM1NjQwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEIzMzBCRjcwRjM3QkIxNDAwNjkyREUzIC8qIENy
b3NzVGhyZWFkUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTMwRjNBODND
MTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2MDE2MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2
XzY0LmggaW4gSGVhZGVycyAqLywKQEAgLTE3NTIsNiArMTc1OSw3IEBACiAJCQkJODZDQ0VGREUw
RjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QTQyRTQw
MEY0RjYwRUUwMDU5OTA5OSAvKiBUaW1lb3V0Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTQ4RTBGMkQwRjgyMTUxNzAwQThDQTM3IC8qIEZhc3RBbGxvY0Jhc2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBCMzE2RUYwMEY4RUI0RTAwMDdDNTRGQSAvKiBPd25NYWxsb2NQdHIuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcCBi
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKaW5kZXggYjNhYWIzZS4uNDA3NmNl
OCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCkBAIC0yMzIsNiArMjMyLDE0IEBAIFBh
c3NSZWZQdHI8VVN0cmluZzo6UmVwPiBVU3RyaW5nOjpSZXA6OmNyZWF0ZUZyb21VVEY4KGNvbnN0
IGNoYXIqIHN0cmluZykKICAgICByZXR1cm4gVVN0cmluZzo6UmVwOjpjcmVhdGVDb3B5aW5nKGJ1
ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0YSgpKTsKIH0KIAorUGFzc1JlZlB0cjxVU3RyaW5n
OjpSZXA+IFVTdHJpbmc6OlJlcDo6c2hhcmUoVUNoYXIqIGQsIGludCBsLCBQYXNzUmVmUHRyPFVT
dHJpbmc6OlNoYXJlZFVDaGFyPiBzaGFyZWRCdWZmZXIpCit7CisgICAgUGFzc1JlZlB0cjxVU3Ry
aW5nOjpSZXA+IHIgPSBjcmVhdGUoZCwgbCk7CisgICAgci0+YmFzZVN0cmluZygpLT5zZXRTaGFy
ZWRCdWZmZXIoc2hhcmVkQnVmZmVyKTsKKyAgICByLT5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
cmV0dXJuIHI7Cit9CisKIHZvaWQgVVN0cmluZzo6UmVwOjpkZXN0cm95KCkKIHsKICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CkBAIC0yNDEsMTAgKzI0OSwxNCBAQCB2b2lkIFVTdHJpbmc6OlJlcDo6
ZGVzdHJveSgpCiAgICAgaWYgKCFpc1N0YXRpYygpKSB7CiAgICAgICAgIGlmIChpZGVudGlmaWVy
VGFibGUoKSkKICAgICAgICAgICAgIElkZW50aWZpZXI6OnJlbW92ZSh0aGlzKTsKKwogICAgICAg
ICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gYmFzZVN0cmluZygpOwotICAgICAgICBpZiAo
YmFzZSA9PSB0aGlzKQotICAgICAgICAgICAgZmFzdEZyZWUoYmFzZS0+YnVmKTsKLSAgICAgICAg
ZWxzZQorICAgICAgICBpZiAoYmFzZSA9PSB0aGlzKSB7CisgICAgICAgICAgICBpZiAobV9zaGFy
ZWRCdWZmZXIpCisgICAgICAgICAgICAgICAgbV9zaGFyZWRCdWZmZXItPmRlcmVmKCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZmFzdEZyZWUoYmFzZS0+YnVmKTsKKyAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBiYXNlLT5kZXJlZigpOwogCiAgICAgICAgIGRlbGV0ZSB0
aGlzOwpAQCAtMzY4LDYgKzM4MCwzOCBAQCB2b2lkIFVTdHJpbmc6OlJlcDo6Y2hlY2tDb25zaXN0
ZW5jeSgpIGNvbnN0CiB9CiAjZW5kaWYKIAorUGFzc1JlZlB0cjxVU3RyaW5nOjpTaGFyZWRVQ2hh
cj4gVVN0cmluZzo6QmFzZVN0cmluZzo6c2hhcmVkQnVmZmVyKCkKK3sKKyAgICAvLyBJdCBtYWtl
IGRvZXNuJ3Qgc2Vuc2UgdG8gc2hhcmUgPCA2IGJ5dGVzIG9mIGRhdGEuCisgICAgQVNTRVJUKGxl
biA+IDIpOworICAgIGlmICghbV9zaGFyZWRCdWZmZXIpCisgICAgICAgIHNldFNoYXJlZEJ1ZmZl
cihTaGFyZWRVQ2hhcjo6Y3JlYXRlKG5ldyBPd25NYWxsb2NQdHI8VUNoYXI+KGJ1ZikpKTsKKyAg
ICByZXR1cm4gbV9zaGFyZWRCdWZmZXI7Cit9CisKK3ZvaWQgVVN0cmluZzo6QmFzZVN0cmluZzo6
c2V0U2hhcmVkQnVmZmVyKFBhc3NSZWZQdHI8VVN0cmluZzo6U2hhcmVkVUNoYXI+IHNoYXJlZEJ1
ZmZlcikKK3sKKyAgICBpZiAobV9zaGFyZWRCdWZmZXIpCisgICAgICAgIG1fc2hhcmVkQnVmZmVy
LT5kZXJlZigpOworICAgIG1fc2hhcmVkQnVmZmVyID0gc2hhcmVkQnVmZmVyLnJlbGVhc2VSZWYo
KTsKK30KKworYm9vbCBVU3RyaW5nOjpCYXNlU3RyaW5nOjpzbG93SXNCdWZmZXJSZWFkT25seSgp
Cit7CisgICAgLy8gVGhlIGJ1ZmZlciBtYXkgbm90IGJlIG1vZGlmaWVkIGFzIHNvb24gYXMgdGhl
IHVuZGVybHlpbmcgZGF0YSBoYXMgYmVlbiBzaGFyZWQgd2l0aCBhbm90aGVyIGNsYXNzLgorICAg
IGlmIChtX3NoYXJlZEJ1ZmZlci0+aXNTaGFyZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBrbm93IGl0IHRoYXQgdGhlIHVuZGVybHlpbmcgYnVm
ZmVyIGlzbid0IHNoYXJlZCBvdXRzaWRlIG9mIHRoaXMgYmFzZSBjbGFzcywKKyAgICAvLyBzbyBn
ZXQgcmlkIG9mIG1fc2hhcmVkQnVmZmVyLgorICAgIE93blB0cjxPd25NYWxsb2NQdHI8VUNoYXI+
ID4gbWFsbG9jUHRyKG1fc2hhcmVkQnVmZmVyLT5yZWxlYXNlKCkpOworICAgIFVDaGFyKiB1bnNo
YXJlZEJ1ZiA9IGNvbnN0X2Nhc3Q8VUNoYXIqPihtYWxsb2NQdHItPnJlbGVhc2UoKSk7CisgICAg
c2V0U2hhcmVkQnVmZmVyKDApOworICAgIHByZUNhcGFjaXR5ICs9IChidWYgLSB1bnNoYXJlZEJ1
Zik7CisgICAgYnVmID0gdW5zaGFyZWRCdWY7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBw
dXQgdGhlc2UgZWFybHkgc28gdGhleSBjYW4gYmUgaW5saW5lZAogc3RhdGljIGlubGluZSBzaXpl
X3QgZXhwYW5kZWRTaXplKHNpemVfdCBzaXplLCBzaXplX3Qgb3RoZXJTaXplKQogewpAQCAtMzg3
LDYgKzQzMSw3IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGV4cGFuZGVkU2l6ZShzaXplX3Qgc2l6
ZSwgc2l6ZV90IG90aGVyU2l6ZSkKIHN0YXRpYyBpbmxpbmUgYm9vbCBleHBhbmRDYXBhY2l0eShV
U3RyaW5nOjpSZXAqIHJlcCwgaW50IHJlcXVpcmVkTGVuZ3RoKQogewogICAgIHJlcC0+Y2hlY2tD
b25zaXN0ZW5jeSgpOworICAgIEFTU0VSVCghcmVwLT5iYXNlU3RyaW5nKCktPmlzQnVmZmVyUmVh
ZE9ubHkoKSk7CiAKICAgICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gcmVwLT5iYXNlU3Ry
aW5nKCk7CiAKQEAgLTQxNiw2ICs0NjEsNyBAQCB2b2lkIFVTdHJpbmc6OmV4cGFuZENhcGFjaXR5
KGludCByZXF1aXJlZExlbmd0aCkKIHZvaWQgVVN0cmluZzo6ZXhwYW5kUHJlQ2FwYWNpdHkoaW50
IHJlcXVpcmVkUHJlQ2FwKQogewogICAgIG1fcmVwLT5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
QVNTRVJUKCFtX3JlcC0+YmFzZVN0cmluZygpLT5pc0J1ZmZlclJlYWRPbmx5KCkpOwogCiAgICAg
QmFzZVN0cmluZyogYmFzZSA9IG1fcmVwLT5iYXNlU3RyaW5nKCk7CiAKQEAgLTUxNyw3ICs1NjMs
NyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0
ZW5hdGUoUGFzc1JlZlB0cjxVU3RyaW5nOjpSZQogICAgICAgICAgICAgcmVwLT5sZW4gPSBsZW5n
dGg7CiAgICAgICAgICAgICByZXAtPl9oYXNoID0gMDsKICAgICAgICAgfQotICAgIH0gZWxzZSBp
ZiAodGhpc09mZnNldCArIHRoaXNTaXplID09IGJhc2UtPnVzZWRDYXBhY2l0eSAmJiB0aGlzU2l6
ZSA+PSBtaW5TaGFyZVNpemUpIHsKKyAgICB9IGVsc2UgaWYgKHRoaXNPZmZzZXQgKyB0aGlzU2l6
ZSA9PSBiYXNlLT51c2VkQ2FwYWNpdHkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVTaXplICYmICFi
YXNlLT5pc0J1ZmZlclJlYWRPbmx5KCkpIHsKICAgICAgICAgLy8gdGhpcyByZWFjaGVzIHRoZSBl
bmQgb2YgdGhlIGJ1ZmZlciAtIGV4dGVuZCBpdCBpZiBpdCdzIGxvbmcgZW5vdWdoIHRvIGFwcGVu
ZCB0bwogICAgICAgICBpZiAoIWV4cGFuZENhcGFjaXR5KHJlcC5nZXQoKSwgdGhpc09mZnNldCAr
IGxlbmd0aCkpCiAgICAgICAgICAgICByZXAgPSAmVVN0cmluZzo6UmVwOjpudWxsKCk7CkBAIC01
MjYsNyArNTcyLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpS
ZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICAgICAgICAgIHJlcCA9
IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKHJlcCwgMCwgbGVuZ3RoKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIHRoaXMgaXMgc2hhcmVkIHdpdGggc29tZW9uZSB1c2luZyBtb3Jl
IGNhcGFjaXR5LCBnb3R0YSBtYWtlIGEgd2hvbGUgbmV3IHN0cmluZworICAgICAgICAvLyBUaGlz
IGlzIHNoYXJlZCBpbiBzb21lIHdheSB0aGF0IHByZXZlbnRzIHVzIGZyb20gbW9kaWZ5aW5nIGJh
c2UsIHNvIHdlIG11c3QgbWFrZSBhIHdob2xlIG5ldyBzdHJpbmcuCiAgICAgICAgIHNpemVfdCBu
ZXdDYXBhY2l0eSA9IGV4cGFuZGVkU2l6ZShsZW5ndGgsIDApOwogICAgICAgICBVQ2hhciogZCA9
IGFsbG9jQ2hhcnMobmV3Q2FwYWNpdHkpOwogICAgICAgICBpZiAoIWQpCkBAIC01NzIsNyArNjE4
LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNh
dGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICAgICAgICAgIHJlcC0+bGVuID0gbGVu
Z3RoOwogICAgICAgICAgICAgcmVwLT5faGFzaCA9IDA7CiAgICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKHRoaXNPZmZzZXQgKyB0aGlzU2l6ZSA9PSBiYXNlLT51c2VkQ2FwYWNpdHkgJiYgdGhpc1Np
emUgPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1Np
emUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49IG1pblNoYXJlU2l6ZSAmJiAh
YmFzZS0+aXNCdWZmZXJSZWFkT25seSgpKSB7CiAgICAgICAgIC8vIHRoaXMgc3RyaW5nIHJlYWNo
ZXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIC0gZXh0ZW5kIGl0CiAgICAgICAgIGV4cGFuZENhcGFj
aXR5KHJlcC5nZXQoKSwgdGhpc09mZnNldCArIGxlbmd0aCk7CiAgICAgICAgIFVDaGFyKiBkID0g
cmVwLT5kYXRhKCk7CkBAIC01ODIsNyArNjI4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFz
c1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUK
ICAgICAgICAgICAgIHJlcCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRlKHJlcCwgMCwgbGVuZ3RoKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHRoaXMgaXMgc2hhcmVkIHdpdGgg
c29tZW9uZSB1c2luZyBtb3JlIGNhcGFjaXR5LCBnb3R0YSBtYWtlIGEgd2hvbGUgbmV3IHN0cmlu
ZworICAgICAgICAvLyBUaGlzIGlzIHNoYXJlZCBpbiBzb21lIHdheSB0aGF0IHByZXZlbnRzIHVz
IGZyb20gbW9kaWZ5aW5nIGJhc2UsIHNvIHdlIG11c3QgbWFrZSBhIHdob2xlIG5ldyBzdHJpbmcu
CiAgICAgICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IGV4cGFuZGVkU2l6ZShsZW5ndGgsIDApOwog
ICAgICAgICBVQ2hhciogZCA9IGFsbG9jQ2hhcnMobmV3Q2FwYWNpdHkpOwogICAgICAgICBpZiAo
IWQpCkBAIC02MjIsNyArNjY4LDcgQEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVu
YXRlKFVTdHJpbmc6OlJlcCogYSwgVVN0cmluZzo6UmVwKiBiKQogICAgICAgICByZXR1cm4gYTsK
IAogICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGFCYXNlID0gYS0+YmFzZVN0cmluZygpOwotICAg
IGlmIChiU2l6ZSA9PSAxICYmIGFPZmZzZXQgKyBhU2l6ZSA9PSBhQmFzZS0+dXNlZENhcGFjaXR5
ICYmIGFPZmZzZXQgKyBsZW5ndGggPD0gYUJhc2UtPmNhcGFjaXR5KSB7CisgICAgaWYgKGJTaXpl
ID09IDEgJiYgYU9mZnNldCArIGFTaXplID09IGFCYXNlLT51c2VkQ2FwYWNpdHkgJiYgYU9mZnNl
dCArIGxlbmd0aCA8PSBhQmFzZS0+Y2FwYWNpdHkgJiYgIWFCYXNlLT5pc0J1ZmZlclJlYWRPbmx5
KCkpIHsKICAgICAgICAgLy8gYiBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgKGNvbW1vbiBmYXN0IGNh
c2UpCiAgICAgICAgIGFCYXNlLT51c2VkQ2FwYWNpdHkgPSBhT2Zmc2V0ICsgbGVuZ3RoOwogICAg
ICAgICBhLT5kYXRhKClbYVNpemVdID0gYi0+ZGF0YSgpWzBdOwpAQCAtNjMxLDcgKzY3Nyw3IEBA
IFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiBjb25jYXRlbmF0ZShVU3RyaW5nOjpSZXAqIGEsIFVT
dHJpbmc6OlJlcCogYikKIAogICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGJCYXNlID0gYi0+YmFz
ZVN0cmluZygpOwogICAgIGlmIChhT2Zmc2V0ICsgYVNpemUgPT0gYUJhc2UtPnVzZWRDYXBhY2l0
eSAmJiBhU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYgNCAqIGFTaXplID49IGJTaXplCi0gICAgICAg
ICYmICgtYk9mZnNldCAhPSBiQmFzZS0+dXNlZFByZUNhcGFjaXR5IHx8IGFTaXplID49IGJTaXpl
KSkgeworICAgICAgICAmJiAoLWJPZmZzZXQgIT0gYkJhc2UtPnVzZWRQcmVDYXBhY2l0eSB8fCBh
U2l6ZSA+PSBiU2l6ZSkgJiYgIWFCYXNlLT5pc0J1ZmZlclJlYWRPbmx5KCkpIHsKICAgICAgICAg
Ly8gLSBhIHJlYWNoZXMgdGhlIGVuZCBvZiBpdHMgYnVmZmVyIHNvIGl0IHF1YWxpZmllcyBmb3Ig
c2hhcmVkIGFwcGVuZAogICAgICAgICAvLyAtIGFsc28sIGl0J3MgYXQgbGVhc3QgYSBxdWFydGVy
IHRoZSBsZW5ndGggb2YgYiAtIGFwcGVuZGluZyB0byBhIG11Y2ggc2hvcnRlcgogICAgICAgICAv
LyAgIHN0cmluZyBkb2VzIG1vcmUgaGFybSB0aGFuIGdvb2QKQEAgLTY1MCw3ICs2OTYsNyBAQCBQ
YXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoVVN0cmluZzo6UmVwKiBhLCBVU3Ry
aW5nOjpSZXAqIGIpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKC1i
T2Zmc2V0ID09IGJCYXNlLT51c2VkUHJlQ2FwYWNpdHkgJiYgYlNpemUgPj0gbWluU2hhcmVTaXpl
ICYmIDQgKiBiU2l6ZSA+PSBhU2l6ZSkgeworICAgIGlmICgtYk9mZnNldCA9PSBiQmFzZS0+dXNl
ZFByZUNhcGFjaXR5ICYmIGJTaXplID49IG1pblNoYXJlU2l6ZSAmJiA0ICogYlNpemUgPj0gYVNp
emUgJiYgIWJCYXNlLT5pc0J1ZmZlclJlYWRPbmx5KCkpIHsKICAgICAgICAgLy8gLSBiIHJlYWNo
ZXMgdGhlIGJlZ2lubmluZyBvZiBpdHMgYnVmZmVyIHNvIGl0IHF1YWxpZmllcyBmb3Igc2hhcmVk
IHByZXBlbmQKICAgICAgICAgLy8gLSBhbHNvLCBpdCdzIGF0IGxlYXN0IGEgcXVhcnRlciB0aGUg
bGVuZ3RoIG9mIGEgLSBwcmVwZW5kaW5nIHRvIGEgbXVjaCBzaG9ydGVyCiAgICAgICAgIC8vICAg
c3RyaW5nIGRvZXMgbW9yZSBoYXJtIHRoYW4gZ29vZApAQCAtOTkzLDcgKzEwMzksNyBAQCBVU3Ry
aW5nJiBVU3RyaW5nOjphcHBlbmQoY29uc3QgVVN0cmluZyAmdCkKICAgICAgICAgICAgIG1fcmVw
LT5sZW4gPSBsZW5ndGg7CiAgICAgICAgICAgICBtX3JlcC0+X2hhc2ggPSAwOwogICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFj
aXR5ICYmIHRoaXNTaXplID49IG1pblNoYXJlU2l6ZSkgeworICAgIH0gZWxzZSBpZiAodGhpc09m
ZnNldCArIHRoaXNTaXplID09IGJhc2UtPnVzZWRDYXBhY2l0eSAmJiB0aGlzU2l6ZSA+PSBtaW5T
aGFyZVNpemUgJiYgIWJhc2UtPmlzQnVmZmVyUmVhZE9ubHkoKSkgewogICAgICAgICAvLyB0aGlz
IHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIC0gZXh0ZW5kIGl0IGlmIGl0J3MgbG9uZyBl
bm91Z2ggdG8gYXBwZW5kIHRvCiAgICAgICAgIGV4cGFuZENhcGFjaXR5KHRoaXNPZmZzZXQgKyBs
ZW5ndGgpOwogICAgICAgICBpZiAoZGF0YSgpKSB7CkBAIC0xMDAxLDcgKzEwNDcsNyBAQCBVU3Ry
aW5nJiBVU3RyaW5nOjphcHBlbmQoY29uc3QgVVN0cmluZyAmdCkKICAgICAgICAgICAgIG1fcmVw
ID0gUmVwOjpjcmVhdGUobV9yZXAsIDAsIGxlbmd0aCk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgICAvLyB0aGlzIGlzIHNoYXJlZCB3aXRoIHNvbWVvbmUgdXNpbmcgbW9yZSBjYXBh
Y2l0eSwgZ290dGEgbWFrZSBhIHdob2xlIG5ldyBzdHJpbmcKKyAgICAgICAgLy8gVGhpcyBpcyBz
aGFyZWQgaW4gc29tZSB3YXkgdGhhdCBwcmV2ZW50cyB1cyBmcm9tIG1vZGlmeWluZyBiYXNlLCBz
byB3ZSBtdXN0IG1ha2UgYSB3aG9sZSBuZXcgc3RyaW5nLgogICAgICAgICBzaXplX3QgbmV3Q2Fw
YWNpdHkgPSBleHBhbmRlZFNpemUobGVuZ3RoLCAwKTsKICAgICAgICAgVUNoYXIqIGQgPSBhbGxv
Y0NoYXJzKG5ld0NhcGFjaXR5KTsKICAgICAgICAgaWYgKCFkKQpAQCAtMTA2MSw3ICsxMTA3LDcg
QEAgVVN0cmluZyYgVVN0cmluZzo6YXBwZW5kKFVDaGFyIGMpCiAgICAgICAgICAgICBtX3JlcC0+
bGVuID0gbGVuZ3RoICsgMTsKICAgICAgICAgICAgIG1fcmVwLT5faGFzaCA9IDA7CiAgICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKHRoaXNPZmZzZXQgKyBsZW5ndGggPT0gYmFzZS0+dXNlZENhcGFj
aXR5ICYmIGxlbmd0aCA+PSBtaW5TaGFyZVNpemUpIHsKKyAgICB9IGVsc2UgaWYgKHRoaXNPZmZz
ZXQgKyBsZW5ndGggPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIGxlbmd0aCA+PSBtaW5TaGFyZVNp
emUgJiYgIWJhc2UtPmlzQnVmZmVyUmVhZE9ubHkoKSkgewogICAgICAgICAvLyB0aGlzIHJlYWNo
ZXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIC0gZXh0ZW5kIGl0IGFuZCBzaGFyZQogICAgICAgICBl
eHBhbmRDYXBhY2l0eSh0aGlzT2Zmc2V0ICsgbGVuZ3RoICsgMSk7CiAgICAgICAgIFVDaGFyKiBk
ID0gbV9yZXAtPmRhdGEoKTsKQEAgLTEwNzAsNyArMTExNiw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6
OmFwcGVuZChVQ2hhciBjKQogICAgICAgICAgICAgbV9yZXAgPSBSZXA6OmNyZWF0ZShtX3JlcCwg
MCwgbGVuZ3RoICsgMSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICAvLyB0aGlz
IGlzIHNoYXJlZCB3aXRoIHNvbWVvbmUgdXNpbmcgbW9yZSBjYXBhY2l0eSwgZ290dGEgbWFrZSBh
IHdob2xlIG5ldyBzdHJpbmcKKyAgICAgICAgLy8gVGhpcyBpcyBzaGFyZWQgaW4gc29tZSB3YXkg
dGhhdCBwcmV2ZW50cyB1cyBmcm9tIG1vZGlmeWluZyBiYXNlLCBzbyB3ZSBtdXN0IG1ha2UgYSB3
aG9sZSBuZXcgc3RyaW5nLgogICAgICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNp
emUobGVuZ3RoICsgMSwgMCk7CiAgICAgICAgIFVDaGFyKiBkID0gYWxsb2NDaGFycyhuZXdDYXBh
Y2l0eSk7CiAgICAgICAgIGlmICghZCkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVVN0cmluZy5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmgKaW5kZXggNjE0
NGExNC4uZjExZWVhYiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5n
LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmgKQEAgLTI3LDYgKzI3LDgg
QEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvT3duTWFsbG9jUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUHRyQW5kRmxhZ3MuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CkBAIC03NSw2ICs3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgY2xhc3Mg
SklUOwogCiAgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIENyb3NzVGhyZWFkUmVmQ291bnRl
ZDxPd25NYWxsb2NQdHI8VUNoYXI+ID4gU2hhcmVkVUNoYXI7CiAgICAgICAgIHN0cnVjdCBCYXNl
U3RyaW5nOwogICAgICAgICBzdHJ1Y3QgUmVwIDogTm9uY29weWFibGUgewogICAgICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVDsKQEAgLTkxLDYgKzk0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICAvLyBSZXR1cm5zIFVTdHJpbmc6OlJlcDo6bnVsbCBmb3IgbnVsbCBpbnB1dCBvciBj
b252ZXJzaW9uIGZhaWx1cmUuCiAgICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXA+IGNy
ZWF0ZUZyb21VVEY4KGNvbnN0IGNoYXIqKTsKIAorICAgICAgICAgICAgLy8gVXNlcyBTaGFyZWRV
Q2hhciB0byBoYXZlIGpvaW50IG93bmVyc2hpcCBvdmVyIHRoZSBVQ2hhciouCisgICAgICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxSZXA+IHNoYXJlKFVDaGFyKiwgaW50LCBQYXNzUmVmUHRyPFNo
YXJlZFVDaGFyPik7CisKICAgICAgICAgICAgIHZvaWQgZGVzdHJveSgpOwogCiAgICAgICAgICAg
ICBib29sIGJhc2VJc1NlbGYoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJUYWJsZUFuZEZs
YWdzLmlzRmxhZ1NldChCYXNlU3RyaW5nRmxhZyk7IH0KQEAgLTEzOCw3ICsxNDQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICAsIGxlbihsZW5ndGgpCiAgICAgICAgICAgICAg
ICAgLCByYygxKQogICAgICAgICAgICAgICAgICwgX2hhc2goMCkKLSAgICAgICAgICAgICAgICAs
IG1fbm90aGluZygwKQorICAgICAgICAgICAgICAgICwgbV9zaGFyZWRCdWZmZXIoMCkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgIH0KIApAQCAtMTU2LDcgKzE2Miw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgICAgIC8vIElmICFiYXNlSXNTZWxmKCkKICAgICAgICAgICAgICAg
ICBCYXNlU3RyaW5nKiBtX2Jhc2VTdHJpbmc7CiAgICAgICAgICAgICAgICAgLy8gSWYgYmFzZUlz
U2VsZigpCi0gICAgICAgICAgICAgICAgdm9pZCogbV9ub3RoaW5nOworICAgICAgICAgICAgICAg
IFNoYXJlZFVDaGFyKiBtX3NoYXJlZEJ1ZmZlcjsKICAgICAgICAgICAgIH07CiAKICAgICAgICAg
cHJpdmF0ZToKQEAgLTE3MSw3ICsxNzcsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIAogICAgICAg
ICBzdHJ1Y3QgQmFzZVN0cmluZyA6IHB1YmxpYyBSZXAgewotICAgICAgICAgICAgYm9vbCBpc1No
YXJlZCgpIHsgcmV0dXJuIHJjICE9IDE7IH0KKyAgICAgICAgICAgIGJvb2wgaXNTaGFyZWQoKSB7
IHJldHVybiByYyAhPSAxIHx8IGlzQnVmZmVyUmVhZE9ubHkoKTsgfQorICAgICAgICAgICAgdm9p
ZCBzZXRTaGFyZWRCdWZmZXIoUGFzc1JlZlB0cjxTaGFyZWRVQ2hhcj4pOworICAgICAgICAgICAg
UGFzc1JlZlB0cjxTaGFyZWRVQ2hhcj4gc2hhcmVkQnVmZmVyKCk7CisKKyAgICAgICAgICAgIGJv
b2wgaXNCdWZmZXJSZWFkT25seSgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KCFtX3NoYXJlZEJ1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIHJldHVybiBzbG93SXNCdWZmZXJSZWFkT25seSgpOworICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAvLyBwb3RlbnRpYWxseSBzaGFyZWQgZGF0YS4KICAgICAgICAgICAg
IFVDaGFyKiBidWY7CkBAIC0xOTYsNiArMjExLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAg
ICBib29sIHNsb3dJc0J1ZmZlclJlYWRPbmx5KCk7CisKICAgICAgICAgICAgIGZyaWVuZCBzdHJ1
Y3QgUmVwOwogICAgICAgICAgICAgZnJpZW5kIGNsYXNzIFNtYWxsU3RyaW5nc1N0b3JhZ2U7CiAg
ICAgICAgICAgICBmcmllbmQgdm9pZCBpbml0aWFsaXplVVN0cmluZygpOwpAQCAtMzE1LDYgKzMz
Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHNpemVfdCBjb3N0KCkgY29uc3Q7CiAK
KyAgICAgICAgUGFzc1JlZlB0cjxTaGFyZWRVQ2hhcj4gc2hhcmVkQnVmZmVyKCkgeyByZXR1cm4g
bV9yZXAtPmJhc2VTdHJpbmcoKS0+c2hhcmVkQnVmZmVyKCk7IH0KKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoaW50IHJlcXVpcmVkTGVuZ3RoKTsKICAgICAgICAg
dm9pZCBleHBhbmRQcmVDYXBhY2l0eShpbnQgcmVxdWlyZWRQcmVDYXApOwpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oIGIvSmF2YVNjcmlwdENv
cmUvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCmluZGV4IDgyZjFiYTEuLjI4MWRmYTYgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaAorKysg
Yi9KYXZhU2NyaXB0Q29yZS93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgKQEAgLTM1LDcgKzM1
LDYgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9UeXBlVHJh
aXRzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC02Niw2ICs2NSwxMSBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgdm9pZCBkZXJlZigpOwogICAgICAgICBUKiByZWxlYXNlKCk7CiAKKyAg
ICAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAhbV9yZWZDb3VudGVyLmhhc09uZVJlZigpIHx8IChtX3RocmVhZFNhZmVSZWZDb3VudGVyICYm
ICFtX3RocmVhZFNhZmVSZWZDb3VudGVyLT5oYXNPbmVSZWYoKSk7CisgICAgICAgIH0KKwogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgYm9vbCBtYXlCZVBhc3NlZFRvQW5vdGhlclRocmVhZCgpIGNv
bnN0IHsgQVNTRVJUKCFtX3RocmVhZElkKTsgcmV0dXJuIG1fcmVmQ291bnRlci5oYXNPbmVSZWYo
KTsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvT3duTWFsbG9jUHRy
LmggYi9KYXZhU2NyaXB0Q29yZS93dGYvT3duTWFsbG9jUHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOGIxZDZjYQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRD
b3JlL3d0Zi9Pd25NYWxsb2NQdHIuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIE93bk1hbGxvY1B0cl9oCisjZGVmaW5lIE93bk1hbGxvY1B0cl9oCisK
KyNpbmNsdWRlICJGYXN0TWFsbG9jLmgiCisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKworbmFt
ZXNwYWNlIFdURiB7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBPd25NYWxsb2NQdHIg
OiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBPd25NYWxsb2NQ
dHIoVCogcHRyKSA6IG1fcHRyKHB0cikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
fk93bk1hbGxvY1B0cigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZhc3RGcmVlKG1fcHRyKTsK
KyAgICAgICAgfQorCisgICAgICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9Cisg
ICAgICAgIFQqIHJlbGVhc2UoKSB7IFQqIHB0ciA9IG1fcHRyOyBtX3B0ciA9IDA7IHJldHVybiBw
dHI7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFQqIG1fcHRyOworICAgIH07CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Ok93bk1hbGxvY1B0cjsKKworI2VuZGlmIC8vIE93
bk1hbGxvY1B0cl9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cgYi9KYXZh
U2NyaXB0R2x1ZS9DaGFuZ2VMb2cKaW5kZXggYzc0YjgwOC4uNzkxMTVjMiAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDA5LTA0LTA5ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUxMjYKKworICAgICAgICBB
ZGRlZCBmb3J3YXJkaW5nIGhlYWRlcnMuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93
dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9Pd25NYWxsb2NQdHIuaDogQWRkZWQuCisKIDIwMDktMDMtMTMgIE1hcmsgUm93
ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBEYW4gQmVy
bnN0ZWluLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3Rm
L0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oIGIvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRl
cnMvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjI2OTg3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0R2x1ZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgKQEAgLTAsMCArMSBAQAor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oPgpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL093bk1hbGxvY1B0ci5o
IGIvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL093bk1hbGxvY1B0ci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNGZkY2YKLS0tIC9kZXYvbnVsbAor
KysgYi9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvT3duTWFsbG9jUHRyLmgK
QEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL093bk1hbGxvY1B0ci5oPgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZTcxYWViLi40YmYyZGQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDA5LTA0LTA5ICBEYXZpZCBMZXZpbiAg
PGxldmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUx
MjYKKworICAgICAgICBBZGRlZCBmb3J3YXJkaW5nIGhlYWRlcnMuCisKKyAgICAgICAgKiBGb3J3
YXJkaW5nSGVhZGVycy93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg6IEFkZGVkLgorICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25NYWxsb2NQdHIuaDogQWRkZWQuCisKIDIwMDkt
MDQtMDkgIEpvaG4gR3JhYm93c2tpICA8anJnQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBiL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjI2OTg3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaApAQCAtMCwwICsxIEBACisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg+CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25NYWxsb2NQdHIuaCBiL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL093bk1hbGxvY1B0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmRkNGZkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9Pd25NYWxsb2NQdHIuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvT3duTWFsbG9jUHRyLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30661</attachid>
            <date>2009-05-25 19:25:45 -0700</date>
            <delta_ts>2009-05-25 20:06:49 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug25126.txt</filename>
            <type>text/plain</type>
            <size>27198</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBmMTRlNzlmLi5lOWE0MDA3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMDktMDUtMjIgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTEyNgorICAgICAgICBBbGxvdyB0aGUgYnVmZmVy
IHVuZGVybHlpbmcgVVN0cmluZyB0byBiZSBzaGFyZWQuCisKKyAgICAgICAgSW4gb3JkZXIgdG8g
bm90IGdyb3cgdGhlIHVuZGVybHlpbmcgc2l6ZSBvZiBhbnkgc3RydWN0dXJlLAorICAgICAgICB0
aGVyZSBpcyBhIHVuaW9uIGluIHRoZSBSZXAgc3RyaW5nIHdoaWNoIGhvbGRzCisgICAgICAgICAr
IG1fc2hhcmVkQnVmZmVyIC0tIGEgcG9pbnRlciB0byB0aGUgc2hhcmVkIHJlZiBjb3VudGVkIGJ1
ZmZlcgorICAgICAgICAgICBpZiB0aGUgY2xhc3MgaXMgQmFzZVN0cmluZyBhbmQgdGhlIGJ1ZmZl
ciBpcyBiZWluZyBzaGFyZWQgT1IKKyAgICAgICAgICsgbV9iYXNlU3RyaW5nIC0tIHRoZSBCYXNl
U3RyaW5nIGlmIHRoZSBjbGFzcyBpcyBvbmx5IFVTdHJpbmc6OlJlcAorICAgICAgICAgICBidXQg
bm90IGEgVVN0cmluZzo6QmFzZVN0cmluZworCisgICAgICAgIElkZWFsbHksIG1fc2hhcmVkQnVm
ZmVyIHdvdWxkIGJlIGEgUmVmUHRyLCBidXQgaXQgY2Fubm90IGJlIGJlY2F1c2UKKyAgICAgICAg
aXQgaXMgaW4gYSB1bmlvbi4KKworICAgICAgICBObyBjaGFuZ2UgaW4gc3Vuc3BpZGVyIHBlcmYu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2o6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBydW50aW1lL1VTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OnNoYXJl
KToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6
VVN0cmluZzo6QmFzZVN0cmluZzo6c2hhcmVkQnVmZmVyKToKKyAgICAgICAgKEpTQzo6VVN0cmlu
Zzo6QmFzZVN0cmluZzo6c2V0U2hhcmVkQnVmZmVyKToKKyAgICAgICAgKEpTQzo6VVN0cmluZzo6
QmFzZVN0cmluZzo6c2xvd0lzQnVmZmVyUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpleHBhbmRD
YXBhY2l0eSk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6cmVzZXJ2ZUNhcGFjaXR5KToK
KyAgICAgICAgKEpTQzo6VVN0cmluZzo6ZXhwYW5kUHJlQ2FwYWNpdHkpOgorICAgICAgICAoSlND
Ojpjb25jYXRlbmF0ZSk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OmFwcGVuZCk6CisgICAgICAg
ICogcnVudGltZS9VU3RyaW5nLmg6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OlJlcDo6UmVwKToK
KyAgICAgICAgKEpTQzo6VVN0cmluZzo6UmVwOjopOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpC
YXNlU3RyaW5nOjppc1NoYXJlZCk6CisgICAgICAgIChKU0M6OlVTdHJpbmc6OkJhc2VTdHJpbmc6
OmlzQnVmZmVyUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpSZXA6OmJhc2VTdHJp
bmcpOgorICAgICAgICAqIHd0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaDoKKyAgICAgICAgKFdU
Rjo6Q3Jvc3NUaHJlYWRSZWZDb3VudGVkOjppc1NoYXJlZCk6CisgICAgICAgICogd3RmL093bkZh
c3RNYWxsb2NQdHIuaDogQWRkZWQuCisgICAgICAgIChXVEY6Ok93bkZhc3RNYWxsb2NQdHI6Ok93
bkZhc3RNYWxsb2NQdHIpOgorICAgICAgICAoV1RGOjpPd25GYXN0TWFsbG9jUHRyOjp+T3duRmFz
dE1hbGxvY1B0cik6CisgICAgICAgIChXVEY6Ok93bkZhc3RNYWxsb2NQdHI6OmdldCk6CisgICAg
ICAgIChXVEY6Ok93bkZhc3RNYWxsb2NQdHI6OnJlbGVhc2UpOgorCiAyMDA5LTA1LTI1ICBGcmlk
cmljaCBTdHJiYSAgPGZyaWRyaWNoLnN0cmJhQGJsdWV3aW4uY2g+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKaW5kZXggYTBjYzAyNS4uNjY2M2JmYiAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNw
cm9qCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZj
cHJvagpAQCAtMjIxLDYgKzIyMSwxMCBAQAogCQkJPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCisJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCINCisJCQk+
DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEN1cnJl
bnRUaW1lLmNwcCINCiAJCQk+DQogCQk8L0ZpbGU+DQpAQCAtMzMzLDYgKzMzNywxMCBAQAogCQkJ
Pg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxPd25G
YXN0TWFsbG9jUHRyLmgiDQorCQkJPg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCiAJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHd0ZlxPd25QdHIuaCINCiAJCQk+DQogCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggMWU3NThiOS4uNDk3MTI2YiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Miw2ICs0Miw4
IEBACiAJCTBCMUY5MjFEMEYxNzUzNTAwMDM2NDY4RSAvKiBQdHJBbmRGbGFncy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEIxRjkyMUIwRjE3NTAyRDAw
MzY0NjhFIC8qIFB0ckFuZEZsYWdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEIzMzBDMjcwRjM4QzYyMzAwNjkyREUzIC8qIFR5cGVUcmFpdHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEIzMzBD
MjYwRjM4QzYyMzAwNjkyREUzIC8qIFR5cGVUcmFpdHMuY3BwICovOyB9OwogCQkwQjREN0U2MzBG
MzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEI0RDdFNjIwRjMxOUFDODAwQUQ3RTU4IC8qIFR5cGVUcmFp
dHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
QkRGRkFFMDBGQzYxOTI5MDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkRGRkFENDBGQzYxNzEw
MDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEJERkZBRTEwRkM2MTkzMTAwRDY5RUY0IC8q
IE93bkZhc3RNYWxsb2NQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwQjdE
MUQwREM2OUFGNzAwOUM0MkI4IC8qIEpTQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyog
SlNBY3RpdmF0aW9uLmNwcCAqLzsgfTsKIAkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpT
QmFzZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQxMjExMzEwQTQ4Nzk0
RDAwNDgwMjU1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAv
KiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CkBAIC00NTUsNiArNDU3LDggQEAKIAkJ
MEIxRjkyMUIwRjE3NTAyRDAwMzY0NjhFIC8qIFB0ckFuZEZsYWdzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFB0ckFuZEZsYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBCMzMwQzI2MEYzOEM2MjMwMDY5MkRFMyAvKiBUeXBlVHJhaXRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVUcmFpdHMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwQjREN0U2MjBGMzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlVHJhaXRzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25G
YXN0TWFsbG9jUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkZhc3RN
YWxsb2NQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEJERkZBRDQwRkM2MTcx
MDAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEyMTEwMjBBNDg3ODA5MDA0ODAyNTUgLyogbWluaWRv
bS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBtaW5pZG9tLmM7IHBhdGggPSB0
ZXN0cy9taW5pZG9tLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTIxMTBEMEE0
ODc4ODcwMDQ4MDI1NSAvKiBtaW5pZG9tLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2Ny
aXB0OyBuYW1lID0gbWluaWRvbS5qczsgcGF0aCA9IHRlc3RzL21pbmlkb20uanM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTYxLDYgKzExNjUsNyBAQAogCQkJCUUxQTU5NjM3MERF
M0UxQzMwMEMxN0UzNyAvKiBBVkxUcmVlLmggKi8sCiAJCQkJQTdBMUY3QUEwRjI1MkIzQzAwRTE4
NEUyIC8qIEJ5dGVBcnJheS5jcHAgKi8sCiAJCQkJQTdBMUY3QUIwRjI1MkIzQzAwRTE4NEUyIC8q
IEJ5dGVBcnJheS5oICovLAorCQkJCTBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAvKiBDcm9zc1Ro
cmVhZFJlZkNvdW50ZWQuaCAqLywKIAkJCQkxODBCOUFFRjBGMTZDNTY5MDA5QkRCQzUgLyogQ3Vy
cmVudFRpbWUuY3BwICovLAogCQkJCTE4MEI5QUYwMEYxNkM1NjkwMDlCREJDNSAvKiBDdXJyZW50
VGltZS5oICovLAogCQkJCTUxODYxMTFEMENDODI0ODMwMDgxNDEyQiAvKiBEZXF1ZS5oICovLApA
QCAtMTE5Miw2ICsxMTk3LDcgQEAKIAkJCQk5MzAzRjU2OTA5OTExOTAwMDBBRDcxQjggLyogTm9u
Y29weWFibGUuaCAqLywKIAkJCQlDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQu
aCAqLywKIAkJCQk5MzAzRjVBNDA5OTExQTU4MDBBRDcxQjggLyogT3duQXJyYXlQdHIuaCAqLywK
KwkJCQkwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovLAog
CQkJCTkzMDNGNTY3MDk5MTE4RkEwMEFENzFCOCAvKiBPd25QdHIuaCAqLywKIAkJCQk0NDBCN0FF
RDBGQUY3RkNCMDA3MzMyM0UgLyogT3duUHRyQ29tbW9uLmggKi8sCiAJCQkJNDRERDQ4NTIwRkFF
QTg1MDAwRDZCNEVCIC8qIFBhc3NPd25QdHIuaCAqLywKQEAgLTE4MjksNiArMTgzNSw4IEBACiAJ
CQkJQTdFMkVBNkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMDUyQzM1MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTYwNjI2OTYwRkI4RUMwMjAwOTc5OEFCIC8qIEpJVFN0dWJDYWxsLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwQkRGRkFFMDBGQzYxOTI5MDBENjlFRjQgLyogQ3Jvc3NUaHJl
YWRSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKKwkJCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlF
RjQgLyogT3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9V
U3RyaW5nLmNwcAppbmRleCBlYjZhNTdjLi4wZjBkZDI0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0
cmluZy5jcHAKQEAgLTEsOCArMSw4IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAw
IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9u
IFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA5
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTIzMiw2ICsyMzIsMTQgQEAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IFVTdHJpbmc6OlJl
cDo6Y3JlYXRlRnJvbVVURjgoY29uc3QgY2hhciogc3RyaW5nKQogICAgIHJldHVybiBVU3RyaW5n
OjpSZXA6OmNyZWF0ZUNvcHlpbmcoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRhKCkpOwog
fQogCitQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gVVN0cmluZzo6UmVwOjpzaGFyZShVQ2hhciog
c3RyaW5nLCBpbnQgbGVuZ3RoLCBQYXNzUmVmUHRyPFVTdHJpbmc6OlNoYXJlZFVDaGFyPiBzaGFy
ZWRCdWZmZXIpCit7CisgICAgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IHJlcCA9IGNyZWF0ZShz
dHJpbmcsIGxlbmd0aCk7CisgICAgcmVwLT5iYXNlU3RyaW5nKCktPnNldFNoYXJlZEJ1ZmZlcihz
aGFyZWRCdWZmZXIpOworICAgIHJlcC0+Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIHJldHVybiBy
ZXA7Cit9CisKIHZvaWQgVVN0cmluZzo6UmVwOjpkZXN0cm95KCkKIHsKICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CkBAIC0yNDEsMTAgKzI0OSwxNCBAQCB2b2lkIFVTdHJpbmc6OlJlcDo6ZGVzdHJv
eSgpCiAgICAgaWYgKCFpc1N0YXRpYygpKSB7CiAgICAgICAgIGlmIChpZGVudGlmaWVyVGFibGUo
KSkKICAgICAgICAgICAgIElkZW50aWZpZXI6OnJlbW92ZSh0aGlzKTsKKwogICAgICAgICBVU3Ry
aW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gYmFzZVN0cmluZygpOwotICAgICAgICBpZiAoYmFzZSA9
PSB0aGlzKQotICAgICAgICAgICAgZmFzdEZyZWUoYmFzZS0+YnVmKTsKLSAgICAgICAgZWxzZQor
ICAgICAgICBpZiAoYmFzZSA9PSB0aGlzKSB7CisgICAgICAgICAgICBpZiAobV9zaGFyZWRCdWZm
ZXIpCisgICAgICAgICAgICAgICAgbV9zaGFyZWRCdWZmZXItPmRlcmVmKCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgZmFzdEZyZWUoYmFzZS0+YnVmKTsKKyAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBiYXNlLT5kZXJlZigpOwogCiAgICAgICAgIGRlbGV0ZSB0aGlzOwpA
QCAtMzY4LDYgKzM4MCw0MiBAQCB2b2lkIFVTdHJpbmc6OlJlcDo6Y2hlY2tDb25zaXN0ZW5jeSgp
IGNvbnN0CiB9CiAjZW5kaWYKIAorVVN0cmluZzo6U2hhcmVkVUNoYXIqIFVTdHJpbmc6OkJhc2VT
dHJpbmc6OnNoYXJlZEJ1ZmZlcigpCit7CisgICAgLy8gRG9uJ3Qgc2hhcmUgZW1wdHksIG51bGwg
YW5kIDEgY2hhcmFjdGVyIHN0cmluZ3MgZnJvbSBTbWFsbFN0cmluZ3MuCisgICAgaWYgKGxlbiA8
PSAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV9zaGFyZWRCdWZmZXIpCisgICAg
ICAgIHNldFNoYXJlZEJ1ZmZlcihTaGFyZWRVQ2hhcjo6Y3JlYXRlKG5ldyBPd25GYXN0TWFsbG9j
UHRyPFVDaGFyPihidWYpKSk7CisgICAgcmV0dXJuIG1fc2hhcmVkQnVmZmVyOworfQorCit2b2lk
IFVTdHJpbmc6OkJhc2VTdHJpbmc6OnNldFNoYXJlZEJ1ZmZlcihQYXNzUmVmUHRyPFVTdHJpbmc6
OlNoYXJlZFVDaGFyPiBzaGFyZWRCdWZmZXIpCit7CisgICAgLy8gVGhlIG1hbnVhbCBzdGVwcyBi
ZWxvdyBhcmUgYmVjYXVzZSBtX3NoYXJlZEJ1ZmZlciBjYW4ndCBiZSBhIFJlZlB0ci4gbV9zaGFy
ZWRCdWZmZXIKKyAgICAvLyBpcyBpbiBhIHVuaW9uIHdpdGggYW5vdGhlciB2YXJpYWJsZSB0byBh
dm9pZCBtYWtpbmcgQmFzZVN0cmluZyBhbnkgbGFyZ2VyLgorICAgIGlmIChtX3NoYXJlZEJ1ZmZl
cikKKyAgICAgICAgbV9zaGFyZWRCdWZmZXItPmRlcmVmKCk7CisgICAgbV9zaGFyZWRCdWZmZXIg
PSBzaGFyZWRCdWZmZXIucmVsZWFzZVJlZigpOworfQorCitib29sIFVTdHJpbmc6OkJhc2VTdHJp
bmc6OnNsb3dJc0J1ZmZlclJlYWRPbmx5KCkKK3sKKyAgICAvLyBUaGUgYnVmZmVyIG1heSBub3Qg
YmUgbW9kaWZpZWQgYXMgc29vbiBhcyB0aGUgdW5kZXJseWluZyBkYXRhIGhhcyBiZWVuIHNoYXJl
ZCB3aXRoIGFub3RoZXIgY2xhc3MuCisgICAgaWYgKG1fc2hhcmVkQnVmZmVyLT5pc1NoYXJlZCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGtub3cg
aXQgdGhhdCB0aGUgdW5kZXJseWluZyBidWZmZXIgaXNuJ3Qgc2hhcmVkIG91dHNpZGUgb2YgdGhp
cyBiYXNlIGNsYXNzLAorICAgIC8vIHNvIGdldCByaWQgb2YgbV9zaGFyZWRCdWZmZXIuCisgICAg
T3duUHRyPE93bkZhc3RNYWxsb2NQdHI8VUNoYXI+ID4gbWFsbG9jUHRyKG1fc2hhcmVkQnVmZmVy
LT5yZWxlYXNlKCkpOworICAgIFVDaGFyKiB1bnNoYXJlZEJ1ZiA9IGNvbnN0X2Nhc3Q8VUNoYXIq
PihtYWxsb2NQdHItPnJlbGVhc2UoKSk7CisgICAgc2V0U2hhcmVkQnVmZmVyKDApOworICAgIHBy
ZUNhcGFjaXR5ICs9IChidWYgLSB1bnNoYXJlZEJ1Zik7CisgICAgYnVmID0gdW5zaGFyZWRCdWY7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBQdXQgdGhlc2UgZWFybHkgc28gdGhleSBjYW4g
YmUgaW5saW5lZC4KIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGV4cGFuZGVkU2l6ZShzaXplX3QgY2Fw
YWNpdHlTaXplLCBzaXplX3QgcHJlY2FwYWNpdHlTaXplKQogewpAQCAtNDE3LDYgKzQ2NSw3IEBA
IHN0YXRpYyBpbmxpbmUgc2l6ZV90IGV4cGFuZGVkU2l6ZShzaXplX3QgY2FwYWNpdHlTaXplLCBz
aXplX3QgcHJlY2FwYWNpdHlTaXplKQogc3RhdGljIGlubGluZSBib29sIGV4cGFuZENhcGFjaXR5
KFVTdHJpbmc6OlJlcCogcmVwLCBpbnQgcmVxdWlyZWRMZW5ndGgpCiB7CiAgICAgcmVwLT5jaGVj
a0NvbnNpc3RlbmN5KCk7CisgICAgQVNTRVJUKCFyZXAtPmJhc2VTdHJpbmcoKS0+aXNCdWZmZXJS
ZWFkT25seSgpKTsKIAogICAgIFVTdHJpbmc6OkJhc2VTdHJpbmcqIGJhc2UgPSByZXAtPmJhc2VT
dHJpbmcoKTsKIApAQCAtNDQyLDIzICs0OTEsMjUgQEAgYm9vbCBVU3RyaW5nOjpSZXA6OnJlc2Vy
dmVDYXBhY2l0eShpbnQgY2FwYWNpdHkpCiAgICAgLy8gSWYgdGhpcyBpcyBhbiBlbXB0eSBzdHJp
bmcgdGhlcmUgaXMgbm8gcG9pbnQgJ2dyb3dpbmcnIGl0IC0ganVzdCBhbGxvY2F0ZSBhIG5ldyBv
bmUuCiAgICAgLy8gSWYgdGhlIEJhc2VTdHJpbmcgaXMgc2hhcmVkIHdpdGggYW5vdGhlciBzdHJp
bmcgdGhhdCBpcyB1c2luZyBtb3JlIGNhcGFjaXR5IHRoYW4gdGhpcwogICAgIC8vIHN0cmluZyBp
cywgdGhlbiBncm93aW5nIHRoZSBidWZmZXIgd29uJ3QgaGVscC4KLSAgICBpZiAoIW1fYmFzZVN0
cmluZy0+YnVmIHx8ICFtX2Jhc2VTdHJpbmctPmNhcGFjaXR5IHx8IChvZmZzZXQgKyBsZW4pICE9
IG1fYmFzZVN0cmluZy0+dXNlZENhcGFjaXR5KQorICAgIC8vIElmIHRoZSBCYXNlU3RyaW5nJ3Mg
YnVmZmVyIGlzIHJlYWRvbmx5LCB0aGVuIGl0IGlzbid0IGFsbG93ZWQgdG8gZ3Jvdy4KKyAgICBV
U3RyaW5nOjpCYXNlU3RyaW5nKiBiYXNlID0gYmFzZVN0cmluZygpOworICAgIGlmICghYmFzZS0+
YnVmIHx8ICFiYXNlLT5jYXBhY2l0eSB8fCAob2Zmc2V0ICsgbGVuKSAhPSBiYXNlLT51c2VkQ2Fw
YWNpdHkgfHwgYmFzZS0+aXNCdWZmZXJSZWFkT25seSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCiAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBzdWZmaWNpZW50IGNhcGFjaXR5LCBu
byBuZWVkIHRvIGdyb3chCi0gICAgaWYgKGNhcGFjaXR5IDw9IG1fYmFzZVN0cmluZy0+Y2FwYWNp
dHkpCisgICAgaWYgKGNhcGFjaXR5IDw9IGJhc2UtPmNhcGFjaXR5KQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIHNpemVfdCBuZXdDYXBhY2l0
eSA9IGV4cGFuZGVkU2l6ZShjYXBhY2l0eSwgbV9iYXNlU3RyaW5nLT5wcmVDYXBhY2l0eSk7Ci0g
ICAgVUNoYXIqIG9sZEJ1ZiA9IG1fYmFzZVN0cmluZy0+YnVmOwotICAgIG1fYmFzZVN0cmluZy0+
YnVmID0gcmVhbGxvY0NoYXJzKG1fYmFzZVN0cmluZy0+YnVmLCBuZXdDYXBhY2l0eSk7Ci0gICAg
aWYgKCFtX2Jhc2VTdHJpbmctPmJ1ZikgewotICAgICAgICBtX2Jhc2VTdHJpbmctPmJ1ZiA9IG9s
ZEJ1ZjsKKyAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBleHBhbmRlZFNpemUoY2FwYWNpdHksIGJh
c2UtPnByZUNhcGFjaXR5KTsKKyAgICBVQ2hhciogb2xkQnVmID0gYmFzZS0+YnVmOworICAgIGJh
c2UtPmJ1ZiA9IHJlYWxsb2NDaGFycyhiYXNlLT5idWYsIG5ld0NhcGFjaXR5KTsKKyAgICBpZiAo
IWJhc2UtPmJ1ZikgeworICAgICAgICBiYXNlLT5idWYgPSBvbGRCdWY7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgbV9iYXNlU3RyaW5nLT5jYXBhY2l0eSA9IG5ld0NhcGFjaXR5
IC0gbV9iYXNlU3RyaW5nLT5wcmVDYXBhY2l0eTsKKyAgICBiYXNlLT5jYXBhY2l0eSA9IG5ld0Nh
cGFjaXR5IC0gYmFzZS0+cHJlQ2FwYWNpdHk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC00NzMsNiArNTI0LDcgQEAgdm9pZCBVU3RyaW5nOjpleHBhbmRD
YXBhY2l0eShpbnQgcmVxdWlyZWRMZW5ndGgpCiB2b2lkIFVTdHJpbmc6OmV4cGFuZFByZUNhcGFj
aXR5KGludCByZXF1aXJlZFByZUNhcCkKIHsKICAgICBtX3JlcC0+Y2hlY2tDb25zaXN0ZW5jeSgp
OworICAgIEFTU0VSVCghbV9yZXAtPmJhc2VTdHJpbmcoKS0+aXNCdWZmZXJSZWFkT25seSgpKTsK
IAogICAgIEJhc2VTdHJpbmcqIGJhc2UgPSBtX3JlcC0+YmFzZVN0cmluZygpOwogCkBAIC01ODUs
NyArNjM3LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+
IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0cmluZzo6UmUKICAgICAgICAgICAgIHJlcC0+bGVu
ID0gbGVuZ3RoOwogICAgICAgICAgICAgcmVwLT5faGFzaCA9IDA7CiAgICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKHRoaXNPZmZzZXQgKyB0aGlzU2l6ZSA9PSBiYXNlLT51c2VkQ2FwYWNpdHkgJiYg
dGhpc1NpemUgPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsg
dGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49IG1pblNoYXJlU2l6
ZSAmJiAhYmFzZS0+aXNCdWZmZXJSZWFkT25seSgpKSB7CiAgICAgICAgIC8vIHRoaXMgcmVhY2hl
cyB0aGUgZW5kIG9mIHRoZSBidWZmZXIgLSBleHRlbmQgaXQgaWYgaXQncyBsb25nIGVub3VnaCB0
byBhcHBlbmQgdG8KICAgICAgICAgaWYgKCFleHBhbmRDYXBhY2l0eShyZXAuZ2V0KCksIG5ld0Nh
cGFjaXR5V2l0aE92ZXJmbG93Q2hlY2sodGhpc09mZnNldCwgbGVuZ3RoKSkpCiAgICAgICAgICAg
ICByZXAgPSAmVVN0cmluZzo6UmVwOjpudWxsKCk7CkBAIC01OTQsNyArNjQ2LDcgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NS
ZWZQdHI8VVN0cmluZzo6UmUKICAgICAgICAgICAgIHJlcCA9IFVTdHJpbmc6OlJlcDo6Y3JlYXRl
KHJlcCwgMCwgbGVuZ3RoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHRo
aXMgaXMgc2hhcmVkIHdpdGggc29tZW9uZSB1c2luZyBtb3JlIGNhcGFjaXR5LCBnb3R0YSBtYWtl
IGEgd2hvbGUgbmV3IHN0cmluZworICAgICAgICAvLyBUaGlzIGlzIHNoYXJlZCBpbiBzb21lIHdh
eSB0aGF0IHByZXZlbnRzIHVzIGZyb20gbW9kaWZ5aW5nIGJhc2UsIHNvIHdlIG11c3QgbWFrZSBh
IHdob2xlIG5ldyBzdHJpbmcuCiAgICAgICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IGV4cGFuZGVk
U2l6ZShsZW5ndGgsIDApOwogICAgICAgICBVQ2hhciogZCA9IGFsbG9jQ2hhcnMobmV3Q2FwYWNp
dHkpOwogICAgICAgICBpZiAoIWQpCkBAIC02NDAsNyArNjkyLDcgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFBhc3NSZWZQdHI8VVN0
cmluZzo6UmUKICAgICAgICAgICAgIHJlcC0+bGVuID0gbGVuZ3RoOwogICAgICAgICAgICAgcmVw
LT5faGFzaCA9IDA7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHRoaXNPZmZzZXQgKyB0aGlz
U2l6ZSA9PSBiYXNlLT51c2VkQ2FwYWNpdHkgJiYgdGhpc1NpemUgPj0gbWluU2hhcmVTaXplKSB7
CisgICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgdGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFj
aXR5ICYmIHRoaXNTaXplID49IG1pblNoYXJlU2l6ZSAmJiAhYmFzZS0+aXNCdWZmZXJSZWFkT25s
eSgpKSB7CiAgICAgICAgIC8vIHRoaXMgc3RyaW5nIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgYnVm
ZmVyIC0gZXh0ZW5kIGl0CiAgICAgICAgIGV4cGFuZENhcGFjaXR5KHJlcC5nZXQoKSwgbmV3Q2Fw
YWNpdHlXaXRoT3ZlcmZsb3dDaGVjayh0aGlzT2Zmc2V0LCBsZW5ndGgpKTsKICAgICAgICAgVUNo
YXIqIGQgPSByZXAtPmRhdGEoKTsKQEAgLTY1MCw3ICs3MDIsNyBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoUGFzc1JlZlB0cjxVU3Ry
aW5nOjpSZQogICAgICAgICAgICAgcmVwID0gVVN0cmluZzo6UmVwOjpjcmVhdGUocmVwLCAwLCBs
ZW5ndGgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gdGhpcyBpcyBzaGFy
ZWQgd2l0aCBzb21lb25lIHVzaW5nIG1vcmUgY2FwYWNpdHksIGdvdHRhIG1ha2UgYSB3aG9sZSBu
ZXcgc3RyaW5nCisgICAgICAgIC8vIFRoaXMgaXMgc2hhcmVkIGluIHNvbWUgd2F5IHRoYXQgcHJl
dmVudHMgdXMgZnJvbSBtb2RpZnlpbmcgYmFzZSwgc28gd2UgbXVzdCBtYWtlIGEgd2hvbGUgbmV3
IHN0cmluZy4KICAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKGxlbmd0
aCwgMCk7CiAgICAgICAgIFVDaGFyKiBkID0gYWxsb2NDaGFycyhuZXdDYXBhY2l0eSk7CiAgICAg
ICAgIGlmICghZCkKQEAgLTY4MSw3ICs3MzMsNyBAQCBQYXNzUmVmUHRyPFVTdHJpbmc6OlJlcD4g
Y29uY2F0ZW5hdGUoVVN0cmluZzo6UmVwKiBhLCBVU3RyaW5nOjpSZXAqIGIpCiAgICAgLy8gcG9z
c2libGUgY2FzZXM6CiAKICAgICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBhQmFzZSA9IGEtPmJhc2VT
dHJpbmcoKTsKLSAgICBpZiAoYlNpemUgPT0gMSAmJiBhT2Zmc2V0ICsgYVNpemUgPT0gYUJhc2Ut
PnVzZWRDYXBhY2l0eSAmJiBhT2Zmc2V0ICsgYVNpemUgPCBhQmFzZS0+Y2FwYWNpdHkpIHsKKyAg
ICBpZiAoYlNpemUgPT0gMSAmJiBhT2Zmc2V0ICsgYVNpemUgPT0gYUJhc2UtPnVzZWRDYXBhY2l0
eSAmJiBhT2Zmc2V0ICsgYVNpemUgPCBhQmFzZS0+Y2FwYWNpdHkgJiYgIWFCYXNlLT5pc0J1ZmZl
clJlYWRPbmx5KCkpIHsKICAgICAgICAgLy8gYiBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgKGNvbW1v
biBmYXN0IGNhc2UpCiAgICAgICAgICsrYUJhc2UtPnVzZWRDYXBhY2l0eTsKICAgICAgICAgYS0+
ZGF0YSgpW2FTaXplXSA9IGItPmRhdGEoKVswXTsKQEAgLTcwMCw3ICs3NTIsNyBAQCBQYXNzUmVm
UHRyPFVTdHJpbmc6OlJlcD4gY29uY2F0ZW5hdGUoVVN0cmluZzo6UmVwKiBhLCBVU3RyaW5nOjpS
ZXAqIGIpCiAKICAgICBVU3RyaW5nOjpCYXNlU3RyaW5nKiBiQmFzZSA9IGItPmJhc2VTdHJpbmco
KTsKICAgICBpZiAoYU9mZnNldCArIGFTaXplID09IGFCYXNlLT51c2VkQ2FwYWNpdHkgJiYgYVNp
emUgPj0gbWluU2hhcmVTaXplICYmIDQgKiBhU2l6ZSA+PSBiU2l6ZQotICAgICAgICAmJiAoLWJP
ZmZzZXQgIT0gYkJhc2UtPnVzZWRQcmVDYXBhY2l0eSB8fCBhU2l6ZSA+PSBiU2l6ZSkpIHsKKyAg
ICAgICAgJiYgKC1iT2Zmc2V0ICE9IGJCYXNlLT51c2VkUHJlQ2FwYWNpdHkgfHwgYVNpemUgPj0g
YlNpemUpICYmICFhQmFzZS0+aXNCdWZmZXJSZWFkT25seSgpKSB7CiAgICAgICAgIC8vIC0gYSBy
ZWFjaGVzIHRoZSBlbmQgb2YgaXRzIGJ1ZmZlciBzbyBpdCBxdWFsaWZpZXMgZm9yIHNoYXJlZCBh
cHBlbmQKICAgICAgICAgLy8gLSBhbHNvLCBpdCdzIGF0IGxlYXN0IGEgcXVhcnRlciB0aGUgbGVu
Z3RoIG9mIGIgLSBhcHBlbmRpbmcgdG8gYSBtdWNoIHNob3J0ZXIKICAgICAgICAgLy8gICBzdHJp
bmcgZG9lcyBtb3JlIGhhcm0gdGhhbiBnb29kCkBAIC03MjAsNyArNzcyLDcgQEAgUGFzc1JlZlB0
cjxVU3RyaW5nOjpSZXA+IGNvbmNhdGVuYXRlKFVTdHJpbmc6OlJlcCogYSwgVVN0cmluZzo6UmVw
KiBiKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGlmICgtYk9mZnNldCA9
PSBiQmFzZS0+dXNlZFByZUNhcGFjaXR5ICYmIGJTaXplID49IG1pblNoYXJlU2l6ZSAmJiA0ICog
YlNpemUgPj0gYVNpemUpIHsKKyAgICBpZiAoLWJPZmZzZXQgPT0gYkJhc2UtPnVzZWRQcmVDYXBh
Y2l0eSAmJiBiU2l6ZSA+PSBtaW5TaGFyZVNpemUgJiYgNCAqIGJTaXplID49IGFTaXplICYmICFi
QmFzZS0+aXNCdWZmZXJSZWFkT25seSgpKSB7CiAgICAgICAgIC8vIC0gYiByZWFjaGVzIHRoZSBi
ZWdpbm5pbmcgb2YgaXRzIGJ1ZmZlciBzbyBpdCBxdWFsaWZpZXMgZm9yIHNoYXJlZCBwcmVwZW5k
CiAgICAgICAgIC8vIC0gYWxzbywgaXQncyBhdCBsZWFzdCBhIHF1YXJ0ZXIgdGhlIGxlbmd0aCBv
ZiBhIC0gcHJlcGVuZGluZyB0byBhIG11Y2ggc2hvcnRlcgogICAgICAgICAvLyAgIHN0cmluZyBk
b2VzIG1vcmUgaGFybSB0aGFuIGdvb2QKQEAgLTEwODMsNyArMTEzNSw3IEBAIFVTdHJpbmcmIFVT
dHJpbmc6OmFwcGVuZChjb25zdCBVU3RyaW5nICZ0KQogICAgICAgICAgICAgbV9yZXAtPmxlbiA9
IGxlbmd0aDsKICAgICAgICAgICAgIG1fcmVwLT5faGFzaCA9IDA7CiAgICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKHRoaXNPZmZzZXQgKyB0aGlzU2l6ZSA9PSBiYXNlLT51c2VkQ2FwYWNpdHkgJiYg
dGhpc1NpemUgPj0gbWluU2hhcmVTaXplKSB7CisgICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsg
dGhpc1NpemUgPT0gYmFzZS0+dXNlZENhcGFjaXR5ICYmIHRoaXNTaXplID49IG1pblNoYXJlU2l6
ZSAmJiAhYmFzZS0+aXNCdWZmZXJSZWFkT25seSgpKSB7CiAgICAgICAgIC8vIHRoaXMgcmVhY2hl
cyB0aGUgZW5kIG9mIHRoZSBidWZmZXIgLSBleHRlbmQgaXQgaWYgaXQncyBsb25nIGVub3VnaCB0
byBhcHBlbmQgdG8KICAgICAgICAgZXhwYW5kQ2FwYWNpdHkobmV3Q2FwYWNpdHlXaXRoT3ZlcmZs
b3dDaGVjayh0aGlzT2Zmc2V0LCBsZW5ndGgpKTsKICAgICAgICAgaWYgKGRhdGEoKSkgewpAQCAt
MTA5MSw3ICsxMTQzLDcgQEAgVVN0cmluZyYgVVN0cmluZzo6YXBwZW5kKGNvbnN0IFVTdHJpbmcg
JnQpCiAgICAgICAgICAgICBtX3JlcCA9IFJlcDo6Y3JlYXRlKG1fcmVwLCAwLCBsZW5ndGgpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gdGhpcyBpcyBzaGFyZWQgd2l0aCBz
b21lb25lIHVzaW5nIG1vcmUgY2FwYWNpdHksIGdvdHRhIG1ha2UgYSB3aG9sZSBuZXcgc3RyaW5n
CisgICAgICAgIC8vIFRoaXMgaXMgc2hhcmVkIGluIHNvbWUgd2F5IHRoYXQgcHJldmVudHMgdXMg
ZnJvbSBtb2RpZnlpbmcgYmFzZSwgc28gd2UgbXVzdCBtYWtlIGEgd2hvbGUgbmV3IHN0cmluZy4K
ICAgICAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gZXhwYW5kZWRTaXplKGxlbmd0aCwgMCk7CiAg
ICAgICAgIFVDaGFyKiBkID0gYWxsb2NDaGFycyhuZXdDYXBhY2l0eSk7CiAgICAgICAgIGlmICgh
ZCkKQEAgLTExNjMsNyArMTIxNSw3IEBAIFVTdHJpbmcmIFVTdHJpbmc6OmFwcGVuZChVQ2hhciBj
KQogICAgICAgICAgICAgbV9yZXAtPmxlbiA9IGxlbmd0aCArIDE7CiAgICAgICAgICAgICBtX3Jl
cC0+X2hhc2ggPSAwOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgbGVu
Z3RoID09IGJhc2UtPnVzZWRDYXBhY2l0eSAmJiBsZW5ndGggPj0gbWluU2hhcmVTaXplKSB7Cisg
ICAgfSBlbHNlIGlmICh0aGlzT2Zmc2V0ICsgbGVuZ3RoID09IGJhc2UtPnVzZWRDYXBhY2l0eSAm
JiBsZW5ndGggPj0gbWluU2hhcmVTaXplICYmICFiYXNlLT5pc0J1ZmZlclJlYWRPbmx5KCkpIHsK
ICAgICAgICAgLy8gdGhpcyByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIHN0cmluZyAtIGV4dGVuZCBp
dCBhbmQgc2hhcmUKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkobmV3Q2FwYWNpdHlXaXRoT3ZlcmZs
b3dDaGVjayh0aGlzT2Zmc2V0LCBsZW5ndGgsIHRydWUpKTsKICAgICAgICAgVUNoYXIqIGQgPSBt
X3JlcC0+ZGF0YSgpOwpAQCAtMTE3Miw3ICsxMjI0LDcgQEAgVVN0cmluZyYgVVN0cmluZzo6YXBw
ZW5kKFVDaGFyIGMpCiAgICAgICAgICAgICBtX3JlcCA9IFJlcDo6Y3JlYXRlKG1fcmVwLCAwLCBs
ZW5ndGggKyAxKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHRoaXMgaXMg
c2hhcmVkIHdpdGggc29tZW9uZSB1c2luZyBtb3JlIGNhcGFjaXR5LCBnb3R0YSBtYWtlIGEgd2hv
bGUgbmV3IHN0cmluZworICAgICAgICAvLyBUaGlzIGlzIHNoYXJlZCBpbiBzb21lIHdheSB0aGF0
IHByZXZlbnRzIHVzIGZyb20gbW9kaWZ5aW5nIGJhc2UsIHNvIHdlIG11c3QgbWFrZSBhIHdob2xl
IG5ldyBzdHJpbmcuCiAgICAgICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IGV4cGFuZGVkU2l6ZShs
ZW5ndGggKyAxLCAwKTsKICAgICAgICAgVUNoYXIqIGQgPSBhbGxvY0NoYXJzKG5ld0NhcGFjaXR5
KTsKICAgICAgICAgaWYgKCFkKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9V
U3RyaW5nLmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAppbmRleCA5Mzg0ZDYw
Li4yOTkwZTk5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaApAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogIENvcHlyaWdodCAoYykgMjAwOSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRS
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL093bkZhc3RNYWxsb2NQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QdHJBbmRGbGFncy5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTc1LDYgKzc3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKICAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgQ3Jv
c3NUaHJlYWRSZWZDb3VudGVkPE93bkZhc3RNYWxsb2NQdHI8VUNoYXI+ID4gU2hhcmVkVUNoYXI7
CiAgICAgICAgIHN0cnVjdCBCYXNlU3RyaW5nOwogICAgICAgICBzdHJ1Y3QgUmVwIDogTm9uY29w
eWFibGUgewogICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKQEAgLTEwMSw2ICsxMDQsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIC8vIFJldHVybnMgVVN0cmluZzo6UmVwOjpu
dWxsIGZvciBudWxsIGlucHV0IG9yIGNvbnZlcnNpb24gZmFpbHVyZS4KICAgICAgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJlcD4gY3JlYXRlRnJvbVVURjgoY29uc3QgY2hhciopOwogCisgICAg
ICAgICAgICAvLyBVc2VzIFNoYXJlZFVDaGFyIHRvIGhhdmUgam9pbnQgb3duZXJzaGlwIG92ZXIg
dGhlIFVDaGFyKi4KKyAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlcD4gc2hhcmUoVUNo
YXIqLCBpbnQsIFBhc3NSZWZQdHI8U2hhcmVkVUNoYXI+KTsKKwogICAgICAgICAgICAgdm9pZCBk
ZXN0cm95KCk7CiAKICAgICAgICAgICAgIGJvb2wgYmFzZUlzU2VsZigpIGNvbnN0IHsgcmV0dXJu
IG1faWRlbnRpZmllclRhYmxlQW5kRmxhZ3MuaXNGbGFnU2V0KEJhc2VTdHJpbmdGbGFnKTsgfQpA
QCAtMTQ1LDEzICsxNTEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBib29sIHJl
c2VydmVDYXBhY2l0eShpbnQgY2FwYWNpdHkpOwogCiAgICAgICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgICAgIC8vIGNvbnN0cnVjdG9yIGZvciB1c2UgYnkgQmFzZVN0cmluZyBzdWJjbGFzczsgdGhl
eSBhcmUgdGhlaXIgb3duIGJhc2VzCisgICAgICAgICAgICAvLyBDb25zdHJ1Y3RvciBmb3IgdXNl
IGJ5IEJhc2VTdHJpbmcgc3ViY2xhc3M7IHRoZXkgdXNlIHRoZSB1bmlvbiB3aXRoIG1fYmFzZVN0
cmluZyBmb3IgYW5vdGhlciBwdXJwb3NlLgogICAgICAgICAgICAgUmVwKGludCBsZW5ndGgpCiAg
ICAgICAgICAgICAgICAgOiBvZmZzZXQoMCkKICAgICAgICAgICAgICAgICAsIGxlbihsZW5ndGgp
CiAgICAgICAgICAgICAgICAgLCByYygxKQogICAgICAgICAgICAgICAgICwgX2hhc2goMCkKLSAg
ICAgICAgICAgICAgICAsIG1fYmFzZVN0cmluZyhzdGF0aWNfY2FzdDxCYXNlU3RyaW5nKj4odGhp
cykpCisgICAgICAgICAgICAgICAgLCBtX2Jhc2VTdHJpbmcoMCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgIH0KIApAQCAtMTY1LDggKzE3MSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgICAgICAgICB9CiAKLQotICAgICAg
ICAgICAgQmFzZVN0cmluZyogbV9iYXNlU3RyaW5nOworICAgICAgICAgICAgdW5pb24geworICAg
ICAgICAgICAgICAgIC8vIElmICFiYXNlSXNTZWxmKCkKKyAgICAgICAgICAgICAgICBCYXNlU3Ry
aW5nKiBtX2Jhc2VTdHJpbmc7CisgICAgICAgICAgICAgICAgLy8gSWYgYmFzZUlzU2VsZigpCisg
ICAgICAgICAgICAgICAgU2hhcmVkVUNoYXIqIG1fc2hhcmVkQnVmZmVyOworICAgICAgICAgICAg
fTsKIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgLy8gRm9yIFNtYWxsU3RyaW5nU3Rv
cmFnZSB3aGljaCBhbGxvY2F0ZXMgYW4gYXJyYXkgYW5kIGRvZXMgaW5pdGlhbGl6YXRpb24gbWFu
dWFsbHkuCkBAIC0xODAsNyArMTkwLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAKICAgICAgICAg
c3RydWN0IEJhc2VTdHJpbmcgOiBwdWJsaWMgUmVwIHsKLSAgICAgICAgICAgIGJvb2wgaXNTaGFy
ZWQoKSB7IHJldHVybiByYyAhPSAxOyB9CisgICAgICAgICAgICBib29sIGlzU2hhcmVkKCkgeyBy
ZXR1cm4gcmMgIT0gMSB8fCBpc0J1ZmZlclJlYWRPbmx5KCk7IH0KKyAgICAgICAgICAgIHZvaWQg
c2V0U2hhcmVkQnVmZmVyKFBhc3NSZWZQdHI8U2hhcmVkVUNoYXI+KTsKKyAgICAgICAgICAgIFNo
YXJlZFVDaGFyKiBzaGFyZWRCdWZmZXIoKTsKKworICAgICAgICAgICAgYm9vbCBpc0J1ZmZlclJl
YWRPbmx5KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkQnVm
ZmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHNsb3dJc0J1ZmZlclJlYWRPbmx5KCk7CisgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIC8vIHBvdGVudGlhbGx5IHNoYXJlZCBkYXRhLgogICAgICAgICAgICAgVUNoYXIqIGJ1ZjsK
QEAgLTIwNSw2ICsyMjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGJvb2wgc2xvd0lz
QnVmZmVyUmVhZE9ubHkoKTsKKwogICAgICAgICAgICAgZnJpZW5kIHN0cnVjdCBSZXA7CiAgICAg
ICAgICAgICBmcmllbmQgY2xhc3MgU21hbGxTdHJpbmdzU3RvcmFnZTsKICAgICAgICAgICAgIGZy
aWVuZCB2b2lkIGluaXRpYWxpemVVU3RyaW5nKCk7CkBAIC00NTMsMTIgKzQ3NCwxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBVU3RyaW5nOjpCYXNlU3RyaW5nKiBVU3RyaW5nOjpS
ZXA6OmJhc2VTdHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmFzZVN0cmluZzsKKyAg
ICAgICAgcmV0dXJuICFiYXNlSXNTZWxmKCkgPyBtX2Jhc2VTdHJpbmcgOiByZWludGVycHJldF9j
YXN0PEJhc2VTdHJpbmcqPih0aGlzKSA7CiAgICAgfQogCiAgICAgaW5saW5lIGNvbnN0IFVTdHJp
bmc6OkJhc2VTdHJpbmcqIFVTdHJpbmc6OlJlcDo6YmFzZVN0cmluZygpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gbV9iYXNlU3RyaW5nOworICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxS
ZXAqPih0aGlzKS0+YmFzZVN0cmluZygpOwogICAgIH0KIAogI2lmZGVmIE5ERUJVRwpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oIGIvSmF2YVNj
cmlwdENvcmUvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oCmluZGV4IDgyZjFiYTEuLjI4MWRm
YTYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQu
aAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgKQEAgLTM1
LDcgKzM1LDYgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9U
eXBlVHJhaXRzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC02Niw2ICs2NSwxMSBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgdm9pZCBkZXJlZigpOwogICAgICAgICBUKiByZWxlYXNlKCk7
CiAKKyAgICAgICAgYm9vbCBpc1NoYXJlZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAhbV9yZWZDb3VudGVyLmhhc09uZVJlZigpIHx8IChtX3RocmVhZFNhZmVSZWZDb3Vu
dGVyICYmICFtX3RocmVhZFNhZmVSZWZDb3VudGVyLT5oYXNPbmVSZWYoKSk7CisgICAgICAgIH0K
KwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgYm9vbCBtYXlCZVBhc3NlZFRvQW5vdGhlclRocmVh
ZCgpIGNvbnN0IHsgQVNTRVJUKCFtX3RocmVhZElkKTsgcmV0dXJuIG1fcmVmQ291bnRlci5oYXNP
bmVSZWYoKTsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvT3duRmFz
dE1hbGxvY1B0ci5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL093bkZhc3RNYWxsb2NQdHIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzBkMDY0Ci0tLSAvZGV2L251bGwKKysr
IGIvSmF2YVNjcmlwdENvcmUvd3RmL093bkZhc3RNYWxsb2NQdHIuaApAQCAtMCwwICsxLDUyIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIE93bkZhc3RNYWxsb2NQdHJfaAorI2Rl
ZmluZSBPd25GYXN0TWFsbG9jUHRyX2gKKworI2luY2x1ZGUgIkZhc3RNYWxsb2MuaCIKKyNpbmNs
dWRlICJOb25jb3B5YWJsZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworICAgIHRlbXBsYXRlPGNs
YXNzIFQ+IGNsYXNzIE93bkZhc3RNYWxsb2NQdHIgOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGlj
OgorICAgICAgICBleHBsaWNpdCBPd25GYXN0TWFsbG9jUHRyKFQqIHB0cikgOiBtX3B0cihwdHIp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5Pd25GYXN0TWFsbG9jUHRyKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZmFzdEZyZWUobV9wdHIpOworICAgICAgICB9CisKKyAgICAg
ICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICAgICAgVCogcmVsZWFzZSgp
IHsgVCogcHRyID0gbV9wdHI7IG1fcHRyID0gMDsgcmV0dXJuIHB0cjsgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgVCogbV9wdHI7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3Vz
aW5nIFdURjo6T3duRmFzdE1hbGxvY1B0cjsKKworI2VuZGlmIC8vIE93bkZhc3RNYWxsb2NQdHJf
aApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdEdsdWUv
Q2hhbmdlTG9nCmluZGV4IDZlMGE4N2IuLmU2YTg3ODcgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRH
bHVlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAwOS0wNS0yMiAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MTI2CisKKyAgICAgICAgQWRkZWQgZm9yd2Fy
ZGluZyBoZWFkZXJzLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Nyb3NzVGhy
ZWFkUmVmQ291bnRlZC5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYv
T3duRmFzdE1hbGxvY1B0ci5oOiBBZGRlZC4KKwogMjAwOS0wNS0yMyAgRGF2aWQgS2lsemVyICA8
ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFBhcnQgMSBvZiAyOiBCdWcgMjU0OTU6IElt
cGxlbWVudCBQYXNzT3duUHRyIGFuZCByZXBsYWNlIHVzZXMgb2Ygc3RkOjphdXRvX3B0cgpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Nyb3NzVGhyZWFk
UmVmQ291bnRlZC5oIGIvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Nyb3Nz
VGhyZWFkUmVmQ291bnRlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2
OTg3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oPgpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL093bkZhc3RNYWxsb2NQdHIuaCBiL0phdmFT
Y3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25GYXN0TWFsbG9jUHRyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM2ZDgwMQotLS0gL2Rldi9udWxsCisrKyBi
L0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25GYXN0TWFsbG9jUHRyLmgK
QEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL093bkZhc3RNYWxsb2NQdHIu
aD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMTQ4ZDU3Mi4uMWNhMGIzMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAwOS0wNS0yMiAgRGF2aWQgTGV2
aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgZm9yd2FyZGluZyBoZWFkZXJzLgorCisgICAgICAgICog
Rm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Nyb3NzVGhyZWFkUmVmQ291bnRlZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvT3duRmFzdE1hbGxvY1B0ci5oOiBBZGRlZC4K
KwogMjAwOS0wNS0yNSAgRnJpZHJpY2ggU3RyYmEgIDxmcmlkcmljaC5zdHJiYUBibHVld2luLmNo
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggYi9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Dcm9zc1RocmVhZFJlZkNvdW50ZWQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjk4N2VmCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgK
QEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Nyb3NzVGhyZWFkUmVmQ291
bnRlZC5oPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvT3duRmFz
dE1hbGxvY1B0ci5oIGIvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvT3duRmFzdE1hbGxv
Y1B0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNmQ4MDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9Pd25GYXN0TWFsbG9j
UHRyLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL093bkZhc3RNYWxs
b2NQdHIuaD4K
</data>
<flag name="review"
          id="15523"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>