<?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>78610</bug_id>
          
          <creation_ts>2012-02-14 09:38:42 -0800</creation_ts>
          <short_desc>Factor out allocation in CopySpace into a separate CopyAllocator</short_desc>
          <delta_ts>2012-02-20 16:33:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>78573</dependson>
          <blocked>78612</blocked>
    
    <blocked>79053</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556349</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-14 09:38:42 -0800</bug_when>
    <thetext>Filip Pizlo, from bug 75181:

&quot;Also, it would be good if:

...

- The data needed to allocate in the current block was kept in BumpSpace, or in something like a BumpAllocator class.  I.e. if you want to allocate stuff (so you&apos;re either a GC thread or you&apos;re the application) then you have an instance of BumpAllocator that is easily reachable (say by offsetting into JSGlobalData, if you&apos;re the application), and then all of the fields (i.e. m_offset) needed to allocate are inside of BumpAllocator.  Right now you&apos;re taking an extra load to get to the BumpBlock::m_offset.  The BumpBlock::m_offset field can then be updated after you switch from one block to another.

...

The point is that it will (a) simplify the inline asm code that the JIT will use for allocation and (b) speed things up a fair bit as we start relying on this allocator more.&quot;

Couldn&apos;t have said it better myself. This change will also make the overall design between MarkedSpace and CopySpace more consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559854</commentid>
    <comment_count>1</comment_count>
      <attachid>127726</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-18 19:19:28 -0800</bug_when>
    <thetext>Created attachment 127726
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559861</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-18 20:31:13 -0800</bug_when>
    <thetext>I also moved a bunch of stuff from the headers for CopiedSpace to the cpp file to reduce code bloat/compile times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560405</commentid>
    <comment_count>3</comment_count>
      <attachid>127726</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-02-20 15:17:10 -0800</bug_when>
    <thetext>Comment on attachment 127726
Patch

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

You need to add the new files to the many a varied project files that exist, otherwise we may end up with build issues in future when they miss changes to dependencies.

Also add copyright to the new files.

r=me with those fixes, and after adding copyright info to the new files.

&gt; Source/JavaScriptCore/heap/CopiedAllocator.h:1
&gt; +#ifndef CopiedAllocator_h

You need a copyright header here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560427</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-02-20 15:41:53 -0800</bug_when>
    <thetext>Committed r108267: &lt;http://trac.webkit.org/changeset/108267&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127726</attachid>
            <date>2012-02-18 19:19:28 -0800</date>
            <delta_ts>2012-02-20 15:17:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78610-20120218191927.patch</filename>
            <type>text/plain</type>
            <size>29471</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MzE2ZDMxZGJjNmQzNGI0NjZkZDBkMzQwNGNmMzA0NzIzNWViMzQ2Li42YTlkMzU0MmI5ZTZlODZi
YzNkNzdkNWI3YmRlMjQ2MzExOWM4ZmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAxMi0wMi0xOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEZhY3RvciBvdXQgYWxsb2NhdGlvbiBpbiBDb3B5U3BhY2UgaW50
byBhIHNlcGFyYXRlIENvcHlBbGxvY2F0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc4NjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBuZXcgQ29weUFsbG9jYXRvciBjbGFzcywgd2hpY2gg
YWxsb3dzIHVzIHRvIGRvIGFsbG9jYXRpb25zIHdpdGhvdXQgCisgICAgICAgIGhhdmluZyB0byBs
b2FkIHRoZSBjdXJyZW50IG9mZnNldCBhbmQgc3RvcmUgdGhlIGN1cnJlbnQgb2Zmc2V0IGluIHRo
ZSBjdXJyZW50IAorICAgICAgICBibG9jay4gVGhpcyBjaGFuZ2Ugd2lsbCBhbGxvdyB1cyB0byBl
YXNpbHkgZG8gaW5saW5lIGFzc2VtYmx5IGluIHRoZSBKSVQgZm9yIAorICAgICAgICBhcnJheSBh
bGxvY2F0aW9ucy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogaGVhcC9Db3BpZWRBbGxvY2F0b3IuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAoQ29waWVkQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6Q29w
aWVkQWxsb2NhdG9yOjpjdXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0
b3I6OkNvcGllZEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkNvcGllZEFsbG9jYXRvcjo6YWxs
b2NhdGUpOgorICAgICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OmZpdHNJbkN1cnJlbnRCbG9j
ayk6CisgICAgICAgIChKU0M6OkNvcGllZEFsbG9jYXRvcjo6d2FzTGFzdEFsbG9jYXRpb24pOgor
ICAgICAgICAoSlNDOjpDb3BpZWRBbGxvY2F0b3I6OnN0YXJ0ZWRDb3B5aW5nKToKKyAgICAgICAg
KEpTQzo6Q29waWVkQWxsb2NhdG9yOjpyZXNldEN1cnJlbnRCbG9jayk6CisgICAgICAgIChKU0M6
OkNvcGllZEFsbG9jYXRvcjo6Y3VycmVudFV0aWxpemF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29w
aWVkQWxsb2NhdG9yOjpyZXNldExhc3RBbGxvY2F0aW9uKToKKyAgICAgICAgKiBoZWFwL0NvcGll
ZEJsb2NrLmg6CisgICAgICAgIChDb3BpZWRCbG9jayk6CisgICAgICAgICogaGVhcC9Db3BpZWRT
cGFjZS5jcHA6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpDb3BpZWRTcGFjZSk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6aW5pdCk6CisgICAgICAgIChK
U0M6OkNvcGllZFNwYWNlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29w
aWVkU3BhY2U6OnRyeUFsbG9jYXRlT3ZlcnNpemUpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFj
ZTo6dHJ5UmVhbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjp0cnlSZWFsbG9j
YXRlT3ZlcnNpemUpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6ZG9uZUZpbGxpbmdCbG9j
ayk6CisgICAgICAgIChKU0M6OkNvcGllZFNwYWNlOjpkb25lQ29weWluZyk6CisgICAgICAgIChK
U0M6OkNvcGllZFNwYWNlOjpnZXRGcmVzaEJsb2NrKToKKyAgICAgICAgKiBoZWFwL0NvcGllZFNw
YWNlLmg6CisgICAgICAgIChDb3BpZWRTcGFjZSk6CisgICAgICAgICogaGVhcC9Db3BpZWRTcGFj
ZUlubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OnN0YXJ0ZWRDb3B5
aW5nKToKKyAgICAgICAgKEpTQzo6Q29waWVkU3BhY2U6OmFkZE5ld0Jsb2NrKToKKyAgICAgICAg
KEpTQzo6Q29waWVkU3BhY2U6OmFsbG9jYXRlTmV3QmxvY2spOgorICAgICAgICAoSlNDOjpDb3Bp
ZWRTcGFjZTo6Zml0c0luQmxvY2spOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6dHJ5QWxs
b2NhdGUpOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6YWxsb2NhdGVGcm9tQmxvY2spOgor
ICAgICAgICAqIGhlYXAvSGVhcEJsb2NrLmg6CisgICAgICAgIChIZWFwQmxvY2spOgorCiAyMDEy
LTAyLTE4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IHRoZSBs
aWJjKysgYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE5MzkyNDdmN2Rh
MTRhODFkOGZjMjExNmFiOWYwYzBlN2EyMDM4ZWEuLmI4NDg4YWYyODY3NzQ5MjM3YjQzMjI1NTA1
MTNjMGVjN2Y5MDVmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03NjEsNiAr
NzYxLDcgQEAKIAkJQzJDOEQwMzExNEEzQ0VGQzAwNTc4RTY1IC8qIEhlYXBCbG9jay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJDOEQwMkYxNEEzQ0VG
QzAwNTc4RTY1IC8qIEhlYXBCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUMyRDlDQTEzMTRCQ0MwNDYwMDMwNEI0NiAvKiBDaGVja2VkQm9v
bGVhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJE
OUNBMTIxNEJDQzA0NjAwMzA0QjQ2IC8qIENoZWNrZWRCb29sZWFuLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJFQUEzRkExNDlBODM1RTAwRkNF
MTEyIC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMkVBQTNGODE0OUE4MzA4MDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMkVBRDJGQzE0
RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkVBRDJGQjE0RjAyNDk4MDBBNEIxNTkgLyogQ29w
aWVkQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQzJFRTU5QTAxM0ZDOTczRjAwOUNFQUZFIC8qIERlY2ltYWxOdW1iZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRUU1OTlFMTNGQzk3
MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJFRTU5QTExM0ZDOTc2ODAwOUNFQUZFIC8qIERlY2lt
YWxOdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJFRTU5OUQxM0ZDOTcyQTAwOUNFQUZFIC8qIERlY2ltYWxOdW1iZXIuY3BwICovOyB9Owog
CQlEN0E0NkE0RjEzMzhGRkVBMDBFRDY5NUMgLyogRHluYW1pY0Fubm90YXRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzVBRjU5NjEyRjhDQjk1
MDBGQzBBREYgLyogRHluYW1pY0Fubm90YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE1NzgsNiArMTU3OSw3IEBACiAJCUMyQzhEMDJG
MTRBM0NFRkMwMDU3OEU2NSAvKiBIZWFwQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSGVhcEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRDlD
QTEyMTRCQ0MwNDYwMDMwNEI0NiAvKiBDaGVja2VkQm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDaGVja2VkQm9vbGVhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMkVBQTNGODE0OUE4MzA4MDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29waWVkU3BhY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzJFQUQyRkIxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3BpZWRBbGxvY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJFRTU5OUQxM0ZDOTcyQTAwOUNFQUZFIC8q
IERlY2ltYWxOdW1iZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGVjaW1hbE51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRUU1OTlF
MTNGQzk3MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlY2ltYWxOdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODQ0LDYgKzE4NDYsNyBAQAogCQkxNDJFMzEyQTEz
NEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJQzJFQUQyRkIxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRv
ci5oICovLAogCQkJCUMyQzhEMDJFMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oICov
LAogCQkJCUMyNDAzMDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi8sCiAJ
CQkJQzJFQUEzRjgxNDlBODMwODAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmggKi8sCkBAIC0yODAx
LDYgKzI4MDQsNyBAQAogCQkJCUE3M0JFMTY5MTQ4NDIwNTIwMDkxMjA0QiAvKiBBcnJheUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJEOUNBMTMxNEJDQzA0NjAwMzA0QjQ2IC8qIENoZWNr
ZWRCb29sZWFuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNCRTE2QjE0ODQyMDUyMDA5MTIwNEIg
LyogQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQlDMkVBRDJGQzE0RjAyNDk4
MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkI5MTZD
MjE0REEwMTRFMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzNFNjBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEMzRTcwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5UHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZEFsbG9jYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2Nh
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjZlNjIxY2YxZmIxZWFiNmU1MzBiYTFhMzQwMDM3NWFjYmUxOGEy
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEFs
bG9jYXRvci5oCkBAIC0wLDAgKzEsODAgQEAKKyNpZm5kZWYgQ29waWVkQWxsb2NhdG9yX2gKKyNk
ZWZpbmUgQ29waWVkQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgIkNvcGllZEJsb2NrLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDb3BpZWRBbGxvY2F0b3IgeworcHVibGljOgorICAgIENv
cGllZEFsbG9jYXRvcigpOworICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7CisgICAgYm9vbCBm
aXRzSW5DdXJyZW50QmxvY2soc2l6ZV90KTsKKyAgICBib29sIHdhc0xhc3RBbGxvY2F0aW9uKHZv
aWQqLCBzaXplX3QpOworICAgIHZvaWQgc3RhcnRlZENvcHlpbmcoKTsKKyAgICB2b2lkIHJlc2V0
Q3VycmVudEJsb2NrKENvcGllZEJsb2NrKik7CisgICAgdm9pZCByZXNldExhc3RBbGxvY2F0aW9u
KHZvaWQqKTsKKyAgICBzaXplX3QgY3VycmVudFV0aWxpemF0aW9uKCk7CisKK3ByaXZhdGU6Cisg
ICAgQ29waWVkQmxvY2sqIGN1cnJlbnRCbG9jaygpIHsgcmV0dXJuIG1fY3VycmVudEJsb2NrOyB9
CisKKyAgICBjaGFyKiBtX2N1cnJlbnRPZmZzZXQ7CisgICAgQ29waWVkQmxvY2sqIG1fY3VycmVu
dEJsb2NrOyAKK307CisKK2lubGluZSBDb3BpZWRBbGxvY2F0b3I6OkNvcGllZEFsbG9jYXRvcigp
CisgICAgOiBtX2N1cnJlbnRPZmZzZXQoMCkKKyAgICAsIG1fY3VycmVudEJsb2NrKDApCit7Cit9
CisKK2lubGluZSB2b2lkKiBDb3BpZWRBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBieXRlcykK
K3sKKyAgICBBU1NFUlQobV9jdXJyZW50T2Zmc2V0KTsKKyAgICBBU1NFUlQoZml0c0luQ3VycmVu
dEJsb2NrKGJ5dGVzKSk7CisgICAgdm9pZCogcHRyID0gc3RhdGljX2Nhc3Q8dm9pZCo+KG1fY3Vy
cmVudE9mZnNldCk7CisgICAgbV9jdXJyZW50T2Zmc2V0ICs9IGJ5dGVzOworICAgIEFTU0VSVChp
c1BvaW50ZXJBbGlnbmVkKHB0cikpOworICAgIHJldHVybiBwdHI7Cit9CisKK2lubGluZSBib29s
IENvcGllZEFsbG9jYXRvcjo6Zml0c0luQ3VycmVudEJsb2NrKHNpemVfdCBieXRlcykKK3sKKyAg
ICByZXR1cm4gbV9jdXJyZW50T2Zmc2V0ICsgYnl0ZXMgPCByZWludGVycHJldF9jYXN0PGNoYXIq
PihtX2N1cnJlbnRCbG9jaykgKyBIZWFwQmxvY2s6OnNfYmxvY2tTaXplICYmIG1fY3VycmVudE9m
ZnNldCArIGJ5dGVzID4gbV9jdXJyZW50T2Zmc2V0OworfQorCitpbmxpbmUgYm9vbCBDb3BpZWRB
bGxvY2F0b3I6Ondhc0xhc3RBbGxvY2F0aW9uKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpCit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihwdHIpICsgc2l6ZSA9PSBtX2N1cnJlbnRPZmZz
ZXQgJiYgcHRyID4gbV9jdXJyZW50QmxvY2sgJiYgcHRyIDwgcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4obV9jdXJyZW50QmxvY2spICsgSGVhcEJsb2NrOjpzX2Jsb2NrU2l6ZTsKK30KKworaW5saW5l
IHZvaWQgQ29waWVkQWxsb2NhdG9yOjpzdGFydGVkQ29weWluZygpCit7CisgICAgaWYgKG1fY3Vy
cmVudEJsb2NrKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9vZmZzZXQgPSBzdGF0aWNfY2Fz
dDx2b2lkKj4obV9jdXJyZW50T2Zmc2V0KTsKKyAgICBtX2N1cnJlbnRPZmZzZXQgPSAwOworICAg
IG1fY3VycmVudEJsb2NrID0gMDsKK30KKworaW5saW5lIHZvaWQgQ29waWVkQWxsb2NhdG9yOjpy
ZXNldEN1cnJlbnRCbG9jayhDb3BpZWRCbG9jayogbmV3QmxvY2spCit7CisgICAgaWYgKG1fY3Vy
cmVudEJsb2NrKQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9vZmZzZXQgPSBzdGF0aWNfY2Fz
dDx2b2lkKj4obV9jdXJyZW50T2Zmc2V0KTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IG5ld0Jsb2Nr
OworICAgIG1fY3VycmVudE9mZnNldCA9IHN0YXRpY19jYXN0PGNoYXIqPihuZXdCbG9jay0+bV9v
ZmZzZXQpOworfQorCitpbmxpbmUgc2l6ZV90IENvcGllZEFsbG9jYXRvcjo6Y3VycmVudFV0aWxp
emF0aW9uKCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2N1cnJlbnRPZmZz
ZXQgLSBtX2N1cnJlbnRCbG9jay0+bV9wYXlsb2FkKTsKK30KKworaW5saW5lIHZvaWQgQ29waWVk
QWxsb2NhdG9yOjpyZXNldExhc3RBbGxvY2F0aW9uKHZvaWQqIHB0cikKK3sKKyAgICBtX2N1cnJl
bnRPZmZzZXQgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
aWVkQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmgKaW5k
ZXggZWE1ZWY4NGM2ZTlmMjhhMjVmZjRhNGJiMWU1YzBmNGM0Yjk3MThkOC4uMzYyMDg2YjMxM2Rk
N2ZhYzUzN2Y4MWI0OTVhOWUyY2I4OTA2YTA2YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db3BpZWRCbG9jay5oCkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIENvcGllZFNwYWNlOwogCiBj
bGFzcyBDb3BpZWRCbG9jayA6IHB1YmxpYyBIZWFwQmxvY2sgewogICAgIGZyaWVuZCBjbGFzcyBD
b3BpZWRTcGFjZTsKKyAgICBmcmllbmQgY2xhc3MgQ29waWVkQWxsb2NhdG9yOwogcHVibGljOgog
ICAgIENvcGllZEJsb2NrKFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbikKICAgICAg
ICAgOiBIZWFwQmxvY2soYWxsb2NhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cGllZFNwYWNlLmNwcAppbmRleCBmZjA1MWQ5NDhmYjc2ZThkZmMxMzk5NWZhZDdiMGJlMmU2YmMw
MzY2Li41MDg2NmMyNTg1N2ViNWJkY2Y4ZjgyNWVhZDlmZmMzMWJlMmRiMjU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRTcGFjZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCkBAIC0zMCwxOSArMzAsMjM0IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitDb3BpZWRTcGFjZTo6Q29waWVkU3BhY2UoSGVhcCogaGVh
cCkKKyAgICA6IG1faGVhcChoZWFwKQorICAgICwgbV90b1NwYWNlKDApCisgICAgLCBtX2Zyb21T
cGFjZSgwKQorICAgICwgbV90b3RhbE1lbW9yeUFsbG9jYXRlZCgwKQorICAgICwgbV90b3RhbE1l
bW9yeVV0aWxpemVkKDApCisgICAgLCBtX2luQ29weWluZ1BoYXNlKGZhbHNlKQorICAgICwgbV9u
dW1iZXJPZkxvYW5lZEJsb2NrcygwKQoreworfQorCit2b2lkIENvcGllZFNwYWNlOjppbml0KCkK
K3sKKyAgICBtX3RvU3BhY2UgPSAmbV9ibG9ja3MxOworICAgIG1fZnJvbVNwYWNlID0gJm1fYmxv
Y2tzMjsKKyAgICAKKyAgICBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkICs9IEhlYXBCbG9jazo6c19i
bG9ja1NpemUgKiBzX2luaXRpYWxCbG9ja051bTsKKworICAgIGlmICghYWRkTmV3QmxvY2soKSkK
KyAgICAgICAgQ1JBU0goKTsKK30gICAKKwogQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRy
eUFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewogICAgIGlm
IChpc092ZXJzaXplKGJ5dGVzKSkKICAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlT3ZlcnNpemUo
Ynl0ZXMsIG91dFB0cik7CiAgICAgCi0gICAgbV90b3RhbE1lbW9yeVV0aWxpemVkICs9IHN0YXRp
Y19jYXN0PHNpemVfdD4oc3RhdGljX2Nhc3Q8Y2hhcio+KG1fY3VycmVudEJsb2NrLT5tX29mZnNl
dCkgLSBtX2N1cnJlbnRCbG9jay0+bV9wYXlsb2FkKTsKKyAgICBtX3RvdGFsTWVtb3J5VXRpbGl6
ZWQgKz0gbV9hbGxvY2F0b3IuY3VycmVudFV0aWxpemF0aW9uKCk7CiAgICAgaWYgKCFhZGROZXdC
bG9jaygpKSB7CiAgICAgICAgICpvdXRQdHIgPSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotICAgIG1fdG9TcGFjZUZpbHRlci5hZGQocmVpbnRlcnByZXRfY2FzdDxCaXRzPihtX2N1
cnJlbnRCbG9jaykpOwotICAgIG1fdG9TcGFjZVNldC5hZGQobV9jdXJyZW50QmxvY2spOwotICAg
ICpvdXRQdHIgPSBhbGxvY2F0ZUZyb21CbG9jayhtX2N1cnJlbnRCbG9jaywgYnl0ZXMpOworICAg
ICpvdXRQdHIgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZShieXRlcyk7CisgICAgQVNTRVJUKCpvdXRQ
dHIpOworICAgIHJldHVybiB0cnVlOworfQorCitDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6
dHJ5QWxsb2NhdGVPdmVyc2l6ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBvdXRQdHIpCit7CisgICAg
QVNTRVJUKGlzT3ZlcnNpemUoYnl0ZXMpKTsKKyAgICAKKyAgICBzaXplX3QgYmxvY2tTaXplID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNfcGFnZVNpemU+KHNpemVvZihDb3BpZWRCbG9jaykg
KyBieXRlcyk7CisgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9jYXRpb24gPSBQYWdlQWxs
b2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKGJsb2NrU2l6ZSwgc19wYWdlU2l6ZSwgT1NBbGxvY2F0
b3I6OkpTR0NIZWFwUGFnZXMpOworICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4oYWxsb2NhdGlv
bikpIHsKKyAgICAgICAgKm91dFB0ciA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0aW9uLmJhc2Uo
KSkgQ29waWVkQmxvY2soYWxsb2NhdGlvbik7CisgICAgbV9vdmVyc2l6ZUJsb2Nrcy5wdXNoKGJs
b2NrKTsKKyAgICBBU1NFUlQoaXNQb2ludGVyQWxpZ25lZChibG9jay0+bV9vZmZzZXQpKTsKKwor
ICAgIG1fb3ZlcnNpemVGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsK
KyAgICAKKyAgICBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkICs9IGJsb2NrU2l6ZTsKKyAgICBtX3Rv
dGFsTWVtb3J5VXRpbGl6ZWQgKz0gYnl0ZXM7CisKKyAgICAqb3V0UHRyID0gYmxvY2stPm1fb2Zm
c2V0OworICAgIHJldHVybiB0cnVlOworfQorCitDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6
dHJ5UmVhbGxvY2F0ZSh2b2lkKiogcHRyLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUp
Cit7CisgICAgaWYgKG9sZFNpemUgPj0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgdm9pZCogb2xkUHRyID0gKnB0cjsKKyAgICBBU1NFUlQoIW1faGVhcC0+Z2xvYmFs
RGF0YSgpLT5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKKworICAgIGlmIChpc092ZXJzaXplKG9s
ZFNpemUpIHx8IGlzT3ZlcnNpemUobmV3U2l6ZSkpCisgICAgICAgIHJldHVybiB0cnlSZWFsbG9j
YXRlT3ZlcnNpemUocHRyLCBvbGRTaXplLCBuZXdTaXplKTsKKworICAgIGlmIChtX2FsbG9jYXRv
ci53YXNMYXN0QWxsb2NhdGlvbihvbGRQdHIsIG9sZFNpemUpKSB7CisgICAgICAgIG1fYWxsb2Nh
dG9yLnJlc2V0TGFzdEFsbG9jYXRpb24ob2xkUHRyKTsKKyAgICAgICAgaWYgKG1fYWxsb2NhdG9y
LmZpdHNJbkN1cnJlbnRCbG9jayhuZXdTaXplKSkgeworICAgICAgICAgICAgbV90b3RhbE1lbW9y
eVV0aWxpemVkICs9IG5ld1NpemUgLSBvbGRTaXplOworICAgICAgICAgICAgcmV0dXJuIG1fYWxs
b2NhdG9yLmFsbG9jYXRlKG5ld1NpemUpOworICAgICAgICB9CisgICAgfQorICAgIG1fdG90YWxN
ZW1vcnlVdGlsaXplZCAtPSBvbGRTaXplOworCisgICAgdm9pZCogcmVzdWx0ID0gMDsKKyAgICBp
ZiAoIXRyeUFsbG9jYXRlKG5ld1NpemUsICZyZXN1bHQpKSB7CisgICAgICAgICpwdHIgPSAwOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1lbWNweShyZXN1bHQsIG9sZFB0ciwg
b2xkU2l6ZSk7CisgICAgKnB0ciA9IHJlc3VsdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ2hl
Y2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OnRyeVJlYWxsb2NhdGVPdmVyc2l6ZSh2b2lkKiogcHRy
LCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgQVNTRVJUKGlzT3ZlcnNp
emUob2xkU2l6ZSkgfHwgaXNPdmVyc2l6ZShuZXdTaXplKSk7CisgICAgQVNTRVJUKG5ld1NpemUg
PiBvbGRTaXplKTsKKworICAgIHZvaWQqIG9sZFB0ciA9ICpwdHI7CisgICAgCisgICAgdm9pZCog
bmV3UHRyID0gMDsKKyAgICBpZiAoIXRyeUFsbG9jYXRlT3ZlcnNpemUobmV3U2l6ZSwgJm5ld1B0
cikpIHsKKyAgICAgICAgKnB0ciA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgbWVtY3B5KG5ld1B0ciwgb2xkUHRyLCBvbGRTaXplKTsKKworICAgIGlmIChpc092ZXJzaXpl
KG9sZFNpemUpKSB7CisgICAgICAgIENvcGllZEJsb2NrKiBvbGRCbG9jayA9IG92ZXJzaXplQmxv
Y2tGb3Iob2xkUHRyKTsKKyAgICAgICAgbV9vdmVyc2l6ZUJsb2Nrcy5yZW1vdmUob2xkQmxvY2sp
OworICAgICAgICBvbGRCbG9jay0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICAgICAg
bV90b3RhbE1lbW9yeUFsbG9jYXRlZCAtPSBvbGRTaXplICsgc2l6ZW9mKENvcGllZEJsb2NrKTsK
KyAgICB9CisgICAgCisgICAgbV90b3RhbE1lbW9yeVV0aWxpemVkIC09IG9sZFNpemU7CisKKyAg
ICAqcHRyID0gbmV3UHRyOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvcGllZFNwYWNl
Ojpkb25lRmlsbGluZ0Jsb2NrKENvcGllZEJsb2NrKiBibG9jaykKK3sKKyAgICBBU1NFUlQoYmxv
Y2spOworICAgIEFTU0VSVChibG9jay0+bV9vZmZzZXQgPCByZWludGVycHJldF9jYXN0PGNoYXIq
PihibG9jaykgKyBIZWFwQmxvY2s6OnNfYmxvY2tTaXplKTsKKyAgICBBU1NFUlQobV9pbkNvcHlp
bmdQaGFzZSk7CisKKyAgICBpZiAoYmxvY2stPm1fb2Zmc2V0ID09IGJsb2NrLT5tX3BheWxvYWQp
IHsKKyAgICAgICAgcmVjeWNsZUJsb2NrKGJsb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdG9TcGFjZUxvY2spOworICAg
ICAgICBtX3RvU3BhY2UtPnB1c2goYmxvY2spOworICAgICAgICBtX3RvU3BhY2VTZXQuYWRkKGJs
b2NrKTsKKyAgICAgICAgbV90b1NwYWNlRmlsdGVyLmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+
KGJsb2NrKSk7CisgICAgfQorCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9t
ZW1vcnlTdGF0c0xvY2spOworICAgICAgICBtX3RvdGFsTWVtb3J5VXRpbGl6ZWQgKz0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzdGF0aWNfY2FzdDxjaGFyKj4oYmxvY2stPm1fb2Zmc2V0KSAtIGJsb2Nr
LT5tX3BheWxvYWQpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbG9hbmVkQmxvY2tzTG9jayk7CisgICAgICAgIEFTU0VSVChtX251bWJlck9mTG9hbmVkQmxv
Y2tzID4gMCk7CisgICAgICAgIG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MtLTsKKyAgICAgICAgaWYg
KCFtX251bWJlck9mTG9hbmVkQmxvY2tzKQorICAgICAgICAgICAgbV9sb2FuZWRCbG9ja3NDb25k
aXRpb24uc2lnbmFsKCk7CisgICAgfQorfQorCit2b2lkIENvcGllZFNwYWNlOjpkb25lQ29weWlu
ZygpCit7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sb2FuZWRCbG9ja3NM
b2NrKTsKKyAgICAgICAgd2hpbGUgKG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3MgPiAwKQorICAgICAg
ICAgICAgbV9sb2FuZWRCbG9ja3NDb25kaXRpb24ud2FpdChtX2xvYW5lZEJsb2Nrc0xvY2spOwor
ICAgIH0KKworICAgIEFTU0VSVChtX2luQ29weWluZ1BoYXNlKTsKKyAgICBtX2luQ29weWluZ1Bo
YXNlID0gZmFsc2U7CisgICAgd2hpbGUgKCFtX2Zyb21TcGFjZS0+aXNFbXB0eSgpKSB7CisgICAg
ICAgIENvcGllZEJsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PENvcGllZEJsb2NrKj4obV9mcm9t
U3BhY2UtPnJlbW92ZUhlYWQoKSk7CisgICAgICAgIGlmIChibG9jay0+bV9pc1Bpbm5lZCkgewor
ICAgICAgICAgICAgYmxvY2stPm1faXNQaW5uZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fdG9T
cGFjZS0+cHVzaChibG9jayk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fdG9TcGFjZVNldC5yZW1vdmUoYmxvY2spOworICAgICAgICB7CisgICAgICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9oZWFwLT5tX2ZyZWVCbG9ja0xvY2spOworICAgICAgICAg
ICAgbV9oZWFwLT5tX2ZyZWVCbG9ja3MucHVzaChibG9jayk7CisgICAgICAgICAgICBtX2hlYXAt
Pm1fbnVtYmVyT2ZGcmVlQmxvY2tzKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDb3BpZWRC
bG9jayogY3VyciA9IHN0YXRpY19jYXN0PENvcGllZEJsb2NrKj4obV9vdmVyc2l6ZUJsb2Nrcy5o
ZWFkKCkpOworICAgIHdoaWxlIChjdXJyKSB7CisgICAgICAgIENvcGllZEJsb2NrKiBuZXh0ID0g
c3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sqPihjdXJyLT5uZXh0KCkpOworICAgICAgICBpZiAoIWN1
cnItPm1faXNQaW5uZWQpIHsKKyAgICAgICAgICAgIG1fb3ZlcnNpemVCbG9ja3MucmVtb3ZlKGN1
cnIpOworICAgICAgICAgICAgbV90b3RhbE1lbW9yeUFsbG9jYXRlZCAtPSBjdXJyLT5tX2FsbG9j
YXRpb24uc2l6ZSgpOworICAgICAgICAgICAgbV90b3RhbE1lbW9yeVV0aWxpemVkIC09IGN1cnIt
Pm1fYWxsb2NhdGlvbi5zaXplKCkgLSBzaXplb2YoQ29waWVkQmxvY2spOworICAgICAgICAgICAg
Y3Vyci0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBjdXJyLT5tX2lzUGlubmVkID0gZmFsc2U7CisgICAgICAgIGN1cnIgPSBuZXh0OworICAg
IH0KKworICAgIGlmICghbV90b1NwYWNlLT5oZWFkKCkpIHsKKyAgICAgICAgaWYgKCFhZGROZXdC
bG9jaygpKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9hbGxv
Y2F0b3IucmVzZXRDdXJyZW50QmxvY2soc3RhdGljX2Nhc3Q8Q29waWVkQmxvY2sqPihtX3RvU3Bh
Y2UtPmhlYWQoKSkpOworfQorCitDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6Z2V0RnJlc2hC
bG9jayhBbGxvY2F0aW9uRWZmb3J0IGFsbG9jYXRpb25FZmZvcnQsIENvcGllZEJsb2NrKiogb3V0
QmxvY2spCit7CisgICAgSGVhcEJsb2NrKiBoZWFwQmxvY2sgPSAwOworICAgIENvcGllZEJsb2Nr
KiBibG9jayA9IDA7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9oZWFwLT5t
X2ZyZWVCbG9ja0xvY2spOworICAgICAgICBpZiAoIW1faGVhcC0+bV9mcmVlQmxvY2tzLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgaGVhcEJsb2NrID0gbV9oZWFwLT5tX2ZyZWVCbG9ja3MucmVt
b3ZlSGVhZCgpOworICAgICAgICAgICAgbV9oZWFwLT5tX251bWJlck9mRnJlZUJsb2Nrcy0tOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmIChoZWFwQmxvY2spCisgICAgICAgIGJsb2NrID0gbmV3
IChOb3ROdWxsLCBoZWFwQmxvY2spIENvcGllZEJsb2NrKGhlYXBCbG9jay0+bV9hbGxvY2F0aW9u
KTsKKyAgICBlbHNlIGlmIChhbGxvY2F0aW9uRWZmb3J0ID09IEFsbG9jYXRpb25NdXN0U3VjY2Vl
ZCkgeworICAgICAgICBpZiAoIWFsbG9jYXRlTmV3QmxvY2soJmJsb2NrKSkgeworICAgICAgICAg
ICAgKm91dEJsb2NrID0gMDsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
QVNTRVJUKGFsbG9jYXRpb25FZmZvcnQgPT0gQWxsb2NhdGlvbkNhbkZhaWwpOworICAgICAgICBp
ZiAobV9oZWFwLT53YXRlck1hcmsoKSA+PSBtX2hlYXAtPmhpZ2hXYXRlck1hcmsoKSAmJiBtX2hl
YXAtPm1faXNTYWZlVG9Db2xsZWN0KQorICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0KEhlYXA6
OkRvTm90U3dlZXApOworICAgICAgICAKKyAgICAgICAgaWYgKCFnZXRGcmVzaEJsb2NrKEFsbG9j
YXRpb25NdXN0U3VjY2VlZCwgJmJsb2NrKSkgeworICAgICAgICAgICAgKm91dEJsb2NrID0gMDsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChibG9jayk7CisgICAgQVNTRVJUKGlz
UG9pbnRlckFsaWduZWQoYmxvY2stPm1fb2Zmc2V0KSk7CisgICAgKm91dEJsb2NrID0gYmxvY2s7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZFNwYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRT
cGFjZS5oCmluZGV4IDU3NWY1YTg0NTFiMzk4MmI2NzU3NjA5NTIxODk5M2VhYWIzN2M2ZDUuLjI4
NWUyYjlhMjEyYmNlNzVlYWYxOGFkMWYxZTNhYjc2NTk1YmFlZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBDb3Bp
ZWRTcGFjZV9oCiAjZGVmaW5lIENvcGllZFNwYWNlX2gKIAorI2luY2x1ZGUgIkNvcGllZEFsbG9j
YXRvci5oIgogI2luY2x1ZGUgIkhlYXBCbG9jay5oIgogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRl
ci5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC03MCw3ICs3MSw2IEBAIHByaXZh
dGU6CiAgICAgQ2hlY2tlZEJvb2xlYW4gdHJ5QWxsb2NhdGVTbG93Q2FzZShzaXplX3QsIHZvaWQq
Kik7CiAgICAgQ2hlY2tlZEJvb2xlYW4gYWRkTmV3QmxvY2soKTsKICAgICBDaGVja2VkQm9vbGVh
biBhbGxvY2F0ZU5ld0Jsb2NrKENvcGllZEJsb2NrKiopOwotICAgIGJvb2wgZml0c0luQ3VycmVu
dEJsb2NrKHNpemVfdCk7CiAgICAgCiAgICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlRnJvbUJsb2Nr
KENvcGllZEJsb2NrKiwgc2l6ZV90KTsKICAgICBDaGVja2VkQm9vbGVhbiB0cnlBbGxvY2F0ZU92
ZXJzaXplKHNpemVfdCwgdm9pZCoqKTsKQEAgLTg3LDcgKzg3LDcgQEAgcHJpdmF0ZToKIAogICAg
IEhlYXAqIG1faGVhcDsKIAotICAgIENvcGllZEJsb2NrKiBtX2N1cnJlbnRCbG9jazsKKyAgICBD
b3BpZWRBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CiAKICAgICBUaW55Qmxvb21GaWx0ZXIgbV90b1Nw
YWNlRmlsdGVyOwogICAgIFRpbnlCbG9vbUZpbHRlciBtX292ZXJzaXplRmlsdGVyOwpAQCAtMTEy
LDEyICsxMTIsMTEgQEAgcHJpdmF0ZToKICAgICBUaHJlYWRDb25kaXRpb24gbV9sb2FuZWRCbG9j
a3NDb25kaXRpb247CiAgICAgc2l6ZV90IG1fbnVtYmVyT2ZMb2FuZWRCbG9ja3M7CiAKLSAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tTaXplID0gNjQgKiBLQjsKICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IHNfbWF4QWxsb2NhdGlvblNpemUgPSAzMiAqIEtCOwogICAgIHN0YXRpYyBjb25z
dCBzaXplX3Qgc19wYWdlU2l6ZSA9IDQgKiBLQjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNf
cGFnZU1hc2sgPSB+KHNfcGFnZVNpemUgLSAxKTsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNf
aW5pdGlhbEJsb2NrTnVtID0gMTY7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrTWFz
ayA9IH4oc19ibG9ja1NpemUgLSAxKTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tN
YXNrID0gfihIZWFwQmxvY2s6OnNfYmxvY2tTaXplIC0gMSk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNl
SW5saW5lTWV0aG9kcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJ
bmxpbmVNZXRob2RzLmgKaW5kZXggMWI0NzU4ODJlOGQ1ZDI5ZWRmMjc1ZmIyMDUyYjNjZTk0Njli
NmI2Mi4uNjU0MWRkMzIwMGFjYmY1NWQ1MmY4NjcwOGE1NmEyYWJkODJkOTJhMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgKQEAgLTM1LDI5ICszNSw2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgQ29waWVk
U3BhY2U6OkNvcGllZFNwYWNlKEhlYXAqIGhlYXApCi0gICAgOiBtX2hlYXAoaGVhcCkKLSAgICAs
IG1fY3VycmVudEJsb2NrKDApCi0gICAgLCBtX3RvU3BhY2UoMCkKLSAgICAsIG1fZnJvbVNwYWNl
KDApCi0gICAgLCBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkKDApCi0gICAgLCBtX3RvdGFsTWVtb3J5
VXRpbGl6ZWQoMCkKLSAgICAsIG1faW5Db3B5aW5nUGhhc2UoZmFsc2UpCi0gICAgLCBtX251bWJl
ck9mTG9hbmVkQmxvY2tzKDApCi17Ci19Ci0KLWlubGluZSB2b2lkIENvcGllZFNwYWNlOjppbml0
KCkKLXsKLSAgICBtX3RvU3BhY2UgPSAmbV9ibG9ja3MxOwotICAgIG1fZnJvbVNwYWNlID0gJm1f
YmxvY2tzMjsKLSAgICAKLSAgICBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkICs9IHNfYmxvY2tTaXpl
ICogc19pbml0aWFsQmxvY2tOdW07Ci0KLSAgICBpZiAoIWFkZE5ld0Jsb2NrKCkpCi0gICAgICAg
IENSQVNIKCk7Ci19ICAgCi0KIGlubGluZSBib29sIENvcGllZFNwYWNlOjpjb250YWlucyh2b2lk
KiBwdHIsIENvcGllZEJsb2NrKiYgcmVzdWx0KQogewogICAgIENvcGllZEJsb2NrKiBibG9jayA9
IGJsb2NrRm9yKHB0cik7CkBAIC03Nyw2ICs1NCw3IEBAIGlubGluZSB2b2lkIENvcGllZFNwYWNl
OjpzdGFydGVkQ29weWluZygpCiAgICAgbV90b1NwYWNlID0gdGVtcDsKIAogICAgIG1fdG9TcGFj
ZUZpbHRlci5yZXNldCgpOworICAgIG1fYWxsb2NhdG9yLnN0YXJ0ZWRDb3B5aW5nKCk7CiAKICAg
ICBtX3RvdGFsTWVtb3J5VXRpbGl6ZWQgPSAwOwogCkBAIC04NSw4MiArNjMsNiBAQCBpbmxpbmUg
dm9pZCBDb3BpZWRTcGFjZTo6c3RhcnRlZENvcHlpbmcoKQogICAgIG1faW5Db3B5aW5nUGhhc2Ug
PSB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKQotewot
ICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9hbmVkQmxvY2tzTG9jayk7Ci0g
ICAgICAgIHdoaWxlIChtX251bWJlck9mTG9hbmVkQmxvY2tzID4gMCkKLSAgICAgICAgICAgIG1f
bG9hbmVkQmxvY2tzQ29uZGl0aW9uLndhaXQobV9sb2FuZWRCbG9ja3NMb2NrKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSk7Ci0gICAgbV9pbkNvcHlpbmdQaGFzZSA9IGZh
bHNlOwotICAgIHdoaWxlICghbV9mcm9tU3BhY2UtPmlzRW1wdHkoKSkgewotICAgICAgICBDb3Bp
ZWRCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+KG1fZnJvbVNwYWNlLT5y
ZW1vdmVIZWFkKCkpOwotICAgICAgICBpZiAoYmxvY2stPm1faXNQaW5uZWQpIHsKLSAgICAgICAg
ICAgIGJsb2NrLT5tX2lzUGlubmVkID0gZmFsc2U7Ci0gICAgICAgICAgICBtX3RvU3BhY2UtPnB1
c2goYmxvY2spOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBt
X3RvU3BhY2VTZXQucmVtb3ZlKGJsb2NrKTsKLSAgICAgICAgewotICAgICAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1faGVhcC0+bV9mcmVlQmxvY2tMb2NrKTsKLSAgICAgICAgICAgIG1faGVh
cC0+bV9mcmVlQmxvY2tzLnB1c2goYmxvY2spOwotICAgICAgICAgICAgbV9oZWFwLT5tX251bWJl
ck9mRnJlZUJsb2NrcysrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ29waWVkQmxvY2sqIGN1
cnIgPSBzdGF0aWNfY2FzdDxDb3BpZWRCbG9jayo+KG1fb3ZlcnNpemVCbG9ja3MuaGVhZCgpKTsK
LSAgICB3aGlsZSAoY3VycikgewotICAgICAgICBDb3BpZWRCbG9jayogbmV4dCA9IHN0YXRpY19j
YXN0PENvcGllZEJsb2NrKj4oY3Vyci0+bmV4dCgpKTsKLSAgICAgICAgaWYgKCFjdXJyLT5tX2lz
UGlubmVkKSB7Ci0gICAgICAgICAgICBtX292ZXJzaXplQmxvY2tzLnJlbW92ZShjdXJyKTsKLSAg
ICAgICAgICAgIG1fdG90YWxNZW1vcnlBbGxvY2F0ZWQgLT0gY3Vyci0+bV9hbGxvY2F0aW9uLnNp
emUoKTsKLSAgICAgICAgICAgIG1fdG90YWxNZW1vcnlVdGlsaXplZCAtPSBjdXJyLT5tX2FsbG9j
YXRpb24uc2l6ZSgpIC0gc2l6ZW9mKENvcGllZEJsb2NrKTsKLSAgICAgICAgICAgIGN1cnItPm1f
YWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY3Vy
ci0+bV9pc1Bpbm5lZCA9IGZhbHNlOwotICAgICAgICBjdXJyID0gbmV4dDsKLSAgICB9Ci0KLSAg
ICBpZiAoIShtX2N1cnJlbnRCbG9jayA9IHN0YXRpY19jYXN0PENvcGllZEJsb2NrKj4obV90b1Nw
YWNlLT5oZWFkKCkpKSkKLSAgICAgICAgaWYgKCFhZGROZXdCbG9jaygpKQotICAgICAgICAgICAg
Q1JBU0goKTsKLX0KLQotaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OmRvbmVGaWxsaW5nQmxvY2so
Q29waWVkQmxvY2sqIGJsb2NrKQotewotICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKGJs
b2NrLT5tX29mZnNldCA8IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJsb2NrKSArIHNfYmxvY2tT
aXplKTsKLSAgICBBU1NFUlQobV9pbkNvcHlpbmdQaGFzZSk7Ci0KLSAgICBpZiAoYmxvY2stPm1f
b2Zmc2V0ID09IGJsb2NrLT5tX3BheWxvYWQpIHsKLSAgICAgICAgcmVjeWNsZUJsb2NrKGJsb2Nr
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fdG9TcGFjZUxvY2spOwotICAgICAgICBtX3RvU3BhY2UtPnB1c2goYmxvY2spOwot
ICAgICAgICBtX3RvU3BhY2VTZXQuYWRkKGJsb2NrKTsKLSAgICAgICAgbV90b1NwYWNlRmlsdGVy
LmFkZChyZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKSk7Ci0gICAgfQotCi0gICAgewotICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tZW1vcnlTdGF0c0xvY2spOwotICAgICAgICBtX3Rv
dGFsTWVtb3J5VXRpbGl6ZWQgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0aWNfY2FzdDxjaGFy
Kj4oYmxvY2stPm1fb2Zmc2V0KSAtIGJsb2NrLT5tX3BheWxvYWQpOwotICAgIH0KLQotICAgIHsK
LSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9hbmVkQmxvY2tzTG9jayk7Ci0gICAgICAg
IEFTU0VSVChtX251bWJlck9mTG9hbmVkQmxvY2tzID4gMCk7Ci0gICAgICAgIG1fbnVtYmVyT2ZM
b2FuZWRCbG9ja3MtLTsKLSAgICAgICAgaWYgKCFtX251bWJlck9mTG9hbmVkQmxvY2tzKQotICAg
ICAgICAgICAgbV9sb2FuZWRCbG9ja3NDb25kaXRpb24uc2lnbmFsKCk7Ci0gICAgfQotfQotCiBp
bmxpbmUgdm9pZCBDb3BpZWRTcGFjZTo6cmVjeWNsZUJsb2NrKENvcGllZEJsb2NrKiBibG9jaykK
IHsKICAgICB7CkBAIC0xNzgsNDIgKzgwLDYgQEAgaW5saW5lIHZvaWQgQ29waWVkU3BhY2U6OnJl
Y3ljbGVCbG9jayhDb3BpZWRCbG9jayogYmxvY2spCiAgICAgfQogfQogCi1pbmxpbmUgQ2hlY2tl
ZEJvb2xlYW4gQ29waWVkU3BhY2U6OmdldEZyZXNoQmxvY2soQWxsb2NhdGlvbkVmZm9ydCBhbGxv
Y2F0aW9uRWZmb3J0LCBDb3BpZWRCbG9jayoqIG91dEJsb2NrKQotewotICAgIEhlYXBCbG9jayog
aGVhcEJsb2NrID0gMDsKLSAgICBDb3BpZWRCbG9jayogYmxvY2sgPSAwOwotICAgIHsKLSAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faGVhcC0+bV9mcmVlQmxvY2tMb2NrKTsKLSAgICAgICAg
aWYgKCFtX2hlYXAtPm1fZnJlZUJsb2Nrcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGhlYXBC
bG9jayA9IG1faGVhcC0+bV9mcmVlQmxvY2tzLnJlbW92ZUhlYWQoKTsKLSAgICAgICAgICAgIG1f
aGVhcC0+bV9udW1iZXJPZkZyZWVCbG9ja3MtLTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo
aGVhcEJsb2NrKQotICAgICAgICBibG9jayA9IG5ldyAoTm90TnVsbCwgaGVhcEJsb2NrKSBDb3Bp
ZWRCbG9jayhoZWFwQmxvY2stPm1fYWxsb2NhdGlvbik7Ci0gICAgZWxzZSBpZiAoYWxsb2NhdGlv
bkVmZm9ydCA9PSBBbGxvY2F0aW9uTXVzdFN1Y2NlZWQpIHsKLSAgICAgICAgaWYgKCFhbGxvY2F0
ZU5ld0Jsb2NrKCZibG9jaykpIHsKLSAgICAgICAgICAgICpvdXRCbG9jayA9IDA7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChhbGxvY2F0aW9uRWZmb3J0ID09
IEFsbG9jYXRpb25DYW5GYWlsKTsKLSAgICAgICAgaWYgKG1faGVhcC0+d2F0ZXJNYXJrKCkgPj0g
bV9oZWFwLT5oaWdoV2F0ZXJNYXJrKCkgJiYgbV9oZWFwLT5tX2lzU2FmZVRvQ29sbGVjdCkKLSAg
ICAgICAgICAgIG1faGVhcC0+Y29sbGVjdChIZWFwOjpEb05vdFN3ZWVwKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghZ2V0RnJlc2hCbG9jayhBbGxvY2F0aW9uTXVzdFN1Y2NlZWQsICZibG9jaykp
IHsKLSAgICAgICAgICAgICpvdXRCbG9jayA9IDA7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVChpc1BvaW50ZXJBbGlnbmVkKGJsb2NrLT5tX29m
ZnNldCkpOwotICAgICpvdXRCbG9jayA9IGJsb2NrOwotICAgIHJldHVybiB0cnVlOwotfQotCiBp
bmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6OmJvcnJvd0Jsb2NrKENvcGllZEJsb2Nr
Kiogb3V0QmxvY2spCiB7CiAgICAgQ29waWVkQmxvY2sqIGJsb2NrID0gMDsKQEAgLTIzOCwxMyAr
MTA0LDE1IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6YWRkTmV3QmxvY2so
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIG1fdG9TcGFjZS0+cHVzaChi
bG9jayk7Ci0gICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKKyAgICBtX3RvU3BhY2VGaWx0ZXIu
YWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oYmxvY2spKTsKKyAgICBtX3RvU3BhY2VTZXQuYWRk
KGJsb2NrKTsKKyAgICBtX2FsbG9jYXRvci5yZXNldEN1cnJlbnRCbG9jayhibG9jayk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6YWxs
b2NhdGVOZXdCbG9jayhDb3BpZWRCbG9jayoqIG91dEJsb2NrKQogewotICAgIFBhZ2VBbGxvY2F0
aW9uQWxpZ25lZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjphbGxvY2F0ZShz
X2Jsb2NrU2l6ZSwgc19ibG9ja1NpemUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKKyAg
ICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25l
ZDo6YWxsb2NhdGUoSGVhcEJsb2NrOjpzX2Jsb2NrU2l6ZSwgSGVhcEJsb2NrOjpzX2Jsb2NrU2l6
ZSwgT1NBbGxvY2F0b3I6OkpTR0NIZWFwUGFnZXMpOwogICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9v
bD4oYWxsb2NhdGlvbikpIHsKICAgICAgICAgKm91dEJsb2NrID0gMDsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMjUyLDcgKzEyMCw3IEBAIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRT
cGFjZTo6YWxsb2NhdGVOZXdCbG9jayhDb3BpZWRCbG9jayoqIG91dEJsb2NrKQogCiAgICAgewog
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tZW1vcnlTdGF0c0xvY2spOwotICAgICAgICBt
X3RvdGFsTWVtb3J5QWxsb2NhdGVkICs9IHNfYmxvY2tTaXplOworICAgICAgICBtX3RvdGFsTWVt
b3J5QWxsb2NhdGVkICs9IEhlYXBCbG9jazo6c19ibG9ja1NpemU7CiAgICAgfQogCiAgICAgKm91
dEJsb2NrID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0aW9uLmJhc2UoKSkgQ29waWVkQmxvY2soYWxs
b2NhdGlvbik7CkBAIC0yNjEsNDUgKzEyOSwxOCBAQCBpbmxpbmUgQ2hlY2tlZEJvb2xlYW4gQ29w
aWVkU3BhY2U6OmFsbG9jYXRlTmV3QmxvY2soQ29waWVkQmxvY2sqKiBvdXRCbG9jaykKIAogaW5s
aW5lIGJvb2wgQ29waWVkU3BhY2U6OmZpdHNJbkJsb2NrKENvcGllZEJsb2NrKiBibG9jaywgc2l6
ZV90IGJ5dGVzKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oYmxvY2stPm1fb2Zm
c2V0KSArIGJ5dGVzIDwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmxvY2spICsgc19ibG9ja1Np
emUgJiYgc3RhdGljX2Nhc3Q8Y2hhcio+KGJsb2NrLT5tX29mZnNldCkgKyBieXRlcyA+IGJsb2Nr
LT5tX29mZnNldDsKLX0KLQotaW5saW5lIGJvb2wgQ29waWVkU3BhY2U6OmZpdHNJbkN1cnJlbnRC
bG9jayhzaXplX3QgYnl0ZXMpCi17Ci0gICAgcmV0dXJuIGZpdHNJbkJsb2NrKG1fY3VycmVudEJs
b2NrLCBieXRlcyk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihibG9jay0+bV9vZmZz
ZXQpICsgYnl0ZXMgPCByZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykgKyBIZWFwQmxvY2s6
OnNfYmxvY2tTaXplICYmIHN0YXRpY19jYXN0PGNoYXIqPihibG9jay0+bV9vZmZzZXQpICsgYnl0
ZXMgPiBibG9jay0+bV9vZmZzZXQ7CiB9CiAKIGlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRT
cGFjZTo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzLCB2b2lkKiogb3V0UHRyKQogewogICAgIEFT
U0VSVCghbV9oZWFwLT5nbG9iYWxEYXRhKCktPmlzSW5pdGlhbGl6aW5nT2JqZWN0KCkpOwogCi0g
ICAgaWYgKGlzT3ZlcnNpemUoYnl0ZXMpIHx8ICFmaXRzSW5DdXJyZW50QmxvY2soYnl0ZXMpKQor
ICAgIGlmIChpc092ZXJzaXplKGJ5dGVzKSB8fCAhbV9hbGxvY2F0b3IuZml0c0luQ3VycmVudEJs
b2NrKGJ5dGVzKSkKICAgICAgICAgcmV0dXJuIHRyeUFsbG9jYXRlU2xvd0Nhc2UoYnl0ZXMsIG91
dFB0cik7CiAgICAgCi0gICAgKm91dFB0ciA9IGFsbG9jYXRlRnJvbUJsb2NrKG1fY3VycmVudEJs
b2NrLCBieXRlcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBDaGVja2VkQm9vbGVh
biBDb3BpZWRTcGFjZTo6dHJ5QWxsb2NhdGVPdmVyc2l6ZShzaXplX3QgYnl0ZXMsIHZvaWQqKiBv
dXRQdHIpCi17Ci0gICAgQVNTRVJUKGlzT3ZlcnNpemUoYnl0ZXMpKTsKLSAgICAKLSAgICBzaXpl
X3QgYmxvY2tTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNfcGFnZVNpemU+KHNpemVv
ZihDb3BpZWRCbG9jaykgKyBieXRlcyk7Ci0gICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9j
YXRpb24gPSBQYWdlQWxsb2NhdGlvbkFsaWduZWQ6OmFsbG9jYXRlKGJsb2NrU2l6ZSwgc19wYWdl
U2l6ZSwgT1NBbGxvY2F0b3I6OkpTR0NIZWFwUGFnZXMpOwotICAgIGlmICghc3RhdGljX2Nhc3Q8
Ym9vbD4oYWxsb2NhdGlvbikpIHsKLSAgICAgICAgKm91dFB0ciA9IDA7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgQ29waWVkQmxvY2sqIGJsb2NrID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0aW9uLmJhc2UoKSkgQ29waWVkQmxvY2soYWxsb2NhdGlvbik7Ci0gICAgbV9vdmVyc2l6
ZUJsb2Nrcy5wdXNoKGJsb2NrKTsKLSAgICBBU1NFUlQoaXNQb2ludGVyQWxpZ25lZChibG9jay0+
bV9vZmZzZXQpKTsKLQotICAgIG1fb3ZlcnNpemVGaWx0ZXIuYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8
Qml0cz4oYmxvY2spKTsKLSAgICAKLSAgICBtX3RvdGFsTWVtb3J5QWxsb2NhdGVkICs9IGJsb2Nr
U2l6ZTsKLSAgICBtX3RvdGFsTWVtb3J5VXRpbGl6ZWQgKz0gYnl0ZXM7Ci0KLSAgICAqb3V0UHRy
ID0gYmxvY2stPm1fb2Zmc2V0OworICAgICpvdXRQdHIgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZShi
eXRlcyk7CisgICAgQVNTRVJUKCpvdXRQdHIpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0z
MTAsNzEgKzE1MSwxNCBAQCBpbmxpbmUgdm9pZCogQ29waWVkU3BhY2U6OmFsbG9jYXRlRnJvbUJs
b2NrKENvcGllZEJsb2NrKiBibG9jaywgc2l6ZV90IGJ5dGVzKQogICAgIEFTU0VSVChpc1BvaW50
ZXJBbGlnbmVkKGJsb2NrLT5tX29mZnNldCkpOwogICAgIAogICAgIHZvaWQqIHB0ciA9IGJsb2Nr
LT5tX29mZnNldDsKLSAgICBBU1NFUlQoYmxvY2stPm1fb2Zmc2V0ID49IGJsb2NrLT5tX3BheWxv
YWQgJiYgYmxvY2stPm1fb2Zmc2V0IDwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmxvY2spICsg
c19ibG9ja1NpemUpOworICAgIEFTU0VSVChibG9jay0+bV9vZmZzZXQgPj0gYmxvY2stPm1fcGF5
bG9hZCAmJiBibG9jay0+bV9vZmZzZXQgPCByZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykg
KyBIZWFwQmxvY2s6OnNfYmxvY2tTaXplKTsKICAgICBibG9jay0+bV9vZmZzZXQgPSBzdGF0aWNf
Y2FzdDx2b2lkKj4oKHN0YXRpY19jYXN0PGNoYXIqPihwdHIpICsgYnl0ZXMpKTsKLSAgICBBU1NF
UlQoYmxvY2stPm1fb2Zmc2V0ID49IGJsb2NrLT5tX3BheWxvYWQgJiYgYmxvY2stPm1fb2Zmc2V0
IDwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmxvY2spICsgc19ibG9ja1NpemUpOworICAgIEFT
U0VSVChibG9jay0+bV9vZmZzZXQgPj0gYmxvY2stPm1fcGF5bG9hZCAmJiBibG9jay0+bV9vZmZz
ZXQgPCByZWludGVycHJldF9jYXN0PGNoYXIqPihibG9jaykgKyBIZWFwQmxvY2s6OnNfYmxvY2tT
aXplKTsKIAogICAgIEFTU0VSVChpc1BvaW50ZXJBbGlnbmVkKHB0cikpOwogICAgIHJldHVybiBw
dHI7CiB9CiAKLWlubGluZSBDaGVja2VkQm9vbGVhbiBDb3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0
ZSh2b2lkKiogcHRyLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCi17Ci0gICAgaWYg
KG9sZFNpemUgPj0gbmV3U2l6ZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgdm9p
ZCogb2xkUHRyID0gKnB0cjsKLSAgICBBU1NFUlQoIW1faGVhcC0+Z2xvYmFsRGF0YSgpLT5pc0lu
aXRpYWxpemluZ09iamVjdCgpKTsKLQotICAgIGlmIChpc092ZXJzaXplKG9sZFNpemUpIHx8IGlz
T3ZlcnNpemUobmV3U2l6ZSkpCi0gICAgICAgIHJldHVybiB0cnlSZWFsbG9jYXRlT3ZlcnNpemUo
cHRyLCBvbGRTaXplLCBuZXdTaXplKTsKLQotICAgIGlmIChzdGF0aWNfY2FzdDxjaGFyKj4ob2xk
UHRyKSArIG9sZFNpemUgPT0gbV9jdXJyZW50QmxvY2stPm1fb2Zmc2V0ICYmIG9sZFB0ciA+IG1f
Y3VycmVudEJsb2NrICYmIG9sZFB0ciA8IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY3VycmVu
dEJsb2NrKSArIHNfYmxvY2tTaXplKSB7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX29mZnNl
dCA9IG9sZFB0cjsKLSAgICAgICAgaWYgKGZpdHNJbkN1cnJlbnRCbG9jayhuZXdTaXplKSkgewot
ICAgICAgICAgICAgbV90b3RhbE1lbW9yeVV0aWxpemVkICs9IG5ld1NpemUgLSBvbGRTaXplOwot
ICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlRnJvbUJsb2NrKG1fY3VycmVudEJsb2NrLCBuZXdT
aXplKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX3RvdGFsTWVtb3J5VXRpbGl6ZWQgLT0gb2xk
U2l6ZTsKLQotICAgIHZvaWQqIHJlc3VsdCA9IDA7Ci0gICAgaWYgKCF0cnlBbGxvY2F0ZShuZXdT
aXplLCAmcmVzdWx0KSkgewotICAgICAgICAqcHRyID0gMDsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBtZW1jcHkocmVzdWx0LCBvbGRQdHIsIG9sZFNpemUpOwotICAgICpwdHIg
PSByZXN1bHQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBDaGVja2VkQm9vbGVhbiBD
b3BpZWRTcGFjZTo6dHJ5UmVhbGxvY2F0ZU92ZXJzaXplKHZvaWQqKiBwdHIsIHNpemVfdCBvbGRT
aXplLCBzaXplX3QgbmV3U2l6ZSkKLXsKLSAgICBBU1NFUlQoaXNPdmVyc2l6ZShvbGRTaXplKSB8
fCBpc092ZXJzaXplKG5ld1NpemUpKTsKLSAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwot
Ci0gICAgdm9pZCogb2xkUHRyID0gKnB0cjsKLSAgICAKLSAgICB2b2lkKiBuZXdQdHIgPSAwOwot
ICAgIGlmICghdHJ5QWxsb2NhdGVPdmVyc2l6ZShuZXdTaXplLCAmbmV3UHRyKSkgewotICAgICAg
ICAqcHRyID0gMDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBtZW1jcHkobmV3
UHRyLCBvbGRQdHIsIG9sZFNpemUpOwotCi0gICAgaWYgKGlzT3ZlcnNpemUob2xkU2l6ZSkpIHsK
LSAgICAgICAgQ29waWVkQmxvY2sqIG9sZEJsb2NrID0gb3ZlcnNpemVCbG9ja0ZvcihvbGRQdHIp
OwotICAgICAgICBtX292ZXJzaXplQmxvY2tzLnJlbW92ZShvbGRCbG9jayk7Ci0gICAgICAgIG9s
ZEJsb2NrLT5tX2FsbG9jYXRpb24uZGVhbGxvY2F0ZSgpOwotICAgICAgICBtX3RvdGFsTWVtb3J5
QWxsb2NhdGVkIC09IG9sZFNpemUgKyBzaXplb2YoQ29waWVkQmxvY2spOwotICAgIH0KLSAgICAK
LSAgICBtX3RvdGFsTWVtb3J5VXRpbGl6ZWQgLT0gb2xkU2l6ZTsKLQotICAgICpwdHIgPSBuZXdQ
dHI7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGlubGluZSBib29sIENvcGllZFNwYWNlOjppc092
ZXJzaXplKHNpemVfdCBieXRlcykKIHsKICAgICByZXR1cm4gYnl0ZXMgPiBzX21heEFsbG9jYXRp
b25TaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEJsb2Nr
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQmxvY2suaAppbmRleCBiMGVjYjIw
NTk1NmNjZjc0M2UyYmNkY2Y0MDgzYzU2M2U1ZDY0MzI2Li41OTE1MjBkMmI3NTc0N2I0YTM4NDMx
NTUzMzlhMDcyZjBiZDAzODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwQmxvY2su
aApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4K
ICNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb25BbGlnbmVkLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDcsNiArNDgsOCBAQCBwdWJs
aWM6CiAgICAgSGVhcEJsb2NrKiBtX3ByZXY7CiAgICAgSGVhcEJsb2NrKiBtX25leHQ7CiAgICAg
UGFnZUFsbG9jYXRpb25BbGlnbmVkIG1fYWxsb2NhdGlvbjsKKyAgICAKKyAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IHNfYmxvY2tTaXplID0gNjQgKiBLQjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
Qwo=
</data>
<flag name="review"
          id="129927"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>