<?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>39688</bug_id>
          
          <creation_ts>2010-05-25 14:40:15 -0700</creation_ts>
          <short_desc>We should check if a DB needs to be auto-vacuumed only after transactions that delete something</short_desc>
          <delta_ts>2010-06-01 16:26:54 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Dumitru Daniliuc">dumi</assigned_to>
          <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ericu</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>230467</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-25 14:40:15 -0700</bug_when>
    <thetext>We used to check if a DB needs to be auto-vacuumed after every transaction. The check is freelist_count &gt;= 10% * max_page_count. It turns out that getting freelist_count and max_page_count after every transaction adds a significant overhead. Once we changed the code to run this check only after transactions that have modified the database, the running times of our SELECT benchmarks have gone back to normal.

We should improve this even further: we should get freelist_count and max_page_count only after transactions that have deleted something (DELETE, DROP TABLE, etc.). This should considerably reduce the auto-vacuum-related overhead for transactions that only insert or update data. This is a heuristic: in theory, an UPDATE could replace a huge BLOB with a NULL and reduce the size of a database by &gt;= 10%, but it seems to me that this is a very uncommon case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230514</commentid>
    <comment_count>1</comment_count>
      <attachid>57050</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-25 15:58:44 -0700</bug_when>
    <thetext>Created attachment 57050
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230850</commentid>
    <comment_count>2</comment_count>
      <attachid>57050</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-05-26 13:32:29 -0700</bug_when>
    <thetext>Comment on attachment 57050
patch

Some drive by comments.

WebCore/storage/DatabaseAuthorizer.cpp:311
 +      if (moduleName != &quot;fts2&quot;)
&quot;fts2&quot;... should this be &quot;fts3&quot;?

WebCore/storage/SQLTransaction.cpp:476
 +          m_database-&gt;incrementalVacuumIfNeeded();
This changes the order in which &apos;vacuumIfNeeded&apos; and &apos;didCommit&apos; is called, I pretty sure didCommit involves reexaming the size of the database file for quota tracking purposes (which is why it&apos;s only called for xactions that modify the database).

I think &apos;vacuumIfNeeded&apos; should continue to be called first.

WebCore/storage/DatabaseAuthorizer.cpp:325
 +      m_hadDeletes = m_hadDeletes || allow;
x |= b is a nice shorthand</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230855</commentid>
    <comment_count>3</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-26 13:34:30 -0700</bug_when>
    <thetext>&gt; WebCore/storage/DatabaseAuthorizer.cpp:311
&gt;  +      if (moduleName != &quot;fts2&quot;)
&gt; &quot;fts2&quot;... should this be &quot;fts3&quot;?

fixed and landed this in another patch.

&gt; WebCore/storage/SQLTransaction.cpp:476
&gt;  +          m_database-&gt;incrementalVacuumIfNeeded();
&gt; This changes the order in which &apos;vacuumIfNeeded&apos; and &apos;didCommit&apos; is called, I pretty sure didCommit involves reexaming the size of the database file for quota tracking purposes (which is why it&apos;s only called for xactions that modify the database).
&gt; 
&gt; I think &apos;vacuumIfNeeded&apos; should continue to be called first.

done.

&gt; WebCore/storage/DatabaseAuthorizer.cpp:325
&gt;  +      m_hadDeletes = m_hadDeletes || allow;
&gt; x |= b is a nice shorthand

isn&apos;t |= a binary operator? i don&apos;t think there&apos;s a similar boolean operator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232973</commentid>
    <comment_count>4</comment_count>
      <attachid>57601</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-01 15:47:51 -0700</bug_when>
    <thetext>Created attachment 57601
patch

Same patch merged with other changes that were submitted; also, changed &quot;m_hadDeletes = m_hadDeletes || allow&quot; to &quot;m_hadDeletes |= allow&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232978</commentid>
    <comment_count>5</comment_count>
      <attachid>57601</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-01 15:59:47 -0700</bug_when>
    <thetext>Comment on attachment 57601
patch

r=me, except for:

&gt; -    return denyBasedOnTableName(tableName);
&gt; +    bool allow = denyBasedOnTableName(tableName);
&gt; +    m_hadDeletes |= allow;
&gt; +    return allow;

This looks like a neat helper function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232983</commentid>
    <comment_count>6</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-01 16:13:46 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 57601 [details])
&gt; r=me, except for:
&gt; 
&gt; &gt; -    return denyBasedOnTableName(tableName);
&gt; &gt; +    bool allow = denyBasedOnTableName(tableName);
&gt; &gt; +    m_hadDeletes |= allow;
&gt; &gt; +    return allow;
&gt; 
&gt; This looks like a neat helper function.

done. added updateDeletesBasedOnTableName().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232986</commentid>
    <comment_count>7</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-06-01 16:26:54 -0700</bug_when>
    <thetext>Landed as r60513.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57050</attachid>
            <date>2010-05-25 15:58:44 -0700</date>
            <delta_ts>2010-06-01 15:47:51 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>7959</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDE5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDUtMjUgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGVjayBpZiBhIGRhdGFiYXNlIG5lZWRzIHRvIGJlIGF1dG8tdmFjdXVtZWQgb25seSBhZnRl
ciB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIGRlbGV0ZWQgc29tZXRoaW5nLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk2ODgKKworICAgICAgICAqIHN0
b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
QXV0aG9yaXplcjo6cmVzZXREZWxldGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0
aG9yaXplcjo6ZHJvcFRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXpl
cjo6ZHJvcFRlbXBUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6
OmRyb3BJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BU
ZW1wSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVHJp
Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVHJp
Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZUYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGVsZXRlKToKKyAgICAgICAgKiBz
dG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VB
dXRob3JpemVyOjpoYWREZWxldGVzKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25B
bmRQcmVmbGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OnBvc3RmbGln
aHRBbmRDb21taXQpOgorCiAyMDEwLTA1LTI1ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCShyZXZpc2lvbiA2MDE4OCkKKysrIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw2ICs0OCwxMSBAQCB2b2lkIERhdGFiYXNlQXV0aG9yaXplcjo6cmVzZXQoKQogICAgIG1fcmVh
ZE9ubHkgPSBmYWxzZTsKIH0KIAordm9pZCBEYXRhYmFzZUF1dGhvcml6ZXI6OnJlc2V0RGVsZXRl
cygpCit7CisgICAgbV9oYWREZWxldGVzID0gZmFsc2U7Cit9CisKIHZvaWQgRGF0YWJhc2VBdXRo
b3JpemVyOjphZGRXaGl0ZWxpc3RlZEZ1bmN0aW9ucygpCiB7CiAgICAgLy8gU1FMaXRlIGZ1bmN0
aW9ucyB1c2VkIHRvIGhlbHAgaW1wbGVtZW50IHNvbWUgb3BlcmF0aW9ucwpAQCAtMTM3LDcgKzE0
Miw5IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUYWJsZShjb25zdCAKICAgICBpZiAo
bV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhE
ZW55OwogCi0gICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CisgICAg
Ym9vbCBhbGxvdyA9IGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CisgICAgbV9oYWRE
ZWxldGVzID0gbV9oYWREZWxldGVzIHx8IGFsbG93OworICAgIHJldHVybiBhbGxvdzsKIH0KIAog
aW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxl
TmFtZSkKQEAgLTE0OCw3ICsxNTUsOSBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVt
cFRhYmxlKGNvCiAgICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCiAgICAg
ICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAotICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFt
ZSh0YWJsZU5hbWUpOworICAgIGJvb2wgYWxsb3cgPSBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJs
ZU5hbWUpOworICAgIG1faGFkRGVsZXRlcyA9IG1faGFkRGVsZXRlcyB8fCBhbGxvdzsKKyAgICBy
ZXR1cm4gYWxsb3c7CiB9CiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93QWx0ZXJUYWJs
ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKQEAgLTE4NSw3ICsxOTQs
OSBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wSW5kZXgoY29uc3QgCiAgICAgaWYgKG1f
cmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVu
eTsKIAotICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworICAgIGJv
b2wgYWxsb3cgPSBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworICAgIG1faGFkRGVs
ZXRlcyA9IG1faGFkRGVsZXRlcyB8fCBhbGxvdzsKKyAgICByZXR1cm4gYWxsb3c7CiB9CiAKIGlu
dCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wSW5kZXgoY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiB0YWJsZU5hbWUpCkBAIC0xOTYsNyArMjA3LDkgQEAgaW50IERhdGFiYXNlQXV0aG9y
aXplcjo6ZHJvcFRlbXBJbmRleChjbwogICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlF
bmFibGVkKQogICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CiAKLSAgICByZXR1cm4gZGVueUJh
c2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKKyAgICBib29sIGFsbG93ID0gZGVueUJhc2VkT25U
YWJsZU5hbWUodGFibGVOYW1lKTsKKyAgICBtX2hhZERlbGV0ZXMgPSBtX2hhZERlbGV0ZXMgfHwg
YWxsb3c7CisgICAgcmV0dXJuIGFsbG93OwogfQogCiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpj
cmVhdGVUcmlnZ2VyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQpAQCAt
MjI0LDcgKzIzNyw5IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUcmlnZ2VyKGNvbnMK
ICAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKICAgICAgICAgcmV0dXJu
IFNRTEF1dGhEZW55OwogCi0gICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFt
ZSk7CisgICAgYm9vbCBhbGxvdyA9IGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7Cisg
ICAgbV9oYWREZWxldGVzID0gbV9oYWREZWxldGVzIHx8IGFsbG93OworICAgIHJldHVybiBhbGxv
dzsKIH0KIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBUcmlnZ2VyKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQpAQCAtMjM1LDcgKzI1MCw5IEBAIGludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVHJpZ2dlcigKICAgICBpZiAobV9yZWFkT25seSAm
JiBtX3NlY3VyaXR5RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCi0gICAg
cmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CisgICAgYm9vbCBhbGxvdyA9
IGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CisgICAgbV9oYWREZWxldGVzID0gbV9o
YWREZWxldGVzIHx8IGFsbG93OworICAgIHJldHVybiBhbGxvdzsKIH0KIAogaW50IERhdGFiYXNl
QXV0aG9yaXplcjo6Y3JlYXRlVmlldyhjb25zdCBTdHJpbmcmKQpAQCAtMjUzLDcgKzI3MCwxMSBA
QCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyhjCiAKIGludCBEYXRhYmFz
ZUF1dGhvcml6ZXI6OmRyb3BWaWV3KGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIChtX3Jl
YWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cp
OworICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgICAgICByZXR1
cm4gU1FMQXV0aERlbnk7CisKKyAgICBtX2hhZERlbGV0ZXMgPSB0cnVlOworICAgIHJldHVybiB0
cnVlOwogfQogCiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFZpZXcoY29uc3QgU3Ry
aW5nJikKQEAgLTI2MSw3ICsyODIsMTEgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRl
bXBWaWV3KGNvbgogICAgIC8vIFNRTElURV9EUk9QX1RFTVBfVklFVyByZXN1bHRzIGluIGEgREVM
RVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90CiAgICAgLy8gYWxsb3dlZCBpbiByZWFkLW9ubHkg
dHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0IGFzCiAgICAgLy8g
d2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJPUF9URU1QX1ZJRVcgaW4gdGhlc2UgY2FzZXMKLSAgICBy
ZXR1cm4gKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNR
TEF1dGhBbGxvdyk7CisgICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisg
ICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKworICAgIG1faGFkRGVsZXRlcyA9IHRydWU7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZUYWJs
ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKQpAQCAt
Mjg2LDcgKzMxMSw5IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWVGFibGUoY29uc3QK
ICAgICBpZiAobW9kdWxlTmFtZSAhPSAiZnRzMiIpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVu
eTsKIAotICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworICAgIGJv
b2wgYWxsb3cgPSBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworICAgIG1faGFkRGVs
ZXRlcyA9IG1faGFkRGVsZXRlcyB8fCBhbGxvdzsKKyAgICByZXR1cm4gYWxsb3c7CiB9CiAKIGlu
dCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGVsZXRlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1l
KQpAQCAtMjk0LDcgKzMyMSw5IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGVsZXRl
KGNvbnMKICAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKICAgICAgICAg
cmV0dXJuIFNRTEF1dGhEZW55OwogCi0gICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRh
YmxlTmFtZSk7CisgICAgYm9vbCBhbGxvdyA9IGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFt
ZSk7CisgICAgbV9oYWREZWxldGVzID0gbV9oYWREZWxldGVzIHx8IGFsbG93OworICAgIHJldHVy
biBhbGxvdzsKIH0KIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dJbnNlcnQoY29uc3Qg
U3RyaW5nJiB0YWJsZU5hbWUpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3Jp
emVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5o
CShyZXZpc2lvbiA2MDE4NykKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtOTAsOSArOTAsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
UmVhZE9ubHkoKTsKIAogICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIHJlc2V0RGVsZXRlcygp
OwogCiAgICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
QWN0aW9uV2FzSW5zZXJ0OyB9CiAgICAgYm9vbCBsYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNlOyB9CisgICAgYm9vbCBo
YWREZWxldGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYWREZWxldGVzOyB9CiAKIHByaXZhdGU6CiAg
ICAgRGF0YWJhc2VBdXRob3JpemVyKCk7CkBAIC0xMDMsNiArMTA1LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fbGFzdEFjdGlvbldhc0luc2VydCA6IDE7CiAgICAgYm9vbCBtX2xhc3RBY3Rpb25D
aGFuZ2VkRGF0YWJhc2UgOiAxOwogICAgIGJvb2wgbV9yZWFkT25seSA6IDE7CisgICAgYm9vbCBt
X2hhZERlbGV0ZXMgOiAxOwogCiAgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4g
bV93aGl0ZWxpc3RlZEZ1bmN0aW9uczsKIH07CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bi5jcHAJKHJldmlzaW9uIDYwMTg3KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDYgKzI1Myw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rp
b246Om9wZW5UcmFuc2FjdGlvbkFuZFAKICAgICBBU1NFUlQoIW1fc3FsaXRlVHJhbnNhY3Rpb24p
OwogICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uc2V0KG5ldyBTUUxpdGVUcmFuc2FjdGlvbihtX2Rh
dGFiYXNlLT5tX3NxbGl0ZURhdGFiYXNlLCBtX3JlYWRPbmx5KSk7CiAKKyAgICBtX2RhdGFiYXNl
LT5tX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXREZWxldGVzKCk7CiAgICAgbV9kYXRhYmFzZS0+
bV9kYXRhYmFzZUF1dGhvcml6ZXItPmRpc2FibGUoKTsKICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9u
LT5iZWdpbigpOwogICAgIG1fZGF0YWJhc2UtPm1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUo
KTsKQEAgLTQ2NiwxMiArNDY3LDEzIEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRB
bmRDb21taXQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFRoZSBjb21taXQgd2Fz
IHN1Y2Nlc3NmdWwuIElmIHRoZSB0cmFuc2FjdGlvbiBtb2RpZmllZCB0aGlzIGRhdGFiYXNlLAot
ICAgIC8vIHZhY3V1bSB0aGUgZGF0YWJhc2UgaWYgbmVlZGVkIGFuZCBub3RpZnkgdGhlIGRlbGVn
YXRlcy4KLSAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlKSB7Ci0gICAgICAgIG1fZGF0YWJhc2Ut
PmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKKyAgICAvLyBUaGUgY29tbWl0IHdhcyBzdWNj
ZXNzZnVsLiBJZiB0aGUgdHJhbnNhY3Rpb24gbW9kaWZpZWQgdGhpcyBkYXRhYmFzZSwgbm90aWZ5
IHRoZSBkZWxlZ2F0ZXMuCisgICAgaWYgKG1fbW9kaWZpZWREYXRhYmFzZSkKICAgICAgICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25DbGllbnQoKS0+ZGlkQ29tbWl0VHJhbnNhY3Rpb24odGhpcyk7
Ci0gICAgfQorCisgICAgLy8gVmFjdXVtIHRoZSBkYXRhYmFzZSBpZiBhbnl0aGluZyB3YXMgZGVs
ZXRlZC4KKyAgICBpZiAobV9kYXRhYmFzZS0+bV9kYXRhYmFzZUF1dGhvcml6ZXItPmhhZERlbGV0
ZXMoKSkKKyAgICAgICAgbV9kYXRhYmFzZS0+aW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOwog
CiAgICAgLy8gTm93IHJlbGVhc2Ugb3VyIHVubmVlZGVkIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVm
ZXJlbmNlIGN5Y2xlcy4KICAgICBtX2NhbGxiYWNrID0gMDsK
</data>
<flag name="commit-queue"
          id="41566"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57601</attachid>
            <date>2010-06-01 15:47:51 -0700</date>
            <delta_ts>2010-06-01 15:59:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>8942</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDUxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDYtMDEgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGVjayBpZiBhIGRhdGFiYXNlIG5lZWRzIHRvIGJlIGF1dG8tdmFjdXVtZWQgb25seSBhZnRl
ciB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIGRlbGV0ZWQgc29tZXRoaW5nLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk2ODgKKworICAgICAgICAqIHN0
b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnJlc2V0RGVs
ZXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6aGFkRGVsZXRlcyk6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VBdXRob3Jp
emVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6cmVzZXREZWxl
dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBUYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVHJpZ2dlcik6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVHJpZ2dlcik6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlQXV0aG9yaXplcjo6ZHJvcFZUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1
dGhvcml6ZXI6OmFsbG93RGVsZXRlKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9y
aXplci5oOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpoYWREZWxldGVz
KToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRDb21taXQpOgorCiAyMDEw
LTA2LTAxICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDYw
NTA5KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAzLDYgKzUwMywxOCBAQCBib29sIERhdGFiYXNlOjpsYXN0QWN0aW9uV2FzSW5zZXJ0KCkKICAg
ICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmxhc3RBY3Rpb25XYXNJbnNlcnQoKTsKIH0K
IAordm9pZCBEYXRhYmFzZTo6cmVzZXREZWxldGVzKCkKK3sKKyAgICBBU1NFUlQobV9kYXRhYmFz
ZUF1dGhvcml6ZXIpOworICAgIG1fZGF0YWJhc2VBdXRob3JpemVyLT5yZXNldERlbGV0ZXMoKTsK
K30KKworYm9vbCBEYXRhYmFzZTo6aGFkRGVsZXRlcygpCit7CisgICAgQVNTRVJUKG1fZGF0YWJh
c2VBdXRob3JpemVyKTsKKyAgICByZXR1cm4gbV9kYXRhYmFzZUF1dGhvcml6ZXItPmhhZERlbGV0
ZXMoKTsKK30KKwogc3RhdGljIGludCBndWlkRm9yT3JpZ2luQW5kTmFtZShjb25zdCBTdHJpbmcm
IG9yaWdpbiwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIFN0cmluZyBzdHJpbmdJRDsKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA2MDUwOSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEF1dGhvcml6ZXJSZWFkT25seSgpOwogICAgIGJvb2wgbGFzdEFjdGlvbkNoYW5nZWREYXRh
YmFzZSgpOwogICAgIGJvb2wgbGFzdEFjdGlvbldhc0luc2VydCgpOworICAgIHZvaWQgcmVzZXRE
ZWxldGVzKCk7CisgICAgYm9vbCBoYWREZWxldGVzKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB0
YWJsZU5hbWVzKCk7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuY3Bw
CShyZXZpc2lvbiA2MDUwOSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxMSBAQCB2b2lkIERhdGFiYXNlQXV0aG9y
aXplcjo6cmVzZXQoKQogICAgIG1fcmVhZE9ubHkgPSBmYWxzZTsKIH0KIAordm9pZCBEYXRhYmFz
ZUF1dGhvcml6ZXI6OnJlc2V0RGVsZXRlcygpCit7CisgICAgbV9oYWREZWxldGVzID0gZmFsc2U7
Cit9CisKIHZvaWQgRGF0YWJhc2VBdXRob3JpemVyOjphZGRXaGl0ZWxpc3RlZEZ1bmN0aW9ucygp
CiB7CiAgICAgLy8gU1FMaXRlIGZ1bmN0aW9ucyB1c2VkIHRvIGhlbHAgaW1wbGVtZW50IHNvbWUg
b3BlcmF0aW9ucwpAQCAtMTM3LDcgKzE0Miw5IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRy
b3BUYWJsZShjb25zdCAKICAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkK
ICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCi0gICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFi
bGVOYW1lKHRhYmxlTmFtZSk7CisgICAgYm9vbCBhbGxvdyA9IGRlbnlCYXNlZE9uVGFibGVOYW1l
KHRhYmxlTmFtZSk7CisgICAgbV9oYWREZWxldGVzIHw9IGFsbG93OworICAgIHJldHVybiBhbGxv
dzsKIH0KIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBUYWJsZShjb25zdCBTdHJp
bmcmIHRhYmxlTmFtZSkKQEAgLTE0OCw3ICsxNTUsOSBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVy
Ojpkcm9wVGVtcFRhYmxlKGNvCiAgICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJs
ZWQpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAotICAgIHJldHVybiBkZW55QmFzZWRP
blRhYmxlTmFtZSh0YWJsZU5hbWUpOworICAgIGJvb2wgYWxsb3cgPSBkZW55QmFzZWRPblRhYmxl
TmFtZSh0YWJsZU5hbWUpOworICAgIG1faGFkRGVsZXRlcyB8PSBhbGxvdzsKKyAgICByZXR1cm4g
YWxsb3c7CiB9CiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93QWx0ZXJUYWJsZShjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKQEAgLTE4NSw3ICsxOTQsOSBAQCBp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wSW5kZXgoY29uc3QgCiAgICAgaWYgKG1fcmVhZE9u
bHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAot
ICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworICAgIGJvb2wgYWxs
b3cgPSBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworICAgIG1faGFkRGVsZXRlcyB8
PSBhbGxvdzsKKyAgICByZXR1cm4gYWxsb3c7CiB9CiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6
OmRyb3BUZW1wSW5kZXgoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCkBA
IC0xOTYsNyArMjA3LDkgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBJbmRleChj
bwogICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQogICAgICAgICByZXR1
cm4gU1FMQXV0aERlbnk7CiAKLSAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVO
YW1lKTsKKyAgICBib29sIGFsbG93ID0gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsK
KyAgICBtX2hhZERlbGV0ZXMgfD0gYWxsb3c7CisgICAgcmV0dXJuIGFsbG93OwogfQogCiBpbnQg
RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUcmlnZ2VyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0
cmluZyYgdGFibGVOYW1lKQpAQCAtMjI0LDcgKzIzNyw5IEBAIGludCBEYXRhYmFzZUF1dGhvcml6
ZXI6OmRyb3BUcmlnZ2VyKGNvbnMKICAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5h
YmxlZCkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCi0gICAgcmV0dXJuIGRlbnlCYXNl
ZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CisgICAgYm9vbCBhbGxvdyA9IGRlbnlCYXNlZE9uVGFi
bGVOYW1lKHRhYmxlTmFtZSk7CisgICAgbV9oYWREZWxldGVzIHw9IGFsbG93OworICAgIHJldHVy
biBhbGxvdzsKIH0KIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBUcmlnZ2VyKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQpAQCAtMjM1LDcgKzI1MCw5IEBA
IGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVHJpZ2dlcigKICAgICBpZiAobV9yZWFk
T25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55Owog
Ci0gICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CisgICAgYm9vbCBh
bGxvdyA9IGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CisgICAgbV9oYWREZWxldGVz
IHw9IGFsbG93OworICAgIHJldHVybiBhbGxvdzsKIH0KIAogaW50IERhdGFiYXNlQXV0aG9yaXpl
cjo6Y3JlYXRlVmlldyhjb25zdCBTdHJpbmcmKQpAQCAtMjUzLDcgKzI3MCwxMSBAQCBpbnQgRGF0
YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyhjCiAKIGludCBEYXRhYmFzZUF1dGhvcml6
ZXI6OmRyb3BWaWV3KGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIChtX3JlYWRPbmx5ICYm
IG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworICAgIGlm
IChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgICAgICByZXR1cm4gU1FMQXV0
aERlbnk7CisKKyAgICBtX2hhZERlbGV0ZXMgPSB0cnVlOworICAgIHJldHVybiB0cnVlOwogfQog
CiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFZpZXcoY29uc3QgU3RyaW5nJikKQEAg
LTI2MSw3ICsyODIsMTEgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KGNv
bgogICAgIC8vIFNRTElURV9EUk9QX1RFTVBfVklFVyByZXN1bHRzIGluIGEgREVMRVRFIG9wZXJh
dGlvbiwgd2hpY2ggaXMgbm90CiAgICAgLy8gYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rp
b25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0IGFzCiAgICAgLy8gd2VsbCBkaXNh
bGxvdyBTUUxJVEVfRFJPUF9URU1QX1ZJRVcgaW4gdGhlc2UgY2FzZXMKLSAgICByZXR1cm4gKG1f
cmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxv
dyk7CisgICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgICAgIHJl
dHVybiBTUUxBdXRoRGVueTsKKworICAgIG1faGFkRGVsZXRlcyA9IHRydWU7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZUYWJsZShjb25zdCBT
dHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKQpAQCAtMjg2LDcgKzMx
MSw5IEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWVGFibGUoY29uc3QKICAgICBpZiAo
bW9kdWxlTmFtZSAhPSAiZnRzMyIpCiAgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKIAotICAg
IHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworICAgIGJvb2wgYWxsb3cg
PSBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOworICAgIG1faGFkRGVsZXRlcyB8PSBh
bGxvdzsKKyAgICByZXR1cm4gYWxsb3c7CiB9CiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFs
bG93RGVsZXRlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQpAQCAtMjk0LDcgKzMyMSw5IEBAIGlu
dCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93RGVsZXRlKGNvbnMKICAgICBpZiAobV9yZWFkT25s
eSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OwogCi0g
ICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CisgICAgYm9vbCBhbGxv
dyA9IGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CisgICAgbV9oYWREZWxldGVzIHw9
IGFsbG93OworICAgIHJldHVybiBhbGxvdzsKIH0KIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6
YWxsb3dJbnNlcnQoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VBdXRob3JpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlQXV0aG9yaXplci5oCShyZXZpc2lvbiA2MDUwOSkKKysrIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZUF1dGhvcml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsOSArOTAsMTEgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0UmVhZE9ubHkoKTsKIAogICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2
b2lkIHJlc2V0RGVsZXRlcygpOwogCiAgICAgYm9vbCBsYXN0QWN0aW9uV2FzSW5zZXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0QWN0aW9uV2FzSW5zZXJ0OyB9CiAgICAgYm9vbCBsYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0QWN0aW9uQ2hhbmdlZERhdGFi
YXNlOyB9CisgICAgYm9vbCBoYWREZWxldGVzKCkgY29uc3QgeyByZXR1cm4gbV9oYWREZWxldGVz
OyB9CiAKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VBdXRob3JpemVyKCk7CkBAIC0xMDMsNiArMTA1
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbGFzdEFjdGlvbldhc0luc2VydCA6IDE7CiAgICAg
Ym9vbCBtX2xhc3RBY3Rpb25DaGFuZ2VkRGF0YWJhc2UgOiAxOwogICAgIGJvb2wgbV9yZWFkT25s
eSA6IDE7CisgICAgYm9vbCBtX2hhZERlbGV0ZXMgOiAxOwogCiAgICAgSGFzaFNldDxTdHJpbmcs
IENhc2VGb2xkaW5nSGFzaD4gbV93aGl0ZWxpc3RlZEZ1bmN0aW9uczsKIH07CkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDYwNTA5KQorKysgV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDYgKzI1Myw3IEBA
IHZvaWQgU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFAKICAgICBBU1NFUlQoIW1f
c3FsaXRlVHJhbnNhY3Rpb24pOwogICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uc2V0KG5ldyBTUUxp
dGVUcmFuc2FjdGlvbihtX2RhdGFiYXNlLT5zcWxpdGVEYXRhYmFzZSgpLCBtX3JlYWRPbmx5KSk7
CiAKKyAgICBtX2RhdGFiYXNlLT5yZXNldERlbGV0ZXMoKTsKICAgICBtX2RhdGFiYXNlLT5kaXNh
YmxlQXV0aG9yaXplcigpOwogICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmJlZ2luKCk7CiAgICAg
bV9kYXRhYmFzZS0+ZW5hYmxlQXV0aG9yaXplcigpOwpAQCAtNDY2LDEyICs0NjcsMTMgQEAgdm9p
ZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgLy8gVGhlIGNvbW1pdCB3YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIHRyYW5zYWN0
aW9uIG1vZGlmaWVkIHRoaXMgZGF0YWJhc2UsCi0gICAgLy8gdmFjdXVtIHRoZSBkYXRhYmFzZSBp
ZiBuZWVkZWQgYW5kIG5vdGlmeSB0aGUgZGVsZWdhdGVzLgotICAgIGlmIChtX21vZGlmaWVkRGF0
YWJhc2UpIHsKKyAgICAvLyBWYWN1dW0gdGhlIGRhdGFiYXNlIGlmIGFueXRoaW5nIHdhcyBkZWxl
dGVkLgorICAgIGlmIChtX2RhdGFiYXNlLT5oYWREZWxldGVzKCkpCiAgICAgICAgIG1fZGF0YWJh
c2UtPmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQoKTsKKworICAgIC8vIFRoZSBjb21taXQgd2Fz
IHN1Y2Nlc3NmdWwuIElmIHRoZSB0cmFuc2FjdGlvbiBtb2RpZmllZCB0aGlzIGRhdGFiYXNlLCBu
b3RpZnkgdGhlIGRlbGVnYXRlcy4KKyAgICBpZiAobV9tb2RpZmllZERhdGFiYXNlKQogICAgICAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRDb21taXRUcmFuc2FjdGlvbih0
aGlzKTsKLSAgICB9CiAKICAgICAvLyBOb3cgcmVsZWFzZSBvdXIgdW5uZWVkZWQgY2FsbGJhY2tz
LCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgogICAgIG1fY2FsbGJhY2sgPSAwOwo=
</data>
<flag name="review"
          id="42234"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="42235"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>