<?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>144602</bug_id>
          
          <creation_ts>2015-05-04 15:55:20 -0700</creation_ts>
          <short_desc>[Content Extensions] Use less memory when writing byte code to file</short_desc>
          <delta_ts>2015-05-05 10:14:43 -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 Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1091567</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-04 15:55:20 -0700</bug_when>
    <thetext>Right now we keep several copies of all the data in memory at the same time.  We only need one copy of one DFA&apos;s byte code alive at a time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091568</commentid>
    <comment_count>1</comment_count>
      <attachid>252343</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-04 15:57:22 -0700</bug_when>
    <thetext>Created attachment 252343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091576</commentid>
    <comment_count>2</comment_count>
      <attachid>252343</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-04 16:04:09 -0700</bug_when>
    <thetext>Comment on attachment 252343
Patch

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

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:77
&gt; +const size_t ContentExtensionFileHeaderSize = sizeof(uint32_t) + 2 * sizeof(uint64_t);

Why do this instead of sizeof(ContentExtensionMetaData)? Because of alignment, I suspect the expression above will be wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091579</commentid>
    <comment_count>3</comment_count>
      <attachid>252343</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-04 16:06:01 -0700</bug_when>
    <thetext>Comment on attachment 252343
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:77
&gt;&gt; +const size_t ContentExtensionFileHeaderSize = sizeof(uint32_t) + 2 * sizeof(uint64_t);
&gt; 
&gt; Why do this instead of sizeof(ContentExtensionMetaData)? Because of alignment, I suspect the expression above will be wrong.

When writing the header, we only want to write 20 bytes.  Otherwise we would be writing uninitialized memory to file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091611</commentid>
    <comment_count>4</comment_count>
      <attachid>252355</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-04 16:55:39 -0700</bug_when>
    <thetext>Created attachment 252355
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091780</commentid>
    <comment_count>5</comment_count>
      <attachid>252355</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-05 09:07:52 -0700</bug_when>
    <thetext>Comment on attachment 252355
Patch

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

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:84
&gt;  static Data encodeContentExtensionMetaData(const ContentExtensionMetaData&amp; metaData)

I think you want to add this to the end of this function:

    ASSERT(encoder.bufferSize() == ContentExtensionFileHeaderSize);

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtensionStore.cpp:218
&gt; +    memset(invalidHeader, 0xff, sizeof(invalidHeader));

We normally use capitalized hex, 0xFF, in WebKit code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091804</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-05-05 10:14:43 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/183817</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252343</attachid>
            <date>2015-05-04 15:57:22 -0700</date>
            <delta_ts>2015-05-04 16:55:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144602-20150504155608.patch</filename>
            <type>text/plain</type>
            <size>13111</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA1LTA0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gVXNlIGxlc3MgbWVtb3J5IHdoZW4gd3JpdGluZyBieXRlIGNvZGUgdG8gZmls
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjAy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdCk6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vRmlsZVN5c3RlbS5oOgorCiAyMDE1LTA1LTA0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVA
YXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIENyYXNoIGluIC1bV2ViQ0FMYXllckhvc3RXcmFw
cGVyIHJlc29sdmVCb3VuZHNdCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHJldmlz
aW9uIDE4MzY2NykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25Db21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNiBAQCBz
dGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFCiAgICAgZG91YmxlIHRvdGFs
TkZBVG9CeXRlQ29kZUJ1aWxkVGltZVN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
KCk7CiAjZW5kaWYKIAotICAgIFZlY3RvcjxERkFCeXRlY29kZT4gYnl0ZWNvZGU7CiAgICAgYm9v
bCBmaXJzdE5GQVNlZW4gPSBmYWxzZTsKICAgICBjb21iaW5lZFVSTEZpbHRlcnMucHJvY2Vzc05G
QXMoWyZdKE5GQSYmIG5mYSkgewogI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5F
X0RFQlVHR0lORwpAQCAtMjM3LDggKzIzNiwxMSBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1
bGVMaXN0KENvbnRlbnRFCiAgICAgICAgICAgICBhZGRVbml2ZXJzYWxBY3Rpb25zVG9ERkEoZGZh
LCB1bml2ZXJzYWxBY3Rpb25Mb2NhdGlvbnMpOwogICAgICAgICB9CiAKKyAgICAgICAgVmVjdG9y
PERGQUJ5dGVjb2RlPiBieXRlY29kZTsKICAgICAgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21w
aWxlcihkZmEsIGJ5dGVjb2RlKTsKICAgICAgICAgY29tcGlsZXIuY29tcGlsZSgpOworICAgICAg
ICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhieXRlY29kZSwgYnl0ZWNvZGUuY2FwYWNpdHkoKSAqIHNp
emVvZih1aW50OF90KSk7CisgICAgICAgIGNsaWVudC53cml0ZUJ5dGVjb2RlKFdURjo6bW92ZShi
eXRlY29kZSkpOwogCiAgICAgICAgIGZpcnN0TkZBU2VlbiA9IHRydWU7CiAgICAgfSk7CkBAIC0y
NTIsOCArMjU0LDExIEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUK
IAogICAgICAgICBhZGRVbml2ZXJzYWxBY3Rpb25zVG9ERkEoZHVtbXlERkEsIHVuaXZlcnNhbEFj
dGlvbkxvY2F0aW9ucyk7CiAKKyAgICAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsK
ICAgICAgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21waWxlcihkdW1teURGQSwgYnl0ZWNvZGUp
OwogICAgICAgICBjb21waWxlci5jb21waWxlKCk7CisgICAgICAgIExPR19MQVJHRV9TVFJVQ1RV
UkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0eSgpICogc2l6ZW9mKHVpbnQ4X3QpKTsKKyAg
ICAgICAgY2xpZW50LndyaXRlQnl0ZWNvZGUoV1RGOjptb3ZlKGJ5dGVjb2RlKSk7CiAgICAgfQog
CiAgICAgLy8gRklYTUU6IGNvbWJpbmVkVVJMRmlsdGVycyBzaG91bGQgYmUgY2xlYXJlZCBpbmNy
ZW1lbnRhbGx5IGFzIGl0IGlzIHByb2Nlc3NpbmcgTkZBcy4gCkBAIC0yNjgsOSArMjczLDcgQEAg
c3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgIGRhdGFMb2dGKCIg
ICAgQnl0ZWNvZGUgc2l6ZSAlenVcbiIsIGJ5dGVjb2RlLnNpemUoKSk7CiAjZW5kaWYKIAotICAg
IExPR19MQVJHRV9TVFJVQ1RVUkVTKGJ5dGVjb2RlLCBieXRlY29kZS5jYXBhY2l0eSgpICogc2l6
ZW9mKHVpbnQ4X3QpKTsKLSAgICBjbGllbnQud3JpdGVCeXRlY29kZShXVEY6Om1vdmUoYnl0ZWNv
ZGUpKTsKLSAgICBieXRlY29kZS5jbGVhcigpOworICAgIGNsaWVudC5maW5hbGl6ZSgpOwogCiAg
ICAgcmV0dXJuIHsgfTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oCShyZXZpc2lvbiAx
ODM1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdmlydHVhbCB2b2lkIHdyaXRlQnl0ZWNvZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYm
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8U2VyaWFsaXplZEFj
dGlvbkJ5dGU+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoKSA9IDA7CiB9Owog
CiBXRUJDT1JFX0VYUE9SVCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRlbnRF
eHRlbnNpb25Db21waWxhdGlvbkNsaWVudCYsIGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAkocmV2aXNpb24gMTgzNTU2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4
LDcgQEAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKAogV0VCQ09SRV9F
WFBPUlQgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmls
ZU9wZW5Nb2RlKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSYpOwogLy8gUmV0dXJucyB0aGUgcmVzdWx0aW5nIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5p
bmcgb2YgdGhlIGZpbGUgaWYgc3VjY2Vzc2Z1bCwgLTEgb3RoZXJ3aXNlLgotbG9uZyBsb25nIHNl
ZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmln
aW4pOworV0VCQ09SRV9FWFBPUlQgbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOwogYm9vbCB0cnVuY2F0ZUZpbGUo
UGxhdGZvcm1GaWxlSGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0KTsKIC8vIFJldHVybnMgbnVtYmVy
IG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQgaWYgc3VjY2Vzc2Z1bCwgLTEgb3RoZXJ3aXNlLgogV0VC
Q09SRV9FWFBPUlQgaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODM3NzQpCisr
KyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBA
QAorMjAxNS0wNS0wNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIFVzZSBsZXNzIG1lbW9yeSB3aGVuIHdy
aXRpbmcgYnl0ZSBjb2RlIHRvIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NDYwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0
b3JlLmNwcDoKKyAgICAgICAgKEFQSTo6ZGVjb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKToK
KyAgICAgICAgKEFQSTo6d3JpdGVEYXRhVG9GaWxlKToKKyAgICAgICAgKEFQSTo6Y29tcGlsZWRU
b0ZpbGUpOgorICAgICAgICAoQVBJOjpjcmVhdGVFeHRlbnNpb24pOgorCiAyMDE1LTA1LTA0ICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBOZXR3b3JrIENhY2hl
OiBTdXBwb3J0IHRpbWUgYmFzZWQgY2FjaGUgY2xlYXJpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lv
blN0b3JlLmNwcAkocmV2aXNpb24gMTgzNTU2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzQsMTIgKzc0LDExIEBAIHN0YXRpYyBTdHJpbmcgY29uc3RydWN0ZWRQYXRoKGNvbnN0IFN0cmkK
ICAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGJhc2UsICJDb250
ZW50RXh0ZW5zaW9uLSIgKyBXZWJDb3JlOjplbmNvZGVGb3JGaWxlTmFtZShpZGVudGlmaWVyKSk7
CiB9CiAKK2NvbnN0IHNpemVfdCBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUgPSBzaXpl
b2YodWludDMyX3QpICsgMiAqIHNpemVvZih1aW50NjRfdCk7CiBzdHJ1Y3QgQ29udGVudEV4dGVu
c2lvbk1ldGFEYXRhIHsKLSAgICB1aW50MzJfdCB2ZXJzaW9uOwotICAgIHVpbnQ2NF90IGFjdGlv
bnNPZmZzZXQ7Ci0gICAgdWludDY0X3QgYWN0aW9uc1NpemU7Ci0gICAgdWludDY0X3QgYnl0ZWNv
ZGVPZmZzZXQ7Ci0gICAgdWludDY0X3QgYnl0ZWNvZGVTaXplOworICAgIHVpbnQzMl90IHZlcnNp
b24geyAxIH07CisgICAgdWludDY0X3QgYWN0aW9uc1NpemUgeyAwIH07CisgICAgdWludDY0X3Qg
Ynl0ZWNvZGVTaXplIHsgMCB9OwogfTsKIAogc3RhdGljIERhdGEgZW5jb2RlQ29udGVudEV4dGVu
c2lvbk1ldGFEYXRhKGNvbnN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbWV0YURhdGEpCkBA
IC0xMDksOCArMTA4LDYgQEAgc3RhdGljIGJvb2wgZGVjb2RlQ29udGVudEV4dGVuc2lvbk1ldGFE
YQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KG1ldGFEYXRhLmJ5dGVjb2RlU2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIG1ldGFEYXRhLmFjdGlvbnNPZmZzZXQgPSBkZWNvZGVyLmN1cnJlbnRPZmZzZXQoKTsKLSAg
ICAgICAgbWV0YURhdGEuYnl0ZWNvZGVPZmZzZXQgPSBtZXRhRGF0YS5hY3Rpb25zT2Zmc2V0ICsg
bWV0YURhdGEuYWN0aW9uc1NpemU7CiAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfSk7CkBAIC0xNDEsNyArMTM4LDcgQEAgc3RhdGljIGJvb2wgb3Bl
bkFuZE1hcENvbnRlbnRFeHRlbnNpb24oYwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMg
Ym9vbCB3cml0ZURhdGFUb0ZpbGUoRGF0YSYgZmlsZURhdGEsIFdlYkNvcmU6OlBsYXRmb3JtRmls
ZUhhbmRsZSBmZCkKK3N0YXRpYyBib29sIHdyaXRlRGF0YVRvRmlsZShjb25zdCBEYXRhJiBmaWxl
RGF0YSwgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIGZkKQogewogICAgIGJvb2wgc3VjY2Vz
cyA9IHRydWU7CiAgICAgZmlsZURhdGEuYXBwbHkoW2ZkLCAmc3VjY2Vzc10oY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IHNpemUpIHsKQEAgLTE2MSw2NSArMTU4LDc2IEBAIHN0YXRpYyBzdGQ6
OmVycm9yX2NvZGUgY29tcGlsZWRUb0ZpbGUoY28KIAogICAgIGNsYXNzIENvbXBpbGF0aW9uQ2xp
ZW50IGZpbmFsIDogcHVibGljIENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCB7CiAg
ICAgcHVibGljOgotICAgICAgICBDb21waWxhdGlvbkNsaWVudChEYXRhJiBieXRlY29kZURhdGEs
IERhdGEmIGFjdGlvbnNEYXRhKQotICAgICAgICAgICAgOiBtX2J5dGVjb2RlRGF0YShieXRlY29k
ZURhdGEpCi0gICAgICAgICAgICAsIG1fYWN0aW9uc0RhdGEoYWN0aW9uc0RhdGEpCisgICAgICAg
IENvbXBpbGF0aW9uQ2xpZW50KFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlSGFuZGxl
LCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhKQorICAgICAgICAgICAgOiBtX2Zp
bGVIYW5kbGUoZmlsZUhhbmRsZSkKKyAgICAgICAgICAgICwgbV9tZXRhRGF0YShtZXRhRGF0YSkK
ICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlQnl0ZWNv
ZGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlKSBvdmVycmlkZQogICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2J5dGVjb2RlRGF0YSA9IERhdGEoYnl0ZWNvZGUuZGF0YSgpLCBieXRlY29k
ZS5zaXplKCkpOworICAgICAgICAgICAgbV9ieXRlY29kZVdyaXR0ZW4gKz0gYnl0ZWNvZGUuc2l6
ZSgpOworICAgICAgICAgICAgd3JpdGUoRGF0YShieXRlY29kZS5kYXRhKCksIGJ5dGVjb2RlLnNp
emUoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0aW9ucyhW
ZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYgYWN0aW9ucykgb3ZlcnJpZGUKICAgICAgICAg
ewotICAgICAgICAgICAgbV9hY3Rpb25zRGF0YSA9IERhdGEoYWN0aW9ucy5kYXRhKCksIGFjdGlv
bnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9ieXRlY29kZVdyaXR0ZW4pOworICAg
ICAgICAgICAgQVNTRVJUKCFtX2FjdGlvbnNXcml0dGVuKTsKKyAgICAgICAgICAgIG1fYWN0aW9u
c1dyaXR0ZW4gKz0gYWN0aW9ucy5zaXplKCk7CisgICAgICAgICAgICB3cml0ZShEYXRhKGFjdGlv
bnMuZGF0YSgpLCBhY3Rpb25zLnNpemUoKSkpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICBtX21ldGFEYXRhLmFjdGlvbnNTaXplID0gbV9hY3Rpb25zV3JpdHRlbjsKKyAgICAgICAgICAg
IG1fbWV0YURhdGEuYnl0ZWNvZGVTaXplID0gbV9ieXRlY29kZVdyaXR0ZW47CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIERhdGEgaGVhZGVyID0gZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFE
YXRhKG1fbWV0YURhdGEpOworICAgICAgICAgICAgaWYgKCFtX2ZpbGVFcnJvciAmJiBXZWJDb3Jl
OjpzZWVrRmlsZShtX2ZpbGVIYW5kbGUsIDBsbCwgV2ViQ29yZTo6RmlsZVNlZWtPcmlnaW46OlNl
ZWtGcm9tQmVnaW5uaW5nKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIFdlYkNvcmU6OmNsb3Nl
RmlsZShtX2ZpbGVIYW5kbGUpOworICAgICAgICAgICAgICAgIG1fZmlsZUVycm9yID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlKGhlYWRlcik7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGJvb2wgaGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSB7IHJldHVy
biBtX2ZpbGVFcnJvcjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRGF0YSYgbV9ieXRlY29k
ZURhdGE7Ci0gICAgICAgIERhdGEmIG1fYWN0aW9uc0RhdGE7CisgICAgICAgIHZvaWQgd3JpdGUo
Y29uc3QgRGF0YSYgZGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2ZpbGVFcnJv
ciAmJiAhd3JpdGVEYXRhVG9GaWxlKGRhdGEsIG1fZmlsZUhhbmRsZSkpIHsKKyAgICAgICAgICAg
ICAgICBXZWJDb3JlOjpjbG9zZUZpbGUobV9maWxlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBt
X2ZpbGVFcnJvciA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVIYW5kbGU7CisgICAgICAg
IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSYgbV9tZXRhRGF0YTsKKyAgICAgICAgc2l6ZV90IG1f
Ynl0ZWNvZGVXcml0dGVuIHsgMCB9OworICAgICAgICBzaXplX3QgbV9hY3Rpb25zV3JpdHRlbiB7
IDAgfTsKKyAgICAgICAgYm9vbCBtX2ZpbGVFcnJvciB7IGZhbHNlIH07CiAgICAgfTsKIAotICAg
IERhdGEgYnl0ZWNvZGU7Ci0gICAgRGF0YSBhY3Rpb25zOwotICAgIENvbXBpbGF0aW9uQ2xpZW50
IGNvbXBpbGF0aW9uQ2xpZW50KGJ5dGVjb2RlLCBhY3Rpb25zKTsKLQotICAgIC8vIEZJWE1FOiBU
aGlzIGNvcGllcyB0aGUgZGF0YS4gSW5zdGVhZCwgd2Ugc2hvdWxkIGJlIHBhc3NpbmcgYW4gaW50
ZXJmYWNlCi0gICAgLy8gdG8gdGhlIGNvbXBpbGVyIHRoYXQgY2FuIHdyaXRlIGRpcmVjdGx5IHRv
IGEgZmlsZS4KLQotICAgIGF1dG8gY29tcGlsZXJFcnJvciA9IGNvbXBpbGVSdWxlTGlzdChjb21w
aWxhdGlvbkNsaWVudCwganNvbik7Ci0gICAgaWYgKGNvbXBpbGVyRXJyb3IpCi0gICAgICAgIHJl
dHVybiBjb21waWxlckVycm9yOwotCi0gICAgYXV0byBhY3Rpb25zQW5kQnl0ZWNvZGUgPSBjb25j
YXRlbmF0ZShhY3Rpb25zLCBieXRlY29kZSk7Ci0KLSAgICBtZXRhRGF0YS52ZXJzaW9uID0gMTsK
LSAgICBtZXRhRGF0YS5hY3Rpb25zU2l6ZSA9IGFjdGlvbnMuc2l6ZSgpOwotICAgIG1ldGFEYXRh
LmJ5dGVjb2RlU2l6ZSA9IGJ5dGVjb2RlLnNpemUoKTsKLQotICAgIGF1dG8gZW5jb2RlZE1ldGFE
YXRhID0gZW5jb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKG1ldGFEYXRhKTsKLQotICAgIG1l
dGFEYXRhLmFjdGlvbnNPZmZzZXQgPSBlbmNvZGVkTWV0YURhdGEuc2l6ZSgpOwotICAgIG1ldGFE
YXRhLmJ5dGVjb2RlT2Zmc2V0ID0gZW5jb2RlZE1ldGFEYXRhLnNpemUoKSArIG1ldGFEYXRhLmFj
dGlvbnNTaXplOwotCi0gICAgYXV0byBkYXRhID0gY29uY2F0ZW5hdGUoZW5jb2RlZE1ldGFEYXRh
LCBhY3Rpb25zQW5kQnl0ZWNvZGUpOwotICAgIGF1dG8gZGF0YVNpemUgPSBkYXRhLnNpemUoKTsK
LQotICAgIEFTU0VSVChtZXRhRGF0YS5hY3Rpb25zT2Zmc2V0ICsgbWV0YURhdGEuYWN0aW9uc1Np
emUgKyBtZXRhRGF0YS5ieXRlY29kZVNpemUgPT0gZGF0YVNpemUpOwotCiAgICAgYXV0byB0ZW1w
b3JhcnlGaWxlSGFuZGxlID0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKICAg
ICBTdHJpbmcgdGVtcG9yYXJ5RmlsZVBhdGggPSBXZWJDb3JlOjpvcGVuVGVtcG9yYXJ5RmlsZSgi
Q29udGVudEV4dGVuc2lvbiIsIHRlbXBvcmFyeUZpbGVIYW5kbGUpOwogICAgIGlmICh0ZW1wb3Jh
cnlGaWxlSGFuZGxlID09IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCiAgICAg
ICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZhaWxl
ZDsKLQotICAgIGlmICghd3JpdGVEYXRhVG9GaWxlKGRhdGEsIHRlbXBvcmFyeUZpbGVIYW5kbGUp
KSB7Ci0gICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKKyAg
ICAKKyAgICBjaGFyIGludmFsaWRIZWFkZXJbQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXpl
XTsKKyAgICBtZW1zZXQoaW52YWxpZEhlYWRlciwgMHhmZiwgc2l6ZW9mKGludmFsaWRIZWFkZXIp
KTsKKyAgICAvLyBUaGlzIGhlYWRlciB3aWxsIGJlIHJld3JpdHRlbiBpbiBDb21waWxhdGlvbkNs
aWVudDo6ZmluYWxpemUuCisgICAgaWYgKFdlYkNvcmU6OndyaXRlVG9GaWxlKHRlbXBvcmFyeUZp
bGVIYW5kbGUsIGludmFsaWRIZWFkZXIsIHNpemVvZihpbnZhbGlkSGVhZGVyKSkgPT0gLTEpCiAg
ICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlOjpFcnJvcjo6Q29tcGlsZUZh
aWxlZDsKLSAgICB9CiAKLSAgICBtYXBwZWREYXRhID0gbWFwRmlsZSh0ZW1wb3JhcnlGaWxlSGFu
ZGxlLCAwLCBkYXRhU2l6ZSk7CisgICAgQ29tcGlsYXRpb25DbGllbnQgY29tcGlsYXRpb25DbGll
bnQodGVtcG9yYXJ5RmlsZUhhbmRsZSwgbWV0YURhdGEpOworICAgIAorICAgIGlmIChhdXRvIGNv
bXBpbGVyRXJyb3IgPSBjb21waWxlUnVsZUxpc3QoY29tcGlsYXRpb25DbGllbnQsIGpzb24pKQor
ICAgICAgICByZXR1cm4gY29tcGlsZXJFcnJvcjsKKyAgICBpZiAoY29tcGlsYXRpb25DbGllbnQu
aGFkRXJyb3JXaGlsZVdyaXRpbmdUb0ZpbGUoKSkKKyAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50
RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOworICAgIAorICAgIG1hcHBlZERh
dGEgPSBtYXBGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUsIDAsIENvbnRlbnRFeHRlbnNpb25GaWxl
SGVhZGVyU2l6ZSArIG1ldGFEYXRhLmFjdGlvbnNTaXplICsgbWV0YURhdGEuYnl0ZWNvZGVTaXpl
KTsKICAgICBXZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7CiAKICAgICBp
ZiAobWFwcGVkRGF0YS5pc051bGwoKSkKQEAgLTIzNyw5ICsyNDUsOSBAQCBzdGF0aWMgUmVmUHRy
PEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+CiAgICAgYXV0byBjb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKAogICAg
ICAgICBXVEY6Om1vdmUoc2hhcmVkTWVtb3J5KSwKICAgICAgICAgZmlsZURhdGEsCi0gICAgICAg
IG1ldGFEYXRhLmFjdGlvbnNPZmZzZXQsCisgICAgICAgIENvbnRlbnRFeHRlbnNpb25GaWxlSGVh
ZGVyU2l6ZSwKICAgICAgICAgbWV0YURhdGEuYWN0aW9uc1NpemUsCi0gICAgICAgIG1ldGFEYXRh
LmJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUg
KyBtZXRhRGF0YS5hY3Rpb25zU2l6ZSwKICAgICAgICAgbWV0YURhdGEuYnl0ZWNvZGVTaXplCiAg
ICAgKTsKICAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktpdDo6V2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbkRhdGEpKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzc3NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA1LTA0ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10g
VXNlIGxlc3MgbWVtb3J5IHdoZW4gd3JpdGluZyBieXRlIGNvZGUgdG8gZmlsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjAyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwOgorCiAyMDE1LTA1LTA0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIEltcGxlbWVudCB0
aGUgIi0tc2hvdy13ZWJ2aWV3IiBvcHRpb24gZm9yIFdpbmRvd3MKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNw
cAkocmV2aXNpb24gMTgzNTU2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0NvbnRlbnRFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTIgKzg1LDE2IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJ5dGVjb2RlKFZlY3RvcjxXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGU+JiYgYnl0ZWNvZGUpIG92ZXJyaWRlCiAg
ICAgewotICAgICAgICBtX2RhdGEuYnl0ZWNvZGUgPSBXVEY6Om1vdmUoYnl0ZWNvZGUpOworICAg
ICAgICBtX2RhdGEuYnl0ZWNvZGUuYXBwZW5kVmVjdG9yKGJ5dGVjb2RlKTsKICAgICB9CiAgICAg
CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0aW9ucyhWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYmIGFjdGlvbnMpIG92ZXJyaWRlCiAgICAg
ewotICAgICAgICBtX2RhdGEuYWN0aW9ucyA9IFdURjo6bW92ZShhY3Rpb25zKTsKKyAgICAgICAg
bV9kYXRhLmFjdGlvbnMuYXBwZW5kVmVjdG9yKGFjdGlvbnMpOworICAgIH0KKyAgICAKKyAgICB2
aXJ0dWFsIHZvaWQgZmluYWxpemUoKSBvdmVycmlkZQorICAgIHsKICAgICB9CiAKIHByaXZhdGU6
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252355</attachid>
            <date>2015-05-04 16:55:39 -0700</date>
            <delta_ts>2015-05-05 09:07:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144602-20150504165425.patch</filename>
            <type>text/plain</type>
            <size>19510</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzc3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA1LTA0ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gVXNlIGxlc3MgbWVtb3J5IHdoZW4gd3JpdGluZyBieXRlIGNvZGUgdG8gZmls
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjAy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdCk6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmg6CisgICAgICAgIENvbXBp
bGUgb25lIERGQSBhdCBhIHRpbWUgc28gd2UgZG9uJ3QgbmVlZCB0byBrZWVwIGFsbCB0aGUgYnl0
ZWNvZGUgaW4gbWVtb3J5IGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgICogY29udGVudGV4dGVu
c2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAg
ICAgSnVtcHMgYXJlIG5vdyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBERkEgYmVjYXVzZSB3ZSBk
b24ndCBrbm93IGFib3V0IG90aGVyIERGQXMgdGhhdAorICAgICAgICBoYXZlIGJlZW4gY29tcGls
aW5nIHdoZW4gbGlua2luZyB0aGUgREZBIGJ5dGVjb2RlLiAgVGhpcyB3aWxsIGFsc28gbWFrZSB0
aGUgREZBIGJ5dGVjb2RlCisgICAgICAgIGVhc2llciB0byBtaW5pbWl6ZSBiZWNhdXNlIG1vcmUg
b2YgdGhlIHZhbHVlcyBhcmUgc21hbGwgaW4gdGhlIERGQXMgYWZ0ZXIgdGhlIGZpcnN0IERGQS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6CisKIDIwMTUtMDUtMDQgIERlYW4gSmFj
a3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIENyZWF0ZSBhIG5hbWVkIENTUyBwcm9w
ZXJ0eSBmb3Igc3lzdGVtIGNvbG9ycwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAxODM2NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDYg
QEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogICAgIGRvdWJsZSB0
b3RhbE5GQVRvQnl0ZUNvZGVCdWlsZFRpbWVTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOwogI2VuZGlmCiAKLSAgICBWZWN0b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOwogICAg
IGJvb2wgZmlyc3RORkFTZWVuID0gZmFsc2U7CiAgICAgY29tYmluZWRVUkxGaWx0ZXJzLnByb2Nl
c3NORkFzKFsmXShORkEmJiBuZmEpIHsKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFD
SElORV9ERUJVR0dJTkcKQEAgLTIzNyw4ICsyMzYsMTEgQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBp
bGVSdWxlTGlzdChDb250ZW50RQogICAgICAgICAgICAgYWRkVW5pdmVyc2FsQWN0aW9uc1RvREZB
KGRmYSwgdW5pdmVyc2FsQWN0aW9uTG9jYXRpb25zKTsKICAgICAgICAgfQogCisgICAgICAgIFZl
Y3RvcjxERkFCeXRlY29kZT4gYnl0ZWNvZGU7CiAgICAgICAgIERGQUJ5dGVjb2RlQ29tcGlsZXIg
Y29tcGlsZXIoZGZhLCBieXRlY29kZSk7CiAgICAgICAgIGNvbXBpbGVyLmNvbXBpbGUoKTsKKyAg
ICAgICAgTE9HX0xBUkdFX1NUUlVDVFVSRVMoYnl0ZWNvZGUsIGJ5dGVjb2RlLmNhcGFjaXR5KCkg
KiBzaXplb2YodWludDhfdCkpOworICAgICAgICBjbGllbnQud3JpdGVCeXRlY29kZShXVEY6Om1v
dmUoYnl0ZWNvZGUpKTsKIAogICAgICAgICBmaXJzdE5GQVNlZW4gPSB0cnVlOwogICAgIH0pOwpA
QCAtMjUyLDggKzI1NCwxMSBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVMaXN0KENvbnRl
bnRFCiAKICAgICAgICAgYWRkVW5pdmVyc2FsQWN0aW9uc1RvREZBKGR1bW15REZBLCB1bml2ZXJz
YWxBY3Rpb25Mb2NhdGlvbnMpOwogCisgICAgICAgIFZlY3RvcjxERkFCeXRlY29kZT4gYnl0ZWNv
ZGU7CiAgICAgICAgIERGQUJ5dGVjb2RlQ29tcGlsZXIgY29tcGlsZXIoZHVtbXlERkEsIGJ5dGVj
b2RlKTsKICAgICAgICAgY29tcGlsZXIuY29tcGlsZSgpOworICAgICAgICBMT0dfTEFSR0VfU1RS
VUNUVVJFUyhieXRlY29kZSwgYnl0ZWNvZGUuY2FwYWNpdHkoKSAqIHNpemVvZih1aW50OF90KSk7
CisgICAgICAgIGNsaWVudC53cml0ZUJ5dGVjb2RlKFdURjo6bW92ZShieXRlY29kZSkpOwogICAg
IH0KIAogICAgIC8vIEZJWE1FOiBjb21iaW5lZFVSTEZpbHRlcnMgc2hvdWxkIGJlIGNsZWFyZWQg
aW5jcmVtZW50YWxseSBhcyBpdCBpcyBwcm9jZXNzaW5nIE5GQXMuIApAQCAtMjY4LDkgKzI3Myw3
IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVudEUKICAgICBkYXRhTG9n
RigiICAgIEJ5dGVjb2RlIHNpemUgJXp1XG4iLCBieXRlY29kZS5zaXplKCkpOwogI2VuZGlmCiAK
LSAgICBMT0dfTEFSR0VfU1RSVUNUVVJFUyhieXRlY29kZSwgYnl0ZWNvZGUuY2FwYWNpdHkoKSAq
IHNpemVvZih1aW50OF90KSk7Ci0gICAgY2xpZW50LndyaXRlQnl0ZWNvZGUoV1RGOjptb3ZlKGJ5
dGVjb2RlKSk7Ci0gICAgYnl0ZWNvZGUuY2xlYXIoKTsKKyAgICBjbGllbnQuZmluYWxpemUoKTsK
IAogICAgIHJldHVybiB7IH07CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaAkocmV2aXNp
b24gMTgzNTU2KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbkNvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGlj
OgogICAgIAogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJ5dGVjb2RlKFZlY3RvcjxERkFCeXRlY29k
ZT4mJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUFjdGlvbnMoVmVjdG9yPFNlcmlhbGl6
ZWRBY3Rpb25CeXRlPiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKCkgPSAwOwog
fTsKIAogV0VCQ09SRV9FWFBPUlQgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250
ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQmLCBjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVj
b2RlSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxODM1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDcgKzExNCw3IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMgREZB
Qnl0ZWMKICAgICAgICAgICAgIGlmIChwcm9ncmFtQ291bnRlciA+PSBtX2J5dGVjb2RlTGVuZ3Ro
KQogICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3Ry
dWN0aW9uPihtX2J5dGVjb2RlW3Byb2dyYW1Db3VudGVyXSkgIT0gREZBQnl0ZWNvZGVJbnN0cnVj
dGlvbjo6QXBwZW5kQWN0aW9uIAorICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShzdGF0
aWNfY2FzdDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlW3Byb2dyYW1Db3VudGVy
XSkgIT0gREZBQnl0ZWNvZGVJbnN0cnVjdGlvbjo6QXBwZW5kQWN0aW9uCiAgICAgICAgICAgICAg
ICAgJiYgc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZVtwcm9n
cmFtQ291bnRlcl0pICE9IERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OlRlc3RGbGFnc0FuZEFwcGVu
ZEFjdGlvbiwgCiAgICAgICAgICAgICAgICAgIlRyaWdnZXJzIHRoYXQgbWF0Y2ggZXZlcnl0aGlu
ZyBzaG91bGQgb25seSBiZSBpbiB0aGUgZmlyc3QgREZBLiIpOwogICAgICAgICB9CkBAIC0xMzcs
NyArMTM3LDcgQEAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogICAg
ICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhl
IHVybCBpcyB0aGUgdmFsdWUgc3RvcmVkIHdpdGggdGhlIGJ5dGVjb2RlLgogICAgICAgICAgICAg
ICAgIGNoYXIgY2hhcmFjdGVyID0gdXJsW3VybEluZGV4XTsKICAgICAgICAgICAgICAgICBpZiAo
Y2hhcmFjdGVyID09IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0
aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpLCBtX3BhZ2VzVXNlZCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBnZXRCaXRzPHVuc2lnbmVkPiht
X2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFC
eXRlY29kZSkgKyBzaXplb2YodWludDhfdCksIG1fcGFnZXNVc2VkKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBkZmFTdGFydCArIGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0
ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVj
b2RlKSArIHNpemVvZih1aW50OF90KSwgbV9wYWdlc1VzZWQpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWNoYXJhY3RlcikKICAgICAgICAgICAgICAgICAgICAgICAgIHVybEluZGV4SXNBZnRl
ckVuZE9mU3RyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgdXJsSW5kZXgrKzsgLy8g
VGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIERGQS4KQEAgLTE1Myw3ICsxNTMsNyBAQCBE
RkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgICAgICAgICAgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgdXJsIGlzIHRoZSB2
YWx1ZSBzdG9yZWQgd2l0aCB0aGUgYnl0ZWNvZGUuCiAgICAgICAgICAgICAgICAgY2hhciBjaGFy
YWN0ZXIgPSB0b0FTQ0lJTG93ZXIodXJsW3VybEluZGV4XSk7CiAgICAgICAgICAgICAgICAgaWYg
KGNoYXJhY3RlciA9PSBnZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5n
dGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSwgbV9wYWdlc1VzZWQpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyID0gZ2V0Qml0czx1bnNpZ25lZD4o
bV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZB
Qnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpLCBtX3BhZ2VzVXNlZCk7CisgICAgICAgICAgICAg
ICAgICAgIHByb2dyYW1Db3VudGVyID0gZGZhU3RhcnQgKyBnZXRCaXRzPHVuc2lnbmVkPihtX2J5
dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRl
Y29kZSkgKyBzaXplb2YodWludDhfdCksIG1fcGFnZXNVc2VkKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjaGFyYWN0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICB1cmxJbmRleElzQWZ0
ZXJFbmRPZlN0cmluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHVybEluZGV4Kys7IC8v
IFRoaXMgcmVwcmVzZW50cyBhbiBlZGdlIGluIHRoZSBERkEuCkBAIC0xNjksNyArMTY5LDcgQEAg
REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogICAgICAgICAgICAgICAg
IGNoYXIgY2hhcmFjdGVyID0gdXJsW3VybEluZGV4XTsKICAgICAgICAgICAgICAgICBpZiAoY2hh
cmFjdGVyID49IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwg
cHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpLCBtX3BhZ2VzVXNlZCkKICAgICAg
ICAgICAgICAgICAgICAgJiYgY2hhcmFjdGVyIDw9IGdldEJpdHM8dWludDhfdD4obV9ieXRlY29k
ZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUp
ICsgc2l6ZW9mKHVpbnQ4X3QpLCBtX3BhZ2VzVXNlZCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
cHJvZ3JhbUNvdW50ZXIgPSBnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2Rl
TGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkgKyBzaXplb2YodWlu
dDhfdCkgKyBzaXplb2YodWludDhfdCksIG1fcGFnZXNVc2VkKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHJvZ3JhbUNvdW50ZXIgPSBkZmFTdGFydCArIGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNv
ZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2Rl
KSArIHNpemVvZih1aW50OF90KSArIHNpemVvZih1aW50OF90KSwgbV9wYWdlc1VzZWQpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNoYXJhY3RlcikKICAgICAgICAgICAgICAgICAgICAgICAg
IHVybEluZGV4SXNBZnRlckVuZE9mU3RyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
dXJsSW5kZXgrKzsgLy8gVGhpcyByZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIERGQS4KQEAgLTE4
NSw3ICsxODUsNyBAQCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAg
ICAgICAgICAgICAgICAgY2hhciBjaGFyYWN0ZXIgPSB0b0FTQ0lJTG93ZXIodXJsW3VybEluZGV4
XSk7CiAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA+PSBnZXRCaXRzPHVpbnQ4X3Q+KG1f
Ynl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5
dGVjb2RlKSwgbV9wYWdlc1VzZWQpCiAgICAgICAgICAgICAgICAgICAgICYmIGNoYXJhY3RlciA8
PSBnZXRCaXRzPHVpbnQ4X3Q+KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1D
b3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSArIHNpemVvZih1aW50OF90KSwgbV9wYWdlc1Vz
ZWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyID0gZ2V0Qml0czx1bnNp
Z25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXpl
b2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpICsgc2l6ZW9mKHVpbnQ4X3QpLCBtX3Bh
Z2VzVXNlZCk7CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyID0gZGZhU3RhcnQg
KyBnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2RlTGVuZ3RoLCBwcm9ncmFt
Q291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkgKyBzaXplb2YodWludDhfdCkgKyBzaXplb2Yo
dWludDhfdCksIG1fcGFnZXNVc2VkKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFyYWN0
ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICB1cmxJbmRleElzQWZ0ZXJFbmRPZlN0cmluZyA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHVybEluZGV4Kys7IC8vIFRoaXMgcmVwcmVzZW50
cyBhbiBlZGdlIGluIHRoZSBERkEuCkBAIC0xOTgsNyArMTk4LDcgQEAgREZBQnl0ZWNvZGVJbnRl
cnByZXRlcjo6QWN0aW9ucyBERkFCeXRlYwogICAgICAgICAgICAgICAgIGlmICghdXJsW3VybElu
ZGV4XSB8fCB1cmxJbmRleElzQWZ0ZXJFbmRPZlN0cmluZykKICAgICAgICAgICAgICAgICAgICAg
Z290byBuZXh0REZBOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHByb2dyYW1D
b3VudGVyID0gZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwg
cHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpLCBtX3BhZ2VzVXNlZCk7CisgICAg
ICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBkZmFTdGFydCArIGdldEJpdHM8dW5zaWduZWQ+
KG1fYnl0ZWNvZGUsIG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERG
QUJ5dGVjb2RlKSwgbV9wYWdlc1VzZWQpOwogICAgICAgICAgICAgICAgIHVybEluZGV4Kys7IC8v
IFRoaXMgcmVwcmVzZW50cyBhbiBlZGdlIGluIHRoZSBERkEuCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZVN5c3RlbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVT
eXN0ZW0uaAkocmV2aXNpb24gMTgzNTU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmls
ZVN5c3RlbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKAogV0VCQ09SRV9FWFBPUlQgUGxhdGZvcm1GaWxl
SGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlKTsKIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYpOwogLy8gUmV0dXJu
cyB0aGUgcmVzdWx0aW5nIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgaWYg
c3VjY2Vzc2Z1bCwgLTEgb3RoZXJ3aXNlLgotbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmls
ZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOworV0VCQ09SRV9FWFBP
UlQgbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNl
dCwgRmlsZVNlZWtPcmlnaW4pOwogYm9vbCB0cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxl
LCBsb25nIGxvbmcgb2Zmc2V0KTsKIC8vIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5
IHJlYWQgaWYgc3VjY2Vzc2Z1bCwgLTEgb3RoZXJ3aXNlLgogV0VCQ09SRV9FWFBPUlQgaW50IHdy
aXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODM3NzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxNS0wNS0wNCAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250
ZW50IEV4dGVuc2lvbnNdIFVzZSBsZXNzIG1lbW9yeSB3aGVuIHdyaXRpbmcgYnl0ZSBjb2RlIHRv
IGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NDYwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcDoKKyAgICAgICAg
KEFQSTo6ZGVjb2RlQ29udGVudEV4dGVuc2lvbk1ldGFEYXRhKToKKyAgICAgICAgKEFQSTo6d3Jp
dGVEYXRhVG9GaWxlKToKKyAgICAgICAgKEFQSTo6Y29tcGlsZWRUb0ZpbGUpOgorICAgICAgICAo
QVBJOjpjcmVhdGVFeHRlbnNpb24pOgorICAgICAgICBDb21waWxlIGFuZCB3cml0ZSBlYWNoIERG
QSB0byBmaWxlLCB0aGVuIGNvbWUgYmFjayBhbmQgd3JpdGUgdGhlIGhlYWRlciB3aGVuIGZpbmFs
aXppbmcuCisgICAgICAgIEFsc28gZG9uJ3QgY29weSB0aGUgREZBIGJ5dGVjb2RlLiBUaGlzIHdh
eSwgd2UgZG9uJ3QgbmVlZCB0byBrZWVwIG1vcmUgdGhhbiBvbmUgREZBJ3MKKyAgICAgICAgYnl0
ZWNvZGUgaW4gbWVtb3J5IGF0IGEgdGltZS4KKwogMjAxNS0wNS0wNCAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgTmV0d29yayBDYWNoZTogU3VwcG9ydCB0aW1l
IGJhc2VkIGNhY2hlIGNsZWFyaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHJl
dmlzaW9uIDE4MzU1NikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb25TdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDEyICs3NCwxMSBA
QCBzdGF0aWMgU3RyaW5nIGNvbnN0cnVjdGVkUGF0aChjb25zdCBTdHJpCiAgICAgcmV0dXJuIFdl
YkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChiYXNlLCAiQ29udGVudEV4dGVuc2lvbi0i
ICsgV2ViQ29yZTo6ZW5jb2RlRm9yRmlsZU5hbWUoaWRlbnRpZmllcikpOwogfQogCitjb25zdCBz
aXplX3QgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplID0gc2l6ZW9mKHVpbnQzMl90KSAr
IDIgKiBzaXplb2YodWludDY0X3QpOwogc3RydWN0IENvbnRlbnRFeHRlbnNpb25NZXRhRGF0YSB7
Ci0gICAgdWludDMyX3QgdmVyc2lvbjsKLSAgICB1aW50NjRfdCBhY3Rpb25zT2Zmc2V0OwotICAg
IHVpbnQ2NF90IGFjdGlvbnNTaXplOwotICAgIHVpbnQ2NF90IGJ5dGVjb2RlT2Zmc2V0OwotICAg
IHVpbnQ2NF90IGJ5dGVjb2RlU2l6ZTsKKyAgICB1aW50MzJfdCB2ZXJzaW9uIHsgMSB9OworICAg
IHVpbnQ2NF90IGFjdGlvbnNTaXplIHsgMCB9OworICAgIHVpbnQ2NF90IGJ5dGVjb2RlU2l6ZSB7
IDAgfTsKIH07CiAKIHN0YXRpYyBEYXRhIGVuY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShj
b25zdCBDb250ZW50RXh0ZW5zaW9uTWV0YURhdGEmIG1ldGFEYXRhKQpAQCAtMTA5LDggKzEwOCw2
IEBAIHN0YXRpYyBib29sIGRlY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGEKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhRGF0YS5ieXRl
Y29kZVNpemUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtZXRhRGF0YS5h
Y3Rpb25zT2Zmc2V0ID0gZGVjb2Rlci5jdXJyZW50T2Zmc2V0KCk7Ci0gICAgICAgIG1ldGFEYXRh
LmJ5dGVjb2RlT2Zmc2V0ID0gbWV0YURhdGEuYWN0aW9uc09mZnNldCArIG1ldGFEYXRhLmFjdGlv
bnNTaXplOwogICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0pOwpAQCAtMTQxLDcgKzEzOCw3IEBAIHN0YXRpYyBib29sIG9wZW5BbmRNYXBDb250ZW50
RXh0ZW5zaW9uKGMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgd3JpdGVEYXRh
VG9GaWxlKERhdGEmIGZpbGVEYXRhLCBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmQpCitz
dGF0aWMgYm9vbCB3cml0ZURhdGFUb0ZpbGUoY29uc3QgRGF0YSYgZmlsZURhdGEsIFdlYkNvcmU6
OlBsYXRmb3JtRmlsZUhhbmRsZSBmZCkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwogICAg
IGZpbGVEYXRhLmFwcGx5KFtmZCwgJnN1Y2Nlc3NdKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBzaXplKSB7CkBAIC0xNjEsNjUgKzE1OCw3NiBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGNv
bXBpbGVkVG9GaWxlKGNvCiAKICAgICBjbGFzcyBDb21waWxhdGlvbkNsaWVudCBmaW5hbCA6IHB1
YmxpYyBDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgQ29tcGlsYXRpb25DbGllbnQoRGF0YSYgYnl0ZWNvZGVEYXRhLCBEYXRhJiBhY3Rpb25z
RGF0YSkKLSAgICAgICAgICAgIDogbV9ieXRlY29kZURhdGEoYnl0ZWNvZGVEYXRhKQotICAgICAg
ICAgICAgLCBtX2FjdGlvbnNEYXRhKGFjdGlvbnNEYXRhKQorICAgICAgICBDb21waWxhdGlvbkNs
aWVudChXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZUhhbmRsZSwgQ29udGVudEV4dGVu
c2lvbk1ldGFEYXRhJiBtZXRhRGF0YSkKKyAgICAgICAgICAgIDogbV9maWxlSGFuZGxlKGZpbGVI
YW5kbGUpCisgICAgICAgICAgICAsIG1fbWV0YURhdGEobWV0YURhdGEpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJ5dGVjb2RlKFZlY3RvcjxERkFC
eXRlY29kZT4mJiBieXRlY29kZSkgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgbV9i
eXRlY29kZURhdGEgPSBEYXRhKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKTsKKyAg
ICAgICAgICAgIG1fYnl0ZWNvZGVXcml0dGVuICs9IGJ5dGVjb2RlLnNpemUoKTsKKyAgICAgICAg
ICAgIHdyaXRlKERhdGEoYnl0ZWNvZGUuZGF0YSgpLCBieXRlY29kZS5zaXplKCkpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCB3cml0ZUFjdGlvbnMoVmVjdG9yPFNlcmlhbGl6
ZWRBY3Rpb25CeXRlPiYmIGFjdGlvbnMpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAg
IG1fYWN0aW9uc0RhdGEgPSBEYXRhKGFjdGlvbnMuZGF0YSgpLCBhY3Rpb25zLnNpemUoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIW1fYnl0ZWNvZGVXcml0dGVuKTsKKyAgICAgICAgICAgIEFTU0VS
VCghbV9hY3Rpb25zV3JpdHRlbik7CisgICAgICAgICAgICBtX2FjdGlvbnNXcml0dGVuICs9IGFj
dGlvbnMuc2l6ZSgpOworICAgICAgICAgICAgd3JpdGUoRGF0YShhY3Rpb25zLmRhdGEoKSwgYWN0
aW9ucy5zaXplKCkpKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lk
IGZpbmFsaXplKCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9tZXRhRGF0YS5h
Y3Rpb25zU2l6ZSA9IG1fYWN0aW9uc1dyaXR0ZW47CisgICAgICAgICAgICBtX21ldGFEYXRhLmJ5
dGVjb2RlU2l6ZSA9IG1fYnl0ZWNvZGVXcml0dGVuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBEYXRhIGhlYWRlciA9IGVuY29kZUNvbnRlbnRFeHRlbnNpb25NZXRhRGF0YShtX21ldGFEYXRh
KTsKKyAgICAgICAgICAgIGlmICghbV9maWxlRXJyb3IgJiYgV2ViQ29yZTo6c2Vla0ZpbGUobV9m
aWxlSGFuZGxlLCAwbGwsIFdlYkNvcmU6OkZpbGVTZWVrT3JpZ2luOjpTZWVrRnJvbUJlZ2lubmlu
ZykgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpjbG9zZUZpbGUobV9maWxlSGFu
ZGxlKTsKKyAgICAgICAgICAgICAgICBtX2ZpbGVFcnJvciA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB3cml0ZShoZWFkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBib29sIGhhZEVycm9yV2hpbGVXcml0aW5nVG9GaWxlKCkgeyByZXR1cm4gbV9maWxlRXJyb3I7
IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIERhdGEmIG1fYnl0ZWNvZGVEYXRhOwotICAgICAg
ICBEYXRhJiBtX2FjdGlvbnNEYXRhOworICAgICAgICB2b2lkIHdyaXRlKGNvbnN0IERhdGEmIGRh
dGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9maWxlRXJyb3IgJiYgIXdyaXRlRGF0
YVRvRmlsZShkYXRhLCBtX2ZpbGVIYW5kbGUpKSB7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6
Y2xvc2VGaWxlKG1fZmlsZUhhbmRsZSk7CisgICAgICAgICAgICAgICAgbV9maWxlRXJyb3IgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9maWxlSGFuZGxlOworICAgICAgICBDb250ZW50RXh0ZW5z
aW9uTWV0YURhdGEmIG1fbWV0YURhdGE7CisgICAgICAgIHNpemVfdCBtX2J5dGVjb2RlV3JpdHRl
biB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1fYWN0aW9uc1dyaXR0ZW4geyAwIH07CisgICAgICAg
IGJvb2wgbV9maWxlRXJyb3IgeyBmYWxzZSB9OwogICAgIH07CiAKLSAgICBEYXRhIGJ5dGVjb2Rl
OwotICAgIERhdGEgYWN0aW9uczsKLSAgICBDb21waWxhdGlvbkNsaWVudCBjb21waWxhdGlvbkNs
aWVudChieXRlY29kZSwgYWN0aW9ucyk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBjb3BpZXMgdGhl
IGRhdGEuIEluc3RlYWQsIHdlIHNob3VsZCBiZSBwYXNzaW5nIGFuIGludGVyZmFjZQotICAgIC8v
IHRvIHRoZSBjb21waWxlciB0aGF0IGNhbiB3cml0ZSBkaXJlY3RseSB0byBhIGZpbGUuCi0KLSAg
ICBhdXRvIGNvbXBpbGVyRXJyb3IgPSBjb21waWxlUnVsZUxpc3QoY29tcGlsYXRpb25DbGllbnQs
IGpzb24pOwotICAgIGlmIChjb21waWxlckVycm9yKQotICAgICAgICByZXR1cm4gY29tcGlsZXJF
cnJvcjsKLQotICAgIGF1dG8gYWN0aW9uc0FuZEJ5dGVjb2RlID0gY29uY2F0ZW5hdGUoYWN0aW9u
cywgYnl0ZWNvZGUpOwotCi0gICAgbWV0YURhdGEudmVyc2lvbiA9IDE7Ci0gICAgbWV0YURhdGEu
YWN0aW9uc1NpemUgPSBhY3Rpb25zLnNpemUoKTsKLSAgICBtZXRhRGF0YS5ieXRlY29kZVNpemUg
PSBieXRlY29kZS5zaXplKCk7Ci0KLSAgICBhdXRvIGVuY29kZWRNZXRhRGF0YSA9IGVuY29kZUNv
bnRlbnRFeHRlbnNpb25NZXRhRGF0YShtZXRhRGF0YSk7Ci0KLSAgICBtZXRhRGF0YS5hY3Rpb25z
T2Zmc2V0ID0gZW5jb2RlZE1ldGFEYXRhLnNpemUoKTsKLSAgICBtZXRhRGF0YS5ieXRlY29kZU9m
ZnNldCA9IGVuY29kZWRNZXRhRGF0YS5zaXplKCkgKyBtZXRhRGF0YS5hY3Rpb25zU2l6ZTsKLQot
ICAgIGF1dG8gZGF0YSA9IGNvbmNhdGVuYXRlKGVuY29kZWRNZXRhRGF0YSwgYWN0aW9uc0FuZEJ5
dGVjb2RlKTsKLSAgICBhdXRvIGRhdGFTaXplID0gZGF0YS5zaXplKCk7Ci0KLSAgICBBU1NFUlQo
bWV0YURhdGEuYWN0aW9uc09mZnNldCArIG1ldGFEYXRhLmFjdGlvbnNTaXplICsgbWV0YURhdGEu
Ynl0ZWNvZGVTaXplID09IGRhdGFTaXplKTsKLQogICAgIGF1dG8gdGVtcG9yYXJ5RmlsZUhhbmRs
ZSA9IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7CiAgICAgU3RyaW5nIHRlbXBv
cmFyeUZpbGVQYXRoID0gV2ViQ29yZTo6b3BlblRlbXBvcmFyeUZpbGUoIkNvbnRlbnRFeHRlbnNp
b24iLCB0ZW1wb3JhcnlGaWxlSGFuZGxlKTsKICAgICBpZiAodGVtcG9yYXJ5RmlsZUhhbmRsZSA9
PSBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKQogICAgICAgICByZXR1cm4gVXNl
ckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7Ci0KLSAgICBpZiAo
IXdyaXRlRGF0YVRvRmlsZShkYXRhLCB0ZW1wb3JhcnlGaWxlSGFuZGxlKSkgewotICAgICAgICBX
ZWJDb3JlOjpjbG9zZUZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSk7CisgICAgCisgICAgY2hhciBp
bnZhbGlkSGVhZGVyW0NvbnRlbnRFeHRlbnNpb25GaWxlSGVhZGVyU2l6ZV07CisgICAgbWVtc2V0
KGludmFsaWRIZWFkZXIsIDB4ZmYsIHNpemVvZihpbnZhbGlkSGVhZGVyKSk7CisgICAgLy8gVGhp
cyBoZWFkZXIgd2lsbCBiZSByZXdyaXR0ZW4gaW4gQ29tcGlsYXRpb25DbGllbnQ6OmZpbmFsaXpl
LgorICAgIGlmIChXZWJDb3JlOjp3cml0ZVRvRmlsZSh0ZW1wb3JhcnlGaWxlSGFuZGxlLCBpbnZh
bGlkSGVhZGVyLCBzaXplb2YoaW52YWxpZEhlYWRlcikpID09IC0xKQogICAgICAgICByZXR1cm4g
VXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZTo6RXJyb3I6OkNvbXBpbGVGYWlsZWQ7Ci0gICAgfQog
Ci0gICAgbWFwcGVkRGF0YSA9IG1hcEZpbGUodGVtcG9yYXJ5RmlsZUhhbmRsZSwgMCwgZGF0YVNp
emUpOworICAgIENvbXBpbGF0aW9uQ2xpZW50IGNvbXBpbGF0aW9uQ2xpZW50KHRlbXBvcmFyeUZp
bGVIYW5kbGUsIG1ldGFEYXRhKTsKKyAgICAKKyAgICBpZiAoYXV0byBjb21waWxlckVycm9yID0g
Y29tcGlsZVJ1bGVMaXN0KGNvbXBpbGF0aW9uQ2xpZW50LCBqc29uKSkKKyAgICAgICAgcmV0dXJu
IGNvbXBpbGVyRXJyb3I7CisgICAgaWYgKGNvbXBpbGF0aW9uQ2xpZW50LmhhZEVycm9yV2hpbGVX
cml0aW5nVG9GaWxlKCkpCisgICAgICAgIHJldHVybiBVc2VyQ29udGVudEV4dGVuc2lvblN0b3Jl
OjpFcnJvcjo6Q29tcGlsZUZhaWxlZDsKKyAgICAKKyAgICBtYXBwZWREYXRhID0gbWFwRmlsZSh0
ZW1wb3JhcnlGaWxlSGFuZGxlLCAwLCBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUgKyBt
ZXRhRGF0YS5hY3Rpb25zU2l6ZSArIG1ldGFEYXRhLmJ5dGVjb2RlU2l6ZSk7CiAgICAgV2ViQ29y
ZTo6Y2xvc2VGaWxlKHRlbXBvcmFyeUZpbGVIYW5kbGUpOwogCiAgICAgaWYgKG1hcHBlZERhdGEu
aXNOdWxsKCkpCkBAIC0yMzcsOSArMjQ1LDkgQEAgc3RhdGljIFJlZlB0cjxBUEk6OlVzZXJDb250
ZW50RXh0ZW5zaW9uPgogICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSA9IFdl
YktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSgKICAgICAgICAgV1RGOjptb3Zl
KHNoYXJlZE1lbW9yeSksCiAgICAgICAgIGZpbGVEYXRhLAotICAgICAgICBtZXRhRGF0YS5hY3Rp
b25zT2Zmc2V0LAorICAgICAgICBDb250ZW50RXh0ZW5zaW9uRmlsZUhlYWRlclNpemUsCiAgICAg
ICAgIG1ldGFEYXRhLmFjdGlvbnNTaXplLAotICAgICAgICBtZXRhRGF0YS5ieXRlY29kZU9mZnNl
dCwKKyAgICAgICAgQ29udGVudEV4dGVuc2lvbkZpbGVIZWFkZXJTaXplICsgbWV0YURhdGEuYWN0
aW9uc1NpemUsCiAgICAgICAgIG1ldGFEYXRhLmJ5dGVjb2RlU2l6ZQogICAgICk7CiAgICAgYXV0
byBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKSk7
CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxODM3NzQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMiBAQAorMjAxNS0wNS0wNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIFVzZSBsZXNzIG1lbW9y
eSB3aGVuIHdyaXRpbmcgYnl0ZSBjb2RlIHRvIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDYwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Nv
bnRlbnRFeHRlbnNpb25zLmNwcDoKKwogMjAxNS0wNS0wNCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxn
aGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBJbXBsZW1lbnQgdGhlICItLXNob3ctd2Vi
dmlldyIgb3B0aW9uIGZvciBXaW5kb3dzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDE4
MzU1NikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5z
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDIwICs4MSwzMCBAQCBwdWJsaWM6CiAgICAg
SW5NZW1vcnlDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIGRhdGEpCiAgICAgICAg
IDogbV9kYXRhKGRhdGEpCiAgICAgeworICAgICAgICBFWFBFQ1RfRVEoZGF0YS5ieXRlY29kZS5z
aXplKCksIDB1bGwpOworICAgICAgICBFWFBFQ1RfRVEoZGF0YS5hY3Rpb25zLnNpemUoKSwgMHVs
bCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHdyaXRlQnl0ZWNvZGUoVmVjdG9yPFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZT4mJiBieXRlY29kZSkgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIG1fZGF0YS5ieXRlY29kZSA9IFdURjo6bW92ZShieXRlY29kZSk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShmaW5hbGl6ZWQpOworICAgICAgICBtX2RhdGEuYnl0ZWNvZGUu
YXBwZW5kVmVjdG9yKGJ5dGVjb2RlKTsKICAgICB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHdy
aXRlQWN0aW9ucyhWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRB
Y3Rpb25CeXRlPiYmIGFjdGlvbnMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX2RhdGEuYWN0
aW9ucyA9IFdURjo6bW92ZShhY3Rpb25zKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGZpbmFsaXpl
ZCk7CisgICAgICAgIG1fZGF0YS5hY3Rpb25zLmFwcGVuZFZlY3RvcihhY3Rpb25zKTsKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGZpbmFsaXplZCA9IHRydWU7CiAgICAgfQogCiBwcml2YXRlOgogICAgIFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiBtX2RhdGE7Cisg
ICAgYm9vbCBmaW5hbGl6ZWQgeyBmYWxzZSB9OwogfTsKIAogY2xhc3MgSW5NZW1vcnlDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24gOiBwdWJsaWMgQ29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbiB7Cg==
</data>
<flag name="review"
          id="277203"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>