<?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>131634</bug_id>
          
          <creation_ts>2014-04-14 14:47:27 -0700</creation_ts>
          <short_desc>Objective-C API external object graphs don&apos;t handle generational collection properly</short_desc>
          <delta_ts>2014-04-29 15:29:49 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121074</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1000603</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-14 14:47:27 -0700</bug_when>
    <thetext>If the set of Objective-C objects transitively reachable through an object changes, we need to update the set of opaque roots accordingly. If we don&apos;t, the next EdenCollection won&apos;t rescan the external object graph, which would lead us to consider a newly allocated JSManagedValue to be dead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000604</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-04-14 14:48:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/16612948&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000609</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-14 14:55:10 -0700</bug_when>
    <thetext>The fix is to record new pointers from old owners to new owned objects and to rescan those &quot;remembered&quot; owners with scanExternalObject graph during EdenCollections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000897</commentid>
    <comment_count>3</comment_count>
      <attachid>229380</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-15 11:16:32 -0700</bug_when>
    <thetext>Created attachment 229380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000898</commentid>
    <comment_count>4</comment_count>
      <attachid>229381</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-15 11:20:50 -0700</bug_when>
    <thetext>Created attachment 229381
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000902</commentid>
    <comment_count>5</comment_count>
      <attachid>229383</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-15 11:28:59 -0700</bug_when>
    <thetext>Created attachment 229383
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000905</commentid>
    <comment_count>6</comment_count>
      <attachid>229385</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-15 11:37:35 -0700</bug_when>
    <thetext>Created attachment 229385
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000928</commentid>
    <comment_count>7</comment_count>
      <attachid>229385</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-04-15 12:41:05 -0700</bug_when>
    <thetext>Comment on attachment 229385
Patch

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

r=me

&gt; Source/JavaScriptCore/API/JSVirtualMachine.mm:162
&gt; +    [m_externalRememberedSet setObject:[NSNumber numberWithBool:true] forKey:object];

You might be able to use NSSet here with something similar to weakIDOptions.

&gt; Source/JavaScriptCore/API/JSVirtualMachine.mm:293
&gt; +        JSVirtualMachine *virtualMachine = [JSVMWrapperCache wrapperForJSContextGroupRef:toRef(&amp;vm)];
&gt; +        if (!virtualMachine)
&gt; +            return;

Is it possible that the JSVirtualMachine will go away, by virtue of a zero retain count? If so, we&apos;ll forget all the external object graph stuff. Probably worth a follow-up bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000941</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-15 13:22:26 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 229385 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=229385&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/API/JSVirtualMachine.mm:162
&gt; &gt; +    [m_externalRememberedSet setObject:[NSNumber numberWithBool:true] forKey:object];
&gt; 
&gt; You might be able to use NSSet here with something similar to weakIDOptions.
Looks like it&apos;s nontrivial to get NSSet to do weak references, so I guess I&apos;ll stick with NSMapTable for now.

&gt; 
&gt; &gt; Source/JavaScriptCore/API/JSVirtualMachine.mm:293
&gt; &gt; +        JSVirtualMachine *virtualMachine = [JSVMWrapperCache wrapperForJSContextGroupRef:toRef(&amp;vm)];
&gt; &gt; +        if (!virtualMachine)
&gt; &gt; +            return;
&gt; 
&gt; Is it possible that the JSVirtualMachine will go away, by virtue of a zero retain count? If so, we&apos;ll forget all the external object graph stuff. Probably worth a follow-up bug.
I filed bug 131691 for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000949</commentid>
    <comment_count>9</comment_count>
      <attachid>229385</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-15 14:05:39 -0700</bug_when>
    <thetext>Comment on attachment 229385
Patch

Clearing flags on attachment: 229385

Committed r167326: &lt;http://trac.webkit.org/changeset/167326&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000950</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-15 14:05:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229380</attachid>
            <date>2014-04-15 11:16:32 -0700</date>
            <delta_ts>2014-04-15 11:20:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131634-20140415111611.patch</filename>
            <type>text/plain</type>
            <size>12808</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3MzE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE0LTA0LTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGV4dGVybmFsIG9iamVjdCBncmFwaHMgZG9uJ3QgaGFu
ZGxlIGdlbmVyYXRpb25hbCBjb2xsZWN0aW9uIHByb3Blcmx5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE2MzQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB0aGUgc2V0IG9mIE9iamVjdGl2ZS1DIG9i
amVjdHMgdHJhbnNpdGl2ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGFuIG9iamVjdCBjaGFuZ2VzLCB3
ZSAKKyAgICAgICAgbmVlZCB0byB1cGRhdGUgdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMgYWNjb3Jk
aW5nbHkuIElmIHdlIGRvbid0LCB0aGUgbmV4dCBFZGVuQ29sbGVjdGlvbiAKKyAgICAgICAgd29u
J3QgcmVzY2FuIHRoZSBleHRlcm5hbCBvYmplY3QgZ3JhcGgsIHdoaWNoIHdvdWxkIGxlYWQgdXMg
dG8gY29uc2lkZXIgYSBuZXdseSBhbGxvY2F0ZWQgCisgICAgICAgIEpTTWFuYWdlZFZhbHVlIHRv
IGJlIGRlYWQuCisKKyAgICAgICAgKiBBUEkvSlNCYXNlLmNwcDoKKyAgICAgICAgKEpTU3luY2hy
b25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1h
Y2hpbmUubW06CisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgaW5pdFdpdGhDb250ZXh0R3Jv
dXBSZWY6XSk6CisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgZGVhbGxvY10pOgorICAgICAg
ICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGlzT2xkRXh0ZXJuYWxPYmplY3Q6XSk6CisgICAgICAgICgt
W0pTVmlydHVhbE1hY2hpbmUgYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0Ol0pOgorICAgICAg
ICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6d2l0aE93bmVyOl0pOgor
ICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIHJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6d2l0aE93
bmVyOl0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGV4dGVybmFsUmVtZW1iZXJlZFNl
dF0pOgorICAgICAgICAoc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldCk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAqIGhlYXAv
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgICogaGVh
cC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OnNsb3RWaXNpdG9yKToKKyAgICAgICAgKiBo
ZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCk6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSk6CisKIDIwMTQt
MDQtMTUgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNjcxOTkgYW5kIHIxNjcyNTEuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCShyZXZpc2lvbiAxNjczMDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsx
NDIsNyBAQCB2b2lkIEpTUmVwb3J0RXh0cmFNZW1vcnlDb3N0KEpTQ29udGV4dFJlCiB9CiAKIGV4
dGVybiAiQyIgSlNfRVhQT1JUIHZvaWQgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVi
dWdnaW5nKEpTQ29udGV4dFJlZik7CitleHRlcm4gIkMiIEpTX0VYUE9SVCB2b2lkIEpTU3luY2hy
b25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwogCiB2b2lkIEpTU3lu
Y2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYgY3R4KQogewpA
QCAtMTUzLDYgKzE1NCwxNiBAQCB2b2lkIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRl
YnVnCiAgICAgZXhlYy0+dm0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAKK3ZvaWQg
SlNTeW5jaHJvbm91c0VkZW5Db2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZiBjdHgpCit7
CisgICAgaWYgKCFjdHgpCisgICAgICAgIHJldHVybjsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY3R4KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIGV4ZWMtPnZt
KCkuaGVhcC5jb2xsZWN0KEVkZW5Db2xsZWN0aW9uKTsKK30KKwogdm9pZCBKU0Rpc2FibGVHQ1Rp
bWVyKHZvaWQpCiB7CiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrOjpzX3Nob3VsZENyZWF0ZUdDVGlt
ZXIgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0JKHJldmlzaW9uIDE2NzMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCAr
IChKU1ZpcnR1YWxNYWNoaW5lICopd3JhcHBlckZvckpTQ29udGV4CiAgICAgSlNDb250ZXh0R3Jv
dXBSZWYgbV9ncm91cDsKICAgICBOU01hcFRhYmxlICptX2NvbnRleHRDYWNoZTsKICAgICBOU01h
cFRhYmxlICptX2V4dGVybmFsT2JqZWN0R3JhcGg7CisgICAgTlNNYXBUYWJsZSAqbV9leHRlcm5h
bFJlbWVtYmVyZWRTZXQ7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0CkBAIC0xMTMsNiArMTE0
LDkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udGV4dEdyb3VwUmVmOgogICAgIE5TUG9p
bnRlckZ1bmN0aW9uc09wdGlvbnMgd2Vha0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1dl
YWtNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKICAgICBOU1Bv
aW50ZXJGdW5jdGlvbnNPcHRpb25zIHN0cm9uZ0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9u
c1N0cm9uZ01lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09iamVjdFBlcnNvbmFsaXR5OwogICAg
IG1fZXh0ZXJuYWxPYmplY3RHcmFwaCA9IFtbTlNNYXBUYWJsZSBhbGxvY10gaW5pdFdpdGhLZXlP
cHRpb25zOndlYWtJRE9wdGlvbnMgdmFsdWVPcHRpb25zOnN0cm9uZ0lET3B0aW9ucyBjYXBhY2l0
eTowXTsKKworICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgaW50ZWdlck9wdGlvbnMgPSBO
U1BvaW50ZXJGdW5jdGlvbnNPcGFxdWVNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNJbnRlZ2Vy
UGVyc29uYWxpdHk7CisgICAgbV9leHRlcm5hbFJlbWVtYmVyZWRTZXQgPSBbW05TTWFwVGFibGUg
YWxsb2NdIGluaXRXaXRoS2V5T3B0aW9uczp3ZWFrSURPcHRpb25zIHZhbHVlT3B0aW9uczppbnRl
Z2VyT3B0aW9ucyBjYXBhY2l0eTowXTsKICAgIAogICAgIFtKU1ZNV3JhcHBlckNhY2hlIGFkZFdy
YXBwZXI6c2VsZiBmb3JKU0NvbnRleHRHcm91cFJlZjpncm91cF07CiAgCkBAIC0xMjQsNiArMTI4
LDcgQEAgLSAodm9pZClkZWFsbG9jCiAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKG1fZ3JvdXAp
OwogICAgIFttX2NvbnRleHRDYWNoZSByZWxlYXNlXTsKICAgICBbbV9leHRlcm5hbE9iamVjdEdy
YXBoIHJlbGVhc2VdOworICAgIFttX2V4dGVybmFsUmVtZW1iZXJlZFNldCByZWxlYXNlXTsKICAg
ICBbc3VwZXIgZGVhbGxvY107CiB9CiAKQEAgLTE0NSw2ICsxNTAsMTggQEAgc3RhdGljIGlkIGdl
dEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKKy0g
KGJvb2wpaXNPbGRFeHRlcm5hbE9iamVjdDooaWQpb2JqZWN0Cit7CisgICAgSlNDOjpWTSogdm0g
PSB0b0pTKG1fZ3JvdXApOworICAgIHJldHVybiB2bS0+aGVhcC5zbG90VmlzaXRvcigpLmNvbnRh
aW5zT3BhcXVlUm9vdChvYmplY3QpOworfQorCistICh2b2lkKWFkZEV4dGVybmFsUmVtZW1iZXJl
ZE9iamVjdDooaWQpb2JqZWN0Cit7CisgICAgQVNTRVJUKFtzZWxmIGlzT2xkRXh0ZXJuYWxPYmpl
Y3Q6b2JqZWN0XSk7CisgICAgW21fZXh0ZXJuYWxSZW1lbWJlcmVkU2V0IHNldE9iamVjdDpbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6dHJ1ZV0gZm9yS2V5Om9iamVjdF07Cit9CisKIC0gKHZvaWQp
YWRkTWFuYWdlZFJlZmVyZW5jZTooaWQpb2JqZWN0IHdpdGhPd25lcjooaWQpb3duZXIKIHsgICAg
CiAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbSlNNYW5hZ2VkVmFsdWUgY2xhc3NdXSkK
QEAgLTE1Nyw3ICsxNzQsOSBAQCAtICh2b2lkKWFkZE1hbmFnZWRSZWZlcmVuY2U6KGlkKW9iamVj
dCB3CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dG9KUyhtX2dyb3VwKSk7Ci0gICAgCisgICAgaWYgKFtzZWxmIGlzT2xkRXh0ZXJuYWxPYmplY3Q6
b3duZXJdICYmICFbc2VsZiBpc09sZEV4dGVybmFsT2JqZWN0Om9iamVjdF0pCisgICAgICAgIFtz
ZWxmIGFkZEV4dGVybmFsUmVtZW1iZXJlZE9iamVjdDpvd25lcl07CisgCiAgICAgTlNNYXBUYWJs
ZSAqb3duZWRPYmplY3RzID0gW21fZXh0ZXJuYWxPYmplY3RHcmFwaCBvYmplY3RGb3JLZXk6b3du
ZXJdOwogICAgIGlmICghb3duZWRPYmplY3RzKSB7CiAgICAgICAgIE5TUG9pbnRlckZ1bmN0aW9u
c09wdGlvbnMgd2Vha0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1dlYWtNZW1vcnkgfCBO
U1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKQEAgLTE5OCw4ICsyMTcsMTAgQEAg
LSAodm9pZClyZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOihpZClvYmplYwogICAgIGlmIChjb3VudCA9
PSAxKQogICAgICAgICBOU01hcFJlbW92ZShvd25lZE9iamVjdHMsIG9iamVjdCk7CiAKLSAgICBp
ZiAoIVtvd25lZE9iamVjdHMgY291bnRdKQorICAgIGlmICghW293bmVkT2JqZWN0cyBjb3VudF0p
IHsKICAgICAgICAgW21fZXh0ZXJuYWxPYmplY3RHcmFwaCByZW1vdmVPYmplY3RGb3JLZXk6b3du
ZXJdOworICAgICAgICBbbV9leHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlT2JqZWN0Rm9yS2V5
Om93bmVyXTsKKyAgICB9CiB9CiAKIEBlbmQKQEAgLTIzNCw2ICsyNTUsMTEgQEAgLSAoTlNNYXBU
YWJsZSAqKWV4dGVybmFsT2JqZWN0R3JhcGgKICAgICByZXR1cm4gbV9leHRlcm5hbE9iamVjdEdy
YXBoOwogfQogCistIChOU01hcFRhYmxlICopZXh0ZXJuYWxSZW1lbWJlcmVkU2V0Cit7CisgICAg
cmV0dXJuIG1fZXh0ZXJuYWxSZW1lbWJlcmVkU2V0OworfQorCiBAZW5kCiAKIHZvaWQgc2NhbkV4
dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IHZvaWQqIHJvb3QpCkBAIC0yNTMsMTMgKzI3OSwyOCBAQCB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtCiAgICAgICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobmV4
dFJvb3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVj
dHMgPSBbZXh0ZXJuYWxPYmplY3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5l
eHRSb290KV07Ci0gICAgICAgICAgICBpZCBvd25lZE9iamVjdDsKLSAgICAgICAgICAgIE5TRW51
bWVyYXRvciAqZW51bWVyYXRvciA9IFtvd25lZE9iamVjdHMga2V5RW51bWVyYXRvcl07Ci0gICAg
ICAgICAgICB3aGlsZSAoKG93bmVkT2JqZWN0ID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pKQor
ICAgICAgICAgICAgZm9yIChpZCBvd25lZE9iamVjdCBpbiBvd25lZE9iamVjdHMpCiAgICAgICAg
ICAgICAgICAgc3RhY2suYXBwZW5kKHN0YXRpY19jYXN0PHZvaWQqPihvd25lZE9iamVjdCkpOwog
ICAgICAgICB9CiAgICAgfQogfQogCit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlND
OjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CisgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1X
cmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOworICAg
ICAgICBpZiAoIXZpcnR1YWxNYWNoaW5lKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBO
U01hcFRhYmxlICpleHRlcm5hbE9iamVjdEdyYXBoID0gW3ZpcnR1YWxNYWNoaW5lIGV4dGVybmFs
T2JqZWN0R3JhcGhdOworICAgICAgICBOU01hcFRhYmxlICpleHRlcm5hbFJlbWVtYmVyZWRTZXQg
PSBbdmlydHVhbE1hY2hpbmUgZXh0ZXJuYWxSZW1lbWJlcmVkU2V0XTsKKyAgICAgICAgZm9yIChp
ZCBrZXkgaW4gZXh0ZXJuYWxSZW1lbWJlcmVkU2V0KSB7CisgICAgICAgICAgICBOU01hcFRhYmxl
ICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmplY3RHcmFwaCBvYmplY3RGb3JLZXk6a2V5XTsK
KyAgICAgICAgICAgIGZvciAoaWQgb3duZWRPYmplY3QgaW4gb3duZWRPYmplY3RzKQorICAgICAg
ICAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZtLCB2aXNpdG9yLCBvd25lZE9iamVj
dCk7CisgICAgICAgIH0KKyAgICAgICAgW2V4dGVybmFsUmVtZW1iZXJlZFNldCByZW1vdmVBbGxP
YmplY3RzXTsKKyAgICB9Cit9CisKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHJldmlzaW9uIDE2
NzMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgSlNDb250ZXh0R3JvdXBSZWYg
Z2V0R3JvdXBGcm9tVmlydHVhbE1hYwogI2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKIHZv
aWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2
b2lkKiByb290KTsKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldChKU0M6OlZNJiwgSlND
OjpTbG90VmlzaXRvciYpOwogCiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkocmV2aXNpb24gMTY3MzA2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW1wb3J0ICJKU0V4cG9ydFRlc3RzLmgiCiAKIGV4dGVybiAiQyIgdm9pZCBKU1N5
bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0UmVmKTsKK2V4dGVy
biAiQyIgdm9pZCBKU1N5bmNocm9ub3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0
UmVmKTsKIAogZXh0ZXJuICJDIiBib29sIF9CbG9ja19oYXNfc2lnbmF0dXJlKGlkKTsKIGV4dGVy
biAiQyIgY29uc3QgY2hhciAqIF9CbG9ja19zaWduYXR1cmUoaWQpOwpAQCAtMTMyNiw2ICsxMzI3
LDM4IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgICAgICBbW0pTVmFsdWUgdmFsdWVX
aXRoSW50MzI6NDIgaW5Db250ZXh0OmNvbnRleHRdIHRvQXJyYXldOwogICAgIH0KIAorICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4
dCBhbGxvY10gaW5pdF07CisKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSByb290LCBtYWtlIGl0IHJl
YWNoYWJsZSBmcm9tIEpTLCBhbmQgZm9yY2UgYW4gRWRlbkNvbGxlY3Rpb24KKyAgICAgICAgLy8g
c28gdGhhdCB3ZSBzY2FuIHRoZSBleHRlcm5hbCBvYmplY3QgZ3JhcGguCisgICAgICAgIFRlc3RP
YmplY3QgKnJvb3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgICAgICBjb250ZXh0W0Aicm9vdCJdID0gcm9vdDsKKyAgICAgICAg
fQorICAgICAgICBKU1N5bmNocm9ub3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQg
SlNHbG9iYWxDb250ZXh0UmVmXSk7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IE9iai1DIG9i
amVjdCBvbmx5IHJlYWNoYWJsZSB2aWEgdGhlIGV4dGVybmFsIG9iamVjdCBncmFwaAorICAgICAg
ICAvLyB0aHJvdWdoIHRoZSBvYmplY3Qgd2UgYWxyZWFkeSBzY2FubmVkIGR1cmluZyB0aGUgRWRl
bkNvbGxlY3Rpb24uCisgICAgICAgIFRlc3RPYmplY3QgKmNoaWxkID0gW1Rlc3RPYmplY3QgdGVz
dE9iamVjdF07CisgICAgICAgIFtjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZl
cmVuY2U6Y2hpbGQgd2l0aE93bmVyOnJvb3RdOworCisgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBt
YW5hZ2VkIEpTVmFsdWUgdGhhdCB3aWxsIG9ubHkgYmUga2VwdCBhbGl2ZSBpZiB3ZSBwcm9wZXJs
eSByZXNjYW4KKyAgICAgICAgLy8gdGhlIGV4dGVybmFsIG9iamVjdCBncmFwaC4KKyAgICAgICAg
SlNNYW5hZ2VkVmFsdWUgKm1hbmFnZWRKU09iamVjdCA9IG5pbDsKKyAgICAgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgICAgICBKU1ZhbHVlICpqc09iamVjdCA9IFtKU1ZhbHVlIHZhbHVl
V2l0aE9iamVjdDpAImhlbGxvIiBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgICAgICBtYW5h
Z2VkSlNPYmplY3QgPSBbSlNNYW5hZ2VkVmFsdWUgbWFuYWdlZFZhbHVlV2l0aFZhbHVlOmpzT2Jq
ZWN0XTsKKyAgICAgICAgICAgIFtjb250ZXh0LnZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZl
cmVuY2U6bWFuYWdlZEpTT2JqZWN0IHdpdGhPd25lcjpjaGlsZF07CisgICAgICAgIH0KKworICAg
ICAgICAvLyBGb3JjZSBhbm90aGVyIEVkZW5Db2xsZWN0aW9uLiBJdCBzaG91bGQgcmVzY2FuIHRo
ZSBuZXcgcGFydCBvZiB0aGUgZXh0ZXJuYWwgb2JqZWN0IGdyYXBoLgorICAgICAgICBKU1N5bmNo
cm9ub3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVm
XSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBtYW5hZ2VkIEpTVmFsdWUg
aXMgc3RpbGwgYWxpdmUuCisgICAgICAgIGNoZWNrUmVzdWx0KEAiRWRlbkNvbGxlY3Rpb24gZG9l
c24ndCByZWNsYWltIG5ldyBtYW5hZ2VkIHZhbHVlcyIsIFttYW5hZ2VkSlNPYmplY3QgdmFsdWVd
ICE9IG5pbCk7CisgICAgfQorCiAgICAgY3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3Qo
KTsKICAgICBydW5EYXRlVGVzdHMoKTsKICAgICBydW5KU0V4cG9ydFRlc3RzKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTY3MzA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDcgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU09OT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5o
IgogI2luY2x1ZGUgIlJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIgogI2luY2x1ZGUgIlRyYWNp
bmcuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgpAQCAtNTEyLDYgKzUxMyw3IEBA
IHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKICAgICB7CiAgICAgICAg
IFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcihtX3Nsb3RWaXNpdG9yKTsKIAorICAgICAgICBz
Y2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9yKTsKICAgICAgICAg
dmlzaXRTbWFsbFN0cmluZ3MoKTsKICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhjb25z
ZXJ2YXRpdmVSb290cyk7CiAgICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdHMoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE2NzMwNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw4
IEBAIHB1YmxpYzoKICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29i
amVjdFNwYWNlOyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1
cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCisgICAgY29uc3QgU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQorCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJhY2so
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEZ1bGxBY3Rpdml0eUNhbGxiYWNrKFBh
c3NSZWZQdHI8RnVsbEdDQWN0aXZpdHlDYWxsYmFjaz4pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxNjczMDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw4ICs3
OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVuY29uZGl0aW9uYWxseUFwcGVuZChKU0NlbGwqKTsK
ICAgICAKICAgICB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOwotICAgIGJvb2wgY29udGFpbnNP
cGFxdWVSb290KHZvaWQqKTsKLSAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0
ZSh2b2lkKik7CisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OworICAg
IFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKICAgICBp
bnQgb3BhcXVlUm9vdENvdW50KCk7CiAKICAgICBHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERh
dGEoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE2NzMwNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9w
YXF1ZVJvb3QodgogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWlu
c09wYXF1ZVJvb3Qodm9pZCogcm9vdCkKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWlu
c09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1faXNJblBhcmFs
bGVsTW9kZSk7CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQpAQCAtMTg0LDcgKzE4NCw3IEBAIGlu
bGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVIKICNlbmRpZgogfQogCi1pbmxp
bmUgVHJpU3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQq
IHJvb3QpCitpbmxpbmUgVHJpU3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdFRy
aVN0YXRlKHZvaWQqIHJvb3QpIGNvbnN0CiB7CiAgICAgaWYgKG1fb3BhcXVlUm9vdHMuY29udGFp
bnMocm9vdCkpCiAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229381</attachid>
            <date>2014-04-15 11:20:50 -0700</date>
            <delta_ts>2014-04-15 11:28:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131634-20140415112029.patch</filename>
            <type>text/plain</type>
            <size>13068</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3MzE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE0LTA0LTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGV4dGVybmFsIG9iamVjdCBncmFwaHMgZG9uJ3QgaGFu
ZGxlIGdlbmVyYXRpb25hbCBjb2xsZWN0aW9uIHByb3Blcmx5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE2MzQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB0aGUgc2V0IG9mIE9iamVjdGl2ZS1DIG9i
amVjdHMgdHJhbnNpdGl2ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGFuIG9iamVjdCBjaGFuZ2VzLCB3
ZSAKKyAgICAgICAgbmVlZCB0byB1cGRhdGUgdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMgYWNjb3Jk
aW5nbHkuIElmIHdlIGRvbid0LCB0aGUgbmV4dCBFZGVuQ29sbGVjdGlvbiAKKyAgICAgICAgd29u
J3QgcmVzY2FuIHRoZSBleHRlcm5hbCBvYmplY3QgZ3JhcGgsIHdoaWNoIHdvdWxkIGxlYWQgdXMg
dG8gY29uc2lkZXIgYSBuZXdseSBhbGxvY2F0ZWQgCisgICAgICAgIEpTTWFuYWdlZFZhbHVlIHRv
IGJlIGRlYWQuCisKKyAgICAgICAgKiBBUEkvSlNCYXNlLmNwcDoKKyAgICAgICAgKEpTU3luY2hy
b25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1h
Y2hpbmUubW06CisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgaW5pdFdpdGhDb250ZXh0R3Jv
dXBSZWY6XSk6CisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgZGVhbGxvY10pOgorICAgICAg
ICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGlzT2xkRXh0ZXJuYWxPYmplY3Q6XSk6CisgICAgICAgICgt
W0pTVmlydHVhbE1hY2hpbmUgYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0Ol0pOgorICAgICAg
ICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6d2l0aE93bmVyOl0pOgor
ICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIHJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6d2l0aE93
bmVyOl0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGV4dGVybmFsUmVtZW1iZXJlZFNl
dF0pOgorICAgICAgICAoc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldCk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAqIGhlYXAv
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgICogaGVh
cC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OnNsb3RWaXNpdG9yKToKKyAgICAgICAgKiBo
ZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCk6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSk6CisKIDIwMTQt
MDQtMTUgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNjcxOTkgYW5kIHIxNjcyNTEuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCShyZXZpc2lvbiAxNjczMDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsx
NDIsNyBAQCB2b2lkIEpTUmVwb3J0RXh0cmFNZW1vcnlDb3N0KEpTQ29udGV4dFJlCiB9CiAKIGV4
dGVybiAiQyIgSlNfRVhQT1JUIHZvaWQgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVi
dWdnaW5nKEpTQ29udGV4dFJlZik7CitleHRlcm4gIkMiIEpTX0VYUE9SVCB2b2lkIEpTU3luY2hy
b25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwogCiB2b2lkIEpTU3lu
Y2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYgY3R4KQogewpA
QCAtMTUzLDYgKzE1NCwxNiBAQCB2b2lkIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRl
YnVnCiAgICAgZXhlYy0+dm0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAKK3ZvaWQg
SlNTeW5jaHJvbm91c0VkZW5Db2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZiBjdHgpCit7
CisgICAgaWYgKCFjdHgpCisgICAgICAgIHJldHVybjsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY3R4KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIGV4ZWMtPnZt
KCkuaGVhcC5jb2xsZWN0KEVkZW5Db2xsZWN0aW9uKTsKK30KKwogdm9pZCBKU0Rpc2FibGVHQ1Rp
bWVyKHZvaWQpCiB7CiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrOjpzX3Nob3VsZENyZWF0ZUdDVGlt
ZXIgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0JKHJldmlzaW9uIDE2NzMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCAr
IChKU1ZpcnR1YWxNYWNoaW5lICopd3JhcHBlckZvckpTQ29udGV4CiAgICAgSlNDb250ZXh0R3Jv
dXBSZWYgbV9ncm91cDsKICAgICBOU01hcFRhYmxlICptX2NvbnRleHRDYWNoZTsKICAgICBOU01h
cFRhYmxlICptX2V4dGVybmFsT2JqZWN0R3JhcGg7CisgICAgTlNNYXBUYWJsZSAqbV9leHRlcm5h
bFJlbWVtYmVyZWRTZXQ7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0CkBAIC0xMTMsNiArMTE0
LDkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udGV4dEdyb3VwUmVmOgogICAgIE5TUG9p
bnRlckZ1bmN0aW9uc09wdGlvbnMgd2Vha0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1dl
YWtNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKICAgICBOU1Bv
aW50ZXJGdW5jdGlvbnNPcHRpb25zIHN0cm9uZ0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9u
c1N0cm9uZ01lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09iamVjdFBlcnNvbmFsaXR5OwogICAg
IG1fZXh0ZXJuYWxPYmplY3RHcmFwaCA9IFtbTlNNYXBUYWJsZSBhbGxvY10gaW5pdFdpdGhLZXlP
cHRpb25zOndlYWtJRE9wdGlvbnMgdmFsdWVPcHRpb25zOnN0cm9uZ0lET3B0aW9ucyBjYXBhY2l0
eTowXTsKKworICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgaW50ZWdlck9wdGlvbnMgPSBO
U1BvaW50ZXJGdW5jdGlvbnNPcGFxdWVNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNJbnRlZ2Vy
UGVyc29uYWxpdHk7CisgICAgbV9leHRlcm5hbFJlbWVtYmVyZWRTZXQgPSBbW05TTWFwVGFibGUg
YWxsb2NdIGluaXRXaXRoS2V5T3B0aW9uczp3ZWFrSURPcHRpb25zIHZhbHVlT3B0aW9uczppbnRl
Z2VyT3B0aW9ucyBjYXBhY2l0eTowXTsKICAgIAogICAgIFtKU1ZNV3JhcHBlckNhY2hlIGFkZFdy
YXBwZXI6c2VsZiBmb3JKU0NvbnRleHRHcm91cFJlZjpncm91cF07CiAgCkBAIC0xMjQsNiArMTI4
LDcgQEAgLSAodm9pZClkZWFsbG9jCiAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKG1fZ3JvdXAp
OwogICAgIFttX2NvbnRleHRDYWNoZSByZWxlYXNlXTsKICAgICBbbV9leHRlcm5hbE9iamVjdEdy
YXBoIHJlbGVhc2VdOworICAgIFttX2V4dGVybmFsUmVtZW1iZXJlZFNldCByZWxlYXNlXTsKICAg
ICBbc3VwZXIgZGVhbGxvY107CiB9CiAKQEAgLTE0NSw2ICsxNTAsMTggQEAgc3RhdGljIGlkIGdl
dEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKKy0g
KGJvb2wpaXNPbGRFeHRlcm5hbE9iamVjdDooaWQpb2JqZWN0Cit7CisgICAgSlNDOjpWTSogdm0g
PSB0b0pTKG1fZ3JvdXApOworICAgIHJldHVybiB2bS0+aGVhcC5zbG90VmlzaXRvcigpLmNvbnRh
aW5zT3BhcXVlUm9vdChvYmplY3QpOworfQorCistICh2b2lkKWFkZEV4dGVybmFsUmVtZW1iZXJl
ZE9iamVjdDooaWQpb2JqZWN0Cit7CisgICAgQVNTRVJUKFtzZWxmIGlzT2xkRXh0ZXJuYWxPYmpl
Y3Q6b2JqZWN0XSk7CisgICAgW21fZXh0ZXJuYWxSZW1lbWJlcmVkU2V0IHNldE9iamVjdDpbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6dHJ1ZV0gZm9yS2V5Om9iamVjdF07Cit9CisKIC0gKHZvaWQp
YWRkTWFuYWdlZFJlZmVyZW5jZTooaWQpb2JqZWN0IHdpdGhPd25lcjooaWQpb3duZXIKIHsgICAg
CiAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbSlNNYW5hZ2VkVmFsdWUgY2xhc3NdXSkK
QEAgLTE1Nyw3ICsxNzQsOSBAQCAtICh2b2lkKWFkZE1hbmFnZWRSZWZlcmVuY2U6KGlkKW9iamVj
dCB3CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dG9KUyhtX2dyb3VwKSk7Ci0gICAgCisgICAgaWYgKFtzZWxmIGlzT2xkRXh0ZXJuYWxPYmplY3Q6
b3duZXJdICYmICFbc2VsZiBpc09sZEV4dGVybmFsT2JqZWN0Om9iamVjdF0pCisgICAgICAgIFtz
ZWxmIGFkZEV4dGVybmFsUmVtZW1iZXJlZE9iamVjdDpvd25lcl07CisgCiAgICAgTlNNYXBUYWJs
ZSAqb3duZWRPYmplY3RzID0gW21fZXh0ZXJuYWxPYmplY3RHcmFwaCBvYmplY3RGb3JLZXk6b3du
ZXJdOwogICAgIGlmICghb3duZWRPYmplY3RzKSB7CiAgICAgICAgIE5TUG9pbnRlckZ1bmN0aW9u
c09wdGlvbnMgd2Vha0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1dlYWtNZW1vcnkgfCBO
U1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKQEAgLTE5OCw4ICsyMTcsMTAgQEAg
LSAodm9pZClyZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOihpZClvYmplYwogICAgIGlmIChjb3VudCA9
PSAxKQogICAgICAgICBOU01hcFJlbW92ZShvd25lZE9iamVjdHMsIG9iamVjdCk7CiAKLSAgICBp
ZiAoIVtvd25lZE9iamVjdHMgY291bnRdKQorICAgIGlmICghW293bmVkT2JqZWN0cyBjb3VudF0p
IHsKICAgICAgICAgW21fZXh0ZXJuYWxPYmplY3RHcmFwaCByZW1vdmVPYmplY3RGb3JLZXk6b3du
ZXJdOworICAgICAgICBbbV9leHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlT2JqZWN0Rm9yS2V5
Om93bmVyXTsKKyAgICB9CiB9CiAKIEBlbmQKQEAgLTIzNCw2ICsyNTUsMTEgQEAgLSAoTlNNYXBU
YWJsZSAqKWV4dGVybmFsT2JqZWN0R3JhcGgKICAgICByZXR1cm4gbV9leHRlcm5hbE9iamVjdEdy
YXBoOwogfQogCistIChOU01hcFRhYmxlICopZXh0ZXJuYWxSZW1lbWJlcmVkU2V0Cit7CisgICAg
cmV0dXJuIG1fZXh0ZXJuYWxSZW1lbWJlcmVkU2V0OworfQorCiBAZW5kCiAKIHZvaWQgc2NhbkV4
dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IHZvaWQqIHJvb3QpCkBAIC0yNTMsMTMgKzI3OSwyOCBAQCB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtCiAgICAgICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobmV4
dFJvb3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVj
dHMgPSBbZXh0ZXJuYWxPYmplY3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5l
eHRSb290KV07Ci0gICAgICAgICAgICBpZCBvd25lZE9iamVjdDsKLSAgICAgICAgICAgIE5TRW51
bWVyYXRvciAqZW51bWVyYXRvciA9IFtvd25lZE9iamVjdHMga2V5RW51bWVyYXRvcl07Ci0gICAg
ICAgICAgICB3aGlsZSAoKG93bmVkT2JqZWN0ID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pKQor
ICAgICAgICAgICAgZm9yIChpZCBvd25lZE9iamVjdCBpbiBvd25lZE9iamVjdHMpCiAgICAgICAg
ICAgICAgICAgc3RhY2suYXBwZW5kKHN0YXRpY19jYXN0PHZvaWQqPihvd25lZE9iamVjdCkpOwog
ICAgICAgICB9CiAgICAgfQogfQogCit2b2lkIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoSlND
OjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CisgICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZpcnR1YWxNYWNoaW5lID0gW0pTVk1X
cmFwcGVyQ2FjaGUgd3JhcHBlckZvckpTQ29udGV4dEdyb3VwUmVmOnRvUmVmKCZ2bSldOworICAg
ICAgICBpZiAoIXZpcnR1YWxNYWNoaW5lKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBO
U01hcFRhYmxlICpleHRlcm5hbE9iamVjdEdyYXBoID0gW3ZpcnR1YWxNYWNoaW5lIGV4dGVybmFs
T2JqZWN0R3JhcGhdOworICAgICAgICBOU01hcFRhYmxlICpleHRlcm5hbFJlbWVtYmVyZWRTZXQg
PSBbdmlydHVhbE1hY2hpbmUgZXh0ZXJuYWxSZW1lbWJlcmVkU2V0XTsKKyAgICAgICAgZm9yIChp
ZCBrZXkgaW4gZXh0ZXJuYWxSZW1lbWJlcmVkU2V0KSB7CisgICAgICAgICAgICBOU01hcFRhYmxl
ICpvd25lZE9iamVjdHMgPSBbZXh0ZXJuYWxPYmplY3RHcmFwaCBvYmplY3RGb3JLZXk6a2V5XTsK
KyAgICAgICAgICAgIGZvciAoaWQgb3duZWRPYmplY3QgaW4gb3duZWRPYmplY3RzKQorICAgICAg
ICAgICAgICAgIHNjYW5FeHRlcm5hbE9iamVjdEdyYXBoKHZtLCB2aXNpdG9yLCBvd25lZE9iamVj
dCk7CisgICAgICAgIH0KKyAgICAgICAgW2V4dGVybmFsUmVtZW1iZXJlZFNldCByZW1vdmVBbGxP
YmplY3RzXTsKKyAgICB9Cit9CisKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHJldmlzaW9uIDE2
NzMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMCBAQAogI2lmbmRlZiBKU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWxfaAogI2RlZmluZSBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWxfaAog
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgotCiAjaWYgSlNDX09C
SkNfQVBJX0VOQUJMRUQKIAorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
aD4KKwogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKIGNsYXNzIFNsb3RWaXNpdG9yOwpAQCAt
NTEsNiArNTEsNyBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjCiAj
ZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykKIAogdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFw
aChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYsIHZvaWQqIHJvb3QpOwordm9pZCBzY2FuRXh0
ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCShy
ZXZpc2lvbiAxNjczMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3Rh
cGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIkpTRXhwb3J0
VGVzdHMuaCIKIAogZXh0ZXJuICJDIiB2b2lkIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZv
ckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOworZXh0ZXJuICJDIiB2b2lkIEpTU3luY2hyb25vdXNF
ZGVuQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwogCiBleHRlcm4gIkMiIGJvb2wg
X0Jsb2NrX2hhc19zaWduYXR1cmUoaWQpOwogZXh0ZXJuICJDIiBjb25zdCBjaGFyICogX0Jsb2Nr
X3NpZ25hdHVyZShpZCk7CkBAIC0xMzI2LDYgKzEzMjcsMzggQEAgdm9pZCB0ZXN0T2JqZWN0aXZl
Q0FQSSgpCiAgICAgICAgIFtbSlNWYWx1ZSB2YWx1ZVdpdGhJbnQzMjo0MiBpbkNvbnRleHQ6Y29u
dGV4dF0gdG9BcnJheV07CiAgICAgfQogCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKworICAgICAg
ICAvLyBDcmVhdGUgdGhlIHJvb3QsIG1ha2UgaXQgcmVhY2hhYmxlIGZyb20gSlMsIGFuZCBmb3Jj
ZSBhbiBFZGVuQ29sbGVjdGlvbgorICAgICAgICAvLyBzbyB0aGF0IHdlIHNjYW4gdGhlIGV4dGVy
bmFsIG9iamVjdCBncmFwaC4KKyAgICAgICAgVGVzdE9iamVjdCAqcm9vdCA9IFtUZXN0T2JqZWN0
IHRlc3RPYmplY3RdOworICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgICAgIGNv
bnRleHRbQCJyb290Il0gPSByb290OworICAgICAgICB9CisgICAgICAgIEpTU3luY2hyb25vdXNF
ZGVuQ29sbGVjdEZvckRlYnVnZ2luZyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKKwor
ICAgICAgICAvLyBDcmVhdGUgYSBuZXcgT2JqLUMgb2JqZWN0IG9ubHkgcmVhY2hhYmxlIHZpYSB0
aGUgZXh0ZXJuYWwgb2JqZWN0IGdyYXBoCisgICAgICAgIC8vIHRocm91Z2ggdGhlIG9iamVjdCB3
ZSBhbHJlYWR5IHNjYW5uZWQgZHVyaW5nIHRoZSBFZGVuQ29sbGVjdGlvbi4KKyAgICAgICAgVGVz
dE9iamVjdCAqY2hpbGQgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgW2NvbnRl
eHQudmlydHVhbE1hY2hpbmUgYWRkTWFuYWdlZFJlZmVyZW5jZTpjaGlsZCB3aXRoT3duZXI6cm9v
dF07CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG1hbmFnZWQgSlNWYWx1ZSB0aGF0IHdpbGwg
b25seSBiZSBrZXB0IGFsaXZlIGlmIHdlIHByb3Blcmx5IHJlc2NhbgorICAgICAgICAvLyB0aGUg
ZXh0ZXJuYWwgb2JqZWN0IGdyYXBoLgorICAgICAgICBKU01hbmFnZWRWYWx1ZSAqbWFuYWdlZEpT
T2JqZWN0ID0gbmlsOworICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgICAgIEpT
VmFsdWUgKmpzT2JqZWN0ID0gW0pTVmFsdWUgdmFsdWVXaXRoT2JqZWN0OkAiaGVsbG8iIGluQ29u
dGV4dDpjb250ZXh0XTsKKyAgICAgICAgICAgIG1hbmFnZWRKU09iamVjdCA9IFtKU01hbmFnZWRW
YWx1ZSBtYW5hZ2VkVmFsdWVXaXRoVmFsdWU6anNPYmplY3RdOworICAgICAgICAgICAgW2NvbnRl
eHQudmlydHVhbE1hY2hpbmUgYWRkTWFuYWdlZFJlZmVyZW5jZTptYW5hZ2VkSlNPYmplY3Qgd2l0
aE93bmVyOmNoaWxkXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZvcmNlIGFub3RoZXIgRWRl
bkNvbGxlY3Rpb24uIEl0IHNob3VsZCByZXNjYW4gdGhlIG5ldyBwYXJ0IG9mIHRoZSBleHRlcm5h
bCBvYmplY3QgZ3JhcGguCisgICAgICAgIEpTU3luY2hyb25vdXNFZGVuQ29sbGVjdEZvckRlYnVn
Z2luZyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKKyAgICAgICAgCisgICAgICAgIC8v
IENoZWNrIHRoYXQgdGhlIG1hbmFnZWQgSlNWYWx1ZSBpcyBzdGlsbCBhbGl2ZS4KKyAgICAgICAg
Y2hlY2tSZXN1bHQoQCJFZGVuQ29sbGVjdGlvbiBkb2Vzbid0IHJlY2xhaW0gbmV3IG1hbmFnZWQg
dmFsdWVzIiwgW21hbmFnZWRKU09iamVjdCB2YWx1ZV0gIT0gbmlsKTsKKyAgICB9CisKICAgICBj
dXJyZW50VGhpc0luc2lkZUJsb2NrR2V0dGVyVGVzdCgpOwogICAgIHJ1bkRhdGVUZXN0cygpOwog
ICAgIHJ1bkpTRXhwb3J0VGVzdHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAxNjczMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkpTTG9jay5o
IgogI2luY2x1ZGUgIkpTT05PYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAiUmVjdXJzaXZlQWxs
b2NhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiVHJhY2luZy5oIgogI2luY2x1ZGUgIlVubGlua2Vk
Q29kZUJsb2NrLmgiCkBAIC01MTIsNiArNTEzLDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91
YmxlIGdjU3RhcnRUaW1lKQogICAgIHsKICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFi
bGVyKG1fc2xvdFZpc2l0b3IpOwogCisgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQo
Km1fdm0sIG1fc2xvdFZpc2l0b3IpOwogICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwogICAg
ICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAg
dmlzaXRDb21waWxlcldvcmtsaXN0cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkocmV2aXNpb24gMTY3MzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDggQEAgcHVibGljOgogICAgIE1hcmtlZFNw
YWNlJiBvYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2U7IH0KICAgICBNYWNoaW5l
VGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9CiAK
KyAgICBjb25zdCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IoKSBjb25zdCB7IHJldHVybiBtX3Ns
b3RWaXNpdG9yOyB9CisKICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sq
IGZ1bGxBY3Rpdml0eUNhbGxiYWNrKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0
eUNhbGxiYWNrKiBlZGVuQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2V0RnVsbEFjdGl2aXR5Q2FsbGJhY2soUGFzc1JlZlB0cjxGdWxsR0NBY3Rpdml0eUNh
bGxiYWNrPik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJ
KHJldmlzaW9uIDE2NzMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDggQEAgcHVibGljOgogICAgIHZvaWQg
dW5jb25kaXRpb25hbGx5QXBwZW5kKEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgYWRkT3BhcXVl
Um9vdCh2b2lkKik7Ci0gICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopOwotICAgIFRy
aVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKTsKKyAgICBib29sIGNvbnRh
aW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CisgICAgVHJpU3RhdGUgY29udGFpbnNPcGFxdWVS
b290VHJpU3RhdGUodm9pZCopIGNvbnN0OwogICAgIGludCBvcGFxdWVSb290Q291bnQoKTsKIAog
ICAgIEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hh
cmVkOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
cklubGluZXMuaAkocmV2aXNpb24gMTY3MzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNyBA
QCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2CiAjZW5kaWYKIH0KIAot
aW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KQor
aW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBj
b25zdAogewogICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKICNpZiBFTkFCTEUoUEFS
QUxMRUxfR0MpCkBAIC0xODQsNyArMTg0LDcgQEAgaW5saW5lIGJvb2wgU2xvdFZpc2l0b3I6OmNv
bnRhaW5zT3BhcXVlUgogI2VuZGlmCiB9CiAKLWlubGluZSBUcmlTdGF0ZSBTbG90VmlzaXRvcjo6
Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCogcm9vdCkKK2lubGluZSBUcmlTdGF0ZSBT
bG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCogcm9vdCkgY29uc3QK
IHsKICAgICBpZiAobV9vcGFxdWVSb290cy5jb250YWlucyhyb290KSkKICAgICAgICAgcmV0dXJu
IFRydWVUcmlTdGF0ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229383</attachid>
            <date>2014-04-15 11:28:59 -0700</date>
            <delta_ts>2014-04-15 11:37:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131634-20140415112837.patch</filename>
            <type>text/plain</type>
            <size>13243</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3MzE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE0LTA0LTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGV4dGVybmFsIG9iamVjdCBncmFwaHMgZG9uJ3QgaGFu
ZGxlIGdlbmVyYXRpb25hbCBjb2xsZWN0aW9uIHByb3Blcmx5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE2MzQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB0aGUgc2V0IG9mIE9iamVjdGl2ZS1DIG9i
amVjdHMgdHJhbnNpdGl2ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGFuIG9iamVjdCBjaGFuZ2VzLCB3
ZSAKKyAgICAgICAgbmVlZCB0byB1cGRhdGUgdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMgYWNjb3Jk
aW5nbHkuIElmIHdlIGRvbid0LCB0aGUgbmV4dCBFZGVuQ29sbGVjdGlvbiAKKyAgICAgICAgd29u
J3QgcmVzY2FuIHRoZSBleHRlcm5hbCBvYmplY3QgZ3JhcGgsIHdoaWNoIHdvdWxkIGxlYWQgdXMg
dG8gY29uc2lkZXIgYSBuZXdseSBhbGxvY2F0ZWQgCisgICAgICAgIEpTTWFuYWdlZFZhbHVlIHRv
IGJlIGRlYWQuCisKKyAgICAgICAgKiBBUEkvSlNCYXNlLmNwcDoKKyAgICAgICAgKEpTU3luY2hy
b25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1h
Y2hpbmUubW06CisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgaW5pdFdpdGhDb250ZXh0R3Jv
dXBSZWY6XSk6CisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgZGVhbGxvY10pOgorICAgICAg
ICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGlzT2xkRXh0ZXJuYWxPYmplY3Q6XSk6CisgICAgICAgICgt
W0pTVmlydHVhbE1hY2hpbmUgYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0Ol0pOgorICAgICAg
ICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6d2l0aE93bmVyOl0pOgor
ICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIHJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6d2l0aE93
bmVyOl0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGV4dGVybmFsUmVtZW1iZXJlZFNl
dF0pOgorICAgICAgICAoc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldCk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAqIGhlYXAv
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgICogaGVh
cC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OnNsb3RWaXNpdG9yKToKKyAgICAgICAgKiBo
ZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCk6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSk6CisKIDIwMTQt
MDQtMTUgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNjcxOTkgYW5kIHIxNjcyNTEuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCShyZXZpc2lvbiAxNjczMDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsx
NDIsNyBAQCB2b2lkIEpTUmVwb3J0RXh0cmFNZW1vcnlDb3N0KEpTQ29udGV4dFJlCiB9CiAKIGV4
dGVybiAiQyIgSlNfRVhQT1JUIHZvaWQgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVi
dWdnaW5nKEpTQ29udGV4dFJlZik7CitleHRlcm4gIkMiIEpTX0VYUE9SVCB2b2lkIEpTU3luY2hy
b25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwogCiB2b2lkIEpTU3lu
Y2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYgY3R4KQogewpA
QCAtMTUzLDYgKzE1NCwxNiBAQCB2b2lkIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRl
YnVnCiAgICAgZXhlYy0+dm0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAKK3ZvaWQg
SlNTeW5jaHJvbm91c0VkZW5Db2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZiBjdHgpCit7
CisgICAgaWYgKCFjdHgpCisgICAgICAgIHJldHVybjsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY3R4KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIGV4ZWMtPnZt
KCkuaGVhcC5jb2xsZWN0KEVkZW5Db2xsZWN0aW9uKTsKK30KKwogdm9pZCBKU0Rpc2FibGVHQ1Rp
bWVyKHZvaWQpCiB7CiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrOjpzX3Nob3VsZENyZWF0ZUdDVGlt
ZXIgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0JKHJldmlzaW9uIDE2NzMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCAr
IChKU1ZpcnR1YWxNYWNoaW5lICopd3JhcHBlckZvckpTQ29udGV4CiAgICAgSlNDb250ZXh0R3Jv
dXBSZWYgbV9ncm91cDsKICAgICBOU01hcFRhYmxlICptX2NvbnRleHRDYWNoZTsKICAgICBOU01h
cFRhYmxlICptX2V4dGVybmFsT2JqZWN0R3JhcGg7CisgICAgTlNNYXBUYWJsZSAqbV9leHRlcm5h
bFJlbWVtYmVyZWRTZXQ7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0CkBAIC0xMTMsNiArMTE0
LDkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udGV4dEdyb3VwUmVmOgogICAgIE5TUG9p
bnRlckZ1bmN0aW9uc09wdGlvbnMgd2Vha0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1dl
YWtNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKICAgICBOU1Bv
aW50ZXJGdW5jdGlvbnNPcHRpb25zIHN0cm9uZ0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9u
c1N0cm9uZ01lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09iamVjdFBlcnNvbmFsaXR5OwogICAg
IG1fZXh0ZXJuYWxPYmplY3RHcmFwaCA9IFtbTlNNYXBUYWJsZSBhbGxvY10gaW5pdFdpdGhLZXlP
cHRpb25zOndlYWtJRE9wdGlvbnMgdmFsdWVPcHRpb25zOnN0cm9uZ0lET3B0aW9ucyBjYXBhY2l0
eTowXTsKKworICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgaW50ZWdlck9wdGlvbnMgPSBO
U1BvaW50ZXJGdW5jdGlvbnNPcGFxdWVNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNJbnRlZ2Vy
UGVyc29uYWxpdHk7CisgICAgbV9leHRlcm5hbFJlbWVtYmVyZWRTZXQgPSBbW05TTWFwVGFibGUg
YWxsb2NdIGluaXRXaXRoS2V5T3B0aW9uczp3ZWFrSURPcHRpb25zIHZhbHVlT3B0aW9uczppbnRl
Z2VyT3B0aW9ucyBjYXBhY2l0eTowXTsKICAgIAogICAgIFtKU1ZNV3JhcHBlckNhY2hlIGFkZFdy
YXBwZXI6c2VsZiBmb3JKU0NvbnRleHRHcm91cFJlZjpncm91cF07CiAgCkBAIC0xMjQsNiArMTI4
LDcgQEAgLSAodm9pZClkZWFsbG9jCiAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKG1fZ3JvdXAp
OwogICAgIFttX2NvbnRleHRDYWNoZSByZWxlYXNlXTsKICAgICBbbV9leHRlcm5hbE9iamVjdEdy
YXBoIHJlbGVhc2VdOworICAgIFttX2V4dGVybmFsUmVtZW1iZXJlZFNldCByZWxlYXNlXTsKICAg
ICBbc3VwZXIgZGVhbGxvY107CiB9CiAKQEAgLTE0NSw2ICsxNTAsMTggQEAgc3RhdGljIGlkIGdl
dEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKKy0g
KGJvb2wpaXNPbGRFeHRlcm5hbE9iamVjdDooaWQpb2JqZWN0Cit7CisgICAgSlNDOjpWTSogdm0g
PSB0b0pTKG1fZ3JvdXApOworICAgIHJldHVybiB2bS0+aGVhcC5zbG90VmlzaXRvcigpLmNvbnRh
aW5zT3BhcXVlUm9vdChvYmplY3QpOworfQorCistICh2b2lkKWFkZEV4dGVybmFsUmVtZW1iZXJl
ZE9iamVjdDooaWQpb2JqZWN0Cit7CisgICAgQVNTRVJUKFtzZWxmIGlzT2xkRXh0ZXJuYWxPYmpl
Y3Q6b2JqZWN0XSk7CisgICAgW21fZXh0ZXJuYWxSZW1lbWJlcmVkU2V0IHNldE9iamVjdDpbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6dHJ1ZV0gZm9yS2V5Om9iamVjdF07Cit9CisKIC0gKHZvaWQp
YWRkTWFuYWdlZFJlZmVyZW5jZTooaWQpb2JqZWN0IHdpdGhPd25lcjooaWQpb3duZXIKIHsgICAg
CiAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbSlNNYW5hZ2VkVmFsdWUgY2xhc3NdXSkK
QEAgLTE1Nyw3ICsxNzQsOSBAQCAtICh2b2lkKWFkZE1hbmFnZWRSZWZlcmVuY2U6KGlkKW9iamVj
dCB3CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dG9KUyhtX2dyb3VwKSk7Ci0gICAgCisgICAgaWYgKFtzZWxmIGlzT2xkRXh0ZXJuYWxPYmplY3Q6
b3duZXJdICYmICFbc2VsZiBpc09sZEV4dGVybmFsT2JqZWN0Om9iamVjdF0pCisgICAgICAgIFtz
ZWxmIGFkZEV4dGVybmFsUmVtZW1iZXJlZE9iamVjdDpvd25lcl07CisgCiAgICAgTlNNYXBUYWJs
ZSAqb3duZWRPYmplY3RzID0gW21fZXh0ZXJuYWxPYmplY3RHcmFwaCBvYmplY3RGb3JLZXk6b3du
ZXJdOwogICAgIGlmICghb3duZWRPYmplY3RzKSB7CiAgICAgICAgIE5TUG9pbnRlckZ1bmN0aW9u
c09wdGlvbnMgd2Vha0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1dlYWtNZW1vcnkgfCBO
U1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKQEAgLTE5OCw4ICsyMTcsMTAgQEAg
LSAodm9pZClyZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOihpZClvYmplYwogICAgIGlmIChjb3VudCA9
PSAxKQogICAgICAgICBOU01hcFJlbW92ZShvd25lZE9iamVjdHMsIG9iamVjdCk7CiAKLSAgICBp
ZiAoIVtvd25lZE9iamVjdHMgY291bnRdKQorICAgIGlmICghW293bmVkT2JqZWN0cyBjb3VudF0p
IHsKICAgICAgICAgW21fZXh0ZXJuYWxPYmplY3RHcmFwaCByZW1vdmVPYmplY3RGb3JLZXk6b3du
ZXJdOworICAgICAgICBbbV9leHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlT2JqZWN0Rm9yS2V5
Om93bmVyXTsKKyAgICB9CiB9CiAKIEBlbmQKQEAgLTIzNCw2ICsyNTUsMTEgQEAgLSAoTlNNYXBU
YWJsZSAqKWV4dGVybmFsT2JqZWN0R3JhcGgKICAgICByZXR1cm4gbV9leHRlcm5hbE9iamVjdEdy
YXBoOwogfQogCistIChOU01hcFRhYmxlICopZXh0ZXJuYWxSZW1lbWJlcmVkU2V0Cit7CisgICAg
cmV0dXJuIG1fZXh0ZXJuYWxSZW1lbWJlcmVkU2V0OworfQorCiBAZW5kCiAKIHZvaWQgc2NhbkV4
dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IHZvaWQqIHJvb3QpCkBAIC0yNTMsMTMgKzI3OSwzMyBAQCB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtCiAgICAgICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobmV4
dFJvb3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVj
dHMgPSBbZXh0ZXJuYWxPYmplY3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5l
eHRSb290KV07Ci0gICAgICAgICAgICBpZCBvd25lZE9iamVjdDsKLSAgICAgICAgICAgIE5TRW51
bWVyYXRvciAqZW51bWVyYXRvciA9IFtvd25lZE9iamVjdHMga2V5RW51bWVyYXRvcl07Ci0gICAg
ICAgICAgICB3aGlsZSAoKG93bmVkT2JqZWN0ID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pKQor
ICAgICAgICAgICAgZm9yIChpZCBvd25lZE9iamVjdCBpbiBvd25lZE9iamVjdHMpCiAgICAgICAg
ICAgICAgICAgc3RhY2suYXBwZW5kKHN0YXRpY19jYXN0PHZvaWQqPihvd25lZE9iamVjdCkpOwog
ICAgICAgICB9CiAgICAgfQogfQogCi0jZW5kaWYKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJl
ZFNldChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmUg
PSBbSlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250ZXh0R3JvdXBSZWY6dG9SZWYoJnZt
KV07CisgICAgICAgIGlmICghdmlydHVhbE1hY2hpbmUpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIE5TTWFwVGFibGUgKmV4dGVybmFsT2JqZWN0R3JhcGggPSBbdmlydHVhbE1hY2hpbmUg
ZXh0ZXJuYWxPYmplY3RHcmFwaF07CisgICAgICAgIE5TTWFwVGFibGUgKmV4dGVybmFsUmVtZW1i
ZXJlZFNldCA9IFt2aXJ0dWFsTWFjaGluZSBleHRlcm5hbFJlbWVtYmVyZWRTZXRdOworICAgICAg
ICBmb3IgKGlkIGtleSBpbiBleHRlcm5hbFJlbWVtYmVyZWRTZXQpIHsKKyAgICAgICAgICAgIE5T
TWFwVGFibGUgKm93bmVkT2JqZWN0cyA9IFtleHRlcm5hbE9iamVjdEdyYXBoIG9iamVjdEZvcktl
eTprZXldOworICAgICAgICAgICAgZm9yIChpZCBvd25lZE9iamVjdCBpbiBvd25lZE9iamVjdHMp
CisgICAgICAgICAgICAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgodm0sIHZpc2l0b3IsIG93
bmVkT2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICBbZXh0ZXJuYWxSZW1lbWJlcmVkU2V0IHJl
bW92ZUFsbE9iamVjdHNdOworICAgIH0KK30KKworI2Vsc2UgLy8gSlNDX09CSkNfQVBJX0VOQUJM
RUQKKwordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0mLCBKU0M6OlNsb3RW
aXNpdG9yJikKK3sKK30KIAorI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmgJKHJldmlzaW9uIDE2NzMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNW
aXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMCBA
QAogI2lmbmRlZiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWxfaAogI2RlZmluZSBKU1ZpcnR1YWxN
YWNoaW5lSW50ZXJuYWxfaAogCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5oPgotCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBWTTsKIGNsYXNz
IFNsb3RWaXNpdG9yOwpAQCAtNTIsNiArNTIsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91
cEZyb21WaXJ0dWFsTWFjCiAKIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYs
IEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiByb290KTsKIAotI2VuZGlmCisjZW5kaWYgLy8gSlND
X09CSkNfQVBJX0VOQUJMRUQKKwordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6
Vk0mLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKICNlbmRpZiAvLyBKU1ZpcnR1YWxNYWNoaW5lSW50
ZXJuYWxfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5t
bQkocmV2aXNpb24gMTY3MzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJKU0V4
cG9ydFRlc3RzLmgiCiAKIGV4dGVybiAiQyIgdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxl
Y3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0UmVmKTsKK2V4dGVybiAiQyIgdm9pZCBKU1N5bmNocm9u
b3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0UmVmKTsKIAogZXh0ZXJuICJDIiBi
b29sIF9CbG9ja19oYXNfc2lnbmF0dXJlKGlkKTsKIGV4dGVybiAiQyIgY29uc3QgY2hhciAqIF9C
bG9ja19zaWduYXR1cmUoaWQpOwpAQCAtMTMyNiw2ICsxMzI3LDM4IEBAIHZvaWQgdGVzdE9iamVj
dGl2ZUNBUEkoKQogICAgICAgICBbW0pTVmFsdWUgdmFsdWVXaXRoSW50MzI6NDIgaW5Db250ZXh0
OmNvbnRleHRdIHRvQXJyYXldOwogICAgIH0KIAorICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAg
ICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisKKyAg
ICAgICAgLy8gQ3JlYXRlIHRoZSByb290LCBtYWtlIGl0IHJlYWNoYWJsZSBmcm9tIEpTLCBhbmQg
Zm9yY2UgYW4gRWRlbkNvbGxlY3Rpb24KKyAgICAgICAgLy8gc28gdGhhdCB3ZSBzY2FuIHRoZSBl
eHRlcm5hbCBvYmplY3QgZ3JhcGguCisgICAgICAgIFRlc3RPYmplY3QgKnJvb3QgPSBbVGVzdE9i
amVjdCB0ZXN0T2JqZWN0XTsKKyAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAg
ICBjb250ZXh0W0Aicm9vdCJdID0gcm9vdDsKKyAgICAgICAgfQorICAgICAgICBKU1N5bmNocm9u
b3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7
CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IE9iai1DIG9iamVjdCBvbmx5IHJlYWNoYWJsZSB2
aWEgdGhlIGV4dGVybmFsIG9iamVjdCBncmFwaAorICAgICAgICAvLyB0aHJvdWdoIHRoZSBvYmpl
Y3Qgd2UgYWxyZWFkeSBzY2FubmVkIGR1cmluZyB0aGUgRWRlbkNvbGxlY3Rpb24uCisgICAgICAg
IFRlc3RPYmplY3QgKmNoaWxkID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIFtj
b250ZXh0LnZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6Y2hpbGQgd2l0aE93bmVy
OnJvb3RdOworCisgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBtYW5hZ2VkIEpTVmFsdWUgdGhhdCB3
aWxsIG9ubHkgYmUga2VwdCBhbGl2ZSBpZiB3ZSBwcm9wZXJseSByZXNjYW4KKyAgICAgICAgLy8g
dGhlIGV4dGVybmFsIG9iamVjdCBncmFwaC4KKyAgICAgICAgSlNNYW5hZ2VkVmFsdWUgKm1hbmFn
ZWRKU09iamVjdCA9IG5pbDsKKyAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAg
ICBKU1ZhbHVlICpqc09iamVjdCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAImhlbGxvIiBp
bkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgICAgICBtYW5hZ2VkSlNPYmplY3QgPSBbSlNNYW5h
Z2VkVmFsdWUgbWFuYWdlZFZhbHVlV2l0aFZhbHVlOmpzT2JqZWN0XTsKKyAgICAgICAgICAgIFtj
b250ZXh0LnZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6bWFuYWdlZEpTT2JqZWN0
IHdpdGhPd25lcjpjaGlsZF07CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3JjZSBhbm90aGVy
IEVkZW5Db2xsZWN0aW9uLiBJdCBzaG91bGQgcmVzY2FuIHRoZSBuZXcgcGFydCBvZiB0aGUgZXh0
ZXJuYWwgb2JqZWN0IGdyYXBoLgorICAgICAgICBKU1N5bmNocm9ub3VzRWRlbkNvbGxlY3RGb3JE
ZWJ1Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CisgICAgICAgIAorICAgICAg
ICAvLyBDaGVjayB0aGF0IHRoZSBtYW5hZ2VkIEpTVmFsdWUgaXMgc3RpbGwgYWxpdmUuCisgICAg
ICAgIGNoZWNrUmVzdWx0KEAiRWRlbkNvbGxlY3Rpb24gZG9lc24ndCByZWNsYWltIG5ldyBtYW5h
Z2VkIHZhbHVlcyIsIFttYW5hZ2VkSlNPYmplY3QgdmFsdWVdICE9IG5pbCk7CisgICAgfQorCiAg
ICAgY3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QoKTsKICAgICBydW5EYXRlVGVzdHMo
KTsKICAgICBydW5KU0V4cG9ydFRlc3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkocmV2aXNpb24gMTY3MzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJKU0xv
Y2suaCIKICNpbmNsdWRlICJKU09OT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlJlY3Vyc2l2
ZUFsbG9jYXRpb25TY29wZS5oIgogI2luY2x1ZGUgIlRyYWNpbmcuaCIKICNpbmNsdWRlICJVbmxp
bmtlZENvZGVCbG9jay5oIgpAQCAtNTEyLDYgKzUxMyw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3Rz
KGRvdWJsZSBnY1N0YXJ0VGltZSkKICAgICB7CiAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIg
ZW5hYmxlcihtX3Nsb3RWaXNpdG9yKTsKIAorICAgICAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVk
U2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9yKTsKICAgICAgICAgdmlzaXRTbWFsbFN0cmluZ3MoKTsK
ICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAg
ICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgJKHJldmlzaW9uIDE2NzMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw4IEBAIHB1YmxpYzoKICAgICBNYXJr
ZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29iamVjdFNwYWNlOyB9CiAgICAgTWFj
aGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsg
fQogCisgICAgY29uc3QgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9zbG90VmlzaXRvcjsgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxi
YWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0
aXZpdHlDYWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHNldEZ1bGxBY3Rpdml0eUNhbGxiYWNrKFBhc3NSZWZQdHI8RnVsbEdDQWN0aXZp
dHlDYWxsYmFjaz4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCShyZXZpc2lvbiAxNjczMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw4ICs3OCw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHVuY29uZGl0aW9uYWxseUFwcGVuZChKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIGFkZE9w
YXF1ZVJvb3Qodm9pZCopOwotICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKTsKLSAg
ICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKik7CisgICAgYm9vbCBj
b250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OworICAgIFRyaVN0YXRlIGNvbnRhaW5zT3Bh
cXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKICAgICBpbnQgb3BhcXVlUm9vdENvdW50KCk7
CiAKICAgICBHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERhdGEoKSBjb25zdCB7IHJldHVybiBt
X3NoYXJlZDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE2NzMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTcz
LDcgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3QodgogI2VuZGlmCiB9
CiAKLWlubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9v
dCkKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9v
dCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7CiAjaWYgRU5BQkxF
KFBBUkFMTEVMX0dDKQpAQCAtMTg0LDcgKzE4NCw3IEBAIGlubGluZSBib29sIFNsb3RWaXNpdG9y
Ojpjb250YWluc09wYXF1ZVIKICNlbmRpZgogfQogCi1pbmxpbmUgVHJpU3RhdGUgU2xvdFZpc2l0
b3I6OmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqIHJvb3QpCitpbmxpbmUgVHJpU3Rh
dGUgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqIHJvb3QpIGNv
bnN0CiB7CiAgICAgaWYgKG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCkpCiAgICAgICAgIHJl
dHVybiBUcnVlVHJpU3RhdGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229385</attachid>
            <date>2014-04-15 11:37:35 -0700</date>
            <delta_ts>2014-04-15 14:05:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131634-20140415113713.patch</filename>
            <type>text/plain</type>
            <size>13771</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3MzE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBA
CisyMDE0LTA0LTE1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgT2JqZWN0aXZlLUMgQVBJIGV4dGVybmFsIG9iamVjdCBncmFwaHMgZG9uJ3QgaGFu
ZGxlIGdlbmVyYXRpb25hbCBjb2xsZWN0aW9uIHByb3Blcmx5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE2MzQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiB0aGUgc2V0IG9mIE9iamVjdGl2ZS1DIG9i
amVjdHMgdHJhbnNpdGl2ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGFuIG9iamVjdCBjaGFuZ2VzLCB3
ZSAKKyAgICAgICAgbmVlZCB0byB1cGRhdGUgdGhlIHNldCBvZiBvcGFxdWUgcm9vdHMgYWNjb3Jk
aW5nbHkuIElmIHdlIGRvbid0LCB0aGUgbmV4dCBFZGVuQ29sbGVjdGlvbiAKKyAgICAgICAgd29u
J3QgcmVzY2FuIHRoZSBleHRlcm5hbCBvYmplY3QgZ3JhcGgsIHdoaWNoIHdvdWxkIGxlYWQgdXMg
dG8gY29uc2lkZXIgYSBuZXdseSBhbGxvY2F0ZWQgCisgICAgICAgIEpTTWFuYWdlZFZhbHVlIHRv
IGJlIGRlYWQuCisKKyAgICAgICAgKiBBUEkvSlNCYXNlLmNwcDoKKyAgICAgICAgKEpTU3luY2hy
b25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1h
Y2hpbmUubW06CisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgaW5pdFdpdGhDb250ZXh0R3Jv
dXBSZWY6XSk6CisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgZGVhbGxvY10pOgorICAgICAg
ICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGlzT2xkRXh0ZXJuYWxPYmplY3Q6XSk6CisgICAgICAgICgt
W0pTVmlydHVhbE1hY2hpbmUgYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0Ol0pOgorICAgICAg
ICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6d2l0aE93bmVyOl0pOgor
ICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIHJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6d2l0aE93
bmVyOl0pOgorICAgICAgICAoLVtKU1ZpcnR1YWxNYWNoaW5lIGV4dGVybmFsUmVtZW1iZXJlZFNl
dF0pOgorICAgICAgICAoc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgpOgorICAgICAgICAoc2NhbkV4
dGVybmFsUmVtZW1iZXJlZFNldCk6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAqIGhlYXAv
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgICogaGVh
cC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6OnNsb3RWaXNpdG9yKToKKyAgICAgICAgKiBo
ZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCk6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSk6CisKIDIwMTQt
MDQtMTUgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNjcxOTkgYW5kIHIxNjcyNTEuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuY3BwCShyZXZpc2lvbiAxNjczMDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsx
NDIsNyBAQCB2b2lkIEpTUmVwb3J0RXh0cmFNZW1vcnlDb3N0KEpTQ29udGV4dFJlCiB9CiAKIGV4
dGVybiAiQyIgSlNfRVhQT1JUIHZvaWQgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0Rm9yRGVi
dWdnaW5nKEpTQ29udGV4dFJlZik7CitleHRlcm4gIkMiIEpTX0VYUE9SVCB2b2lkIEpTU3luY2hy
b25vdXNFZGVuQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYpOwogCiB2b2lkIEpTU3lu
Y2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRlYnVnZ2luZyhKU0NvbnRleHRSZWYgY3R4KQogewpA
QCAtMTUzLDYgKzE1NCwxNiBAQCB2b2lkIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVjdEZvckRl
YnVnCiAgICAgZXhlYy0+dm0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAKK3ZvaWQg
SlNTeW5jaHJvbm91c0VkZW5Db2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZiBjdHgpCit7
CisgICAgaWYgKCFjdHgpCisgICAgICAgIHJldHVybjsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHRvSlMoY3R4KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIGV4ZWMtPnZt
KCkuaGVhcC5jb2xsZWN0KEVkZW5Db2xsZWN0aW9uKTsKK30KKwogdm9pZCBKU0Rpc2FibGVHQ1Rp
bWVyKHZvaWQpCiB7CiAgICAgR0NBY3Rpdml0eUNhbGxiYWNrOjpzX3Nob3VsZENyZWF0ZUdDVGlt
ZXIgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmUubW0JKHJldmlzaW9uIDE2NzMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCAr
IChKU1ZpcnR1YWxNYWNoaW5lICopd3JhcHBlckZvckpTQ29udGV4CiAgICAgSlNDb250ZXh0R3Jv
dXBSZWYgbV9ncm91cDsKICAgICBOU01hcFRhYmxlICptX2NvbnRleHRDYWNoZTsKICAgICBOU01h
cFRhYmxlICptX2V4dGVybmFsT2JqZWN0R3JhcGg7CisgICAgTlNNYXBUYWJsZSAqbV9leHRlcm5h
bFJlbWVtYmVyZWRTZXQ7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0CkBAIC0xMTMsNiArMTE0
LDkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udGV4dEdyb3VwUmVmOgogICAgIE5TUG9p
bnRlckZ1bmN0aW9uc09wdGlvbnMgd2Vha0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1dl
YWtNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKICAgICBOU1Bv
aW50ZXJGdW5jdGlvbnNPcHRpb25zIHN0cm9uZ0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9u
c1N0cm9uZ01lbW9yeSB8IE5TUG9pbnRlckZ1bmN0aW9uc09iamVjdFBlcnNvbmFsaXR5OwogICAg
IG1fZXh0ZXJuYWxPYmplY3RHcmFwaCA9IFtbTlNNYXBUYWJsZSBhbGxvY10gaW5pdFdpdGhLZXlP
cHRpb25zOndlYWtJRE9wdGlvbnMgdmFsdWVPcHRpb25zOnN0cm9uZ0lET3B0aW9ucyBjYXBhY2l0
eTowXTsKKworICAgIE5TUG9pbnRlckZ1bmN0aW9uc09wdGlvbnMgaW50ZWdlck9wdGlvbnMgPSBO
U1BvaW50ZXJGdW5jdGlvbnNPcGFxdWVNZW1vcnkgfCBOU1BvaW50ZXJGdW5jdGlvbnNJbnRlZ2Vy
UGVyc29uYWxpdHk7CisgICAgbV9leHRlcm5hbFJlbWVtYmVyZWRTZXQgPSBbW05TTWFwVGFibGUg
YWxsb2NdIGluaXRXaXRoS2V5T3B0aW9uczp3ZWFrSURPcHRpb25zIHZhbHVlT3B0aW9uczppbnRl
Z2VyT3B0aW9ucyBjYXBhY2l0eTowXTsKICAgIAogICAgIFtKU1ZNV3JhcHBlckNhY2hlIGFkZFdy
YXBwZXI6c2VsZiBmb3JKU0NvbnRleHRHcm91cFJlZjpncm91cF07CiAgCkBAIC0xMjQsNiArMTI4
LDcgQEAgLSAodm9pZClkZWFsbG9jCiAgICAgSlNDb250ZXh0R3JvdXBSZWxlYXNlKG1fZ3JvdXAp
OwogICAgIFttX2NvbnRleHRDYWNoZSByZWxlYXNlXTsKICAgICBbbV9leHRlcm5hbE9iamVjdEdy
YXBoIHJlbGVhc2VdOworICAgIFttX2V4dGVybmFsUmVtZW1iZXJlZFNldCByZWxlYXNlXTsKICAg
ICBbc3VwZXIgZGVhbGxvY107CiB9CiAKQEAgLTE0NSw2ICsxNTAsMTggQEAgc3RhdGljIGlkIGdl
dEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogICAgIHJldHVybiBvYmplY3Q7CiB9CiAKKy0g
KGJvb2wpaXNPbGRFeHRlcm5hbE9iamVjdDooaWQpb2JqZWN0Cit7CisgICAgSlNDOjpWTSogdm0g
PSB0b0pTKG1fZ3JvdXApOworICAgIHJldHVybiB2bS0+aGVhcC5zbG90VmlzaXRvcigpLmNvbnRh
aW5zT3BhcXVlUm9vdChvYmplY3QpOworfQorCistICh2b2lkKWFkZEV4dGVybmFsUmVtZW1iZXJl
ZE9iamVjdDooaWQpb2JqZWN0Cit7CisgICAgQVNTRVJUKFtzZWxmIGlzT2xkRXh0ZXJuYWxPYmpl
Y3Q6b2JqZWN0XSk7CisgICAgW21fZXh0ZXJuYWxSZW1lbWJlcmVkU2V0IHNldE9iamVjdDpbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6dHJ1ZV0gZm9yS2V5Om9iamVjdF07Cit9CisKIC0gKHZvaWQp
YWRkTWFuYWdlZFJlZmVyZW5jZTooaWQpb2JqZWN0IHdpdGhPd25lcjooaWQpb3duZXIKIHsgICAg
CiAgICAgaWYgKFtvYmplY3QgaXNLaW5kT2ZDbGFzczpbSlNNYW5hZ2VkVmFsdWUgY2xhc3NdXSkK
QEAgLTE1Nyw3ICsxNzQsOSBAQCAtICh2b2lkKWFkZE1hbmFnZWRSZWZlcmVuY2U6KGlkKW9iamVj
dCB3CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIo
dG9KUyhtX2dyb3VwKSk7Ci0gICAgCisgICAgaWYgKFtzZWxmIGlzT2xkRXh0ZXJuYWxPYmplY3Q6
b3duZXJdICYmICFbc2VsZiBpc09sZEV4dGVybmFsT2JqZWN0Om9iamVjdF0pCisgICAgICAgIFtz
ZWxmIGFkZEV4dGVybmFsUmVtZW1iZXJlZE9iamVjdDpvd25lcl07CisgCiAgICAgTlNNYXBUYWJs
ZSAqb3duZWRPYmplY3RzID0gW21fZXh0ZXJuYWxPYmplY3RHcmFwaCBvYmplY3RGb3JLZXk6b3du
ZXJdOwogICAgIGlmICghb3duZWRPYmplY3RzKSB7CiAgICAgICAgIE5TUG9pbnRlckZ1bmN0aW9u
c09wdGlvbnMgd2Vha0lET3B0aW9ucyA9IE5TUG9pbnRlckZ1bmN0aW9uc1dlYWtNZW1vcnkgfCBO
U1BvaW50ZXJGdW5jdGlvbnNPYmplY3RQZXJzb25hbGl0eTsKQEAgLTE5OCw4ICsyMTcsMTAgQEAg
LSAodm9pZClyZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOihpZClvYmplYwogICAgIGlmIChjb3VudCA9
PSAxKQogICAgICAgICBOU01hcFJlbW92ZShvd25lZE9iamVjdHMsIG9iamVjdCk7CiAKLSAgICBp
ZiAoIVtvd25lZE9iamVjdHMgY291bnRdKQorICAgIGlmICghW293bmVkT2JqZWN0cyBjb3VudF0p
IHsKICAgICAgICAgW21fZXh0ZXJuYWxPYmplY3RHcmFwaCByZW1vdmVPYmplY3RGb3JLZXk6b3du
ZXJdOworICAgICAgICBbbV9leHRlcm5hbFJlbWVtYmVyZWRTZXQgcmVtb3ZlT2JqZWN0Rm9yS2V5
Om93bmVyXTsKKyAgICB9CiB9CiAKIEBlbmQKQEAgLTIzNCw2ICsyNTUsMTEgQEAgLSAoTlNNYXBU
YWJsZSAqKWV4dGVybmFsT2JqZWN0R3JhcGgKICAgICByZXR1cm4gbV9leHRlcm5hbE9iamVjdEdy
YXBoOwogfQogCistIChOU01hcFRhYmxlICopZXh0ZXJuYWxSZW1lbWJlcmVkU2V0Cit7CisgICAg
cmV0dXJuIG1fZXh0ZXJuYWxSZW1lbWJlcmVkU2V0OworfQorCiBAZW5kCiAKIHZvaWQgc2NhbkV4
dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYgdm0sIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Is
IHZvaWQqIHJvb3QpCkBAIC0yNTMsMTMgKzI3OSwyNyBAQCB2b2lkIHNjYW5FeHRlcm5hbE9iamVj
dEdyYXBoKEpTQzo6Vk0mIHZtCiAgICAgICAgICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QobmV4
dFJvb3QpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOU01hcFRhYmxlICpvd25lZE9iamVj
dHMgPSBbZXh0ZXJuYWxPYmplY3RHcmFwaCBvYmplY3RGb3JLZXk6c3RhdGljX2Nhc3Q8aWQ+KG5l
eHRSb290KV07Ci0gICAgICAgICAgICBpZCBvd25lZE9iamVjdDsKLSAgICAgICAgICAgIE5TRW51
bWVyYXRvciAqZW51bWVyYXRvciA9IFtvd25lZE9iamVjdHMga2V5RW51bWVyYXRvcl07Ci0gICAg
ICAgICAgICB3aGlsZSAoKG93bmVkT2JqZWN0ID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pKQor
ICAgICAgICAgICAgZm9yIChpZCBvd25lZE9iamVjdCBpbiBvd25lZE9iamVjdHMpCiAgICAgICAg
ICAgICAgICAgc3RhY2suYXBwZW5kKHN0YXRpY19jYXN0PHZvaWQqPihvd25lZE9iamVjdCkpOwog
ICAgICAgICB9CiAgICAgfQogfQogCi0jZW5kaWYKK3ZvaWQgc2NhbkV4dGVybmFsUmVtZW1iZXJl
ZFNldChKU0M6OlZNJiB2bSwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdmlydHVhbE1hY2hpbmUg
PSBbSlNWTVdyYXBwZXJDYWNoZSB3cmFwcGVyRm9ySlNDb250ZXh0R3JvdXBSZWY6dG9SZWYoJnZt
KV07CisgICAgICAgIGlmICghdmlydHVhbE1hY2hpbmUpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIE5TTWFwVGFibGUgKmV4dGVybmFsT2JqZWN0R3JhcGggPSBbdmlydHVhbE1hY2hpbmUg
ZXh0ZXJuYWxPYmplY3RHcmFwaF07CisgICAgICAgIE5TTWFwVGFibGUgKmV4dGVybmFsUmVtZW1i
ZXJlZFNldCA9IFt2aXJ0dWFsTWFjaGluZSBleHRlcm5hbFJlbWVtYmVyZWRTZXRdOworICAgICAg
ICBmb3IgKGlkIGtleSBpbiBleHRlcm5hbFJlbWVtYmVyZWRTZXQpIHsKKyAgICAgICAgICAgIE5T
TWFwVGFibGUgKm93bmVkT2JqZWN0cyA9IFtleHRlcm5hbE9iamVjdEdyYXBoIG9iamVjdEZvcktl
eTprZXldOworICAgICAgICAgICAgZm9yIChpZCBvd25lZE9iamVjdCBpbiBvd25lZE9iamVjdHMp
CisgICAgICAgICAgICAgICAgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgodm0sIHZpc2l0b3IsIG93
bmVkT2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICBbZXh0ZXJuYWxSZW1lbWJlcmVkU2V0IHJl
bW92ZUFsbE9iamVjdHNdOworICAgIH0KK30KIAorI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFC
TEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZUludGVybmFsLmgJKHJldmlzaW9uIDE2NzMwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDEwICsyNiwxMCBAQAogI2lmbmRlZiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWxfaAogI2RlZmlu
ZSBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWxfaAogCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5oPgotCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiBjbGFz
cyBWTTsKIGNsYXNzIFNsb3RWaXNpdG9yOwpAQCAtNTEsNyArNTEsOCBAQCBKU0NvbnRleHRHcm91
cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjCiAjZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykK
IAogdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRv
ciYsIHZvaWQqIHJvb3QpOwordm9pZCBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KEpTQzo6Vk0m
LCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKLSNlbmRpZgorI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9F
TkFCTEVECiAKICNlbmRpZiAvLyBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWxfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkocmV2aXNpb24gMTY3MzA2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJKU0V4cG9ydFRlc3RzLmgiCiAKIGV4
dGVybiAiQyIgdm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlND
b250ZXh0UmVmKTsKK2V4dGVybiAiQyIgdm9pZCBKU1N5bmNocm9ub3VzRWRlbkNvbGxlY3RGb3JE
ZWJ1Z2dpbmcoSlNDb250ZXh0UmVmKTsKIAogZXh0ZXJuICJDIiBib29sIF9CbG9ja19oYXNfc2ln
bmF0dXJlKGlkKTsKIGV4dGVybiAiQyIgY29uc3QgY2hhciAqIF9CbG9ja19zaWduYXR1cmUoaWQp
OwpAQCAtMTMyNiw2ICsxMzI3LDM4IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgICAg
ICBbW0pTVmFsdWUgdmFsdWVXaXRoSW50MzI6NDIgaW5Db250ZXh0OmNvbnRleHRdIHRvQXJyYXld
OwogICAgIH0KIAorICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisKKyAgICAgICAgLy8gQ3JlYXRlIHRo
ZSByb290LCBtYWtlIGl0IHJlYWNoYWJsZSBmcm9tIEpTLCBhbmQgZm9yY2UgYW4gRWRlbkNvbGxl
Y3Rpb24KKyAgICAgICAgLy8gc28gdGhhdCB3ZSBzY2FuIHRoZSBleHRlcm5hbCBvYmplY3QgZ3Jh
cGguCisgICAgICAgIFRlc3RPYmplY3QgKnJvb3QgPSBbVGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsK
KyAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAgICBjb250ZXh0W0Aicm9vdCJd
ID0gcm9vdDsKKyAgICAgICAgfQorICAgICAgICBKU1N5bmNocm9ub3VzRWRlbkNvbGxlY3RGb3JE
ZWJ1Z2dpbmcoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CisKKyAgICAgICAgLy8gQ3Jl
YXRlIGEgbmV3IE9iai1DIG9iamVjdCBvbmx5IHJlYWNoYWJsZSB2aWEgdGhlIGV4dGVybmFsIG9i
amVjdCBncmFwaAorICAgICAgICAvLyB0aHJvdWdoIHRoZSBvYmplY3Qgd2UgYWxyZWFkeSBzY2Fu
bmVkIGR1cmluZyB0aGUgRWRlbkNvbGxlY3Rpb24uCisgICAgICAgIFRlc3RPYmplY3QgKmNoaWxk
ID0gW1Rlc3RPYmplY3QgdGVzdE9iamVjdF07CisgICAgICAgIFtjb250ZXh0LnZpcnR1YWxNYWNo
aW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6Y2hpbGQgd2l0aE93bmVyOnJvb3RdOworCisgICAgICAg
IC8vIENyZWF0ZSBhIG5ldyBtYW5hZ2VkIEpTVmFsdWUgdGhhdCB3aWxsIG9ubHkgYmUga2VwdCBh
bGl2ZSBpZiB3ZSBwcm9wZXJseSByZXNjYW4KKyAgICAgICAgLy8gdGhlIGV4dGVybmFsIG9iamVj
dCBncmFwaC4KKyAgICAgICAgSlNNYW5hZ2VkVmFsdWUgKm1hbmFnZWRKU09iamVjdCA9IG5pbDsK
KyAgICAgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAgICBKU1ZhbHVlICpqc09iamVj
dCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE9iamVjdDpAImhlbGxvIiBpbkNvbnRleHQ6Y29udGV4dF07
CisgICAgICAgICAgICBtYW5hZ2VkSlNPYmplY3QgPSBbSlNNYW5hZ2VkVmFsdWUgbWFuYWdlZFZh
bHVlV2l0aFZhbHVlOmpzT2JqZWN0XTsKKyAgICAgICAgICAgIFtjb250ZXh0LnZpcnR1YWxNYWNo
aW5lIGFkZE1hbmFnZWRSZWZlcmVuY2U6bWFuYWdlZEpTT2JqZWN0IHdpdGhPd25lcjpjaGlsZF07
CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3JjZSBhbm90aGVyIEVkZW5Db2xsZWN0aW9uLiBJ
dCBzaG91bGQgcmVzY2FuIHRoZSBuZXcgcGFydCBvZiB0aGUgZXh0ZXJuYWwgb2JqZWN0IGdyYXBo
LgorICAgICAgICBKU1N5bmNocm9ub3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQg
SlNHbG9iYWxDb250ZXh0UmVmXSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHRo
ZSBtYW5hZ2VkIEpTVmFsdWUgaXMgc3RpbGwgYWxpdmUuCisgICAgICAgIGNoZWNrUmVzdWx0KEAi
RWRlbkNvbGxlY3Rpb24gZG9lc24ndCByZWNsYWltIG5ldyBtYW5hZ2VkIHZhbHVlcyIsIFttYW5h
Z2VkSlNPYmplY3QgdmFsdWVdICE9IG5pbCk7CisgICAgfQorCiAgICAgY3VycmVudFRoaXNJbnNp
ZGVCbG9ja0dldHRlclRlc3QoKTsKICAgICBydW5EYXRlVGVzdHMoKTsKICAgICBydW5KU0V4cG9y
dFRlc3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24g
MTY3MzA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJK
U09OT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTVmlydHVh
bE1hY2hpbmVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5o
IgogI2luY2x1ZGUgIlRyYWNpbmcuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgpA
QCAtNTEyLDYgKzUxMyw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGlt
ZSkKICAgICB7CiAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcihtX3Nsb3RWaXNp
dG9yKTsKIAorICAgICAgICB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwogICAgICAgICB2
aXNpdFNtYWxsU3RyaW5ncygpOwogICAgICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNl
cnZhdGl2ZVJvb3RzKTsKICAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0cygpOwpAQCAtNTkx
LDYgKzU5MywxMyBAQCB2b2lkIEhlYXA6OmNsZWFyTGl2ZW5lc3NEYXRhKCkKICAgICBtX29iamVj
dFNwYWNlLmNsZWFyTWFya3MoKTsKIH0KIAordm9pZCBIZWFwOjp2aXNpdEV4dGVybmFsUmVtZW1i
ZXJlZFNldCgpCit7CisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICBzY2FuRXh0ZXJuYWxS
ZW1lbWJlcmVkU2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9yKTsKKyNlbmRpZgorfQorCiB2b2lkIEhl
YXA6OnZpc2l0U21hbGxTdHJpbmdzKCkKIHsKICAgICBHQ1BIQVNFKFZpc2l0U21hbGxTdHJpbmdz
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE2NzMwNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1
LDYgKzExNSw4IEBAIHB1YmxpYzoKICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJl
dHVybiBtX29iamVjdFNwYWNlOyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRz
KCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCisgICAgY29uc3QgU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQorCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZWRlbkFjdGl2aXR5
Q2FsbGJhY2soKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldEZ1bGxBY3Rpdml0eUNh
bGxiYWNrKFBhc3NSZWZQdHI8RnVsbEdDQWN0aXZpdHlDYWxsYmFjaz4pOwpAQCAtMjY3LDYgKzI2
OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZl
Um9vdHMmKTsKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVS
b290cyYpOwogICAgIHZvaWQgY2xlYXJMaXZlbmVzc0RhdGEoKTsKKyAgICB2b2lkIHZpc2l0RXh0
ZXJuYWxSZW1lbWJlcmVkU2V0KCk7CiAgICAgdm9pZCB2aXNpdFNtYWxsU3RyaW5ncygpOwogICAg
IHZvaWQgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZv
aWQgdmlzaXRDb21waWxlcldvcmtsaXN0cygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxNjczMDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw4ICs3OCw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHVuY29uZGl0aW9uYWxseUFwcGVuZChKU0NlbGwqKTsKICAgICAK
ICAgICB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOwotICAgIGJvb2wgY29udGFpbnNPcGFxdWVS
b290KHZvaWQqKTsKLSAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lk
Kik7CisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OworICAgIFRyaVN0
YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKICAgICBpbnQgb3Bh
cXVlUm9vdENvdW50KCk7CiAKICAgICBHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERhdGEoKSBj
b25zdCB7IHJldHVybiBtX3NoYXJlZDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDE2NzMwNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzMsNyArMTczLDcgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJv
b3QodgogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1
ZVJvb3Qodm9pZCogcm9vdCkKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1
ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9k
ZSk7CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQpAQCAtMTg0LDcgKzE4NCw3IEBAIGlubGluZSBi
b29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVIKICNlbmRpZgogfQogCi1pbmxpbmUgVHJp
U3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqIHJvb3Qp
CitpbmxpbmUgVHJpU3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRl
KHZvaWQqIHJvb3QpIGNvbnN0CiB7CiAgICAgaWYgKG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9v
dCkpCiAgICAgICAgIHJldHVybiBUcnVlVHJpU3RhdGU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>