<?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>30941</bug_id>
          
          <creation_ts>2009-10-29 18:40:23 -0700</creation_ts>
          <short_desc>Refactor DatabaseTask in preparation for removing threadsafe refcounting from it</short_desc>
          <delta_ts>2009-10-30 17:21:20 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>30612</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Titov">dimich</reporter>
          <assigned_to name="Dmitry Titov">dimich</assigned_to>
          <cc>ap</cc>
    
    <cc>levin</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>159184</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-10-29 18:40:23 -0700</bug_when>
    <thetext>DatabaseTask contains lock inside itself so the main thread that posts the task for the database thread can wait of the task for the completion. Some operations on Database are synchronous and they are implemented this way.

This change moves the lock out from the task so it can be created separately and used on the main thread. This removes the need to keep the pointer to the task beyond posting it into the MessageQueue. This is needed to make MessageQueue OwnPtr-like and removing the threadsafe refcounting from the DatabaseTask. Also, the queue of SQL transactions can be just Deque rather then MessageQueue - it doesn&apos;t use the waitForMessage functionality anyways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159187</commentid>
    <comment_count>1</comment_count>
      <attachid>42169</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-10-29 19:02:44 -0700</bug_when>
    <thetext>Created attachment 42169
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159328</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-10-30 09:55:15 -0700</bug_when>
    <thetext>generally, looks reasonable to me

* Maybe ASSERT(synchronizer) in the ctors for the tasks that take references to variables on the callers stack in which the results will be stored.

38 DatabaseTaskSynchronizer::DatabaseTaskSynchronizer()
39     : m_taskCompleted(false)
40 {
41     m_synchronousMutex.set(new Mutex);
42     m_synchronousCondition.set(new ThreadCondition);
43 }

I think these data members should be defined inline w/o heap allocating them, as there&apos;s no reason to construct this class unless its going to be used for sync&apos;ing. As data members of the Task class, they were rarely used, so heap allocating independently in that rare case made sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159363</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-10-30 10:54:40 -0700</bug_when>
    <thetext>Also...

class Database {
  bool m_isProcessingTasks;
};

Maybe rename the new data member to m_isTransactionQueueEnabled.

Yong Li has a patch out for review that uses a very similarly named data member (in the DatabaseThread class i think) for a very different purpose, m_isProcessingTask (singular and actually applies to any DatabaseTask). Renaming this one in the Database class would could avoid cognitive collisions with that.

Also, I think m_isTransactionQueueEnabled is a more accurate name for this new data member irrespective of what&apos;s going on in DatabaseThread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159371</commentid>
    <comment_count>4</comment_count>
      <attachid>42218</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-10-30 11:09:03 -0700</bug_when>
    <thetext>Created attachment 42218
Updated patch.

Updated. All Michael&apos;s comments make perfect sense. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159418</commentid>
    <comment_count>5</comment_count>
      <attachid>42218</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-10-30 13:20:07 -0700</bug_when>
    <thetext>Comment on attachment 42218
Updated patch.

Just a few nits to address on check in.

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; +        (WebCore::DatabaseTask::DatabaseTask): Ctor takes DatabaseTaskSynchronizer which can be NULL.

Use 0 instead of NULL (since NULL isn&apos;t used in the code).

&gt; diff --git a/WebCore/storage/Database.h b/WebCore/storage/Database.h


&gt; @@ -56,43 +78,19 @@ void DatabaseTask::performTask()
&gt; +    if(m_synchronizer)

add space after if.


&gt; diff --git a/WebCore/storage/DatabaseTask.h b/WebCore/storage/DatabaseTask.h
&gt; +    static PassRefPtr&lt;DatabaseOpenTask&gt; create(Database* db, DatabaseTaskSynchronizer* synchronizer, ExceptionCode&amp; code, bool&amp; success) {

brace position.

&gt; +    static PassRefPtr&lt;DatabaseTransactionTask&gt; create(PassRefPtr&lt;SQLTransaction&gt; transaction) {

brace position.

&gt; +    static PassRefPtr&lt;DatabaseTableNamesTask&gt; create(Database* db, DatabaseTaskSynchronizer* synchronizer, Vector&lt;String&gt;&amp; names) {

brace position.

There are several more functions with bad brace placement as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159528</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-10-30 17:21:20 -0700</bug_when>
    <thetext>Landed: http://trac.webkit.org/changeset/50360</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42169</attachid>
            <date>2009-10-29 19:02:44 -0700</date>
            <delta_ts>2009-10-30 11:09:03 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>15426</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGVhYzgxNC4uOTZiYjRmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAwOS0xMC0yOSAgRG1pdHJ5IFRpdG92
ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZWZhY3RvciBEYXRhYmFzZVRhc2sgaW4gcHJlcGFyYXRpb24gZm9y
IHJlbW92aW5nIHRocmVhZHNhZmUgcmVmY291bnRpbmcgZnJvbSBpdC4KKyAgICAgICAgTW92ZSB0
aGUgc3luY2hyb25pemVyIG9iamVjdCBvdXQgb2YgdGhlIERhdGFiYXNlVGFzayBzbyB0aGVyZSBp
cyBubyBuZWVkIHRvIGtlZXAKKyAgICAgICAgdGhlIHBvaW50ZXIgdG8gRGF0YWJhc2V0YXNrIGFy
b3VuZCBhZnRlciBwYXNzaW5nIGl0IHRvIE1lc3NhZ2VRdWV1ZS4KKyAgICAgICAgQWxzbyBwYXNz
IHRoZSByZWZlcmVuY2VzIHRvIHJldHVybiBwYXJhbWV0ZXJzIHRvIHRoZSB0YXNrIHNvIGl0IGNh
biB1cGRhdGUgdGhlbS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMwOTQxCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSB0aGlzIGlzIGp1c3Qg
bW92aW5nIHRoZSBjb2RlIGFyb3VuZCwgbm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuCisKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
OjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZl
cnNpb24pOiBVc2UgbmV3IERhdGFiYXNlVGFza1N5bmNocm9uaXplciB0byB3YWl0IGZvciB0YXNr
IGNvbXBsZXRpb24uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6bWFya0FzRGVsZXRlZEFu
ZENsb3NlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dGFibGVOYW1lcyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnN0b3ApOiBVc2UgdGhlIGJvb2xl
YW4gZmxhZyByYXRoZXIgdGhlbiAna2lsbGVkJyBmbGFnIGJ1aWx0IGludG8gTWVzc2FnZVF1ZXVl
LgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb24pOiBUcmFu
c2FjdGlvbiBxdWV1ZSBpcyBhIERlcXVlIG5vdywgY2hhbmdlIHRoZSB3YXkgdG8gZmV0Y2ggdGhl
IHRyYW5zYWN0aW9uLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDogQ2hhbmdlIHRoZSBT
UUxUcmFuc2FjdGlvbiBxdWV1ZSB0byBiZSBhIERlcXVlIHJhdGhlciB0aGVuIGEgTWVzc2FnZVF1
ZXVlLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVGFza1N5bmNocm9uaXplcjo6RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGFza1N5bmNocm9uaXplcjo6d2FpdEZvclRhc2tD
b21wbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGFza1N5bmNocm9uaXplcjo6
dGFza0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRhc2s6OkRhdGFiYXNl
VGFzayk6IEN0b3IgdGFrZXMgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHdoaWNoIGNhbiBiZSBO
VUxMLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUYXNrOjpwZXJmb3JtVGFzayk6IFNpZ25h
bCBjb21wbGV0aW9uLiBtX3N5bmNocm9uaXplciBzaG91bGQgc3RpbGwgYmUgYXJvdW5kIHNpbmNl
IG1haW4gdGhyZWFkIGlzIHdhaXRpbmcgb24gaXQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKTogUGFzcyBzeW5jaHJvbml6ZXIgYW5kIHJldHVy
biBwYXJhbWV0ZXJzIHZpYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
Q2xvc2VUYXNrOjpEYXRhYmFzZUNsb3NlVGFzayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFzZVRhYmxl
TmFtZXNUYXNrKTogRGl0dG8uCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRhc2suaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUNsb3NlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhbnNhY3Rpb25UYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
YWJsZU5hbWVzVGFzazo6Y3JlYXRlKToKKwogMjAwOS0xMC0yOSAgRGltaXRyaSBHbGF6a292ICA8
ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAgYi9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2UuY3BwCmluZGV4IDJmODI3NDMuLmU1MTI0ZTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNw
cApAQCAtMTQ5LDYgKzE0OSw3IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVu
RGF0YWJhc2UoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG5hCiAKIERhdGFiYXNl
OjpEYXRhYmFzZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICA6IG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZh
bHNlKQorICAgICwgbV9pc1Byb2Nlc3NpbmdUYXNrcyh0cnVlKQogICAgICwgbV9kb2N1bWVudChk
b2N1bWVudCkKICAgICAsIG1fbmFtZShuYW1lLmNyb3NzVGhyZWFkU3RyaW5nKCkpCiAgICAgLCBt
X2d1aWQoMCkKQEAgLTIwNSwxNSArMjA2LDE0IEBAIGJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJp
ZnlWZXJzaW9uKEV4Y2VwdGlvbkNvZGUmIGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBt
X2RhdGFiYXNlQXV0aG9yaXplciA9IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlKCk7CiAKLSAg
ICBSZWZQdHI8RGF0YWJhc2VPcGVuVGFzaz4gdGFzayA9IERhdGFiYXNlT3BlblRhc2s6OmNyZWF0
ZSh0aGlzKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICBEYXRhYmFzZVRhc2tTeW5j
aHJvbml6ZXIgc3luY2hyb25pemVyOworICAgIFJlZlB0cjxEYXRhYmFzZU9wZW5UYXNrPiB0YXNr
ID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsICZzeW5jaHJvbml6ZXIsIGUsIHN1Y2Nl
c3MpOwogCi0gICAgdGFzay0+bG9ja0ZvclN5bmNocm9ub3VzU2NoZWR1bGluZygpOwogICAgIG1f
ZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrKTsK
LSAgICB0YXNrLT53YWl0Rm9yU3luY2hyb25vdXNDb21wbGV0aW9uKCk7CisgICAgc3luY2hyb25p
emVyLndhaXRGb3JUYXNrQ29tcGxldGlvbigpOwogCi0gICAgQVNTRVJUKHRhc2stPmlzQ29tcGxl
dGUoKSk7Ci0gICAgZSA9IHRhc2stPmV4Y2VwdGlvbkNvZGUoKTsKLSAgICByZXR1cm4gdGFzay0+
b3BlblN1Y2Nlc3NmdWwoKTsKKyAgICByZXR1cm4gc3VjY2VzczsKIH0KIAogCkBAIC0zMTgsMTEg
KzMxOCwxMSBAQCB2b2lkIERhdGFiYXNlOjptYXJrQXNEZWxldGVkQW5kQ2xvc2UoKQogCiAgICAg
bV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKS0+dW5zY2hlZHVsZURhdGFiYXNlVGFza3ModGhp
cyk7CiAKLSAgICBSZWZQdHI8RGF0YWJhc2VDbG9zZVRhc2s+IHRhc2sgPSBEYXRhYmFzZUNsb3Nl
VGFzazo6Y3JlYXRlKHRoaXMpOworICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciBzeW5jaHJv
bml6ZXI7CisgICAgUmVmUHRyPERhdGFiYXNlQ2xvc2VUYXNrPiB0YXNrID0gRGF0YWJhc2VDbG9z
ZVRhc2s6OmNyZWF0ZSh0aGlzLCAmc3luY2hyb25pemVyKTsKIAotICAgIHRhc2stPmxvY2tGb3JT
eW5jaHJvbm91c1NjaGVkdWxpbmcoKTsKICAgICBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgp
LT5zY2hlZHVsZUltbWVkaWF0ZVRhc2sodGFzayk7Ci0gICAgdGFzay0+d2FpdEZvclN5bmNocm9u
b3VzQ29tcGxldGlvbigpOworICAgIHN5bmNocm9uaXplci53YWl0Rm9yVGFza0NvbXBsZXRpb24o
KTsKIH0KIAogdm9pZCBEYXRhYmFzZTo6Y2xvc2UoKQpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQg
RGF0YWJhc2U6OnN0b3AoKQogCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90
cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb25RdWV1ZS5r
aWxsKCk7CisgICAgICAgIG1faXNQcm9jZXNzaW5nVGFza3MgPSBmYWxzZTsKICAgICAgICAgbV90
cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICB9CiB9CkBAIC01MzQsNyArNTM0LDEz
IEBAIHZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb24oKQogewogICAgIEFTU0VSVCgh
bV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleC50cnlMb2NrKCkpOyAvLyBMb2NrZWQgYnkgY2Fs
bGVyLgogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb247Ci0gICAgaWYgKG1f
dHJhbnNhY3Rpb25RdWV1ZS50cnlHZXRNZXNzYWdlKHRyYW5zYWN0aW9uKSAmJiBtX2RvY3VtZW50
LT5kYXRhYmFzZVRocmVhZCgpKSB7CisKKyAgICBpZiAobV9pc1Byb2Nlc3NpbmdUYXNrcyAmJiAh
bV90cmFuc2FjdGlvblF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICB0cmFuc2FjdGlvbiA9IG1f
dHJhbnNhY3Rpb25RdWV1ZS5maXJzdCgpOworICAgICAgICBtX3RyYW5zYWN0aW9uUXVldWUucmVt
b3ZlRmlyc3QoKTsKKyAgICB9CisKKyAgICBpZiAodHJhbnNhY3Rpb24gJiYgbV9kb2N1bWVudC0+
ZGF0YWJhc2VUaHJlYWQoKSkgewogICAgICAgICBSZWZQdHI8RGF0YWJhc2VUcmFuc2FjdGlvblRh
c2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsK
ICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rpb25U
YXNrICVwIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGFzay5nZXQoKSwgdGFzay0+dHJhbnNhY3Rp
b24oKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gdHJ1ZTsKQEAgLTYxOCwx
NSArNjI0LDE5IEBAIHZvaWQgRGF0YWJhc2U6OmRlbGl2ZXJQZW5kaW5nQ2FsbGJhY2sodm9pZCog
Y29udGV4dCkKIAogVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnRhYmxlTmFtZXMoKQogeworICAg
IC8vIEZJWE1FOiBOb3QgdXNpbmcgdGhyZWFkc2FmZUNvcHkgb24gdGhlc2Ugc3RyaW5ncyBsb29r
cyBvayBzaW5jZSB0aHJlYWRzIHRha2Ugc3RyaWN0IHR1cm5zCisgICAgLy8gaW4gZGVhbGluZyB3
aXRoIHRoZW0uIEhvd2V2ZXIsIGlmIHRoZSBjb2RlIGNoYW5nZXMsIHRoaXMgbWF5IG5vdCBiZSB0
cnVlIGFueW1vcmUuCisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwogICAgIGlmICghbV9kb2N1
bWVudC0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
Ci0gICAgUmVmUHRyPERhdGFiYXNlVGFibGVOYW1lc1Rhc2s+IHRhc2sgPSBEYXRhYmFzZVRhYmxl
TmFtZXNUYXNrOjpjcmVhdGUodGhpcyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgc3luY2hyb25pemVyOworICAgIFJlZlB0cjxEYXRhYmFz
ZVRhYmxlTmFtZXNUYXNrPiB0YXNrID0gRGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6Y3JlYXRlKHRo
aXMsICZzeW5jaHJvbml6ZXIsIHJlc3VsdCk7CiAKLSAgICB0YXNrLT5sb2NrRm9yU3luY2hyb25v
dXNTY2hlZHVsaW5nKCk7CiAgICAgbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1
bGVJbW1lZGlhdGVUYXNrKHRhc2spOwotICAgIHRhc2stPndhaXRGb3JTeW5jaHJvbm91c0NvbXBs
ZXRpb24oKTsKKyAgICBzeW5jaHJvbml6ZXIud2FpdEZvclRhc2tDb21wbGV0aW9uKCk7CiAKLSAg
ICByZXR1cm4gdGFzay0+dGFibGVOYW1lcygpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZv
aWQgRGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24pCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaCBiL1dlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZS5oCmluZGV4IGYyNzUwMjcuLmFkNTVjZGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZS5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCkBAIC0zMCw3
ICszMCw2IEBACiAjZGVmaW5lIERhdGFiYXNlX2gKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKLSNp
bmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgi
CkBAIC0xMzMsOSArMTMyLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0
aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rp
b25TdGVwKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCBpbW1lZGlhdGVseSA9IGZh
bHNlKTsKIAotICAgIE1lc3NhZ2VRdWV1ZTxSZWZQdHI8U1FMVHJhbnNhY3Rpb24+ID4gbV90cmFu
c2FjdGlvblF1ZXVlOworICAgIERlcXVlPFJlZlB0cjxTUUxUcmFuc2FjdGlvbj4gPiBtX3RyYW5z
YWN0aW9uUXVldWU7CiAgICAgTXV0ZXggbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleDsKICAg
ICBib29sIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzOworICAgIGJvb2wgbV9pc1Byb2Nlc3NpbmdU
YXNrczsKIAogICAgIHN0YXRpYyB2b2lkIGRlbGl2ZXJQZW5kaW5nQ2FsbGJhY2sodm9pZCopOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcCBiL1dlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCmluZGV4IDc1NWRhN2MuLjQyNWRhOWMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVRhc2suY3BwCkBAIC0zNSw5ICszNSwzMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLURhdGFiYXNlVGFzazo6RGF0YWJhc2VUYXNrKERhdGFiYXNlKiBkYXRhYmFzZSkKK0Rh
dGFiYXNlVGFza1N5bmNocm9uaXplcjo6RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKCkKKyAgICA6
IG1fdGFza0NvbXBsZXRlZChmYWxzZSkKK3sKKyAgICBtX3N5bmNocm9ub3VzTXV0ZXguc2V0KG5l
dyBNdXRleCk7CisgICAgbV9zeW5jaHJvbm91c0NvbmRpdGlvbi5zZXQobmV3IFRocmVhZENvbmRp
dGlvbik7Cit9CisKK3ZvaWQgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOjp3YWl0Rm9yVGFza0Nv
bXBsZXRpb24oKSB7CisgICAgbV9zeW5jaHJvbm91c011dGV4LT5sb2NrKCk7CisgICAgaWYgKCFt
X3Rhc2tDb21wbGV0ZWQpCisgICAgICAgIG1fc3luY2hyb25vdXNDb25kaXRpb24tPndhaXQoKm1f
c3luY2hyb25vdXNNdXRleCk7CisgICAgbV9zeW5jaHJvbm91c011dGV4LT51bmxvY2soKTsKK30K
Kwordm9pZCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI6OnRhc2tDb21wbGV0ZWQoKSB7CisgICAg
bV9zeW5jaHJvbm91c011dGV4LT5sb2NrKCk7CisgICAgbV90YXNrQ29tcGxldGVkID0gdHJ1ZTsK
KyAgICBtX3N5bmNocm9ub3VzQ29uZGl0aW9uLT5zaWduYWwoKTsKKyAgICBtX3N5bmNocm9ub3Vz
TXV0ZXgtPnVubG9jaygpOworfQorCitEYXRhYmFzZVRhc2s6OkRhdGFiYXNlVGFzayhEYXRhYmFz
ZSogZGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyKQogICAg
IDogbV9kYXRhYmFzZShkYXRhYmFzZSkKKyAgICAsIG1fc3luY2hyb25pemVyKHN5bmNocm9uaXpl
cikKKyNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2NvbXBsZXRlKGZhbHNlKQorI2VuZGlmCiB7CiB9
CiAKQEAgLTU2LDQyICs4MCwxNyBAQCB2b2lkIERhdGFiYXNlVGFzazo6cGVyZm9ybVRhc2soKQog
ICAgIGRvUGVyZm9ybVRhc2soKTsKICAgICBtX2RhdGFiYXNlLT5wZXJmb3JtUG9saWN5Q2hlY2tz
KCk7CiAKLSAgICBpZiAobV9zeW5jaHJvbm91c011dGV4KQotICAgICAgICBtX3N5bmNocm9ub3Vz
TXV0ZXgtPmxvY2soKTsKLQotICAgIG1fY29tcGxldGUgPSB0cnVlOwotCi0gICAgaWYgKG1fc3lu
Y2hyb25vdXNNdXRleCkgewotICAgICAgICBtX3N5bmNocm9ub3VzQ29uZGl0aW9uLT5zaWduYWwo
KTsKLSAgICAgICAgbV9zeW5jaHJvbm91c011dGV4LT51bmxvY2soKTsKLSAgICB9Ci19Ci0KLXZv
aWQgRGF0YWJhc2VUYXNrOjpsb2NrRm9yU3luY2hyb25vdXNTY2hlZHVsaW5nKCkKLXsKLSAgICAv
LyBDYWxsZWQgZnJvbSBtYWluIHRocmVhZC4KLSAgICBBU1NFUlQoIW1fc3luY2hyb25vdXNNdXRl
eCk7Ci0gICAgQVNTRVJUKCFtX3N5bmNocm9ub3VzQ29uZGl0aW9uKTsKLSAgICBtX3N5bmNocm9u
b3VzTXV0ZXguc2V0KG5ldyBNdXRleCk7Ci0gICAgbV9zeW5jaHJvbm91c0NvbmRpdGlvbi5zZXQo
bmV3IFRocmVhZENvbmRpdGlvbik7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUYXNrOjp3YWl0Rm9yU3lu
Y2hyb25vdXNDb21wbGV0aW9uKCkKLXsKLSAgICAvLyBDYWxsZWQgZnJvbSBtYWluIHRocmVhZC4K
LSAgICBtX3N5bmNocm9ub3VzTXV0ZXgtPmxvY2soKTsKLSAgICBpZiAoIW1fY29tcGxldGUpCi0g
ICAgICAgIG1fc3luY2hyb25vdXNDb25kaXRpb24tPndhaXQoKm1fc3luY2hyb25vdXNNdXRleCk7
Ci0gICAgbV9zeW5jaHJvbm91c011dGV4LT51bmxvY2soKTsKKyAgICBpZihtX3N5bmNocm9uaXpl
cikKKyAgICAgICAgbV9zeW5jaHJvbml6ZXItPnRhc2tDb21wbGV0ZWQoKTsKIH0KIAogLy8gKioq
IERhdGFiYXNlT3BlblRhc2sgKioqCiAvLyBPcGVucyB0aGUgZGF0YWJhc2UgZmlsZSBhbmQgdmVy
aWZpZXMgdGhlIHZlcnNpb24gbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdmVyc2lvbi4KIAotRGF0YWJh
c2VPcGVuVGFzazo6RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSogZGF0YWJhc2UpCi0gICAgOiBE
YXRhYmFzZVRhc2soZGF0YWJhc2UpCi0gICAgLCBtX2NvZGUoMCkKLSAgICAsIG1fc3VjY2Vzcyhm
YWxzZSkKK0RhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2soRGF0YWJhc2UqIGRhdGFi
YXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29k
ZSYgY29kZSwgYm9vbCYgc3VjY2VzcykKKyAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwgc3lu
Y2hyb25pemVyKQorICAgICwgbV9jb2RlKGNvZGUpCisgICAgLCBtX3N1Y2Nlc3Moc3VjY2VzcykK
IHsKIH0KIApAQCAtMTEwLDggKzEwOSw4IEBAIGNvbnN0IGNoYXIqIERhdGFiYXNlT3BlblRhc2s6
OmRlYnVnVGFza05hbWUoKSBjb25zdAogLy8gKioqIERhdGFiYXNlQ2xvc2VUYXNrICoqKgogLy8g
Q2xvc2VzIHRoZSBkYXRhYmFzZS4KIAotRGF0YWJhc2VDbG9zZVRhc2s6OkRhdGFiYXNlQ2xvc2VU
YXNrKERhdGFiYXNlKiBkYXRhYmFzZSkKLSAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSkKK0Rh
dGFiYXNlQ2xvc2VUYXNrOjpEYXRhYmFzZUNsb3NlVGFzayhEYXRhYmFzZSogZGF0YWJhc2UsIERh
dGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyKQorICAgIDogRGF0YWJhc2VUYXNr
KGRhdGFiYXNlLCBzeW5jaHJvbml6ZXIpCiB7CiB9CiAKQEAgLTEzMSw3ICsxMzAsNyBAQCBjb25z
dCBjaGFyKiBEYXRhYmFzZUNsb3NlVGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0CiAvLyBTdGFy
dHMgYSB0cmFuc2FjdGlvbiB0aGF0IHdpbGwgcmVwb3J0IGl0cyByZXN1bHRzIHZpYSBhIGNhbGxi
YWNrLgogCiBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6RGF0YWJhc2VUcmFuc2FjdGlvblRhc2so
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24pCi0gICAgOiBEYXRhYmFzZVRh
c2sodHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkpCisgICAgOiBEYXRhYmFzZVRhc2sodHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCksIDApCiAgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogewog
fQpAQCAtMTU5LDggKzE1OCw5IEBAIGNvbnN0IGNoYXIqIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNr
OjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QKIC8vICoqKiBEYXRhYmFzZVRhYmxlTmFtZXNUYXNrICoq
KgogLy8gUmV0cmlldmVzIGEgbGlzdCBvZiBhbGwgdGFibGVzIGluIHRoZSBkYXRhYmFzZSAtIGZv
ciBXZWJJbnNwZWN0b3Igc3VwcG9ydC4KIAotRGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6RGF0YWJh
c2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSogZGF0YWJhc2UpCi0gICAgOiBEYXRhYmFzZVRhc2so
ZGF0YWJhc2UpCitEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNr
KERhdGFiYXNlKiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6
ZXIsIFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKKyAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwg
c3luY2hyb25pemVyKQorICAgICwgbV90YWJsZU5hbWVzKG5hbWVzKQogewogfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmggYi9XZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2VUYXNrLmgKaW5kZXggNGFlZjg5Mi4uZGU1NzcxYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlVGFzay5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2su
aApAQCAtMzksMTIgKzM5LDMyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERhdGFi
YXNlOworY2xhc3MgRGF0YWJhc2VUYXNrOwogY2xhc3MgRGF0YWJhc2VUaHJlYWQ7CiBjbGFzcyBT
UUxWYWx1ZTsKIGNsYXNzIFNRTENhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CiBjbGFz
cyBWZXJzaW9uQ2hhbmdlQ2FsbGJhY2s7CiAKKy8vIENhbiBiZSB1c2VkIHRvIHdhaXQgdW50aWwg
RGF0YWJhc2VUYXNrIGlzIGNvbXBsZXRlZC4KKy8vIEhhcyB0byBiZSBwYXNzZWQgaW50byBEYXRh
YmFzZVRhc2s6OmNyZWF0ZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2suCitjbGFzcyBE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIGZyaWVu
ZCBjbGFzcyBEYXRhYmFzZVRhc2s7CitwdWJsaWM6CisgICAgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKCk7CisKKyAgICAvLyBDYWxsZWQgZnJvbSBtYWluIHRocmVhZCB0byB3YWl0IHVudGlsIHRh
c2sgaXMgY29tcGxldGVkLgorICAgIHZvaWQgd2FpdEZvclRhc2tDb21wbGV0aW9uKCk7CisKK3By
aXZhdGU6CisgICAgLy8gQ2FsbGVkIGJ5IHRoZSB0YXNrLgorICAgIHZvaWQgdGFza0NvbXBsZXRl
ZCgpOworCisgICAgYm9vbCBtX3Rhc2tDb21wbGV0ZWQ7CisgICAgT3duUHRyPE11dGV4PiBtX3N5
bmNocm9ub3VzTXV0ZXg7CisgICAgT3duUHRyPFRocmVhZENvbmRpdGlvbj4gbV9zeW5jaHJvbm91
c0NvbmRpdGlvbjsKK307CisKIGNsYXNzIERhdGFiYXNlVGFzayA6IHB1YmxpYyBUaHJlYWRTYWZl
U2hhcmVkPERhdGFiYXNlVGFzaz4gewogICAgIGZyaWVuZCBjbGFzcyBEYXRhYmFzZTsKIHB1Ymxp
YzoKQEAgLTUzLDUzICs3Myw0NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwZXJmb3JtVGFzaygpOwog
CiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZTsgfQot
ICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGxldGU7IH0KIAogcHJv
dGVjdGVkOgotICAgIERhdGFiYXNlVGFzayhEYXRhYmFzZSopOworICAgIERhdGFiYXNlVGFzayhE
YXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOwogCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCkgPSAwOwotI2lmbmRlZiBOREVCVUcKLSAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05hbWUoKSBjb25zdCA9IDA7Ci0jZW5kaWYKLQotICAg
IHZvaWQgbG9ja0ZvclN5bmNocm9ub3VzU2NoZWR1bGluZygpOwotICAgIHZvaWQgd2FpdEZvclN5
bmNocm9ub3VzQ29tcGxldGlvbigpOwogCiAgICAgRGF0YWJhc2UqIG1fZGF0YWJhc2U7CisgICAg
RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBtX3N5bmNocm9uaXplcjsKIAotICAgIGJvb2wgbV9j
b21wbGV0ZTsKLQotICAgIE93blB0cjxNdXRleD4gbV9zeW5jaHJvbm91c011dGV4OwotICAgIE93
blB0cjxUaHJlYWRDb25kaXRpb24+IG1fc3luY2hyb25vdXNDb25kaXRpb247CisjaWZuZGVmIE5E
RUJVRworICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05hbWUoKSBjb25zdCA9IDA7
CisgICAgIGJvb2wgbV9jb21wbGV0ZTsKKyNlbmRpZgogfTsKIAogY2xhc3MgRGF0YWJhc2VPcGVu
VGFzayA6IHB1YmxpYyBEYXRhYmFzZVRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERhdGFiYXNlT3BlblRhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIpIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBEYXRhYmFzZU9wZW5UYXNrKGRiKSk7IH0KLQotICAgIEV4Y2VwdGlvbkNvZGUgZXhj
ZXB0aW9uQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZTsgfQotICAgIGJvb2wgb3BlblN1Y2Nl
c3NmdWwoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3M7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEYXRhYmFzZU9wZW5UYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiLCBEYXRhYmFzZVRhc2tTeW5j
aHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29kZSwgYm9vbCYgc3VjY2Vz
cykgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlT3BlblRhc2soZGIsIHN5
bmNocm9uaXplciwgY29kZSwgc3VjY2VzcykpOworICAgIH0KIAogcHJpdmF0ZToKLSAgICBEYXRh
YmFzZU9wZW5UYXNrKERhdGFiYXNlKik7CisgICAgRGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSos
IERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIEV4Y2VwdGlvbkNvZGUmLCBib29sJiBzdWNjZXNz
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7CiAjaWZuZGVmIE5ERUJVRwog
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGVidWdUYXNrTmFtZSgpIGNvbnN0OwogI2VuZGlmCiAK
LSAgICBFeGNlcHRpb25Db2RlIG1fY29kZTsKLSAgICBib29sIG1fc3VjY2VzczsKKyAgICBFeGNl
cHRpb25Db2RlJiBtX2NvZGU7CisgICAgYm9vbCYgbV9zdWNjZXNzOwogfTsKIAogY2xhc3MgRGF0
YWJhc2VDbG9zZVRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEYXRhYmFzZUNsb3NlVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYikgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlQ2xvc2VUYXNrKGRiKSk7IH0KKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEYXRhYmFzZUNsb3NlVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgRGF0YWJh
c2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBE
YXRhYmFzZUNsb3NlVGFzayhkYiwgc3luY2hyb25pemVyKSk7IH0KIAogcHJpdmF0ZToKLSAgICBE
YXRhYmFzZUNsb3NlVGFzayhEYXRhYmFzZSopOworICAgIERhdGFiYXNlQ2xvc2VUYXNrKERhdGFi
YXNlKiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9Q
ZXJmb3JtVGFzaygpOwogI2lmbmRlZiBOREVCVUcKQEAgLTEwOSw3ICsxMjIsMTAgQEAgcHJpdmF0
ZToKIAogY2xhc3MgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNr
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZVRyYW5zYWN0aW9uVGFz
az4gY3JlYXRlKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2sodHJhbnNhY3Rpb24pKTsgfQor
ICAgIC8vIFRyYW5zYWN0aW9uIHRhc2sgaXMgbmV2ZXIgc3luY2hyb25vdXMsIHNvIG5vICdzeW5j
aHJvbml6ZXInIHBhcmFtZXRlci4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZVRyYW5z
YWN0aW9uVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9u
KSB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VUcmFuc2FjdGlvblRhc2so
dHJhbnNhY3Rpb24pKTsKKyAgICB9CiAKICAgICBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uLmdldCgpOyB9CiAKQEAgLTEyNywxOSArMTQz
LDE5IEBAIHByaXZhdGU6CiAKIGNsYXNzIERhdGFiYXNlVGFibGVOYW1lc1Rhc2sgOiBwdWJsaWMg
RGF0YWJhc2VUYXNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZVRh
YmxlTmFtZXNUYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
RGF0YWJhc2VUYWJsZU5hbWVzVGFzayhkYikpOyB9Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiYgdGFi
bGVOYW1lcygpIHsgcmV0dXJuIG1fdGFibGVOYW1lczsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PERhdGFiYXNlVGFibGVOYW1lc1Rhc2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIERhdGFiYXNlVGFz
a1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKGRiLCBzeW5j
aHJvbml6ZXIsIG5hbWVzKSk7CisgICAgfQogCiBwcml2YXRlOgotICAgIERhdGFiYXNlVGFibGVO
YW1lc1Rhc2soRGF0YWJhc2UqKTsKKyAgICBEYXRhYmFzZVRhYmxlTmFtZXNUYXNrKERhdGFiYXNl
KiwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiwgVmVjdG9yPFN0cmluZz4mIG5hbWVzKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkb1BlcmZvcm1UYXNrKCk7CiAjaWZuZGVmIE5ERUJVRwogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogZGVidWdUYXNrTmFtZSgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBW
ZWN0b3I8U3RyaW5nPiBtX3RhYmxlTmFtZXM7CisgICAgVmVjdG9yPFN0cmluZz4mIG1fdGFibGVO
YW1lczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="commit-queue"
          id="23673"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42218</attachid>
            <date>2009-10-30 11:09:03 -0700</date>
            <delta_ts>2009-10-30 13:20:07 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>15610</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MGVhYzgxNC4uOTZiYjRmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAwOS0xMC0yOSAgRG1pdHJ5IFRpdG92
ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZWZhY3RvciBEYXRhYmFzZVRhc2sgaW4gcHJlcGFyYXRpb24gZm9y
IHJlbW92aW5nIHRocmVhZHNhZmUgcmVmY291bnRpbmcgZnJvbSBpdC4KKyAgICAgICAgTW92ZSB0
aGUgc3luY2hyb25pemVyIG9iamVjdCBvdXQgb2YgdGhlIERhdGFiYXNlVGFzayBzbyB0aGVyZSBp
cyBubyBuZWVkIHRvIGtlZXAKKyAgICAgICAgdGhlIHBvaW50ZXIgdG8gRGF0YWJhc2V0YXNrIGFy
b3VuZCBhZnRlciBwYXNzaW5nIGl0IHRvIE1lc3NhZ2VRdWV1ZS4KKyAgICAgICAgQWxzbyBwYXNz
IHRoZSByZWZlcmVuY2VzIHRvIHJldHVybiBwYXJhbWV0ZXJzIHRvIHRoZSB0YXNrIHNvIGl0IGNh
biB1cGRhdGUgdGhlbS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTMwOTQxCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSB0aGlzIGlzIGp1c3Qg
bW92aW5nIHRoZSBjb2RlIGFyb3VuZCwgbm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuCisKKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
OjpEYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZl
cnNpb24pOiBVc2UgbmV3IERhdGFiYXNlVGFza1N5bmNocm9uaXplciB0byB3YWl0IGZvciB0YXNr
IGNvbXBsZXRpb24uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6bWFya0FzRGVsZXRlZEFu
ZENsb3NlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dGFibGVOYW1lcyk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnN0b3ApOiBVc2UgdGhlIGJvb2xl
YW4gZmxhZyByYXRoZXIgdGhlbiAna2lsbGVkJyBmbGFnIGJ1aWx0IGludG8gTWVzc2FnZVF1ZXVl
LgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb24pOiBUcmFu
c2FjdGlvbiBxdWV1ZSBpcyBhIERlcXVlIG5vdywgY2hhbmdlIHRoZSB3YXkgdG8gZmV0Y2ggdGhl
IHRyYW5zYWN0aW9uLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDogQ2hhbmdlIHRoZSBT
UUxUcmFuc2FjdGlvbiBxdWV1ZSB0byBiZSBhIERlcXVlIHJhdGhlciB0aGVuIGEgTWVzc2FnZVF1
ZXVlLgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUYXNrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFiYXNlVGFza1N5bmNocm9uaXplcjo6RGF0YWJhc2VUYXNrU3luY2hyb25pemVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGFza1N5bmNocm9uaXplcjo6d2FpdEZvclRhc2tD
b21wbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVGFza1N5bmNocm9uaXplcjo6
dGFza0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRhc2s6OkRhdGFiYXNl
VGFzayk6IEN0b3IgdGFrZXMgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyIHdoaWNoIGNhbiBiZSBO
VUxMLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUYXNrOjpwZXJmb3JtVGFzayk6IFNpZ25h
bCBjb21wbGV0aW9uLiBtX3N5bmNocm9uaXplciBzaG91bGQgc3RpbGwgYmUgYXJvdW5kIHNpbmNl
IG1haW4gdGhyZWFkIGlzIHdhaXRpbmcgb24gaXQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5UYXNrKTogUGFzcyBzeW5jaHJvbml6ZXIgYW5kIHJldHVy
biBwYXJhbWV0ZXJzIHZpYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
Q2xvc2VUYXNrOjpEYXRhYmFzZUNsb3NlVGFzayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OkRhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFzZVRhYmxl
TmFtZXNUYXNrKTogRGl0dG8uCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRhc2suaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUNsb3NlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhbnNhY3Rpb25UYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
YWJsZU5hbWVzVGFzazo6Y3JlYXRlKToKKwogMjAwOS0xMC0yOSAgRGltaXRyaSBHbGF6a292ICA8
ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAgYi9XZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2UuY3BwCmluZGV4IDJmODI3NDMuLjM4ZWRiMDcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNw
cApAQCAtMTQ5LDYgKzE0OSw3IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlOjpvcGVu
RGF0YWJhc2UoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG5hCiAKIERhdGFiYXNl
OjpEYXRhYmFzZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICA6IG1fdHJhbnNhY3Rpb25JblByb2dyZXNzKGZh
bHNlKQorICAgICwgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkKHRydWUpCiAgICAgLCBtX2Rv
Y3VtZW50KGRvY3VtZW50KQogICAgICwgbV9uYW1lKG5hbWUuY3Jvc3NUaHJlYWRTdHJpbmcoKSkK
ICAgICAsIG1fZ3VpZCgwKQpAQCAtMjA1LDE1ICsyMDYsMTQgQEAgYm9vbCBEYXRhYmFzZTo6b3Bl
bkFuZFZlcmlmeVZlcnNpb24oRXhjZXB0aW9uQ29kZSYgZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIG1fZGF0YWJhc2VBdXRob3JpemVyID0gRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGUo
KTsKIAotICAgIFJlZlB0cjxEYXRhYmFzZU9wZW5UYXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFz
azo6Y3JlYXRlKHRoaXMpOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgIERhdGFiYXNl
VGFza1N5bmNocm9uaXplciBzeW5jaHJvbml6ZXI7CisgICAgUmVmUHRyPERhdGFiYXNlT3BlblRh
c2s+IHRhc2sgPSBEYXRhYmFzZU9wZW5UYXNrOjpjcmVhdGUodGhpcywgJnN5bmNocm9uaXplciwg
ZSwgc3VjY2Vzcyk7CiAKLSAgICB0YXNrLT5sb2NrRm9yU3luY2hyb25vdXNTY2hlZHVsaW5nKCk7
CiAgICAgbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVJbW1lZGlhdGVUYXNr
KHRhc2spOwotICAgIHRhc2stPndhaXRGb3JTeW5jaHJvbm91c0NvbXBsZXRpb24oKTsKKyAgICBz
eW5jaHJvbml6ZXIud2FpdEZvclRhc2tDb21wbGV0aW9uKCk7CiAKLSAgICBBU1NFUlQodGFzay0+
aXNDb21wbGV0ZSgpKTsKLSAgICBlID0gdGFzay0+ZXhjZXB0aW9uQ29kZSgpOwotICAgIHJldHVy
biB0YXNrLT5vcGVuU3VjY2Vzc2Z1bCgpOworICAgIHJldHVybiBzdWNjZXNzOwogfQogCiAKQEAg
LTMxOCwxMSArMzE4LDExIEBAIHZvaWQgRGF0YWJhc2U6Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgp
CiAKICAgICBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpLT51bnNjaGVkdWxlRGF0YWJhc2VU
YXNrcyh0aGlzKTsKIAotICAgIFJlZlB0cjxEYXRhYmFzZUNsb3NlVGFzaz4gdGFzayA9IERhdGFi
YXNlQ2xvc2VUYXNrOjpjcmVhdGUodGhpcyk7CisgICAgRGF0YWJhc2VUYXNrU3luY2hyb25pemVy
IHN5bmNocm9uaXplcjsKKyAgICBSZWZQdHI8RGF0YWJhc2VDbG9zZVRhc2s+IHRhc2sgPSBEYXRh
YmFzZUNsb3NlVGFzazo6Y3JlYXRlKHRoaXMsICZzeW5jaHJvbml6ZXIpOwogCi0gICAgdGFzay0+
bG9ja0ZvclN5bmNocm9ub3VzU2NoZWR1bGluZygpOwogICAgIG1fZG9jdW1lbnQtPmRhdGFiYXNl
VGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNrKTsKLSAgICB0YXNrLT53YWl0Rm9y
U3luY2hyb25vdXNDb21wbGV0aW9uKCk7CisgICAgc3luY2hyb25pemVyLndhaXRGb3JUYXNrQ29t
cGxldGlvbigpOwogfQogCiB2b2lkIERhdGFiYXNlOjpjbG9zZSgpCkBAIC0zNjIsNyArMzYyLDcg
QEAgdm9pZCBEYXRhYmFzZTo6c3RvcCgpCiAKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKLSAgICAgICAgbV90cmFuc2FjdGlv
blF1ZXVlLmtpbGwoKTsKKyAgICAgICAgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkID0gZmFs
c2U7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7CiAgICAgfQogfQpA
QCAtNTM0LDcgKzUzNCwxMyBAQCB2b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uKCkK
IHsKICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgudHJ5TG9jaygpKTsg
Ly8gTG9ja2VkIGJ5IGNhbGxlci4KICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IHRyYW5zYWN0
aW9uOwotICAgIGlmIChtX3RyYW5zYWN0aW9uUXVldWUudHJ5R2V0TWVzc2FnZSh0cmFuc2FjdGlv
bikgJiYgbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKSkgeworCisgICAgaWYgKG1faXNUcmFu
c2FjdGlvblF1ZXVlRW5hYmxlZCAmJiAhbV90cmFuc2FjdGlvblF1ZXVlLmlzRW1wdHkoKSkgewor
ICAgICAgICB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25RdWV1ZS5maXJzdCgpOworICAgICAg
ICBtX3RyYW5zYWN0aW9uUXVldWUucmVtb3ZlRmlyc3QoKTsKKyAgICB9CisKKyAgICBpZiAodHJh
bnNhY3Rpb24gJiYgbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKSkgewogICAgICAgICBSZWZQ
dHI8RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFz
azo6Y3JlYXRlKHRyYW5zYWN0aW9uKTsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVs
aW5nIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICVwIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGFz
ay5nZXQoKSwgdGFzay0+dHJhbnNhY3Rpb24oKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25JblBy
b2dyZXNzID0gdHJ1ZTsKQEAgLTYxOCwxNSArNjI0LDE5IEBAIHZvaWQgRGF0YWJhc2U6OmRlbGl2
ZXJQZW5kaW5nQ2FsbGJhY2sodm9pZCogY29udGV4dCkKIAogVmVjdG9yPFN0cmluZz4gRGF0YWJh
c2U6OnRhYmxlTmFtZXMoKQogeworICAgIC8vIEZJWE1FOiBOb3QgdXNpbmcgdGhyZWFkc2FmZUNv
cHkgb24gdGhlc2Ugc3RyaW5ncyBsb29rcyBvayBzaW5jZSB0aHJlYWRzIHRha2Ugc3RyaWN0IHR1
cm5zCisgICAgLy8gaW4gZGVhbGluZyB3aXRoIHRoZW0uIEhvd2V2ZXIsIGlmIHRoZSBjb2RlIGNo
YW5nZXMsIHRoaXMgbWF5IG5vdCBiZSB0cnVlIGFueW1vcmUuCisgICAgVmVjdG9yPFN0cmluZz4g
cmVzdWx0OwogICAgIGlmICghbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKSkKLSAgICAgICAg
cmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Ci0gICAgUmVmUHRyPERhdGFiYXNlVGFibGVOYW1lc1Rh
c2s+IHRhc2sgPSBEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpjcmVhdGUodGhpcyk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisKKyAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIgc3luY2hyb25p
emVyOworICAgIFJlZlB0cjxEYXRhYmFzZVRhYmxlTmFtZXNUYXNrPiB0YXNrID0gRGF0YWJhc2VU
YWJsZU5hbWVzVGFzazo6Y3JlYXRlKHRoaXMsICZzeW5jaHJvbml6ZXIsIHJlc3VsdCk7CiAKLSAg
ICB0YXNrLT5sb2NrRm9yU3luY2hyb25vdXNTY2hlZHVsaW5nKCk7CiAgICAgbV9kb2N1bWVudC0+
ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRhc2spOwotICAgIHRhc2st
PndhaXRGb3JTeW5jaHJvbm91c0NvbXBsZXRpb24oKTsKKyAgICBzeW5jaHJvbml6ZXIud2FpdEZv
clRhc2tDb21wbGV0aW9uKCk7CiAKLSAgICByZXR1cm4gdGFzay0+dGFibGVOYW1lcygpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgRGF0YWJhc2U6OnNldEV4cGVjdGVkVmVyc2lvbihj
b25zdCBTdHJpbmcmIHZlcnNpb24pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2UuaCBiL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCmluZGV4IGYyNzUwMjcuLjYxYzliNjYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCisrKyBiL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZS5oCkBAIC0zMCw3ICszMCw2IEBACiAjZGVmaW5lIERhdGFiYXNlX2gKIAog
I2lmIEVOQUJMRShEQVRBQkFTRSkKLSNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCkBAIC0xMzMsOSArMTMyLDEwIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKICAg
ICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
biwgYm9vbCBpbW1lZGlhdGVseSA9IGZhbHNlKTsKIAotICAgIE1lc3NhZ2VRdWV1ZTxSZWZQdHI8
U1FMVHJhbnNhY3Rpb24+ID4gbV90cmFuc2FjdGlvblF1ZXVlOworICAgIERlcXVlPFJlZlB0cjxT
UUxUcmFuc2FjdGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7CiAgICAgTXV0ZXggbV90cmFuc2Fj
dGlvbkluUHJvZ3Jlc3NNdXRleDsKICAgICBib29sIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzOwor
ICAgIGJvb2wgbV9pc1RyYW5zYWN0aW9uUXVldWVFbmFibGVkOwogCiAgICAgc3RhdGljIHZvaWQg
ZGVsaXZlclBlbmRpbmdDYWxsYmFjayh2b2lkKik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZVRhc2suY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAK
aW5kZXggNzU1ZGE3Yy4uNDgwMTgyYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVGFzay5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5jcHAKQEAgLTM1
LDkgKzM1LDMxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGF0YWJhc2VUYXNrOjpEYXRh
YmFzZVRhc2soRGF0YWJhc2UqIGRhdGFiYXNlKQorRGF0YWJhc2VUYXNrU3luY2hyb25pemVyOjpE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIoKQorICAgIDogbV90YXNrQ29tcGxldGVkKGZhbHNlKQor
eworfQorCit2b2lkIERhdGFiYXNlVGFza1N5bmNocm9uaXplcjo6d2FpdEZvclRhc2tDb21wbGV0
aW9uKCkgeworICAgIG1fc3luY2hyb25vdXNNdXRleC5sb2NrKCk7CisgICAgaWYgKCFtX3Rhc2tD
b21wbGV0ZWQpCisgICAgICAgIG1fc3luY2hyb25vdXNDb25kaXRpb24ud2FpdChtX3N5bmNocm9u
b3VzTXV0ZXgpOworICAgIG1fc3luY2hyb25vdXNNdXRleC51bmxvY2soKTsKK30KKwordm9pZCBE
YXRhYmFzZVRhc2tTeW5jaHJvbml6ZXI6OnRhc2tDb21wbGV0ZWQoKSB7CisgICAgbV9zeW5jaHJv
bm91c011dGV4LmxvY2soKTsKKyAgICBtX3Rhc2tDb21wbGV0ZWQgPSB0cnVlOworICAgIG1fc3lu
Y2hyb25vdXNDb25kaXRpb24uc2lnbmFsKCk7CisgICAgbV9zeW5jaHJvbm91c011dGV4LnVubG9j
aygpOworfQorCitEYXRhYmFzZVRhc2s6OkRhdGFiYXNlVGFzayhEYXRhYmFzZSogZGF0YWJhc2Us
IERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyKQogICAgIDogbV9kYXRhYmFz
ZShkYXRhYmFzZSkKKyAgICAsIG1fc3luY2hyb25pemVyKHN5bmNocm9uaXplcikKKyNpZm5kZWYg
TkRFQlVHCiAgICAgLCBtX2NvbXBsZXRlKGZhbHNlKQorI2VuZGlmCiB7CiB9CiAKQEAgLTU2LDQz
ICs3OCwxOSBAQCB2b2lkIERhdGFiYXNlVGFzazo6cGVyZm9ybVRhc2soKQogICAgIGRvUGVyZm9y
bVRhc2soKTsKICAgICBtX2RhdGFiYXNlLT5wZXJmb3JtUG9saWN5Q2hlY2tzKCk7CiAKLSAgICBp
ZiAobV9zeW5jaHJvbm91c011dGV4KQotICAgICAgICBtX3N5bmNocm9ub3VzTXV0ZXgtPmxvY2so
KTsKLQotICAgIG1fY29tcGxldGUgPSB0cnVlOwotCi0gICAgaWYgKG1fc3luY2hyb25vdXNNdXRl
eCkgewotICAgICAgICBtX3N5bmNocm9ub3VzQ29uZGl0aW9uLT5zaWduYWwoKTsKLSAgICAgICAg
bV9zeW5jaHJvbm91c011dGV4LT51bmxvY2soKTsKLSAgICB9Ci19Ci0KLXZvaWQgRGF0YWJhc2VU
YXNrOjpsb2NrRm9yU3luY2hyb25vdXNTY2hlZHVsaW5nKCkKLXsKLSAgICAvLyBDYWxsZWQgZnJv
bSBtYWluIHRocmVhZC4KLSAgICBBU1NFUlQoIW1fc3luY2hyb25vdXNNdXRleCk7Ci0gICAgQVNT
RVJUKCFtX3N5bmNocm9ub3VzQ29uZGl0aW9uKTsKLSAgICBtX3N5bmNocm9ub3VzTXV0ZXguc2V0
KG5ldyBNdXRleCk7Ci0gICAgbV9zeW5jaHJvbm91c0NvbmRpdGlvbi5zZXQobmV3IFRocmVhZENv
bmRpdGlvbik7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUYXNrOjp3YWl0Rm9yU3luY2hyb25vdXNDb21w
bGV0aW9uKCkKLXsKLSAgICAvLyBDYWxsZWQgZnJvbSBtYWluIHRocmVhZC4KLSAgICBtX3N5bmNo
cm9ub3VzTXV0ZXgtPmxvY2soKTsKLSAgICBpZiAoIW1fY29tcGxldGUpCi0gICAgICAgIG1fc3lu
Y2hyb25vdXNDb25kaXRpb24tPndhaXQoKm1fc3luY2hyb25vdXNNdXRleCk7Ci0gICAgbV9zeW5j
aHJvbm91c011dGV4LT51bmxvY2soKTsKKyAgICBpZihtX3N5bmNocm9uaXplcikKKyAgICAgICAg
bV9zeW5jaHJvbml6ZXItPnRhc2tDb21wbGV0ZWQoKTsKIH0KIAogLy8gKioqIERhdGFiYXNlT3Bl
blRhc2sgKioqCiAvLyBPcGVucyB0aGUgZGF0YWJhc2UgZmlsZSBhbmQgdmVyaWZpZXMgdGhlIHZl
cnNpb24gbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdmVyc2lvbi4KIAotRGF0YWJhc2VPcGVuVGFzazo6
RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSogZGF0YWJhc2UpCi0gICAgOiBEYXRhYmFzZVRhc2so
ZGF0YWJhc2UpCi0gICAgLCBtX2NvZGUoMCkKLSAgICAsIG1fc3VjY2VzcyhmYWxzZSkKK0RhdGFi
YXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2soRGF0YWJhc2UqIGRhdGFiYXNlLCBEYXRhYmFz
ZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgRXhjZXB0aW9uQ29kZSYgY29kZSwgYm9v
bCYgc3VjY2VzcykKKyAgICA6IERhdGFiYXNlVGFzayhkYXRhYmFzZSwgc3luY2hyb25pemVyKQor
ICAgICwgbV9jb2RlKGNvZGUpCisgICAgLCBtX3N1Y2Nlc3Moc3VjY2VzcykKIHsKKyAgICBBU1NF
UlQoc3luY2hyb25pemVyKTsgLy8gQSB0YXNrIHdpdGggb3V0cHV0IHBhcmFtZXRlcnMgaXMgc3Vw
cG9zZWQgdG8gYmUgc3luY2hyb25vdXMuCiB9CiAKIHZvaWQgRGF0YWJhc2VPcGVuVGFzazo6ZG9Q
ZXJmb3JtVGFzaygpCkBAIC0xMTAsOCArMTA4LDggQEAgY29uc3QgY2hhciogRGF0YWJhc2VPcGVu
VGFzazo6ZGVidWdUYXNrTmFtZSgpIGNvbnN0CiAvLyAqKiogRGF0YWJhc2VDbG9zZVRhc2sgKioq
CiAvLyBDbG9zZXMgdGhlIGRhdGFiYXNlLgogCi1EYXRhYmFzZUNsb3NlVGFzazo6RGF0YWJhc2VD
bG9zZVRhc2soRGF0YWJhc2UqIGRhdGFiYXNlKQotICAgIDogRGF0YWJhc2VUYXNrKGRhdGFiYXNl
KQorRGF0YWJhc2VDbG9zZVRhc2s6OkRhdGFiYXNlQ2xvc2VUYXNrKERhdGFiYXNlKiBkYXRhYmFz
ZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIpCisgICAgOiBEYXRhYmFz
ZVRhc2soZGF0YWJhc2UsIHN5bmNocm9uaXplcikKIHsKIH0KIApAQCAtMTMxLDcgKzEyOSw3IEBA
IGNvbnN0IGNoYXIqIERhdGFiYXNlQ2xvc2VUYXNrOjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QKIC8v
IFN0YXJ0cyBhIHRyYW5zYWN0aW9uIHRoYXQgd2lsbCByZXBvcnQgaXRzIHJlc3VsdHMgdmlhIGEg
Y2FsbGJhY2suCiAKIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpEYXRhYmFzZVRyYW5zYWN0aW9u
VGFzayhQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKLSAgICA6IERhdGFi
YXNlVGFzayh0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKSkKKyAgICA6IERhdGFiYXNlVGFzayh0cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKSwgMCkKICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24p
CiB7CiB9CkBAIC0xNTksOSArMTU3LDExIEBAIGNvbnN0IGNoYXIqIERhdGFiYXNlVHJhbnNhY3Rp
b25UYXNrOjpkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QKIC8vICoqKiBEYXRhYmFzZVRhYmxlTmFtZXNU
YXNrICoqKgogLy8gUmV0cmlldmVzIGEgbGlzdCBvZiBhbGwgdGFibGVzIGluIHRoZSBkYXRhYmFz
ZSAtIGZvciBXZWJJbnNwZWN0b3Igc3VwcG9ydC4KIAotRGF0YWJhc2VUYWJsZU5hbWVzVGFzazo6
RGF0YWJhc2VUYWJsZU5hbWVzVGFzayhEYXRhYmFzZSogZGF0YWJhc2UpCi0gICAgOiBEYXRhYmFz
ZVRhc2soZGF0YWJhc2UpCitEYXRhYmFzZVRhYmxlTmFtZXNUYXNrOjpEYXRhYmFzZVRhYmxlTmFt
ZXNUYXNrKERhdGFiYXNlKiBkYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5j
aHJvbml6ZXIsIFZlY3RvcjxTdHJpbmc+JiBuYW1lcykKKyAgICA6IERhdGFiYXNlVGFzayhkYXRh
YmFzZSwgc3luY2hyb25pemVyKQorICAgICwgbV90YWJsZU5hbWVzKG5hbWVzKQogeworICAgIEFT
U0VSVChzeW5jaHJvbml6ZXIpOyAvLyBBIHRhc2sgd2l0aCBvdXRwdXQgcGFyYW1ldGVycyBpcyBz
dXBwb3NlZCB0byBiZSBzeW5jaHJvbm91cy4KIH0KIAogdm9pZCBEYXRhYmFzZVRhYmxlTmFtZXNU
YXNrOjpkb1BlcmZvcm1UYXNrKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZVRhc2suaCBiL1dlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suaAppbmRleCA0YWVmODkyLi5i
OTVlOTliIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgKKysrIGIv
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5oCkBAIC0zOSwxMiArMzksMzIgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGF0YWJhc2U7CitjbGFzcyBEYXRhYmFzZVRhc2s7CiBj
bGFzcyBEYXRhYmFzZVRocmVhZDsKIGNsYXNzIFNRTFZhbHVlOwogY2xhc3MgU1FMQ2FsbGJhY2s7
CiBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIGNsYXNzIFZlcnNpb25DaGFuZ2VDYWxsYmFjazsKIAor
Ly8gQ2FuIGJlIHVzZWQgdG8gd2FpdCB1bnRpbCBEYXRhYmFzZVRhc2sgaXMgY29tcGxldGVkLgor
Ly8gSGFzIHRvIGJlIHBhc3NlZCBpbnRvIERhdGFiYXNlVGFzazo6Y3JlYXRlIHRvIGJlIGFzc29j
aWF0ZWQgd2l0aCB0aGUgdGFzay4KK2NsYXNzIERhdGFiYXNlVGFza1N5bmNocm9uaXplciA6IHB1
YmxpYyBOb25jb3B5YWJsZSB7CisgICAgZnJpZW5kIGNsYXNzIERhdGFiYXNlVGFzazsKK3B1Ymxp
YzoKKyAgICBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIoKTsKKworICAgIC8vIENhbGxlZCBmcm9t
IG1haW4gdGhyZWFkIHRvIHdhaXQgdW50aWwgdGFzayBpcyBjb21wbGV0ZWQuCisgICAgdm9pZCB3
YWl0Rm9yVGFza0NvbXBsZXRpb24oKTsKKworcHJpdmF0ZToKKyAgICAvLyBDYWxsZWQgYnkgdGhl
IHRhc2suCisgICAgdm9pZCB0YXNrQ29tcGxldGVkKCk7CisKKyAgICBib29sIG1fdGFza0NvbXBs
ZXRlZDsKKyAgICBNdXRleCBtX3N5bmNocm9ub3VzTXV0ZXg7CisgICAgVGhyZWFkQ29uZGl0aW9u
IG1fc3luY2hyb25vdXNDb25kaXRpb247Cit9OworCiBjbGFzcyBEYXRhYmFzZVRhc2sgOiBwdWJs
aWMgVGhyZWFkU2FmZVNoYXJlZDxEYXRhYmFzZVRhc2s+IHsKICAgICBmcmllbmQgY2xhc3MgRGF0
YWJhc2U7CiBwdWJsaWM6CkBAIC01Myw1MyArNzMsNDYgQEAgcHVibGljOgogICAgIHZvaWQgcGVy
Zm9ybVRhc2soKTsKIAogICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YWJhc2U7IH0KLSAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2NvbXBs
ZXRlOyB9CiAKIHByb3RlY3RlZDoKLSAgICBEYXRhYmFzZVRhc2soRGF0YWJhc2UqKTsKKyAgICBE
YXRhYmFzZVRhc2soRGF0YWJhc2UqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqKTsKIAogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpID0gMDsKLSNpZm5kZWYgTkRF
QlVHCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z1Rhc2tOYW1lKCkgY29uc3QgPSAwOwot
I2VuZGlmCi0KLSAgICB2b2lkIGxvY2tGb3JTeW5jaHJvbm91c1NjaGVkdWxpbmcoKTsKLSAgICB2
b2lkIHdhaXRGb3JTeW5jaHJvbm91c0NvbXBsZXRpb24oKTsKIAogICAgIERhdGFiYXNlKiBtX2Rh
dGFiYXNlOworICAgIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogbV9zeW5jaHJvbml6ZXI7CiAK
LSAgICBib29sIG1fY29tcGxldGU7Ci0KLSAgICBPd25QdHI8TXV0ZXg+IG1fc3luY2hyb25vdXNN
dXRleDsKLSAgICBPd25QdHI8VGhyZWFkQ29uZGl0aW9uPiBtX3N5bmNocm9ub3VzQ29uZGl0aW9u
OworI2lmbmRlZiBOREVCVUcKKyAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkZWJ1Z1Rhc2tOYW1l
KCkgY29uc3QgPSAwOworICAgICBib29sIG1fY29tcGxldGU7CisjZW5kaWYKIH07CiAKIGNsYXNz
IERhdGFiYXNlT3BlblRhc2sgOiBwdWJsaWMgRGF0YWJhc2VUYXNrIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxEYXRhYmFzZU9wZW5UYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRiKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VPcGVuVGFzayhkYikpOyB9Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGV4Y2VwdGlvbkNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGU7IH0KLSAgICBi
b29sIG9wZW5TdWNjZXNzZnVsKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzOyB9CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGF0YWJhc2VPcGVuVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYiwgRGF0
YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUs
IGJvb2wmIHN1Y2Nlc3MpIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZU9w
ZW5UYXNrKGRiLCBzeW5jaHJvbml6ZXIsIGNvZGUsIHN1Y2Nlc3MpKTsKKyAgICB9CiAKIHByaXZh
dGU6Ci0gICAgRGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSopOworICAgIERhdGFiYXNlT3BlblRh
c2soRGF0YWJhc2UqLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqLCBFeGNlcHRpb25Db2RlJiwg
Ym9vbCYgc3VjY2Vzcyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwogI2lm
bmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05hbWUoKSBjb25z
dDsKICNlbmRpZgogCi0gICAgRXhjZXB0aW9uQ29kZSBtX2NvZGU7Ci0gICAgYm9vbCBtX3N1Y2Nl
c3M7CisgICAgRXhjZXB0aW9uQ29kZSYgbV9jb2RlOworICAgIGJvb2wmIG1fc3VjY2VzczsKIH07
CiAKIGNsYXNzIERhdGFiYXNlQ2xvc2VUYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VDbG9zZVRhc2s+IGNyZWF0ZShEYXRh
YmFzZSogZGIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZUNsb3NlVGFzayhkYikpOyB9
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VDbG9zZVRhc2s+IGNyZWF0ZShEYXRhYmFz
ZSogZGIsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgRGF0YWJhc2VDbG9zZVRhc2soZGIsIHN5bmNocm9uaXplcikpOyB9CiAKIHBy
aXZhdGU6Ci0gICAgRGF0YWJhc2VDbG9zZVRhc2soRGF0YWJhc2UqKTsKKyAgICBEYXRhYmFzZUNs
b3NlVGFzayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOwogCiAgICAgdmly
dHVhbCB2b2lkIGRvUGVyZm9ybVRhc2soKTsKICNpZm5kZWYgTkRFQlVHCkBAIC0xMDksNyArMTIy
LDEwIEBAIHByaXZhdGU6CiAKIGNsYXNzIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrIDogcHVibGlj
IERhdGFiYXNlVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VU
cmFuc2FjdGlvblRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiB0cmFuc2Fj
dGlvbikgeyByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrKHRyYW5z
YWN0aW9uKSk7IH0KKyAgICAvLyBUcmFuc2FjdGlvbiB0YXNrIGlzIG5ldmVyIHN5bmNocm9ub3Vz
LCBzbyBubyAnc3luY2hyb25pemVyJyBwYXJhbWV0ZXIuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
PiB0cmFuc2FjdGlvbikgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFiYXNlVHJh
bnNhY3Rpb25UYXNrKHRyYW5zYWN0aW9uKSk7CisgICAgfQogCiAgICAgU1FMVHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQogCkBA
IC0xMjcsMTkgKzE0MywxOSBAQCBwcml2YXRlOgogCiBjbGFzcyBEYXRhYmFzZVRhYmxlTmFtZXNU
YXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGF0YWJhc2VUYWJsZU5hbWVzVGFzaz4gY3JlYXRlKERhdGFiYXNlKiBkYikgeyByZXR1cm4g
YWRvcHRSZWYobmV3IERhdGFiYXNlVGFibGVOYW1lc1Rhc2soZGIpKTsgfQotCi0gICAgVmVjdG9y
PFN0cmluZz4mIHRhYmxlTmFtZXMoKSB7IHJldHVybiBtX3RhYmxlTmFtZXM7IH0KKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEYXRhYmFzZVRhYmxlTmFtZXNUYXNrPiBjcmVhdGUoRGF0YWJhc2UqIGRi
LCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIqIHN5bmNocm9uaXplciwgVmVjdG9yPFN0cmluZz4m
IG5hbWVzKSB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YWJhc2VUYWJsZU5hbWVz
VGFzayhkYiwgc3luY2hyb25pemVyLCBuYW1lcykpOworICAgIH0KIAogcHJpdmF0ZToKLSAgICBE
YXRhYmFzZVRhYmxlTmFtZXNUYXNrKERhdGFiYXNlKik7CisgICAgRGF0YWJhc2VUYWJsZU5hbWVz
VGFzayhEYXRhYmFzZSosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIFZlY3RvcjxTdHJpbmc+
JiBuYW1lcyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFzaygpOwogI2lmbmRlZiBO
REVCVUcKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRlYnVnVGFza05hbWUoKSBjb25zdDsKICNl
bmRpZgogCi0gICAgVmVjdG9yPFN0cmluZz4gbV90YWJsZU5hbWVzOworICAgIFZlY3RvcjxTdHJp
bmc+JiBtX3RhYmxlTmFtZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="23720"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="23721"
          type_id="3"
          status="-"
          setter="dimich"
    />
          </attachment>
      

    </bug>

</bugzilla>