<?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>132351</bug_id>
          
          <creation_ts>2014-04-29 12:59:27 -0700</creation_ts>
          <short_desc>JSProxies should be cacheable</short_desc>
          <delta_ts>2014-04-29 15:22:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1005073</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-29 12:59:27 -0700</bug_when>
    <thetext>Whenever we encounter a proxy in an inline cache we should try to cache on the proxy&apos;s target instead of giving up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005075</commentid>
    <comment_count>1</comment_count>
      <attachid>230406</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-29 13:05:25 -0700</bug_when>
    <thetext>Created attachment 230406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005077</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-29 13:07:23 -0700</bug_when>
    <thetext>Attachment 230406 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/Repatch.cpp:311:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:322:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/Operations.h:264:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 3 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005078</commentid>
    <comment_count>3</comment_count>
      <attachid>230406</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-29 13:07:35 -0700</bug_when>
    <thetext>Comment on attachment 230406
Patch

Lol can has some tests?  I&apos;d add a fako Proxy in jsc.cpp that behaves like JSGLobalObject (maybe we have one already?) and then write some tests that various try and either succeed or fail in caching on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005101</commentid>
    <comment_count>4</comment_count>
      <attachid>230414</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-29 14:06:11 -0700</bug_when>
    <thetext>Created attachment 230414
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005102</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-29 14:08:14 -0700</bug_when>
    <thetext>Attachment 230414 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/Operations.h:264:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005133</commentid>
    <comment_count>6</comment_count>
      <attachid>230414</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-04-29 14:54:49 -0700</bug_when>
    <thetext>Comment on attachment 230414
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:15
&gt; +        This is performance neutral on the benchmarks we track, although currently we won&apos;t

I would remove &quot;although&quot;, and just start a new sentence.

&gt; Source/JavaScriptCore/jsc.cpp:611
&gt; +    Structure* structure = Proxy::createStructure(exec-&gt;vm(), exec-&gt;lexicalGlobalObject(), jsTarget-&gt;prototype());

You could just instantiate JSProxy here.

&gt; Source/JavaScriptCore/jit/Repatch.cpp:746
&gt; +        if (!structure-&gt;propertyAccessesAreCacheable())
&gt; +            return false;

Let&apos;s rearrange this to share the propertyAccessesAreCacheable() check. It&apos;s nice to keep the PureForwardingProxyType thingy only substituting the base, and not doing anything else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005164</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-29 15:22:40 -0700</bug_when>
    <thetext>Committed r167963: &lt;http://trac.webkit.org/changeset/167963&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230406</attachid>
            <date>2014-04-29 13:05:25 -0700</date>
            <delta_ts>2014-04-29 14:06:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132351-20140429130502.patch</filename>
            <type>text/plain</type>
            <size>15020</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3OTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE0LTA0LTI5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNQcm94aWVzIHNob3VsZCBiZSBjYWNoZWFibGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM1MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW5ldmVyIHdlIGVuY291bnRlciBhIHBy
b3h5IGluIGFuIGlubGluZSBjYWNoZSB3ZSBzaG91bGQgdHJ5IHRvIGNhY2hlIG9uIHRoZSAKKyAg
ICAgICAgcHJveHkncyB0YXJnZXQgaW5zdGVhZCBvZiBnaXZpbmcgdXAuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgc2ltcGxlICJyZWN1cnNpdmUiIGlubGluZSBjYWNo
ZSBpZiB0aGUgYmFzZSBvYmplY3QKKyAgICAgICAgd2UncmUgYWNjZXNzaW5nIGlzIGEgcHVyZSBm
b3J3YXJkaW5nIHByb3h5LiBKU0dsb2JhbE9iamVjdCBhbmQgaXRzIHN1YmNsYXNzZXMgCisgICAg
ICAgIGFyZSB0aGUgb25seSBvbmVzIHRvIGJlbmVmaXQgZnJvbSB0aGlzIHJpZ2h0IG5vdy4KKwor
ICAgICAgICBUaGlzIGlzIHBlcmZvcm1hbmNlIG5ldXRyYWwgb24gdGhlIGJlbmNobWFya3Mgd2Ug
dHJhY2ssIGFsdGhvdWdoIGN1cnJlbnRseSB3ZSB3b24ndAorICAgICAgICBjYWNoZSBvbiBKU0RP
TVdpbmRvdyBkdWUgdG8gSGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90LCBidXQgdGhpcyBpc3N1
ZSB3aWxsIGJlIGZpeGVkIHNvb24uCisKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAg
ICAgIChKU0M6OmdlbmVyYXRlQnlJZFN0dWIpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5
SURMaXN0KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6
dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgICogcnVudGltZS9JbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNOb3Jt
YWxpemVkKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbElubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjppc1Byb3h5KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU1Byb3h5Lmg6CisgICAgICAgIChKU0M6OkpTUHJveHk6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJveHk6OnRhcmdldE9mZnNldCk6CisgICAgICAgICog
cnVudGltZS9KU1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6aXNQcm90b3R5cGVDaGFpbk5vcm1hbGl6ZWQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aXNQcm94eSk6CisKIDIwMTQt
MDQtMjkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBTdHJp
bmcucHJvdG90eXBlLnRyaW0gcmVtb3ZlcyBVKzIwMEIgZnJvbSBzdHJpbmdzLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNjc5NTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUs
NyArMjg1LDcgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1c3RvbUZvcihjb25zdCBQdXRQcgogc3Rh
dGljIHZvaWQgZ2VuZXJhdGVCeUlkU3R1YigKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEJ5SWRTdHVi
S2luZCBraW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsCiAgICAgRnVuY3Rpb25Q
dHIgY3VzdG9tLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc2l6ZV90IGNvdW50LAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwKKyAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBib29sIGxvYWRUYXJnZXRGcm9t
UHJveHksIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwKICAgICBDb2RlTG9jYXRpb25M
YWJlbCBzbG93Q2FzZUxhYmVsLCBSZWZQdHI8SklUU3R1YlJvdXRpbmU+JiBzdHViUm91dGluZSkK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTMwOCwxMCArMzA4LDIxIEBAIHN0YXRp
YyB2b2lkIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgfQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgCisgICAKKyAgICBHUFJSZWcgYmFzZUZvckdl
dEdQUjsKKyAgICBpZiAobG9hZFRhcmdldEZyb21Qcm94eSkgeworICAgICAgICBiYXNlRm9yR2V0
R1BSID0gdmFsdWVSZWdzLnBheWxvYWRHUFIoKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChzdHViSml0LmJyYW5jaDgoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjp0
eXBlSW5mb1R5cGVPZmZzZXQoKSksIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkpKTsKKyAgICAgICAgc3R1YkppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTUHJveHk6OnRhcmdldE9mZnNl
dCgpKSwgYmFzZUZvckdldEdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGJhc2VGb3JHZXRHUFIg
PSBiYXNlR1BSOworIAogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKHN0
dWJKaXQsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yR2V0R1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKICAgICAgICAgc3RydWN0dXJlKSk7CiAKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwpAQCAtMzM5LDcgKzM1MCw3IEBA
IHN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgICAgIHN0dWJKaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNjcmF0Y2hHUFIpOwogICAg
ICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKICAgICB9IGVsc2UKLSAgICAgICAg
YmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VHUFI7CisgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIgPSBi
YXNlRm9yR2V0R1BSOwogICAgIAogICAgIEdQUlJlZyBsb2FkZWRWYWx1ZUdQUiA9IEludmFsaWRH
UFJSZWc7CiAgICAgaWYgKGtpbmQgIT0gQ2FsbEN1c3RvbUdldHRlciAmJiBraW5kICE9IENhbGxD
dXN0b21TZXR0ZXIpIHsKQEAgLTQ1MCw3ICs0NjEsNyBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUJ5
SWRTdHViKAogICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKIAogICAgICAgICAg
ICAgc3R1YkppdC5zdG9yZUNlbGwoCi0gICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAg
ICAgICAgICBiYXNlRm9yR2V0R1BSLAogICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndpdGhP
ZmZzZXQoCiAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAp
Lm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAgICAgCkBAIC01MDgsMTQg
KzUxOSwxNCBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgICAgICAgICAgLy8g
c2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFzZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVyKQot
ICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VG
b3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3Bl
cnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YmFzZUZvckFjY2Vzc0dQUiwgYmFzZUdQUiwgdmFsdWVSZWdzLmdwcigpKTsKKyAgICAgICAgICAg
ICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BS
LCBiYXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOwogI2Vsc2UKICAgICAgICAgICAgIGlm
IChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAgICAgICAgICAgICAgIHN0
dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VG
b3JHZXRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2YWx1
ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHZhbHVlUmVncy5wYXlsb2FkR1BS
KCksIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIHN0dWJKaXQuc3Rv
cmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKIApA
QCAtNzIzLDYgKzczNCwxNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNT
dGF0CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJh
c2VWYWx1ZS5hc0NlbGwoKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5z
dHJ1Y3R1cmUoKTsKKworICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOworICAg
IGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAg
ICAgIGJhc2VWYWx1ZSA9IHN0YXRpY19jYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgp
OworICAgICAgICBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgc3RydWN0
dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOworICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5
ID0gdHJ1ZTsKKworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAKICAgICBp
ZiAoc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKSB7CiAgICAgICAgIC8v
IFdlIGNhbm5vdCBkbyBhcyBtdWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMgd2Vy
ZSBub3QgZmx1c2hlZCBwcmlvciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCkBAIC03
NTYsOCArNzc4LDggQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAog
ICAgIAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgZ2VuZXJh
dGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3RvbUZv
cihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LAotICAgICAg
ICBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCisgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xv
dCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291
bnQsIG9mZnNldCwgCisgICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVs
dGFDYWxsVG9Eb25lKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNs
b3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKICAgICAKICAgICBHZXRCeUlk
QWNjZXNzOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CkBAIC0xMTc1LDcgKzExOTcsNyBAQCBzdGF0
aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAKICAgICAgICAgZ2VuZXJhdGVC
eUlkU3R1YigKICAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21G
b3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCi0gICAgICAgICAgICBv
ZmZzZXQsIHN0cnVjdHVyZSwKKyAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwK
ICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb1Ns
b3dDYXNlKSwKICAgICAgICAgICAgIHN0dWJSb3V0aW5lKTsKQEAgLTEzMDcsNyArMTMyOSw3IEBA
IHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKIAogICAgICAgICBnZW5l
cmF0ZUJ5SWRTdHViKAogICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVydHlO
YW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCi0g
ICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwKKyAgICAgICAgICAgIG9mZnNldCwgc3RydWN0
dXJlLCBmYWxzZSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCiAgICAgICAg
ICAgICBzdHViUm91dGluZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24gMTY3OTUx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMSArMTE4LDExIEBAIGJvb2wgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXAKIAogYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
Ojppc05vcm1hbGl6ZWQoKQogewotICAgIGlmIChtX2hlYWQtPnR5cGVJbmZvKCkudHlwZSgpID09
IFByb3h5VHlwZSkKKyAgICBpZiAobV9oZWFkLT5pc1Byb3h5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZlY3RvcltpXTsKLSAgICAgICAg
aWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gUHJveHlUeXBlKQorICAgICAgICBp
ZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGlu
ZXMuaAkocmV2aXNpb24gMTY3OTUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgaW5saW5l
IGJvb2wgSlNDZWxsOjppc0dldHRlclNldHRlcigpIGNvbgogCiBpbmxpbmUgYm9vbCBKU0NlbGw6
OmlzUHJveHkoKSBjb25zdAogewotICAgIHJldHVybiBtX3R5cGUgPT0gUHJveHlUeXBlOworICAg
IHJldHVybiBtX3R5cGUgPT0gSW1wdXJlUHJveHlUeXBlIHx8IG1fdHlwZSA9PSBQdXJlRm9yd2Fy
ZGluZ1Byb3h5VHlwZTsKIH0KIAogaW5saW5lIGJvb2wgSlNDZWxsOjppc0FQSVZhbHVlV3JhcHBl
cigpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgJKHJldmlzaW9uIDE2Nzk1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3ICsyOTgsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3Qodm0sIHRo
aXMpOwogICAgICAgICBtX2V4cGVyaW1lbnRzRW5hYmxlZCA9IG1fZ2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUtPmphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQodGhpcyk7CiAgICAgICAgIGluaXQo
KTsKLSAgICAgICAgc2V0R2xvYmFsVGhpcyh2bSwgSlNQcm94eTo6Y3JlYXRlKHZtLCBKU1Byb3h5
OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIHByb3RvdHlwZSgpKSwgdGhpcykpOworICAgICAg
ICBzZXRHbG9iYWxUaGlzKHZtLCBKU1Byb3h5OjpjcmVhdGUodm0sIEpTUHJveHk6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgdGhpcywgcHJvdG90eXBlKCksIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSwg
dGhpcykpOwogICAgIH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVj
dCogdGhpc1ZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHku
aAkocmV2aXNpb24gMTY3OTUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNCArNDEsMTUgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gcHJveHk7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIEpTVHlwZSBwcm94
eVR5cGUgPSBJbXB1cmVQcm94eVR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhQcm94eVR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8ocHJveHlUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
IAogICAgIEpTT2JqZWN0KiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdGFyZ2V0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTUHJveHksIG1fdGFyZ2V0KTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgSlNQcm94eShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlLmgJKHJldmlzaW9uIDE2Nzk1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw4IEBAIGVudW0g
SlNUeXBlIDogdWludDhfdCB7CiAgICAgTmFtZUluc3RhbmNlVHlwZSwKICAgICBOdW1iZXJPYmpl
Y3RUeXBlLAogICAgIEVycm9ySW5zdGFuY2VUeXBlLAotICAgIFByb3h5VHlwZSwKKyAgICBQdXJl
Rm9yd2FyZGluZ1Byb3h5VHlwZSwKKyAgICBJbXB1cmVQcm94eVR5cGUsCiAgICAgV2l0aFNjb3Bl
VHlwZSwKICAgICBBcmd1bWVudHNUeXBlLAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNjc5NTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3ICsy
NjEsNyBAQCBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKENhCiBpbmxpbmUg
Ym9vbCBpc1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlm
IChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFByb3h5VHlwZSkKKyAgICAgICAgaWYg
KHN0cnVjdHVyZS0+aXNQcm94eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgCiAgICAgICAgIEpTVmFsdWUgdiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3Vw
KGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkocmV2aXNpb24gMTY3OTUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsMTIgQEAgcHVibGlj
OgogICAgIGludDMyX3Qgb2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9iLmJsb2JFeGNsdWRpbmdTdHJ1Y3R1cmVJRCgpOyB9CiAgICAgaW50NjRfdCBpZEJsb2Io
KSBjb25zdCB7IHJldHVybiBtX2Jsb2IuYmxvYigpOyB9CiAKKyAgICBib29sIGlzUHJveHkoKSBj
b25zdAorICAgIHsKKyAgICAgICAgSlNUeXBlIHR5cGUgPSBtX2Jsb2IudHlwZSgpOworICAgICAg
ICByZXR1cm4gdHlwZSA9PSBJbXB1cmVQcm94eVR5cGUgfHwgdHlwZSA9PSBQdXJlRm9yd2FyZGlu
Z1Byb3h5VHlwZTsKKyAgICB9CisKICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljcygpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFu
c2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
LCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiwgUHV0UHJvcGVydHlTbG90
OjpDb250ZXh0ID0gUHV0UHJvcGVydHlTbG90OjpVbmtub3duQ29udGV4dCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNjc5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxNC0wNC0yOSAgTWFyayBIYWhuZW5iZXJnICA8
bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEpTUHJveGllcyBzaG91bGQgYmUgY2Fj
aGVhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzIzNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMuCisKKyAgICAgICAgV2hlbmV2ZXIgd2UgZW5jb3VudGVyIGEgcHJveHkgaW4g
YW4gaW5saW5lIGNhY2hlIHdlIHNob3VsZCB0cnkgdG8gY2FjaGUgb24gdGhlIAorICAgICAgICBw
cm94eSdzIHRhcmdldCBpbnN0ZWFkIG9mIGdpdmluZyB1cC4KKworICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgc3VwcG9ydCBmb3IgYSBzaW1wbGUgInJlY3Vyc2l2ZSIgaW5saW5lIGNhY2hlIGlmIHRo
ZSBiYXNlIG9iamVjdAorICAgICAgICB3ZSdyZSBhY2Nlc3NpbmcgaXMgYSBwdXJlIGZvcndhcmRp
bmcgcHJveHkuIEpTR2xvYmFsT2JqZWN0IGFuZCBpdHMgc3ViY2xhc3NlcyAKKyAgICAgICAgYXJl
IHRoZSBvbmx5IG9uZXMgdG8gYmVuZWZpdCBmcm9tIHRoaXMgcmlnaHQgbm93LgorCisgICAgICAg
IFRoaXMgaXMgcGVyZm9ybWFuY2UgbmV1dHJhbCBvbiB0aGUgYmVuY2htYXJrcyB3ZSB0cmFjaywg
YWx0aG91Z2ggY3VycmVudGx5IHdlIHdvbid0CisgICAgICAgIGNhY2hlIG9uIEpTRE9NV2luZG93
IGR1ZSB0byBIYXNJbXB1cmVHZXRPd25Qcm9wZXJ0eVNsb3QsIGJ1dCB0aGlzIGlzc3VlIHdpbGwg
YmUgZml4ZWQgc29vbi4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93U2hlbGw6OmNyZWF0ZVN0cnVjdHVyZSk6
CisKIDIwMTQtMDQtMjkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW2lPU10gUmVtb3ZlIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8xNjU3ODcyNz4u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5o
CShyZXZpc2lvbiAxNjc5NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd1NoZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKSAKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6OlByb3h5VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6OlB1cmVGb3J3YXJkaW5nUHJveHlUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiAgICAgICAgIH0KIAogICAgICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxk
KCkgeyByZXR1cm4gbV93b3JsZC5nZXQoKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230414</attachid>
            <date>2014-04-29 14:06:11 -0700</date>
            <delta_ts>2014-04-29 14:54:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132351-20140429140545.patch</filename>
            <type>text/plain</type>
            <size>20109</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3OTUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE0LTA0LTI5ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgSlNQcm94aWVzIHNob3VsZCBiZSBjYWNoZWFibGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM1MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW5ldmVyIHdlIGVuY291bnRlciBhIHBy
b3h5IGluIGFuIGlubGluZSBjYWNoZSB3ZSBzaG91bGQgdHJ5IHRvIGNhY2hlIG9uIHRoZSAKKyAg
ICAgICAgcHJveHkncyB0YXJnZXQgaW5zdGVhZCBvZiBnaXZpbmcgdXAuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgc2ltcGxlICJyZWN1cnNpdmUiIGlubGluZSBjYWNo
ZSBpZiB0aGUgYmFzZSBvYmplY3QKKyAgICAgICAgd2UncmUgYWNjZXNzaW5nIGlzIGEgcHVyZSBm
b3J3YXJkaW5nIHByb3h5LiBKU0dsb2JhbE9iamVjdCBhbmQgaXRzIHN1YmNsYXNzZXMgCisgICAg
ICAgIGFyZSB0aGUgb25seSBvbmVzIHRvIGJlbmVmaXQgZnJvbSB0aGlzIHJpZ2h0IG5vdy4KKwor
ICAgICAgICBUaGlzIGlzIHBlcmZvcm1hbmNlIG5ldXRyYWwgb24gdGhlIGJlbmNobWFya3Mgd2Ug
dHJhY2ssIGFsdGhvdWdoIGN1cnJlbnRseSB3ZSB3b24ndAorICAgICAgICBjYWNoZSBvbiBKU0RP
TVdpbmRvdyBkdWUgdG8gSGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90LCBidXQgdGhpcyBpc3N1
ZSB3aWxsIGJlIGZpeGVkIHNvb24uCisKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAg
ICAgIChKU0M6OmdlbmVyYXRlQnlJZFN0dWIpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZEdldEJ5
SURMaXN0KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6
dHJ5QnVpbGRQdXRCeUlkTGlzdCk6CisgICAgICAgICogcnVudGltZS9JbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6aXNOb3Jt
YWxpemVkKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbElubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjppc1Byb3h5KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
ICogcnVudGltZS9KU1Byb3h5Lmg6CisgICAgICAgIChKU0M6OkpTUHJveHk6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJveHk6OnRhcmdldE9mZnNldCk6CisgICAgICAgICog
cnVudGltZS9KU1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6aXNQcm90b3R5cGVDaGFpbk5vcm1hbGl6ZWQpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aXNQcm94eSk6CisKIDIwMTQt
MDQtMjkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBTdHJp
bmcucHJvdG90eXBlLnRyaW0gcmVtb3ZlcyBVKzIwMEIgZnJvbSBzdHJpbmdzLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDE2Nzk1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksOSArMjE5LDM1IEBAIHByaXZhdGU6CiAg
ICAgV2VhazxFbGVtZW50PiBtX2VsZW1lbnQ7CiB9OwogCitjbGFzcyBQcm94eSA6IHB1YmxpYyBK
U1Byb3h5IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTUHJveHkgQmFzZTsKKworICAgIHN0YXRp
YyBQcm94eSogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiB0
YXJnZXQpCisgICAgeworICAgICAgICBQcm94eSogcHJveHkgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxQcm94eT4odm0uaGVhcCkpIFByb3h5KHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBw
cm94eS0+ZmluaXNoQ3JlYXRpb24odm0sIHRhcmdldCk7CisgICAgICAgIHJldHVybiBwcm94eTsK
KyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFByb3h5
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlKQorICAgIHsKKyAgICB9Cit9OworCiBjb25zdCBDbGFzc0luZm8gRWxlbWVudDo6c19pbmZv
ID0geyAiRWxlbWVudCIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
RWxlbWVudCkgfTsKIGNvbnN0IENsYXNzSW5mbyBNYXNxdWVyYWRlcjo6c19pbmZvID0geyAiTWFz
cXVlcmFkZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE1hc3F1
ZXJhZGVyKSB9OwogY29uc3QgQ2xhc3NJbmZvIFJvb3Q6OnNfaW5mbyA9IHsgIlJvb3QiLCAmQmFz
ZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJvb3QpIH07Citjb25zdCBDbGFz
c0luZm8gUHJveHk6OnNfaW5mbyA9IHsgIlByb3h5IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShQcm94eSkgfTsKIAogRWxlbWVudEhhbmRsZU93bmVyKiBFbGVtZW50
OjpoYW5kbGVPd25lcigpCiB7CkBAIC0yNDEsNiArMjY3LDggQEAgdm9pZCBFbGVtZW50OjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCiAKIHN0YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNP
ZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpOwogCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVByb3h5KEV4
ZWNTdGF0ZSopOworCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blNldEVsZW1lbnRSb290KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVSb290KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVFbGVtZW50KEV4ZWNTdGF0ZSopOwpA
QCAtNDEzLDYgKzQ0MSw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgCiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAiZWZmZWN0ZnVsNDIiLCBmdW5jdGlvbkVmZmVjdGZ1bDQyLCAwKTsKICAgICAgICAg
YWRkRnVuY3Rpb24odm0sICJtYWtlTWFzcXVlcmFkZXIiLCBmdW5jdGlvbk1ha2VNYXNxdWVyYWRl
ciwgMCk7CisKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVQcm94eSIsIGZ1bmN0aW9u
Q3JlYXRlUHJveHksIDEpOwogICAgICAgICAKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQpAQCAtNTcxLDYgKzYwMSwxOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZWF0ZVByb3h5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKKyAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwor
ICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgSlNPYmplY3QqIGpzVGFyZ2V0ID0gYXNPYmplY3QodGFy
Z2V0LmFzQ2VsbCgpKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFByb3h5OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc1Rhcmdl
dC0+cHJvdG90eXBlKCkpOworICAgIFByb3h5KiBwcm94eSA9IFByb3h5OjpjcmVhdGUoZXhlYy0+
dm0oKSwgc3RydWN0dXJlLCBqc1RhcmdldCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShw
cm94eSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQ0FuZFN3
ZWVwKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTY3OTUxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjg1LDcgKzI4NSw3IEBAIHN0YXRpYyBGdW5jdGlvblB0ciBjdXN0b21Gb3IoY29uc3QgUHV0
UHIKIHN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBC
eUlkU3R1YktpbmQga2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLAogICAgIEZ1
bmN0aW9uUHRyIGN1c3RvbSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsCisgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBsb2FkVGFy
Z2V0RnJvbVByb3h5LCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiYgc3R1YlJv
dXRpbmUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0zMDgsMTAgKzMwOCwyMSBA
QCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgIH0KICAgICAKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgIAorCisgICAgR1BSUmVnIGJhc2VG
b3JHZXRHUFI7CisgICAgaWYgKGxvYWRUYXJnZXRGcm9tUHJveHkpIHsKKyAgICAgICAgYmFzZUZv
ckdldEdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoc3R1YkppdC5icmFuY2g4KAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpKSk7CisgICAgICAgIHN0dWJKaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1Byb3h5Ojp0YXJnZXRP
ZmZzZXQoKSksIGJhc2VGb3JHZXRHUFIpOworICAgIH0gZWxzZQorICAgICAgICBiYXNlRm9yR2V0
R1BSID0gYmFzZUdQUjsKKwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNoU3RydWN0dXJl
KHN0dWJKaXQsCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlRm9yR2V0R1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKICAgICAgICAgc3RydWN0dXJlKSk7CiAKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwpAQCAtMzM5LDcgKzM1MCw3
IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgICAgIHN0dWJKaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNjcmF0Y2hHUFIpOwog
ICAgICAgICBiYXNlRm9yQWNjZXNzR1BSID0gc2NyYXRjaEdQUjsKICAgICB9IGVsc2UKLSAgICAg
ICAgYmFzZUZvckFjY2Vzc0dQUiA9IGJhc2VHUFI7CisgICAgICAgIGJhc2VGb3JBY2Nlc3NHUFIg
PSBiYXNlRm9yR2V0R1BSOwogICAgIAogICAgIEdQUlJlZyBsb2FkZWRWYWx1ZUdQUiA9IEludmFs
aWRHUFJSZWc7CiAgICAgaWYgKGtpbmQgIT0gQ2FsbEN1c3RvbUdldHRlciAmJiBraW5kICE9IENh
bGxDdXN0b21TZXR0ZXIpIHsKQEAgLTQ1MCw3ICs0NjEsNyBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0
ZUJ5SWRTdHViKAogICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxsZWVGcmFtZS53
aXRoT2Zmc2V0KEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpKTsKIAogICAgICAg
ICAgICAgc3R1YkppdC5zdG9yZUNlbGwoCi0gICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAg
ICAgICAgICAgICBiYXNlRm9yR2V0R1BSLAogICAgICAgICAgICAgICAgIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQoCiAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDApLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAgICAgCkBAIC01MDgs
MTQgKzUxOSwxNCBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgICAgICAgICAg
Ly8gc2V0dGVyOiB2b2lkICgqUHV0VmFsdWVGdW5jKShFeGVjU3RhdGUqLCBKU09iamVjdCogYmFz
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc09iamVjdCwgRW5jb2RlZEpTVmFsdWUgdmFsdWUpOwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBpZiAoa2luZCA9PSBDYWxsQ3VzdG9tR2V0dGVy
KQotICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJh
c2VGb3JBY2Nlc3NHUFIsIGJhc2VHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHBy
b3BlcnR5TmFtZS5pbXBsKCkpKTsKKyAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlRm9yR2V0R1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUdQUiwgdmFsdWVSZWdzLmdwcigpKTsKKyAgICAgICAg
ICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNz
R1BSLCBiYXNlRm9yR2V0R1BSLCB2YWx1ZVJlZ3MuZ3ByKCkpOwogI2Vsc2UKICAgICAgICAgICAg
IGlmIChraW5kID09IENhbGxDdXN0b21HZXR0ZXIpCi0gICAgICAgICAgICAgICAgc3R1YkppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYmFzZUZvckFjY2Vzc0dQUiwgYmFzZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAgICAgICAgICAgICAg
IHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJh
c2VGb3JHZXRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHViSml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShiYXNlRm9yQWNjZXNzR1BSLCBiYXNlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCB2
YWx1ZVJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGJhc2VGb3JBY2Nlc3NHUFIsIGJhc2VGb3JHZXRHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCksIHZhbHVlUmVncy50YWdHUFIoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIHN0dWJKaXQu
c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsK
IApAQCAtNzIzLDYgKzczNCwxNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4
ZWNTdGF0CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9
IGJhc2VWYWx1ZS5hc0NlbGwoKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxs
LT5zdHJ1Y3R1cmUoKTsKKworICAgIGJvb2wgbG9hZFRhcmdldEZyb21Qcm94eSA9IGZhbHNlOwor
ICAgIGlmIChiYXNlQ2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7Cisg
ICAgICAgIGJhc2VWYWx1ZSA9IHN0YXRpY19jYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdl
dCgpOworICAgICAgICBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgc3Ry
dWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSgpOworICAgICAgICBsb2FkVGFyZ2V0RnJvbVBy
b3h5ID0gdHJ1ZTsKKworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAKICAg
ICBpZiAoc3R1YkluZm8ucGF0Y2guc3BpbGxNb2RlID09IE5lZWRUb1NwaWxsKSB7CiAgICAgICAg
IC8vIFdlIGNhbm5vdCBkbyBhcyBtdWNoIGlubGluZSBjYWNoaW5nIGlmIHRoZSByZWdpc3RlcnMg
d2VyZSBub3QgZmx1c2hlZCBwcmlvciB0byB0aGlzIEdldEJ5SWQuIEluIHBhcnRpY3VsYXIsCkBA
IC03NTYsOCArNzc4LDggQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3Rh
dAogICAgIAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CiAgICAgZ2Vu
ZXJhdGVCeUlkU3R1YigKLSAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgaWRlbnQsIGN1c3Rv
bUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LAotICAg
ICAgICBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCisgICAgICAgIGV4ZWMsIGtpbmRGb3Io
c2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwg
Y291bnQsIG9mZnNldCwgCisgICAgICAgIHN0cnVjdHVyZSwgbG9hZFRhcmdldEZyb21Qcm94eSwg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2gu
ZGVsdGFDYWxsVG9Eb25lKSwKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVu
dFNsb3dQYXRoVGFyZ2V0KHN0dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKICAgICAKICAgICBHZXRC
eUlkQWNjZXNzOjpBY2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CkBAIC0xMTc1LDcgKzExOTcsNyBAQCBz
dGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAKICAgICAgICAgZ2VuZXJh
dGVCeUlkU3R1YigKICAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0
b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCi0gICAgICAgICAg
ICBvZmZzZXQsIHN0cnVjdHVyZSwKKyAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxz
ZSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAgICBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxU
b1Nsb3dDYXNlKSwKICAgICAgICAgICAgIHN0dWJSb3V0aW5lKTsKQEAgLTEzMDcsNyArMTMyOSw3
IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKIAogICAgICAgICBn
ZW5lcmF0ZUJ5SWRTdHViKAogICAgICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVy
dHlOYW1lLCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQs
Ci0gICAgICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwKKyAgICAgICAgICAgIG9mZnNldCwgc3Ry
dWN0dXJlLCBmYWxzZSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSksCiAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1BhdGhUYXJnZXQoKSksCiAgICAg
ICAgICAgICBzdHViUm91dGluZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24gMTY3
OTUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMSArMTE4LDExIEBAIGJvb2wgSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXAKIAogYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluOjppc05vcm1hbGl6ZWQoKQogewotICAgIGlmIChtX2hlYWQtPnR5cGVJbmZvKCkudHlwZSgp
ID09IFByb3h5VHlwZSkKKyAgICBpZiAobV9oZWFkLT5pc1Byb3h5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3ZlY3RvcltpXTsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gUHJveHlUeXBlKQorICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElu
bGluZXMuaAkocmV2aXNpb24gMTY3OTUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgaW5s
aW5lIGJvb2wgSlNDZWxsOjppc0dldHRlclNldHRlcigpIGNvbgogCiBpbmxpbmUgYm9vbCBKU0Nl
bGw6OmlzUHJveHkoKSBjb25zdAogewotICAgIHJldHVybiBtX3R5cGUgPT0gUHJveHlUeXBlOwor
ICAgIHJldHVybiBtX3R5cGUgPT0gSW1wdXJlUHJveHlUeXBlIHx8IG1fdHlwZSA9PSBQdXJlRm9y
d2FyZGluZ1Byb3h5VHlwZTsKIH0KIAogaW5saW5lIGJvb2wgSlNDZWxsOjppc0FQSVZhbHVlV3Jh
cHBlcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE2Nzk1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw3ICsyOTgs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHN0cnVjdHVyZSgpLT5zZXRHbG9iYWxPYmplY3Qodm0s
IHRoaXMpOwogICAgICAgICBtX2V4cGVyaW1lbnRzRW5hYmxlZCA9IG1fZ2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUtPmphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQodGhpcyk7CiAgICAgICAgIGlu
aXQoKTsKLSAgICAgICAgc2V0R2xvYmFsVGhpcyh2bSwgSlNQcm94eTo6Y3JlYXRlKHZtLCBKU1By
b3h5OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIHByb3RvdHlwZSgpKSwgdGhpcykpOworICAg
ICAgICBzZXRHbG9iYWxUaGlzKHZtLCBKU1Byb3h5OjpjcmVhdGUodm0sIEpTUHJveHk6OmNyZWF0
ZVN0cnVjdHVyZSh2bSwgdGhpcywgcHJvdG90eXBlKCksIFB1cmVGb3J3YXJkaW5nUHJveHlUeXBl
KSwgdGhpcykpOwogICAgIH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU09i
amVjdCogdGhpc1ZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuaAkocmV2aXNpb24gMTY3OTUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNCArNDEsMTUgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gcHJveHk7CiAgICAgfQogCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIEpTVHlwZSBw
cm94eVR5cGUgPSBJbXB1cmVQcm94eVR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhQcm94eVR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8ocHJveHlUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKIAogICAgIEpTT2JqZWN0KiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5nZXQo
KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgdGFyZ2V0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTUHJveHksIG1fdGFyZ2V0KTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgSlNQcm94
eShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlLmgJKHJldmlzaW9uIDE2Nzk1MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw4IEBAIGVu
dW0gSlNUeXBlIDogdWludDhfdCB7CiAgICAgTmFtZUluc3RhbmNlVHlwZSwKICAgICBOdW1iZXJP
YmplY3RUeXBlLAogICAgIEVycm9ySW5zdGFuY2VUeXBlLAotICAgIFByb3h5VHlwZSwKKyAgICBQ
dXJlRm9yd2FyZGluZ1Byb3h5VHlwZSwKKyAgICBJbXB1cmVQcm94eVR5cGUsCiAgICAgV2l0aFNj
b3BlVHlwZSwKICAgICBBcmd1bWVudHNUeXBlLAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNjc5NTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3
ICsyNjEsNyBAQCBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKENhCiBpbmxp
bmUgYm9vbCBpc1Byb3RvdHlwZUNoYWluTm9ybWFsaXplZChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAg
IGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFByb3h5VHlwZSkKKyAgICAgICAg
aWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgdiA9IHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9v
a3VwKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkocmV2aXNpb24gMTY3OTUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsMTIgQEAgcHVi
bGljOgogICAgIGludDMyX3Qgb2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkgY29uc3QgeyByZXR1
cm4gbV9ibG9iLmJsb2JFeGNsdWRpbmdTdHJ1Y3R1cmVJRCgpOyB9CiAgICAgaW50NjRfdCBpZEJs
b2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuYmxvYigpOyB9CiAKKyAgICBib29sIGlzUHJveHko
KSBjb25zdAorICAgIHsKKyAgICAgICAgSlNUeXBlIHR5cGUgPSBtX2Jsb2IudHlwZSgpOworICAg
ICAgICByZXR1cm4gdHlwZSA9PSBJbXB1cmVQcm94eVR5cGUgfHwgdHlwZSA9PSBQdXJlRm9yd2Fy
ZGluZ1Byb3h5VHlwZTsKKyAgICB9CisKICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljcygp
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlU
cmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiwgUHV0UHJvcGVydHlT
bG90OjpDb250ZXh0ID0gUHV0UHJvcGVydHlTbG90OjpVbmtub3duQ29udGV4dCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LWlubGluZS1jYWNoZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LWlu
bGluZS1jYWNoZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcHJveHktaW5saW5lLWNhY2hlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzQgQEAKK3ZhciBuaXRlcnMgPSAxMDAwMDA7CisKKy8vIHByb3h5IC0+IHRhcmdldCAtPiB4Citm
dW5jdGlvbiBjYWNoZU9uVGFyZ2V0KCkgeworICAgIHZhciB0YXJnZXQgPSB7eDo0Mn07CisgICAg
dmFyIHByb3h5ID0gY3JlYXRlUHJveHkodGFyZ2V0KTsKKworICAgIHZhciBnZXRYID0gZnVuY3Rp
b24obykgeyByZXR1cm4gby54OyB9OworICAgIG5vSW5saW5lKGdldFgpOworCisgICAgdmFyIHN1
bSA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuaXRlcnM7ICsraSkKKyAgICAgICAgc3Vt
ICs9IGdldFgocHJveHkpOworCisgICAgaWYgKHN1bSAhPSA0MiAqIG5pdGVycykKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgcmVzdWx0Iik7Cit9OworCisvLyBwcm94eSAtPiB0
YXJnZXQgLT4gcHJvdG8gLT4geAorZnVuY3Rpb24gY2FjaGVPblByb3RvdHlwZU9mVGFyZ2V0KCkg
eworICAgIHZhciBwcm90byA9IHt4OjQyfTsKKyAgICB2YXIgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0
ZShwcm90byk7CisgICAgdmFyIHByb3h5ID0gY3JlYXRlUHJveHkodGFyZ2V0KTsKKworICAgIHZh
ciBnZXRYID0gZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9OworICAgIG5vSW5saW5lKGdldFgp
OworCisgICAgdmFyIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuaXRlcnM7ICsr
aSkKKyAgICAgICAgc3VtICs9IGdldFgocHJveHkpOworCisgICAgaWYgKHN1bSAhPSA0MiAqIG5p
dGVycykKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgcmVzdWx0Iik7Cit9Owor
CisvLyBiYXNlIC0+IHByb3RvIChwcm94eSkgLT4gdGFyZ2V0IC0+IHgKK2Z1bmN0aW9uIGRvbnRD
YWNoZU9uUHJveHlJblByb3RvdHlwZUNoYWluKCkgeworICAgIHZhciB0YXJnZXQgPSB7eDo0Mn07
CisgICAgdmFyIHByb3RvUHJveHkgPSBjcmVhdGVQcm94eSh0YXJnZXQpOworICAgIHZhciBiYXNl
ID0gT2JqZWN0LmNyZWF0ZShwcm90b1Byb3h5KTsKKworICAgIHZhciBnZXRYID0gZnVuY3Rpb24o
bykgeyByZXR1cm4gby54OyB9OworICAgIG5vSW5saW5lKGdldFgpOworCisgICAgdmFyIHN1bSA9
IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuaXRlcnM7ICsraSkKKyAgICAgICAgc3VtICs9
IGdldFgoYmFzZSk7CisKKyAgICBpZiAoc3VtICE9IDQyICogbml0ZXJzKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkluY29ycmVjdCByZXN1bHQiKTsKK307CisKKy8vIHByb3h5IC0+IHRhcmdl
dCAxIC0+IHByb3RvIChwcm94eSkgLT4gdGFyZ2V0IDIgLT4geAorZnVuY3Rpb24gZG9udENhY2hl
T25UYXJnZXRPZlByb3h5SW5Qcm90b3R5cGVDaGFpbk9mVGFyZ2V0KCkgeworICAgIHZhciB0YXJn
ZXQyID0ge3g6NDJ9OworICAgIHZhciBwcm90b1Byb3h5ID0gY3JlYXRlUHJveHkodGFyZ2V0Mik7
CisgICAgdmFyIHRhcmdldDEgPSBPYmplY3QuY3JlYXRlKHByb3RvUHJveHkpOworICAgIHZhciBw
cm94eSA9IGNyZWF0ZVByb3h5KHRhcmdldDEpOworCisgICAgdmFyIGdldFggPSBmdW5jdGlvbihv
KSB7IHJldHVybiBvLng7IH07CisgICAgbm9JbmxpbmUoZ2V0WCk7CisKKyAgICB2YXIgc3VtID0g
MDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5pdGVyczsgKytpKQorICAgICAgICBzdW0gKz0g
Z2V0WChwcm94eSk7CisKKyAgICBpZiAoc3VtICE9IDQyICogbml0ZXJzKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkluY29ycmVjdCByZXN1bHQiKTsKK307CisKK2NhY2hlT25UYXJnZXQoKTsK
K2NhY2hlT25Qcm90b3R5cGVPZlRhcmdldCgpOworZG9udENhY2hlT25Qcm94eUluUHJvdG90eXBl
Q2hhaW4oKTsKK2RvbnRDYWNoZU9uVGFyZ2V0T2ZQcm94eUluUHJvdG90eXBlQ2hhaW5PZlRhcmdl
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3OTUxKQorKysgU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTQtMDQtMjkgIE1h
cmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBKU1Byb3hp
ZXMgc2hvdWxkIGJlIGNhY2hlYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMyMzUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgIFdoZW5ldmVyIHdlIGVuY291
bnRlciBhIHByb3h5IGluIGFuIGlubGluZSBjYWNoZSB3ZSBzaG91bGQgdHJ5IHRvIGNhY2hlIG9u
IHRoZSAKKyAgICAgICAgcHJveHkncyB0YXJnZXQgaW5zdGVhZCBvZiBnaXZpbmcgdXAuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGEgc2ltcGxlICJyZWN1cnNpdmUiIGlu
bGluZSBjYWNoZSBpZiB0aGUgYmFzZSBvYmplY3QKKyAgICAgICAgd2UncmUgYWNjZXNzaW5nIGlz
IGEgcHVyZSBmb3J3YXJkaW5nIHByb3h5LiBKU0dsb2JhbE9iamVjdCBhbmQgaXRzIHN1YmNsYXNz
ZXMgCisgICAgICAgIGFyZSB0aGUgb25seSBvbmVzIHRvIGJlbmVmaXQgZnJvbSB0aGlzIHJpZ2h0
IG5vdy4KKworICAgICAgICBUaGlzIGlzIHBlcmZvcm1hbmNlIG5ldXRyYWwgb24gdGhlIGJlbmNo
bWFya3Mgd2UgdHJhY2ssIGFsdGhvdWdoIGN1cnJlbnRseSB3ZSB3b24ndAorICAgICAgICBjYWNo
ZSBvbiBKU0RPTVdpbmRvdyBkdWUgdG8gSGFzSW1wdXJlR2V0T3duUHJvcGVydHlTbG90LCBidXQg
dGhpcyBpc3N1ZSB3aWxsIGJlIGZpeGVkIHNvb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd1NoZWxsLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd1NoZWxsOjpj
cmVhdGVTdHJ1Y3R1cmUpOgorCiAyMDE0LTA0LTI5ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgogCiAgICAgICAgIFtpT1NdIFJlbW92ZSB3b3JrYXJvdW5kIGZvciA8cmRhcjovL3By
b2JsZW0vMTY1Nzg3Mjc+LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dTaGVsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93U2hlbGwuaAkocmV2aXNpb24gMTY3OTUxKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkgCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAw
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpQcm94eVR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCAwLCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpQdXJlRm9yd2FyZGluZ1Byb3h5VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgICAgICB9CiAKICAgICAgICAgRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29ybGQuZ2V0KCk7IH0K
</data>
<flag name="review"
          id="254796"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>