<?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>130576</bug_id>
          
          <creation_ts>2014-03-21 03:44:36 -0700</creation_ts>
          <short_desc>Constants folded by DFG::ByteCodeParser should not be dead.</short_desc>
          <delta_ts>2014-03-22 18:31:10 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>eun-ji.jeong</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eun-ji.jeong</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>hojong.han</cc>
    
    <cc>sg5.lee</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>993007</commentid>
    <comment_count>0</comment_count>
    <who name="">eun-ji.jeong</who>
    <bug_when>2014-03-21 03:44:36 -0700</bug_when>
    <thetext>The testcase below should print &quot;specFailArg&quot;, but it prints &quot;0&quot; instead.

function test_true_open()
{
    function passThrough(arg) {
        var a = true;
        var b = arg * 0.1;
        if (a)
            return arg;
        else
            return 0;
    }
    for (var i = 0; i &lt; 1000; i++) {
        passThrough(i);
    }
    var specFailArg = &quot;specFailArg&quot;;
    print(passThrough(specFailArg));
}


Generated bytecode for function passThrough():
[   0] enter
[   1] mov               loc0, True(@k0)
[   4] mul               loc1, arg1, Double: 4591870180066957722, 0.100000(@k1)
[   9] jfalse            loc0, 7(-&gt;16)
[  12] ret               arg1
[  14] jmp               4(-&gt;18)
[  16] ret               Int32: 0(@k2)
[  18] ret               Undefined(@k3)


OSR exit occurs when passThrough() is called with the argument &quot;specFailArg&quot;, at dfg code generated by bc#4.
However the OSR exit thunk writes Undefined to loc0, 
so when executing baseline jit code generated by bc#9, it reads Undefined value and returns 0.


Generated DFG graph for function passThrough():
Block #0 (bc#0):  (OSR target)
  Predecessors:
  Dominated by: #0
  Dominates: #0
  vars before: arg1:(Top, TOP, TOP, TOP) arg0:(Top, TOP, TOP, TOP)
  var links: arg1:@1
   0:           &lt;!0:-&gt;  Phantom(MustGen|CanExit, bc#0)
   1:           &lt; 2:-&gt;  SetArgument(IsFlushed, arg1(B~&lt;Int32&gt;/FlushedJSValue), machine:arg1, W:SideState, bc#0)  predicting Int32
   2:           &lt;!0:-&gt;  Phantom(MustGen|CanExit, Other, bc#0)
   3:  skipped  &lt; 0:-&gt;  ZombieHint(loc0, W:SideState, bc#0)
   4:           &lt;!0:-&gt;  Phantom(MustGen|CanExit, bc#0)
   5:  skipped  &lt; 0:-&gt;  ZombieHint(loc1, W:SideState, bc#0)
   6:           &lt;!0:-&gt;  Phantom(MustGen|CanExit, bc#0)
   7:           &lt;!0:-&gt;  Phantom(MustGen|CanExit, Bool, bc#1)
   8:  skipped  &lt; 0:-&gt;  ZombieHint(loc0, W:SideState, bc#1)
   9:           &lt;!0:-&gt;  Phantom(MustGen|CanExit, bc#4)
  10:           &lt; 3:-1&gt; GetLocal(@1, JS|UseAsOther, Int32, arg1(B~&lt;Int32&gt;/FlushedJSValue), machine:arg1, R:Variables(7), bc#4)  predicting Int32
  11:           &lt;!0:-&gt;  Phantom(MustGen|CanExit, Nonintasdouble, bc#4)
  26:           &lt;!0:-&gt;  Phantom(Check:Number:@10&lt;Int32&gt;, MustGen|CanExit, Int52asdouble, bc#4)
  12:           &lt;!0:-&gt;  Phantom(MustGen|CanExit, Int52asdoubleNonintasdouble, bc#4)
  27:           &lt;!0:-&gt;  Phantom(@10&lt;Int32&gt;, MustGen, bc#4)
  13:  skipped  &lt; 0:-&gt;  ZombieHint(loc1, W:SideState, bc#4)
  14:           &lt;!0:-&gt;  Phantom(MustGen|CanExit, bc#9)
  16:           &lt;!0:-&gt;  Flush(@1, MustGen|IsFlushed, arg1(B~&lt;Int32&gt;/FlushedJSValue), machine:arg1, W:SideState, bc#12)  predicting Int32
  17:           &lt;!0:-&gt;  Phantom(MustGen|CanExit, Int32, bc#12)
  18:           &lt;!0:-&gt;  Return(@10&lt;Int32&gt;, MustGen, W:SideState, bc#12)
  vars after:
  var links: arg1:@10&lt;Int32&gt;


The nodes generated by bc#1 becomes dead,
as a result of constant folding in DFG::ByteCodeParser().

I think DFG::ByteCodeParser should tell the backend optimization phase that the folded constant should not be dead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993012</commentid>
    <comment_count>1</comment_count>
      <attachid>227411</attachid>
    <who name="">eun-ji.jeong</who>
    <bug_when>2014-03-21 04:19:25 -0700</bug_when>
    <thetext>Created attachment 227411
Patch

new patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993109</commentid>
    <comment_count>2</comment_count>
      <attachid>227411</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-03-21 08:45:47 -0700</bug_when>
    <thetext>Comment on attachment 227411
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993132</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-21 09:20:15 -0700</bug_when>
    <thetext>I don&apos;t think this is the right approach. We already have machinery for inserting phantoms in places like this and for avoiding the kind of constant folding that would lead to errors. Let&apos;s not add complexity here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993135</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-21 09:23:44 -0700</bug_when>
    <thetext>The correct solution is almost certainly to just disable constant folding in the DFG. This should be perf neutral since we have all of the right folding later in the pipe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993140</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-21 09:31:14 -0700</bug_when>
    <thetext>Thought about it more. I think that your approach can work, but:

- we already have a ton of complexity in the byte code parser&apos;s folder and we have bugs because of it. Your patch adds complexity. 

- it&apos;s not at all clear that this folder is buying us any performance. Hence it may just be a complex piece of code that is only getting more complex that literally buys nothing but pain. 

- your test is incomplete. It doesn&apos;t cover all of the cases where you added phantoms. At a minimum you should give this 100% test coverage. That&apos;s a hard prerequisite for landing this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993237</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-03-21 11:46:15 -0700</bug_when>
    <thetext>&gt; Thought about it more. I think that your approach can work, but:
&gt; 
&gt; - we already have a ton of complexity in the byte code parser&apos;s folder and we have bugs because of it. Your patch adds complexity. 
&gt; 
&gt; - it&apos;s not at all clear that this folder is buying us any performance. Hence it may just be a complex piece of code that is only getting more complex that literally buys nothing but pain. 

Can you be more concrete in this feedback?

Are you suggesting an alternative patch that removes all the constant folding from the bytecode parser, or something else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993239</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-21 11:52:47 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Thought about it more. I think that your approach can work, but:
&gt; &gt; 
&gt; &gt; - we already have a ton of complexity in the byte code parser&apos;s folder and we have bugs because of it. Your patch adds complexity. 
&gt; &gt; 
&gt; &gt; - it&apos;s not at all clear that this folder is buying us any performance. Hence it may just be a complex piece of code that is only getting more complex that literally buys nothing but pain. 
&gt; 
&gt; Can you be more concrete in this feedback?

Before we get into the value of the bytecode parser&apos;s constant folder, we need to appreciate that this patch is wrong for at least two reasons:

- It doesn&apos;t actually fix the bug.  It adds Phantom arguments to the Phantoms we already had as placeholders, but fails to add Phantoms with those same arguments in case we turn the branches into jumps.  It kind of fixes less than half of the bug.  The real solution would have hoisted the addToGraph(Phantom, ...) out of the fallthrough-versus-jump branch.

- It doesn&apos;t actually test the fix.  The patch adds Phantoms in loads of places in the bytecode parser but only adds a test for one very specific sub-case.

&gt; 
&gt; Are you suggesting an alternative patch that removes all the constant folding from the bytecode parser, or something else?

There are many ways of solving this problem - either removing the constant folder or something else.  We should investigate which is most valuable.  The bytecode parser&apos;s constant folder was already a hackpile, and if we start going in the direction of a proper fix, we&apos;ll probably turn it into an even worse hackpile.  We need to establish that it&apos;s worth it for some reason (compile times?) before doing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993240</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-21 11:56:04 -0700</bug_when>
    <thetext>I have a local patch to remove the bytecode parser&apos;s constant folder and I&apos;m testing it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993254</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-21 12:08:58 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I have a local patch to remove the bytecode parser&apos;s constant folder and I&apos;m testing it now.

Yup, as I expected, there is no perf penalty to getting rid of the bytecode parser&apos;s folder.  The real folder can do everything that the parser can do and our optimization fixpoint takes care of the rest.  The fact that the JIT is concurrent further removes any benefit from whatever small compile-time win this could have ever been.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993281</commentid>
    <comment_count>10</comment_count>
      <attachid>227476</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-21 13:06:36 -0700</bug_when>
    <thetext>Created attachment 227476
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993285</commentid>
    <comment_count>11</comment_count>
      <attachid>227476</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-03-21 13:15:37 -0700</bug_when>
    <thetext>Comment on attachment 227476
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993291</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-21 13:24:44 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/166095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993606</commentid>
    <comment_count>13</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-03-22 18:23:20 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Landed in http://trac.webkit.org/changeset/166095

Is &quot;constand&quot; a typo?  Should be &quot;constant&quot;?

&gt; Source/JavaScriptCore/tests/stress/constand-folding-osr-exit.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993607</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-22 18:23:50 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Landed in http://trac.webkit.org/changeset/166095
&gt; 
&gt; Is &quot;constand&quot; a typo?  Should be &quot;constant&quot;?
&gt; 
&gt; &gt; Source/JavaScriptCore/tests/stress/constand-folding-osr-exit.js

Oh, wow, yeah that&apos;s a typo.  I will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993610</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-22 18:31:10 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; Landed in http://trac.webkit.org/changeset/166095
&gt; &gt; 
&gt; &gt; Is &quot;constand&quot; a typo?  Should be &quot;constant&quot;?
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/tests/stress/constand-folding-osr-exit.js
&gt; 
&gt; Oh, wow, yeah that&apos;s a typo.  I will fix.

Fixed in http://trac.webkit.org/changeset/166133</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227411</attachid>
            <date>2014-03-21 04:19:25 -0700</date>
            <delta_ts>2014-03-21 13:06:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130576-20140321201907.patch</filename>
            <type>text/plain</type>
            <size>9196</size>
            <attacher>eun-ji.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2MDU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MTJkNWM4ZThjMWEwYzlmZTg1N2QwMmNiMGRmMmNjNTI5NzBjYWYxLi44Mjg5OWNlOGE4MTg3OGEz
NzYxZDc5MmNlNjBkYjhmZDQ2MmEyZGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAxNC0wMy0yMSAgRXVuamkgSmVvbmcgIDxldW4tamkuamVvbmdAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgQ29uc3RhbnRzIGZvbGRlZCBieSBERkc6OkJ5dGVDb2RlUGFyc2Vy
IHNob3VsZCBub3QgYmUgZGVhZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzMDU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIERGRzo6Qnl0ZUNvZGVQYXJzZXIgZG9lcyBzb21lIGNvbnN0YW50IGZvbGRp
bmcgd2hlbiBwYXJzaW5nIGNvbmRpdGlvbmFsCisgICAgICAgIGp1bXAvYnJhbmNoIGJ5dGVjb2Rl
cy4gSG93ZXZlciwgaW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlIGZvbGRlZCAKKyAgICAg
ICAgY29uc3RhbnQganVzdCBnZXQga2lsbGVkIGJ5IHRoZSBERkcgRENFIHBoYXNlLiBTbyBpZiBh
biBvc3IgZXhpdCBmcm9tIGRmZworICAgICAgICBvY2N1cnMgYWZ0ZXIgc2tpcHBpbmcgdGhlIGRl
YWQgY29uc3RhbnRzLCBPU1IgZXhpdCB0aHVuayBqdXN0IHdyaXRlcyB0aGUKKyAgICAgICAgVW5k
ZWZpbmVkIHZhbHVlIHRvIHRoZSByZWdpc3RlciBmb3IgY29uc3RhbnQuICBJdCByZXN1bHRzIGlu
IGVycm9yIHdoZW4KKyAgICAgICAgYmFzZWxpbmUgaml0IHJlYWRzIHRoYXQgY29uc3RhbnQgdmFs
dWUgYWdhaW4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHRoZSBwcm9wZXIgY2hpbGRzIHRv
IHRoZSBwaGFudG9tIG5vZGUsIHNvIHRoYXQgdGhlIAorICAgICAgICBTZXRMb2NhbCBmb3IgdGhl
IGZvbGRlZCBjb25zdGFudCBkb2Vzbid0IGdldCBraWxsZWQgYnkgREZHIERDRSBwaGFzZS4KKwor
ICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorCiAyMDE0LTAzLTIwICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRlRMIHNob3VsZCBjb3JyZWN0bHkgY29tcGls
ZSBHZXRCeVZhbCBvbiBVaW50MzJBcnJheSB0aGF0IGNsYWltcyB0byByZXR1cm4gbm9uLWludDMy
IHZhbHVlcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAppbmRleCA3ZDcyM2U4NTA1ZjZlYjA1NGE3YzNiYTFjZTc0N2RiODJjMzFmYzkzLi44YmE0
NTA2NGEyODAxOTI0NThkYWI4ZTZmNjE1ZTEyMTdhM2VjMDgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMjc2MCw3ICsyNzYwLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09IEZhbHNlVHJpU3RhdGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlzIGJ5dGVjb2RlIG9wZXJh
dGlvbiBidXQgb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJv
dWdoLgotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20pOworICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNvbmRpdGlvbik7CiAgICAgICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2p0cnVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CkBAIC0yNzc5LDcgKzI3NzksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0g
VHJ1ZVRyaVN0YXRlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRl
ciBmb3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQogICAgICAgICAgICAg
ICAgICAgICAvLyBqdXN0IGZhbGwgdGhyb3VnaC4KLSAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBj
b25kaXRpb24pOwogICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qZmFsc2UpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI4MTksNyArMjgxOSw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEgcGxh
Y2Vob2xkZXIgZm9yIHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgotICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3Bfamxlc3MpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMjg0NSw3ICsyODQ1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRlciBmb3IgdGhpcyBieXRlY29kZSBv
cGVyYXRpb24gYnV0IG90aGVyd2lzZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBm
YWxsIHRocm91Z2guCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20p
OworICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBvcDEsIG9wMik7
CiAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qbGVzc2VxKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTI4NzEsNyArMjg3MSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEg
cGxhY2Vob2xkZXIgZm9yIHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgotICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfamdyZWF0ZXIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMjg5Nyw3ICsyODk3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRlciBmb3IgdGhpcyBieXRl
Y29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
anVzdCBmYWxsIHRocm91Z2guCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBo
YW50b20pOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBvcDEs
IG9wMik7CiAgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qZ3JlYXRlcmVx
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTI5MjAsNyAr
MjkyMCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgICAgICAgICAgICAgIGlmIChhIDwgYikgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlzIGJ5dGVjb2RlIG9wZXJhdGlvbiBidXQg
b3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGZhbGwgdGhyb3VnaC4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG9wMSwgb3AyKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2pubGVzcyk7CiAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5m
byhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CkBAIC0yOTQ2LDcgKzI5NDYsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAg
ICAgICAgICAgICAgICBpZiAoYSA8PSBiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBF
bWl0IGEgcGxhY2Vob2xkZXIgZm9yIHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndp
c2UKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgTkVYVF9PUENPREUob3Bfam5sZXNzZXEpOwogICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9j
dXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpOwpAQCAtMjk3Miw3ICsyOTcyLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGEgPiBiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEg
cGxhY2Vob2xkZXIgZm9yIHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgotICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgICAgICAgICAgICAg
TkVYVF9PUENPREUob3Bfam5ncmVhdGVyKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsKQEAgLTI5OTgsNyArMjk5OCw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChhID49IGIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFj
ZWhvbGRlciBmb3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8ganVzdCBmYWxsIHRocm91Z2guCi0gICAgICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20pOworICAgICAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQaGFudG9tLCBvcDEsIG9wMik7CiAgICAgICAgICAgICAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9qbmdyZWF0ZXJlcSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJ
bmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2ZiNjFiOGE1ODNmOWM1ZTBiNTM3YzE4
YjM1OTRmMTQ4MTViZjIwZC4uZDJlMWY5OGQ4OTQyYTgyMmVkMTE0ZTNiYTQwYWUxZjU4YWRiMjY4
MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAzLTIxICBFdW5qaSBKZW9uZyAgPGV1bi1q
aS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBGb2xkZWQgY29uc3RhbnQgaW4gREZHOjpC
eXRlQ29kZVBhcnNlciBzaG91bGQgbm90IGJlIGRlYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA1NzYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL2RmZy1mcm9udGVuZC1mb2xkZWQtY29uc3Rh
bnQtbm90LWtpbGxlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2RmZy1mcm9u
dGVuZC1mb2xkZWQtY29uc3RhbnQtbm90LWtpbGxlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBq
cy9zY3JpcHQtdGVzdHMvZGZnLWZyb250ZW5kLWZvbGRlZC1jb25zdGFudC1ub3Qta2lsbGVkLmpz
OiBBZGRlZC4KKyAgICAgICAgKHBhc3NUaHJvdWdoKToKKwogMjAxNC0wMy0yMSAgQW5kcmVhcyBL
bGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50
IHNob3VsZCBvYmV5IHRoZSBTdWJmcmFtZUxvYWRpbmdEaXNhYmxlciB3aGVuIGNyZWF0aW5nIHN1
YmZyYW1lcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvZGZnLWZyb250ZW5kLWZvbGRlZC1j
b25zdGFudC1ub3Qta2lsbGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2RmZy1mcm9u
dGVuZC1mb2xkZWQtY29uc3RhbnQtbm90LWtpbGxlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzBkYWU2MWMwMDkyMTg5YzUyNTk2YzMwMDU5ZmE0ZmIxZmRiMzY1MAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL2RmZy1mcm9udGVuZC1mb2xkZWQtY29uc3RhbnQtbm90LWtpbGxl
ZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2IEBACitUaGlzIHRlc3QgY2hlY2tzIGlmIHRoZSBj
b25zdGFudCB2YWx1ZSB0aGF0IHdhcyBmb2xkZWQgaW4gZGZnIGJ5dGVjb2RlIHBhcnNlciBpcyBz
dGlsbCBhbGl2ZSBhZnRlciB0aGUgb3NyIGV4aXQgZnJvbSBkZmcgdG8gYmFzZWxpbmUgaml0Lgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBwYXNzVGhyb3VnaChzcGVjRmFp
bEFyZykgaXMgc3BlY0ZhaWxBcmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2RmZy1mcm9u
dGVuZC1mb2xkZWQtY29uc3RhbnQtbm90LWtpbGxlZC5odG1sIGIvTGF5b3V0VGVzdHMvanMvZGZn
LWZyb250ZW5kLWZvbGRlZC1jb25zdGFudC1ub3Qta2lsbGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWY5
MDNiYjI5YTViMTUxN2U3NWYwMDVjYzdjODU4YmQ0NjdlNjUyOAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2pzL2RmZy1mcm9udGVuZC1mb2xkZWQtY29uc3RhbnQtbm90LWtpbGxlZC5o
dG1sCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNj
cmlwdC10ZXN0cy9kZmctZnJvbnRlbmQtZm9sZGVkLWNvbnN0YW50LW5vdC1raWxsZWQuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0
LXRlc3RzL2RmZy1mcm9udGVuZC1mb2xkZWQtY29uc3RhbnQtbm90LWtpbGxlZC5qcyBiL0xheW91
dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9kZmctZnJvbnRlbmQtZm9sZGVkLWNvbnN0YW50LW5vdC1r
aWxsZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmFmZThiMWE1MzYwNzk5MThjZTk2MTllOGRlMzYxNTk4MGI1
Y2NjMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9kZmct
ZnJvbnRlbmQtZm9sZGVkLWNvbnN0YW50LW5vdC1raWxsZWQuanMKQEAgLTAsMCArMSwxOSBAQAor
ZGVzY3JpcHRpb24oCisiVGhpcyB0ZXN0IGNoZWNrcyBpZiB0aGUgY29uc3RhbnQgdmFsdWUgdGhh
dCB3YXMgZm9sZGVkIGluIGRmZyBieXRlY29kZSBwYXJzZXIgaXMgc3RpbGwgYWxpdmUgYWZ0ZXIg
dGhlIG9zciBleGl0IGZyb20gZGZnIHRvIGJhc2VsaW5lIGppdC4iCispOworCitmdW5jdGlvbiBw
YXNzVGhyb3VnaChhcmcpIHsKKwl2YXIgYSA9IHRydWU7CisJdmFyIGIgPSBhcmcgKiAwLjE7CisJ
aWYgKGEpCisJCXJldHVybiBhcmc7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKwlwYXNzVGhyb3VnaChpKTsKK30KK3ZhciBzcGVjRmFp
bEFyZyA9ICJzcGVjRmFpbEFyZyI7CisKK3Nob3VsZEJlKCJwYXNzVGhyb3VnaChzcGVjRmFpbEFy
ZykiLCBzcGVjRmFpbEFyZyk7Cg==
</data>
<flag name="review"
          id="251690"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="251665"
          type_id="3"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227476</attachid>
            <date>2014-03-21 13:06:36 -0700</date>
            <delta_ts>2014-03-21 13:15:36 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28508</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2MDk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBA
CisyMDE0LTAzLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29uc3RhbnRzIGZvbGRlZCBieSBERkc6OkJ5dGVDb2RlUGFyc2VyIHNob3VsZCBub3QgYmUgZGVh
ZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDU3
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBmaXhlcyBidWdzIGluIHRoZSBCeXRlQ29kZVBhcnNlcidzIGNvbnN0YW50IGZvbGRl
ciBieSByZW1vdmluZyB0aGF0IGNvbnN0YW50IGZvbGRlci4gVGhpcworICAgICAgICByZWR1Y2Vz
IHRoZSBudW1iZXIgb2YgZm9sZGVycyBpbiBKU0MgZnJvbSBmb3VyaXNoIHRvIGp1c3QgdGhyZWVp
c2ggKHBhcnNlciwgREZHIEFJLCBhbmQgb25lCisgICAgICAgIG9yIG1vcmUgZm9sZGVycyBpbiBM
TFZNKS4gRG9pbmcgc28gaGFzIG5vIHBlcmZvcm1hbmNlIGltcGFjdCBzaW5jZSB0aGUgb3RoZXIg
Y29uc3RhbnQgZm9sZGVycworICAgICAgICBhbHJlYWR5IHN1YnN1bWUgdGhpcyBvbmUuCisgICAg
ICAgIAorICAgICAgICBBbHNvIGFkZGVkIGEgdGVzdCBjYXNlIGZvciB0aGUgc3BlY2lmaWMgYnVn
IHRoYXQgaW5zdGlnYXRlZCB0aGlzLgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0SlNDb25zdGFudEZv
clZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0SlNDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmluZmVycmVkQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdOb2RlRmxhZ3MuaDoKKyAgICAgICAg
KiB0ZXN0cy9zdHJlc3MvY29uc3RhbmQtZm9sZGluZy1vc3ItZXhpdC5qczogQWRkZWQuCisgICAg
ICAgIChmb28pOgorICAgICAgICAodGVzdCk6CisgICAgICAgICgudmFyKToKKwogMjAxNC0wMy0y
MSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhY2tMYXlvdXRQ
aGFzZSBzaG91bGQgZmluZCB0aGUgdW5pb24nZWQgY2FsbGVlVmFyaWFibGUgYmVmb3JlIGFjY2Vz
c2luZyBpdHMgbWFjaGluZUxvY2FsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2NjA3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzAsNyArNTMwLDcgQEAgcHJpdmF0ZToKICAgICAvLyBjb25zdGFudCBmb2xkaW5nLiBJLmUu
IGNyZWF0aW5nIGNvbnN0YW50cyB1c2luZyB0aGlzIGlmIHdlIGhhZCBjb25zdGFudAogICAgIC8v
IGZpZWxkIGluZmVyZW5jZSB3b3VsZCBiZSBhIGJhZCBpZGVhLCBzaW5jZSB0aGUgYnl0ZWNvZGUg
cGFyc2VyJ3MgZm9sZGluZwogICAgIC8vIGRvZXNuJ3QgaGFuZGxlIGxpdmVuZXNzIHByZXNlcnZh
dGlvbi4KLSAgICBOb2RlKiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZSBjb25zdGFudFZh
bHVlLCBOb2RlRmxhZ3MgZmxhZ3MgPSBOb2RlSXNTdGF0aWNDb25zdGFudCkKKyAgICBOb2RlKiBn
ZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZSBjb25zdGFudFZhbHVlKQogICAgIHsKICAgICAg
ICAgdW5zaWduZWQgY29uc3RhbnRJbmRleDsKICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+Zmlu
ZENvbnN0YW50KGNvbnN0YW50VmFsdWUsIGNvbnN0YW50SW5kZXgpKSB7CkBAIC01NDAsMTcgKzU0
MCwxNiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNp
emUoKSA9PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKICAgICAg
ICAgCi0gICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KGNvbnN0YW50SW5kZXgsIGZsYWdzKTsK
KyAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQoY29uc3RhbnRJbmRleCk7CiAgICAgfQogCi0g
ICAgTm9kZSogZ2V0SlNDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudCwgTm9kZUZsYWdzIGZsYWdz
ID0gTm9kZUlzU3RhdGljQ29uc3RhbnQpCisgICAgTm9kZSogZ2V0SlNDb25zdGFudCh1bnNpZ25l
ZCBjb25zdGFudCkKICAgICB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2NvbnN0YW50c1tjb25z
dGFudF0uYXNKU1ZhbHVlOwogICAgICAgICBpZiAobm9kZSkKICAgICAgICAgICAgIHJldHVybiBu
b2RlOwogCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJ
bmZvKGNvbnN0YW50KSk7Ci0gICAgICAgIHJlc3VsdC0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAg
ICAgIG1fY29uc3RhbnRzW2NvbnN0YW50XS5hc0pTVmFsdWUgPSByZXN1bHQ7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQpAQCAtNzA0LDcgKzcwMyw3IEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gY2VsbENvbnN0
YW50KHZhbHVlLmFzQ2VsbCgpKTsKLSAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnRGb3JWYWx1
ZSh2YWx1ZSwgMCk7CisgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUodmFsdWUp
OwogICAgIH0KICAgICAKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSgpCkBA
IC03MTcsMjAgKzcxNiw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1f
Y3VycmVudEluZGV4LCBpbmxpbmVDYWxsRnJhbWUoKSk7CiAgICAgfQogICAgIAotICAgIGJvb2wg
Y2FuRm9sZChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRl
RlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBzdGF0aWMgZm9sZGlu
ZyB0aGF0IHRoZSBieXRlY29kZSBwYXJzZXIgZG9lcyByZXN1bHRzIGluIHRoZSBERkcKLSAgICAg
ICAgICAgIC8vIGJlaW5nIGFibGUgdG8gZG8gc29tZSBEQ0UgdGhhdCB0aGUgYnl0ZWNvZGUgbGl2
ZW5lc3MgYW5hbHlzaXMgd291bGQKLSAgICAgICAgICAgIC8vIG1pc3MuIEhlbmNlLCB3ZSBkaXNh
YmxlIHRoZSBzdGF0aWMgZm9sZGluZyBpZiB3ZSdyZSB2YWxpZGF0aW5nIEZUTCBPU1IKLSAgICAg
ICAgICAgIC8vIGV4aXQgbGl2ZW5lc3MuIFRoaXMgbWF5IGJlIGJydXRpc2gsIGJ1dCB0aGlzIHZh
bGlkYXRvciBpcyBwb3dlcmZ1bAotICAgICAgICAgICAgLy8gZW5vdWdoIHRoYXQgaXQncyB3b3J0
aCBpdC4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIG5vZGUtPmlzU3Ryb25nbHlQcm92ZWRDb25zdGFudEluKGlubGluZUNhbGxG
cmFtZSgpKTsKLSAgICB9Ci0KICAgICBCcmFuY2hEYXRhKiBicmFuY2hEYXRhKHVuc2lnbmVkIHRh
a2VuLCB1bnNpZ25lZCBub3RUYWtlbikKICAgICB7CiAgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0
IGJyYW5jaGVzIG9yaWdpbmF0aW5nIGZyb20gYnl0ZWNvZGUgYWx3YXlzIGhhdmUgYSBmYWxsLXRo
cm91Z2guIFdlCkBAIC0xNjk3LDcgKzE2ODIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbnRyaW5zaWMoaW50CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIERGR1RydWU6IHsKLSAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgZ2V0SlNDb25zdGFudEZv
clZhbHVlKGpzQm9vbGVhbih0cnVlKSwgMCkpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KHJlc3VsdE9wZXJhbmQpLCBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoanNCb29sZWFuKHRydWUpKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCkBAIC0yNTIzLDE1ICsyNTA4
LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBj
YXNlIG9wX2xlc3M6IHsKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTm9kZSog
b3AyID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KSk7Ci0gICAgICAgICAgICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewotICAg
ICAgICAgICAgICAgIEpTVmFsdWUgYSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMSk7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSBiID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKLSAgICAgICAgICAg
ICAgICBpZiAoYS5pc051bWJlcigpICYmIGIuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SlNDb25zdGFudEZvclZhbHVlKGpzQm9vbGVh
bihhLmFzTnVtYmVyKCkgPCBiLmFzTnVtYmVyKCkpKSk7Ci0gICAgICAgICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2xlc3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCksIGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9sZXNzKTsKICAgICAgICAgfQpAQCAtMjUzOSwxNSArMjUxNSw2IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9s
ZXNzZXE6IHsKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0g
ICAgICAgICAgICBpZiAoY2FuRm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewotICAgICAgICAg
ICAgICAgIEpTVmFsdWUgYSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMSk7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBiID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKLSAgICAgICAgICAgICAgICBp
ZiAoYS5pc051bWJlcigpICYmIGIuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgZ2V0SlNDb25zdGFudEZvclZhbHVlKGpzQm9vbGVhbihhLmFz
TnVtYmVyKCkgPD0gYi5hc051bWJlcigpKSkpOwotICAgICAgICAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9sZXNzZXEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2xlc3NlcSk7CiAgICAgICAgIH0KQEAgLTI1NTUsMTUgKzI1MjIsNiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3Bf
Z3JlYXRlcjogewogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsK
LSAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSBhID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKLSAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGIgPSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwotICAgICAgICAgICAgICAg
IGlmIChhLmlzTnVtYmVyKCkgJiYgYi5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoanNCb29sZWFuKGEu
YXNOdW1iZXIoKSA+IGIuYXNOdW1iZXIoKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZ3JlYXRlcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQogICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwgYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlciwgb3AxLCBvcDIpKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2dyZWF0ZXIpOwogICAgICAgICB9CkBAIC0yNTcxLDE1ICsyNTI5LDYg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNl
IG9wX2dyZWF0ZXJlcTogewogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKTsKLSAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7Ci0g
ICAgICAgICAgICAgICAgSlNWYWx1ZSBhID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlIGIgPSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwotICAgICAgICAg
ICAgICAgIGlmIChhLmlzTnVtYmVyKCkgJiYgYi5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoanNCb29s
ZWFuKGEuYXNOdW1iZXIoKSA+PSBiLmFzTnVtYmVyKCkpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2dyZWF0ZXJlcSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMikpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ3JlYXRlcmVxKTsKICAgICAgICAgfQpAQCAtMjU4
NywxMyArMjUzNiw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgY2FzZSBvcF9lcTogewogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAg
ICBOb2RlKiBvcDIgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIp
KSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBhID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlIGIgPSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwotICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCksCi0gICAgICAgICAgICAgICAgICAgIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShqc0Jv
b2xlYW4oSlNWYWx1ZTo6ZXF1YWwobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCksIGEsIGIpKSkpOwotICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VxKTsKLSAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoQ29tcGFyZUVxLCBvcDEsIG9wMikpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZXEpOwogICAgICAgICB9CkBAIC0yNjA3LDEzICsy
NTQ5LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICBjYXNlIG9wX3N0cmljdGVxOiB7CiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpOwotICAgICAgICAgICAgaWYgKGNhbkZvbGQob3AxKSAmJiBjYW5Gb2xkKG9wMikp
IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGEgPSB2YWx1ZU9mSlNDb25zdGFudChvcDEpOwot
ICAgICAgICAgICAgICAgIEpTVmFsdWUgYiA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMik7Ci0gICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0SlNDb25zdGFudEZvclZhbHVlKGpzQm9v
bGVhbihKU1ZhbHVlOjpzdHJpY3RFcXVhbChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSwgYSwgYikpKSk7Ci0gICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfc3Ry
aWN0ZXEpOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0
RXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdHJpY3RlcSk7CiAg
ICAgICAgIH0KQEAgLTI2MjEsMTMgKzI1NTYsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfbmVxOiB7CiAgICAgICAgICAgICBOb2Rl
KiBvcDEgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwotICAgICAgICAgICAgaWYgKGNhbkZvbGQob3Ax
KSAmJiBjYW5Gb2xkKG9wMikpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGEgPSB2YWx1ZU9m
SlNDb25zdGFudChvcDEpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgYiA9IHZhbHVlT2ZKU0Nv
bnN0YW50KG9wMik7Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0SlNDb25z
dGFudEZvclZhbHVlKGpzQm9vbGVhbighSlNWYWx1ZTo6ZXF1YWwobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGEsIGIpKSkpOwotICAgICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX25lcSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKExvZ2lj
YWxOb3QsIGFkZFRvR3JhcGgoQ29tcGFyZUVxLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX25lcSk7CiAgICAgICAgIH0KQEAgLTI2NDEsMTMgKzI1NjksNiBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfbnN0
cmljdGVxOiB7CiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwot
ICAgICAgICAgICAgaWYgKGNhbkZvbGQob3AxKSAmJiBjYW5Gb2xkKG9wMikpIHsKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGEgPSB2YWx1ZU9mSlNDb25zdGFudChvcDEpOwotICAgICAgICAgICAg
ICAgIEpTVmFsdWUgYiA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMik7Ci0gICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKLSAg
ICAgICAgICAgICAgICAgICAgZ2V0SlNDb25zdGFudEZvclZhbHVlKGpzQm9vbGVhbighSlNWYWx1
ZTo6c3RyaWN0RXF1YWwobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCks
IGEsIGIpKSkpOwotICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25zdHJpY3RlcSk7Ci0g
ICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlKiBpbnZlcnRlZFJlc3VsdDsKICAgICAgICAg
ICAgIGludmVydGVkUmVzdWx0ID0gYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3Ay
KTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCksIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgaW52ZXJ0ZWRSZXN1bHQpKTsKQEAg
LTI3NTIsMTggKzI2NzMsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgIGNhc2Ugb3BfanRydWU6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IE5vZGUqIGNvbmRpdGlvbiA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpOwotICAgICAgICAgICAgaWYgKGNhbkZvbGQoY29uZGl0aW9uKSkgewot
ICAgICAgICAgICAgICAgIFRyaVN0YXRlIHN0YXRlID0gdmFsdWVPZkpTQ29uc3RhbnQoY29uZGl0
aW9uKS5wdXJlVG9Cb29sZWFuKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlID09IFRydWVU
cmlTdGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyht
X2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIExB
U1RfT1BDT0RFKG9wX2p0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09
IEZhbHNlVHJpU3RhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBsYWNlaG9s
ZGVyIGZvciB0aGlzIGJ5dGVjb2RlIG9wZXJhdGlvbiBidXQgb3RoZXJ3aXNlCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgotICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qdHJ1
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQogICAgICAgICAgICAgYWRkVG9H
cmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVP
ZmZzZXQsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qdHJ1ZSkpKSwgY29uZGl0
aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2p0cnVlKTsKICAgICAgICAgfQpAQCAt
Mjc3MSwxOCArMjY4MCw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgY2FzZSBvcF9qZmFsc2U6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IE5vZGUqIGNvbmRpdGlvbiA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpOwotICAgICAgICAgICAgaWYgKGNhbkZvbGQoY29uZGl0aW9uKSkgewot
ICAgICAgICAgICAgICAgIFRyaVN0YXRlIHN0YXRlID0gdmFsdWVPZkpTQ29uc3RhbnQoY29uZGl0
aW9uKS5wdXJlVG9Cb29sZWFuKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlID09IEZhbHNl
VHJpU3RhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8o
bV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICBM
QVNUX09QQ09ERShvcF9qZmFsc2UpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUg
PT0gVHJ1ZVRyaVN0YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFjZWhv
bGRlciBmb3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQotICAgICAgICAg
ICAgICAgICAgICAvLyBqdXN0IGZhbGwgdGhyb3VnaC4KLSAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQaGFudG9tKTsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfamZh
bHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBhZGRU
b0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBPUENPREVf
TEVOR1RIKG9wX2pmYWxzZSksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29u
ZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pmYWxzZSk7CiAgICAgICAgIH0K
QEAgLTI4MDcsMjMgKzI3MDQsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCkpOwotICAgICAgICAgICAgaWYgKGNhbkZvbGQob3AxKSAmJiBjYW5Gb2xkKG9wMikp
IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGFWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9w
MSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBiVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChv
cDIpOwotICAgICAgICAgICAgICAgIGlmIChhVmFsdWUuaXNOdW1iZXIoKSAmJiBiVmFsdWUuaXNO
dW1iZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBkb3VibGUgYSA9IGFWYWx1ZS5hc051bWJl
cigpOwotICAgICAgICAgICAgICAgICAgICBkb3VibGUgYiA9IGJWYWx1ZS5hc051bWJlcigpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoYSA8IGIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2psZXNzKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQg
YSBwbGFjZWhvbGRlciBmb3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBmYWxsIHRocm91Z2guCi0gICAgICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgTkVYVF9PUENPREUob3Bfamxlc3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0g
YWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZz
ZXQsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbGVzcykpKSwgY29uZGl0aW9u
KTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2psZXNzKTsKQEAgLTI4MzMsMjMgKzI3MTMs
NiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgICAg
ICAgICAgaWYgKGNhbkZvbGQob3AxKSAmJiBjYW5Gb2xkKG9wMikpIHsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGFWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMSk7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBiVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwotICAgICAgICAgICAg
ICAgIGlmIChhVmFsdWUuaXNOdW1iZXIoKSAmJiBiVmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgYSA9IGFWYWx1ZS5hc051bWJlcigpOwotICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgYiA9IGJWYWx1ZS5hc051bWJlcigpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoYSA8PSBiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAs
IE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbGVzc2VxKTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRlciBm
b3IgdGhpcyBieXRlY29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8ganVzdCBmYWxsIHRocm91Z2guCi0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUo
b3Bfamxlc3NlcSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENv
bXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBP
cEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJl
bnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfamxlc3NlcSkpKSwgY29uZGl0aW9uKTsKICAgICAg
ICAgICAgIExBU1RfT1BDT0RFKG9wX2psZXNzZXEpOwpAQCAtMjg1OSwyMyArMjcyMiw2IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2ln
bmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAg
ICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBp
ZiAoY2FuRm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewotICAgICAgICAgICAgICAgIEpTVmFs
dWUgYVZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKLSAgICAgICAgICAgICAgICBKU1Zh
bHVlIGJWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMik7Ci0gICAgICAgICAgICAgICAgaWYg
KGFWYWx1ZS5pc051bWJlcigpICYmIGJWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBhID0gYVZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGRvdWJsZSBiID0gYlZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChh
ID4gYikgewotICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8o
bV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgTEFTVF9PUENPREUob3BfamdyZWF0ZXIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlz
IGJ5dGVjb2RlIG9wZXJhdGlvbiBidXQgb3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBqdXN0IGZhbGwgdGhyb3VnaC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qZ3Jl
YXRlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVH
cmVhdGVyLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5k
ZXggKyBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyKSkpLCBjb25kaXRpb24pOwogICAgICAgICAg
ICAgTEFTVF9PUENPREUob3BfamdyZWF0ZXIpOwpAQCAtMjg4NSwyMyArMjczMSw2IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVk
IHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBpZiAo
Y2FuRm9sZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUg
YVZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
IGJWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMik7Ci0gICAgICAgICAgICAgICAgaWYgKGFW
YWx1ZS5pc051bWJlcigpICYmIGJWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBhID0gYVZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRv
dWJsZSBiID0gYlZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhID49
IGIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1f
Y3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX2pncmVhdGVyZXEpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlz
IGJ5dGVjb2RlIG9wZXJhdGlvbiBidXQgb3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBqdXN0IGZhbGwgdGhyb3VnaC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qZ3Jl
YXRlcmVxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFy
ZUdyZWF0ZXJFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9w
SW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qZ3JlYXRlcmVxKSkpLCBjb25kaXRpb24pOwogICAg
ICAgICAgICAgTEFTVF9PUENPREUob3BfamdyZWF0ZXJlcSk7CkBAIC0yOTExLDIzICsyNzQwLDYg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
dW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKLSAgICAgICAg
ICAgIGlmIChjYW5Gb2xkKG9wMSkgJiYgY2FuRm9sZChvcDIpKSB7Ci0gICAgICAgICAgICAgICAg
SlNWYWx1ZSBhVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChvcDEpOwotICAgICAgICAgICAgICAg
IEpTVmFsdWUgYlZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQob3AyKTsKLSAgICAgICAgICAgICAg
ICBpZiAoYVZhbHVlLmlzTnVtYmVyKCkgJiYgYlZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIGEgPSBhVmFsdWUuYXNOdW1iZXIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgZG91YmxlIGIgPSBiVmFsdWUuYXNOdW1iZXIoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGEgPCBiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEgcGxhY2Vob2xk
ZXIgZm9yIHRoaXMgYnl0ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGp1c3QgZmFsbCB0aHJvdWdoLgotICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2pubGVzcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJl
bGF0aXZlT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9q
bmxlc3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJl
TGVzcywgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhi
cmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3MpLCBtX2N1
cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBM
QVNUX09QQ09ERShvcF9qbmxlc3MpOwpAQCAtMjkzNywyMyArMjc0OSw2IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IE5vZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBpZiAoY2FuRm9s
ZChvcDEpICYmIGNhbkZvbGQob3AyKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgYVZhbHVl
ID0gdmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGJWYWx1
ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG9wMik7Ci0gICAgICAgICAgICAgICAgaWYgKGFWYWx1ZS5p
c051bWJlcigpICYmIGJWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRv
dWJsZSBhID0gYVZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBi
ID0gYlZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhIDw9IGIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgYSBwbGFjZWhvbGRlciBmb3IgdGhpcyBi
eXRlY29kZSBvcGVyYXRpb24gYnV0IG90aGVyd2lzZQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8ganVzdCBmYWxsIHRocm91Z2guCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20pOwotICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfam5sZXNz
ZXEpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNl
dCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5sZXNzZXEpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQog
ICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBv
cDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERh
dGEobV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pubGVzc2VxKSwgbV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9P
UENPREUob3Bfam5sZXNzZXEpOwpAQCAtMjk2MywyMyArMjc1OCw2IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZl
T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIE5v
ZGUqIG9wMSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCkpOwogICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBpZiAoY2FuRm9sZChv
cDEpICYmIGNhbkZvbGQob3AyKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgYVZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQob3AxKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGJWYWx1ZSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG9wMik7Ci0gICAgICAgICAgICAgICAgaWYgKGFWYWx1ZS5pc051
bWJlcigpICYmIGJWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSBhID0gYVZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBiID0g
YlZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhID4gYikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCBhIHBsYWNlaG9sZGVyIGZvciB0aGlzIGJ5dGVj
b2RlIG9wZXJhdGlvbiBidXQgb3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBq
dXN0IGZhbGwgdGhyb3VnaC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qbmdyZWF0ZXIp
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5ncmVhdGVyKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9w
MSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0
YShtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5ncmVhdGVyKSwgbV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9P
UENPREUob3Bfam5ncmVhdGVyKTsKQEAgLTI5ODksMjMgKzI3NjcsNiBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2
ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKTsKICAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgICAgICAgICAgaWYgKGNhbkZvbGQo
b3AxKSAmJiBjYW5Gb2xkKG9wMikpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGFWYWx1ZSA9
IHZhbHVlT2ZKU0NvbnN0YW50KG9wMSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBiVmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudChvcDIpOwotICAgICAgICAgICAgICAgIGlmIChhVmFsdWUuaXNO
dW1iZXIoKSAmJiBiVmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgYSA9IGFWYWx1ZS5hc051bWJlcigpOwotICAgICAgICAgICAgICAgICAgICBkb3VibGUgYiA9
IGJWYWx1ZS5hc051bWJlcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYSA+PSBiKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBFbWl0IGEgcGxhY2Vob2xkZXIgZm9yIHRoaXMgYnl0
ZWNvZGUgb3BlcmF0aW9uIGJ1dCBvdGhlcndpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGp1c3QgZmFsbCB0aHJvdWdoLgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQ
aGFudG9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2puZ3JlYXRl
cmVxKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZz
ZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZ3JlYXRlcmVx
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0
ZXJFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhi
cmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmdyZWF0ZXJlcSks
IG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAg
ICAgIExBU1RfT1BDT0RFKG9wX2puZ3JlYXRlcmVxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNjYwNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDE3ICszNzYsNiBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIHJldHVybiBvcCgpID09IFdlYWtKU0NvbnN0YW50OwogICAgIH0KICAg
ICAKLSAgICBib29sIGlzU3Ryb25nbHlQcm92ZWRDb25zdGFudEluKElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhKGZsYWdzKCkgJiBOb2Rl
SXNTdGF0aWNDb25zdGFudCkKLSAgICAgICAgICAgICYmIG9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUgPT0gaW5saW5lQ2FsbEZyYW1lOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzU3Ry
b25nbHlQcm92ZWRDb25zdGFudEluKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCi0gICAg
ewotICAgICAgICByZXR1cm4gaXNTdHJvbmdseVByb3ZlZENvbnN0YW50SW4oY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpOwotICAgIH0KLSAgICAKICAgICBib29sIGlzUGhhbnRvbUFyZ3VtZW50
cygpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBQaGFudG9tQXJndW1lbnRzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCShyZXZpc2lvbiAxNjYw
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw4ICs2Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAogI2RlZmluZSBOb2RlUmVsZXZhbnRUb09TUiAgICAgICAgICAgICAgICAweDQwMDAKIAotI2Rl
ZmluZSBOb2RlSXNTdGF0aWNDb25zdGFudCAgICAgICAgICAgICAweDgwMDAgLy8gVXNlZCBvbmx5
IGJ5IHRoZSBwYXJzZXIsIHRvIGRldGVybWluZSBpZiBhIGNvbnN0YW50IGFyb3NlIHN0YXRpY2Fs
bHkgYW5kIGhlbmNlIGNvdWxkIGJlIGZvbGRlZCBhdCBwYXJzZS10aW1lLgotI2RlZmluZSBOb2Rl
SXNGbHVzaGVkICAgICAgICAgICAgICAgICAgIDB4MTAwMDAgLy8gVXNlZCBieSBHcmFwaDo6Y29t
cHV0ZUlzRmx1c2hlZCgpLCB3aWxsIHRlbGwgeW91IHdoaWNoIGxvY2FsIG5vZGVzIGFyZSBiYWNr
d2FyZHMtcmVhY2hhYmxlIGZyb20gYSBGbHVzaC4KKyNkZWZpbmUgTm9kZUlzRmx1c2hlZCAgICAg
ICAgICAgICAgICAgICAgMHg4MDAwIC8vIFVzZWQgYnkgR3JhcGg6OmNvbXB1dGVJc0ZsdXNoZWQo
KSwgd2lsbCB0ZWxsIHlvdSB3aGljaCBsb2NhbCBub2RlcyBhcmUgYmFja3dhcmRzLXJlYWNoYWJs
ZSBmcm9tIGEgRmx1c2guCiAKIHR5cGVkZWYgdWludDMyX3QgTm9kZUZsYWdzOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvbnN0YW5kLWZvbGRpbmctb3NyLWV4
aXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9j
b25zdGFuZC1mb2xkaW5nLW9zci1leGl0LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb25zdGFuZC1mb2xkaW5nLW9zci1leGl0LmpzCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEzMSBAQAordmFyIGZvbyA9IFsKKyAgICBmdW5jdGlvbihvKSB7
CisgICAgICAgIHZhciB4ID0gdHJ1ZTsKKyAgICAgICAgby5mLmY7CisgICAgICAgIGlmICh4KQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKKyAgICB9LAor
ICAgIGZ1bmN0aW9uKG8pIHsKKyAgICAgICAgdmFyIHggPSB0cnVlOworICAgICAgICBvLmYuZjsK
KyAgICAgICAgaWYgKCF4KQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9LAorICAgIGZ1bmN0aW9uKG8pIHsKKyAgICAgICAgdmFyIHggPSAwOwor
ICAgICAgICB2YXIgeSA9IDE7CisgICAgICAgIG8uZi5mOworICAgICAgICBpZiAoeCA8IHkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworICAgIH0sCisg
ICAgZnVuY3Rpb24obykgeworICAgICAgICB2YXIgeCA9IDE7CisgICAgICAgIHZhciB5ID0gMDsK
KyAgICAgICAgby5mLmY7CisgICAgICAgIGlmICh4ID4geSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgfSwKKyAgICBmdW5jdGlvbihvKSB7Cisg
ICAgICAgIHZhciB4ID0gMDsKKyAgICAgICAgdmFyIHkgPSAxOworICAgICAgICBvLmYuZjsKKyAg
ICAgICAgaWYgKHggPD0geSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCk7CisgICAgfSwKKyAgICBmdW5jdGlvbihvKSB7CisgICAgICAgIHZhciB4ID0gMTsK
KyAgICAgICAgdmFyIHkgPSAwOworICAgICAgICBvLmYuZjsKKyAgICAgICAgaWYgKHggPj0geSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgfSwK
KyAgICBmdW5jdGlvbihvKSB7CisgICAgICAgIHZhciB4ID0gMDsKKyAgICAgICAgdmFyIHkgPSAx
OworICAgICAgICBvLmYuZjsKKyAgICAgICAgaWYgKHggPj0geSkKKyAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfSwKKyAgICBmdW5jdGlvbihvKSB7
CisgICAgICAgIHZhciB4ID0gMTsKKyAgICAgICAgdmFyIHkgPSAwOworICAgICAgICBvLmYuZjsK
KyAgICAgICAgaWYgKHggPD0geSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworICAg
ICAgICByZXR1cm47CisgICAgfSwKKyAgICBmdW5jdGlvbihvKSB7CisgICAgICAgIHZhciB4ID0g
MDsKKyAgICAgICAgdmFyIHkgPSAxOworICAgICAgICBvLmYuZjsKKyAgICAgICAgaWYgKHggPiB5
KQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
LAorICAgIGZ1bmN0aW9uKG8pIHsKKyAgICAgICAgdmFyIHggPSAxOworICAgICAgICB2YXIgeSA9
IDA7CisgICAgICAgIG8uZi5mOworICAgICAgICBpZiAoeCA8IHkpCisgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0sCisgICAgZnVuY3Rpb24obykg
eworICAgICAgICB2YXIgeCA9IDQyOworICAgICAgICBvLmYuZjsKKyAgICAgICAgaWYgKHggPT0g
NDIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworICAg
IH0sCisgICAgZnVuY3Rpb24obykgeworICAgICAgICB2YXIgeCA9IDQyOworICAgICAgICBvLmYu
ZjsKKyAgICAgICAgaWYgKHggIT0gNDIpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0sCisgICAgZnVuY3Rpb24obykgeworICAgICAgICB2YXIg
eCA9IDQyOworICAgICAgICBvLmYuZjsKKyAgICAgICAgaWYgKHggPT09IDQyKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKKyAgICB9LAorICAgIGZ1bmN0
aW9uKG8pIHsKKyAgICAgICAgdmFyIHggPSA0MjsKKyAgICAgICAgby5mLmY7CisgICAgICAgIGlm
ICh4ICE9PSA0MikKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworICAgICAgICByZXR1
cm47CisgICAgfSwKK107Citmb3IgKHZhciBpID0gMDsgaSA8IGZvby5sZW5ndGg7ICsraSkKKyAg
ICBub0lubGluZShmb29baV0pOworCitmdW5jdGlvbiB0ZXN0KG8pIHsKKyAgICB2YXIgZmFpbGVk
ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb28ubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIGZvb1tpXShvKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgICAgZmFpbGVkLnB1c2goIkZhaWxlZCAiICsgZm9vW2ldICsgIiB3aXRoICIgKyBl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZmFpbGVkLmxlbmd0aCkKKyAgICAgICAgdGhy
b3cgZmFpbGVkOworfQorCit2YXIgb2JqZWN0ID0ge2Y6e2Y6NDJ9fTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdGVzdChvYmplY3QpOworfQorCit0ZXN0KHtmOntn
OjQzfX0pOwo=
</data>
<flag name="review"
          id="251731"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>