<?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>145192</bug_id>
          
          <creation_ts>2015-05-19 16:16:10 -0700</creation_ts>
          <short_desc>Object allocation sinking phase should explicitly create bottom values for CreateActivation sink candidates and CreateActivation should have SymbolTable as a child node</short_desc>
          <delta_ts>2015-05-21 19:39:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>142944</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>basile_clement</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1096085</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-19 16:16:10 -0700</bug_when>
    <thetext>This is in preparation for ES6 where the default values for CreateActivation variable slots might be undefined or might be the empty TDZ value.

Also, this is preparing CreateActivation to be slightly more general by taking in a SymbolTable as a child node
because with ES6 block scoping, op_create_lexical_environment won&apos;t be the only op code lowered to CreateActivation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096140</commentid>
    <comment_count>1</comment_count>
      <attachid>253421</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-19 19:36:46 -0700</bug_when>
    <thetext>Created attachment 253421
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096173</commentid>
    <comment_count>2</comment_count>
      <attachid>253421</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-19 22:16:28 -0700</bug_when>
    <thetext>Comment on attachment 253421
patch

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

I think you did this right, but are we really sure that we want to introduce an edge to the graph that has a magical requirement that one of the nodes is a constant?

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +       This patch also adds the the constant SymbolTable as child2 of CreateActivation 
&gt; +       nodes. This is in preparation for ES6 block scoping which will introduce a new 
&gt; +       op code that gets lowered to CreateActivation.

I have to say that I&apos;m disturbed by CreateActivation taking a mandatory-JSConstant child.  This feels like an antipattern, because we use Edge and Node* to mean &quot;something that might have to be computed at run-time&quot;.  That&apos;s not the case here.  You are requiring the SymbolTable to be a constant, because otherwise you wouldn&apos;t know how to allocate the activation.

Is it *really* necessary to do it this way?  Can we have CreateActivation use OpInfo for the SymbolTable*?  This would mean that object allocation sinking has to materialize a JSConstant for the SymbolTable* when creating PutHints, and then: MaterializeCreateActivation will also have a SymbolTable* OpInfo, and OSR-exit can use something like an ActivationSymbolTablePLoc &quot;field&quot; that it deduces from the PutHints.  The point of doing it this way is that so long as we have a CreateActivation - that is, an operation that requires optimized code to allocate and then access an activation object - we make it easy to access the SymbolTable* and also o be confident that this is legal to do so and that the symbol table won&apos;t be something that is evaluated at runtime.

&gt; Source/JavaScriptCore/dfg/DFGNode.h:2005
&gt; +
&gt; +    SymbolTable* symbolTableForActivation()
&gt; +    {
&gt; +        ASSERT(op() == CreateActivation);
&gt; +        return child2()-&gt;castConstant&lt;SymbolTable*&gt;();
&gt; +    }

I would get rid of this helper.  We don&apos;t ordinarily give Node methods that dereference another node and do things to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096181</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-19 22:49:46 -0700</bug_when>
    <thetext>&gt; I have to say that I&apos;m disturbed by CreateActivation taking a
&gt; mandatory-JSConstant child.  This feels like an antipattern, because we use
&gt; Edge and Node* to mean &quot;something that might have to be computed at
&gt; run-time&quot;.  That&apos;s not the case here.  You are requiring the SymbolTable to
&gt; be a constant, because otherwise you wouldn&apos;t know how to allocate the
&gt; activation.
&gt; 
&gt; Is it *really* necessary to do it this way?  Can we have CreateActivation
&gt; use OpInfo for the SymbolTable*?  This would mean that object allocation
&gt; sinking has to materialize a JSConstant for the SymbolTable* when creating
&gt; PutHints, and then: MaterializeCreateActivation will also have a
&gt; SymbolTable* OpInfo, and OSR-exit can use something like an
&gt; ActivationSymbolTablePLoc &quot;field&quot; that it deduces from the PutHints.  The
&gt; point of doing it this way is that so long as we have a CreateActivation -
&gt; that is, an operation that requires optimized code to allocate and then
&gt; access an activation object - we make it easy to access the SymbolTable* and
&gt; also o be confident that this is legal to do so and that the symbol table
&gt; won&apos;t be something that is evaluated at runtime.
&gt; 
I agree with your argument. I think it&apos;s a bit silly to mandate that a child 
must be a constant. I will go with the approach of storing the SymbolTable in OpInfo
and materializing it during allocation sinking.

&gt; &gt; Source/JavaScriptCore/dfg/DFGNode.h:2005
&gt; &gt; +
&gt; &gt; +    SymbolTable* symbolTableForActivation()
&gt; &gt; +    {
&gt; &gt; +        ASSERT(op() == CreateActivation);
&gt; &gt; +        return child2()-&gt;castConstant&lt;SymbolTable*&gt;();
&gt; &gt; +    }
&gt; 
&gt; I would get rid of this helper.  We don&apos;t ordinarily give Node methods that
&gt; dereference another node and do things to it.
I will keep this after switching to the OpInfo approach. This seems more in line with how
Node handles these situations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096198</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-19 23:34:30 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGNode.h:2005
&gt; &gt; &gt; +
&gt; &gt; &gt; +    SymbolTable* symbolTableForActivation()
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        ASSERT(op() == CreateActivation);
&gt; &gt; &gt; +        return child2()-&gt;castConstant&lt;SymbolTable*&gt;();
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; I would get rid of this helper.  We don&apos;t ordinarily give Node methods that
&gt; &gt; dereference another node and do things to it.
&gt; I will keep this after switching to the OpInfo approach. This seems more in
&gt; line with how
&gt; Node handles these situations.
Scratch that, there is already stuff in place to make this convenient for cell operand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096362</commentid>
    <comment_count>5</comment_count>
      <attachid>253466</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-20 15:24:40 -0700</bug_when>
    <thetext>Created attachment 253466
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096398</commentid>
    <comment_count>6</comment_count>
      <attachid>253466</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-20 16:57:39 -0700</bug_when>
    <thetext>Comment on attachment 253466
patch

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

&gt; Source/JavaScriptCore/dfg/DFGNode.h:1308
&gt; +    FrozenValue* cellOperand2()

The way I would do this is make cellOperand use opInfo or opInfo2 conditionally on the op(). That way, you&apos;ll just have the one method.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:5301
&gt; +#ifndef NDEBUG

I wouldn&apos;t make this a compile-time thing. We have things like validationEnabled() and you could check that at runtime.

&gt; Source/JavaScriptCore/ftl/FTLOperations.cpp:135
&gt; +        RELEASE_ASSERT(materialization-&gt;properties().size() &gt;= table-&gt;scopeSize());

Should this be ==?

&gt; Source/JavaScriptCore/ftl/FTLOperations.cpp:144
&gt; +#ifndef NDEBUG

You could just use &quot;if (!ASSERT_DISABLED)&quot; instead of #if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096509</commentid>
    <comment_count>7</comment_count>
      <attachid>253466</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-21 00:16:18 -0700</bug_when>
    <thetext>Comment on attachment 253466
patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGNode.h:1308
&gt;&gt; +    FrozenValue* cellOperand2()
&gt; 
&gt; The way I would do this is make cellOperand use opInfo or opInfo2 conditionally on the op(). That way, you&apos;ll just have the one method.

Will do.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:5301
&gt;&gt; +#ifndef NDEBUG
&gt; 
&gt; I wouldn&apos;t make this a compile-time thing. We have things like validationEnabled() and you could check that at runtime.

I&apos;ll make this and the other loop execute under validationEnabled()

&gt;&gt; Source/JavaScriptCore/ftl/FTLOperations.cpp:135
&gt;&gt; +        RELEASE_ASSERT(materialization-&gt;properties().size() &gt;= table-&gt;scopeSize());
&gt; 
&gt; Should this be ==?

No, because the materialization will have the ActivationScopePLoc and ActivationSymbolTablePLoc.
Maybe a nice addition to the validation would be to count the number of ClosureVarPLoc and ensure it&apos;s the same as the scopeSize().

Will we prune the properties that we place on the materialization after the sinking phase such that &quot;store&quot; followed by &quot;store&quot; to the
same scope offset will condense into a single &quot;store&quot;? If so, I believe they should always be equal (and also equal in compileMaterializeActivation validation too).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096510</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-21 00:22:10 -0700</bug_when>
    <thetext>
&gt; Will we prune the properties that we place on the materialization after the
&gt; sinking phase such that &quot;store&quot; followed by &quot;store&quot; to the
&gt; same scope offset will condense into a single &quot;store&quot;? If so, I believe they
&gt; should always be equal (and also equal in compileMaterializeActivation
&gt; validation too).
What I mean for &quot;store&quot; here is the original PutHint for the default value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096732</commentid>
    <comment_count>9</comment_count>
      <attachid>253566</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-21 18:12:24 -0700</bug_when>
    <thetext>Created attachment 253566
patch

Patch with Fil&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096735</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-21 18:15:23 -0700</bug_when>
    <thetext>Attachment 253566 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGNode.h:1297:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096740</commentid>
    <comment_count>11</comment_count>
      <attachid>253568</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-05-21 18:18:55 -0700</bug_when>
    <thetext>Created attachment 253568
patch

fix style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096748</commentid>
    <comment_count>12</comment_count>
      <attachid>253568</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-21 18:51:27 -0700</bug_when>
    <thetext>Comment on attachment 253568
patch

Actually, I want to give Basile a chance to comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096754</commentid>
    <comment_count>13</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-05-21 19:07:04 -0700</bug_when>
    <thetext>This looks good to me. 

(In reply to comment #12)
&gt; Comment on attachment 253568 [details]
&gt; patch
&gt; 
&gt; Actually, I want to give Basile a chance to comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096756</commentid>
    <comment_count>14</comment_count>
      <attachid>253568</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-21 19:39:36 -0700</bug_when>
    <thetext>Comment on attachment 253568
patch

Clearing flags on attachment: 253568

Committed r184747: &lt;http://trac.webkit.org/changeset/184747&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096757</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-21 19:39:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253421</attachid>
            <date>2015-05-19 19:36:46 -0700</date>
            <delta_ts>2015-05-20 15:24:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>work-backup.diff</filename>
            <type>text/plain</type>
            <size>20013</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0NjA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDE1LTA1LTE5ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBPYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlIHNob3VsZCBleHBsaWNpdGx5IGNy
ZWF0ZSBib3R0b20gdmFsdWVzIGZvciBDcmVhdGVBY3RpdmF0aW9uIHNpbmsgY2FuZGlkYXRlcyBh
bmQgQ3JlYXRlQWN0aXZhdGlvbiBzaG91bGQgaGF2ZSBTeW1ib2xUYWJsZSBhcyBhIGNoaWxkIG5v
ZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTE5
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgV2hlbiB3
ZSBzaW5rIENyZWF0ZUFjdGl2YXRpb24gYW5kIGdlbmVyYXRlIE1hdGVyaWFsaXplQ3JlYXRlQWN0
aXZhdGlvbgorICAgICAgIGluIHRoZSBvYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlLCB3
ZSBub3cgZXhwbGljdGx5IGFkZCBQdXRIaW50cyBmb3IgCisgICAgICAgYWxsIHZhcmlhYmxlcyBv
biB0aGUgYWN0aXZhdGlvbiBzZXR0aW5nIHRob3NlIHZhcmlhYmxlcyB0byB0aGVpciBkZWZhdWx0
IHZhbHVlIAorICAgICAgICh1bmRlZmluZWQgZm9yIEZ1bmN0aW9uIGFjdGl2YXRpb25zIGFuZCBz
b29uIHRvIGJlIEpTIEVtcHR5IFZhbHVlIGZvciBibG9jayBzY29wZSBhY3RpdmF0aW9ucykuIAor
ICAgICAgIFRoaXMgYWxsb3dzIHVzIHRvIHJlbW92ZSBjb2RlIHRoYXQgZmlsbHMgRlRMIGZhc3Qg
YWN0aXZhdGlvbiBhbGxvY2F0aW9ucyB3aXRoIFVuZGVmaW5lZC4KKworICAgICAgIFRoaXMgcGF0
Y2ggYWxzbyBhZGRzIHRoZSB0aGUgY29uc3RhbnQgU3ltYm9sVGFibGUgYXMgY2hpbGQyIG9mIENy
ZWF0ZUFjdGl2YXRpb24gCisgICAgICAgbm9kZXMuIFRoaXMgaXMgaW4gcHJlcGFyYXRpb24gZm9y
IEVTNiBibG9jayBzY29waW5nIHdoaWNoIHdpbGwgaW50cm9kdWNlIGEgbmV3IAorICAgICAgIG9w
IGNvZGUgdGhhdCBnZXRzIGxvd2VyZWQgdG8gQ3JlYXRlQWN0aXZhdGlvbi4KKworICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAg
ICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpiYXNpY0Jsb2NrTG9j
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN5bWJvbFRhYmxlRm9yQWN0aXZhdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cmVwbGFjZW1lbnQpOgorICAgICAgICAqIGRm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlOjpsb3dlck5vblJlYWRpbmdPcGVyYXRpb25z
T25QaGFudG9tQWxsb2NhdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFs
bG9jYXRpb25TaW5raW5nUGhhc2U6OnBvcHVsYXRlTWF0ZXJpYWxpemUpOgorICAgICAgICAqIGRm
Zy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJu
YWwpOgorICAgICAgICAqIGRmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
Q3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb24pOgorICAgICAgICAqIGZ0bC9GVExPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVj
dEluT1NSKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvYWN0aXZhdGlvbi1zaW5rLWRlZmF1bHQt
dmFsdWUuanM6IEFkZGVkLgorICAgICAgICAoYmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mv
YWN0aXZhdGlvbi1zaW5rLW9zcmV4aXQtZGVmYXVsdC12YWx1ZS5qczogQWRkZWQuCisgICAgICAg
IChmb28uc2V0IHJlc3VsdCk6CisKIDIwMTUtMDUtMTkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29y
YXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbXByb3ZlIFByZXZpZXcg
Zm9yIE5vZGVMaXN0IC8gYXJyYXkgbGlrZSBjb2xsZWN0aW9ucwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4NDU4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzMxLDcgKzM3MzEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OiB7Ci0gICAgICAgICAgICBOb2RlKiBsZXhp
Y2FsRW52aXJvbm1lbnQgPSBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2YXRpb24sIGdldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAg
IE5vZGUqIHN5bWJvbFRhYmxlID0ganNDb25zdGFudChtX2dyYXBoLnN5bWJvbFRhYmxlRm9yKGN1
cnJlbnROb2RlT3JpZ2luKCkuc2VtYW50aWMpKTsKKyAgICAgICAgICAgIE5vZGUqIGxleGljYWxF
bnZpcm9ubWVudCA9IGFkZFRvR3JhcGgoQ3JlYXRlQWN0aXZhdGlvbiwgZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSksIHN5bWJvbFRhYmxlKTsKICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCksIGxleGljYWxFbnZpcm9ubWVudCk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpLCBsZXhpY2FsRW52aXJvbm1lbnQp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlz
aW9uIDE4NDU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsNyArMzE3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIENyZWF0ZUFj
dGl2YXRpb246IHsKLSAgICAgICAgU3ltYm9sVGFibGUqIHRhYmxlID0gZ3JhcGguc3ltYm9sVGFi
bGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgU3ltYm9sVGFibGUqIHRhYmxl
ID0gbm9kZS0+c3ltYm9sVGFibGVGb3JBY3RpdmF0aW9uKCk7CiAgICAgICAgIGlmICh0YWJsZS0+
c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICB3cml0ZShXYXRj
aHBvaW50X2ZpcmUpOwogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4NDU4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyMzksMTEgKzEyMzksMTYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgotICAgICAgICBjYXNlIENyZWF0ZUFj
dGl2YXRpb246CiAgICAgICAgIGNhc2UgTmV3RnVuY3Rpb246IHsKICAgICAgICAgICAgIGZpeEVk
Z2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KKworICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246IHsKKyAgICAgICAgICAgIGZpeEVk
Z2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNl
bGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgICAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ug
bm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFu
ZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE4NDU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiUHV0QnlJZFZh
cmlhbnQuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZVNldC5oIgorI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9u
LmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CkBAIC0xOTk2LDYgKzE5OTcsMTIgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QmFzaWNCbG9ja0xvY2F0aW9uKj4obV9vcEluZm8pOwogICAg
IH0KKworICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZUZvckFjdGl2YXRpb24oKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG9wKCkgPT0gQ3JlYXRlQWN0aXZhdGlvbik7CisgICAgICAgIHJldHVy
biBjaGlsZDIoKS0+Y2FzdENvbnN0YW50PFN5bWJvbFRhYmxlKj4oKTsKKyAgICB9CiAgICAgCiAg
ICAgTm9kZSogcmVwbGFjZW1lbnQoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMTg0NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTg2LDYgKzU4NiwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCArIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9j
YXRpb24oQWN0aXZhdGlvblNjb3BlUExvYywgbm9kZSkuY3JlYXRlSGludCgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uKFN5bWJvbFRhYmxlUExvYywg
bm9kZSkuY3JlYXRlSGludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgbm9kZS0+b3JpZ2luLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSA9IG5vZGUtPnN5bWJvbFRhYmxlRm9yQWN0aXZhdGlvbigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAx
LCBub2RlLT5vcmlnaW4sIGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdGVyID0gc3ltYm9sVGFibGUtPmJl
Z2luKGxvY2tlciksIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgg
KyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9j
YXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc3VyZVZh
clBMb2MsIG5vZGUsIGl0ZXItPnZhbHVlLnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCkpLmNyZWF0ZUhp
bnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9k
ZS0+b3JpZ2luLCB1bmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1BoYW50b21DcmVhdGVBY3RpdmF0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01OTcsNiArNjE2LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbihBY3RpdmF0aW9uU2NvcGVQ
TG9jLCBub2RlKS5jcmVhdGVIaW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBub2RlLT5vcmlnaW4sIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkubm9kZSgp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbihTeW1ib2xUYWJsZVBMb2MsIG5vZGUpLmNy
ZWF0ZUhpbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUt
Pm9yaWdpbiwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCkpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBub2RlLT5v
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gZGF0
YS5tX3Byb3BlcnRpZXNbaV0ubV9pZGVudGlmaWVyTnVtYmVyOwpAQCAtNjA1LDcgKzYyOCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExv
Y2F0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc3VyZVZhclBM
b2MsIG5vZGUsIGlkZW50aWZpZXJOdW1iZXIpLmNyZWF0ZUhpbnQoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKS5u
b2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgaSArIDIpLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbUNyZWF0ZUFj
dGl2YXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtODMyLDYgKzg1NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpZiAoIW1fZ3JhcGguc3ltYm9sVGFibGVGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKS0+c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpCiAgICAgICAg
ICAgICAgICAgc2lua0NhbmRpZGF0ZSgpOwogICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7CisgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ2hlY2s6CkBAIC0xMDA5LDkgKzEw
MzMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlv
bj4gbG9jYXRpb25zID0gbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmdldChlc2NhcGVlKTsKIAog
ICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gc2NvcGUoQWN0aXZhdGlvblNjb3BlUExv
YywgZXNjYXBlZSk7CisgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbiBzeW1ib2xUYWJs
ZShTeW1ib2xUYWJsZVBMb2MsIGVzY2FwZWUpOwogICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9u
cy5jb250YWlucyhzY29wZSkpOwogCiAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW4uYXBwZW5kKEVkZ2UocmVzb2x2ZShibG9jaywgc2NvcGUpLCBLbm93bkNlbGxVc2UpKTsKKyAg
ICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoRWRnZShyZXNvbHZlKGJs
b2NrLCBzeW1ib2xUYWJsZSksIEtub3duQ2VsbFVzZSkpOwogCiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbG9jYXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChsb2NhdGlvbnNbaV0ua2luZCgpKSB7CkBAIC0xMDIwLDYgKzEwNDYsMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
CisgICAgICAgICAgICAgICAgY2FzZSBTeW1ib2xUYWJsZVBMb2M6IHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGxvY2F0aW9uc1tpXSA9PSBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhclBMb2M6IHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSByZXNv
bHZlKGJsb2NrLCBsb2NhdGlvbnNbaV0pOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUt
Pm9wKCkgPT0gQm90dG9tVmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTg0NTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEwIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBQcm8KICAgICBjYXNlIFN0cnVjdHVyZVBMb2M6CiAgICAgICAgIG91dC5w
cmludCgiU3RydWN0dXJlUExvYyIpOwogICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFN5bWJv
bFRhYmxlUExvYzoKKyAgICAgICAgb3V0LnByaW50KCJTeW1ib2xUYWJsZVBMb2MiKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIE5hbWVkUHJvcGVydHlQTG9jOgogICAgICAg
ICBvdXQucHJpbnQoIk5hbWVkUHJvcGVydHlQTG9jIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAx
ODQ1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgZW51bSBQcm9tb3RlZExvY2F0
aW9uS2luZCB7CiAgICAgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5kLAogICAgIAogICAgIFN0
cnVjdHVyZVBMb2MsCisgICAgU3ltYm9sVGFibGVQTG9jLAogICAgIE5hbWVkUHJvcGVydHlQTG9j
LAogICAgIEFyZ3VtZW50UExvYywKICAgICBBcmd1bWVudENvdW50UExvYywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAxODQ1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUyMSw3ICs0NTIxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3JlYXRlQWN0aXZhdGlvbihOb2RlKiBub2RlKQogewotICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9
IG1faml0LmdyYXBoKCkuc3ltYm9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAg
ICBTeW1ib2xUYWJsZSogdGFibGUgPSBub2RlLT5zeW1ib2xUYWJsZUZvckFjdGl2YXRpb24oKTsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KAogICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4NDU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQ3LDcgKzI5
NDcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oKQogICAg
IHsKICAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgU3ltYm9sVGFibGUqIHRhYmxlID0gbV9ncmFwaC5zeW1ib2xUYWJsZUZvcihtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1fbm9kZS0+
c3ltYm9sVGFibGVGb3JBY3RpdmF0aW9uKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3Rp
dmF0aW9uU3RydWN0dXJlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAodGFibGUtPnNpbmdsZXRv
blNjb3BlKCktPmlzU3RpbGxWYWxpZCgpKSB7CkBAIC01MjYxLDEwICs1MjYxLDEwIEBAIHByaXZh
dGU6CiAKICAgICAgICAgVmVjdG9yPExWYWx1ZSwgOD4gdmFsdWVzOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICB2YWx1ZXMuYXBwZW5kKGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDEgKyBpKSkpOworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCAyICsgaSkpKTsKIAogICAgICAgICBMVmFsdWUgc2NvcGUgPSBs
b3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7Ci0gICAgICAgIFN5bWJvbFRh
YmxlKiB0YWJsZSA9IG1fZ3JhcGguc3ltYm9sVGFibGVGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOworICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMSktPmNhc3RDb25zdGFudDxTeW1ib2xUYWJsZSo+KCk7CiAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgc2xv
d1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlv
biBzbG93IHBhdGgiKSk7CkBAIC01Mjc4LDExICs1Mjc4LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9vdXQuc3RvcmVQdHIoc2NvcGUsIGZhc3RPYmplY3QsIG1faGVhcHMuSlNTY29wZV9uZXh0KTsK
ICAgICAgICAgbV9vdXQuc3RvcmVQdHIod2Vha1BvaW50ZXIodGFibGUpLCBmYXN0T2JqZWN0LCBt
X2hlYXBzLkpTU3ltYm9sVGFibGVPYmplY3Rfc3ltYm9sVGFibGUpOwogCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+c2NvcGVTaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksCi0gICAgICAgICAgICAgICAgZmFzdE9iamVjdCwg
bV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1tpXSk7Ci0gICAgICAgIH0KIAog
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmpl
Y3QpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CkBAIC01Mjk2LDExICs1Mjkx
LDI5IEBAIHByaXZhdGU6CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CiAgICAgICAgIExWYWx1ZSBhY3RpdmF0aW9uID0gbV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRh
dGEubV9wcm9wZXJ0aWVzLnNpemUoKSA+PSB0YWJsZS0+c2NvcGVTaXplKCkpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWVzW2ldLAogICAgICAgICAgICAgICAgIGFj
dGl2YXRpb24sCiAgICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3Zh
cmlhYmxlc1tkYXRhLm1fcHJvcGVydGllc1tpXS5tX2lkZW50aWZpZXJOdW1iZXJdKTsKICAgICAg
ICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgICAgICB7CisgICAgICAgICAgICAvLyBWYWxpZGF0
ZSB0byBtYWtlIHN1cmUgZXZlcnkgc2xvdCBpbiB0aGUgc2NvcGUgaGFzIGF0IGxlYXN0IG9uZSB2
YWx1ZS4KKyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRhYmxlLT5tX2xv
Y2spOworICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSB0YWJsZS0+YmVnaW4obG9ja2VyKSwg
ZW5kID0gdGFibGUtPmVuZChsb2NrZXIpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAg
ICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuc2NvcGVPZmZzZXQoKS5vZmZzZXQoKSA9PSBkYXRh
Lm1fcHJvcGVydGllc1tpXS5tX2lkZW50aWZpZXJOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFT
U0VSVChmb3VuZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBz
ZXRKU1ZhbHVlKGFjdGl2YXRpb24pOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODQ1ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTUsMjEgKzExNSwyNCBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
CiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICAvLyBGaWd1cmUg
b3V0IHdoZXJlIHRoZSBzY29wZSBpcwogICAgICAgICBKU1Njb3BlKiBzY29wZSA9IG51bGxwdHI7
CisgICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgewog
ICAgICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxp
emF0aW9uLT5wcm9wZXJ0aWVzKClbaV07Ci0gICAgICAgICAgICBpZiAocHJvcGVydHkubG9jYXRp
b24oKSAhPSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihBY3RpdmF0aW9uU2NvcGVQTG9jKSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHNjb3BlID0ganNDYXN0PEpT
U2NvcGUqPihKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7CisgICAgICAgICAgICBpZiAocHJv
cGVydHkubG9jYXRpb24oKSA9PSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihBY3RpdmF0aW9u
U2NvcGVQTG9jKSkKKyAgICAgICAgICAgICAgICBzY29wZSA9IGpzQ2FzdDxKU1Njb3BlKj4oSlNW
YWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHku
bG9jYXRpb24oKSA9PSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihTeW1ib2xUYWJsZVBMb2Mp
KQorICAgICAgICAgICAgICAgIHRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oSlNWYWx1ZTo6
ZGVjb2RlKHZhbHVlc1tpXSkpOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNj
b3BlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFibGUpOwogCiAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jaygKICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCksIGV4ZWMtPmNvZGVC
bG9jaygpKTsKLSAgICAgICAgU3ltYm9sVGFibGUqIHRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xU
YWJsZSgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKTsKIAogICAgICAgICBKU0xleGljYWxFbnZp
cm9ubWVudCogcmVzdWx0ID0gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmNyZWF0ZSh2bSwgc3RydWN0
dXJlLCBzY29wZSwgdGFibGUpOwogCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1hdGVyaWFsaXph
dGlvbi0+cHJvcGVydGllcygpLnNpemUoKSA+PSB0YWJsZS0+c2NvcGVTaXplKCkpOwogICAgICAg
ICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gcG9wdWxhdGUgdGhlIGFjdGl2YXRpb24gd2l0aAogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXpl
KCk7IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0
eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOwpAQCAtMTM4LDYgKzE0MSwyNiBA
QCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpCiAKICAgICAgICAgICAg
IHJlc3VsdC0+dmFyaWFibGVBdChTY29wZU9mZnNldChwcm9wZXJ0eS5sb2NhdGlvbigpLmluZm8o
KSkpLnNldChleGVjLT52bSgpLCByZXN1bHQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsK
ICAgICAgICAgfQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVmFs
aWRhdGUgdG8gbWFrZSBzdXJlIGV2ZXJ5IHNsb3QgaW4gdGhlIHNjb3BlIGhhcyBhdCBsZWFzdCBv
bmUgdmFsdWUuCisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcih0YWJsZS0+
bV9sb2NrKTsKKyAgICAgICAgICAgIGZvciAoYXV0byBpdGVyID0gdGFibGUtPmJlZ2luKGxvY2tl
ciksIGVuZCA9IHRhYmxlLT5lbmQobG9ja2VyKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAg
ICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0g
bWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07CisgICAgICAgICAgICAgICAgICAgIGlm
IChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSAhPSBDbG9zdXJlVmFyUExvYykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChTY29w
ZU9mZnNldChwcm9wZXJ0eS5sb2NhdGlvbigpLmluZm8oKSkgPT0gaXRlci0+dmFsdWUuc2NvcGVP
ZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKGZvdW5kKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FjdGl2YXRpb24tc2luay1kZWZh
dWx0LXZhbHVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvYWN0aXZhdGlvbi1zaW5rLWRlZmF1bHQtdmFsdWUuanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FjdGl2YXRpb24tc2luay1kZWZhdWx0
LXZhbHVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAKK3ZhciBuID0gMTAwMDAw
MDA7CisKK2Z1bmN0aW9uIGJhcihmKSB7IGYoMTApOyB9CisKK2Z1bmN0aW9uIGZvbyhiKSB7Cisg
ICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIGltVW5kZWZpbmVkOworICAgIHZhciBzZXQgPSBm
dW5jdGlvbiAoeCkgeyByZXN1bHQgPSB4OyByZXR1cm4gaW1VbmRlZmluZWQ7IH0KKyAgICBpZiAo
YikgeworICAgICAgICBiYXIoc2V0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSAxMCkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkOiAiICsgcmVzdWx0OworICAgICAgICBpZiAoaW1VbmRl
ZmluZWQgIT09IHZvaWQgMCkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAi
ICsgaW1VbmRlZmluZWQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitub0lubGluZShiYXIpOworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCBuOyBpKyspIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKCEoaSAlIDEwMCkpOworICAg
IGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsg
cmVzdWx0OworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hY3Rp
dmF0aW9uLXNpbmstb3NyZXhpdC1kZWZhdWx0LXZhbHVlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYWN0aXZhdGlvbi1zaW5rLW9zcmV4aXQtZGVm
YXVsdC12YWx1ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvYWN0aXZhdGlvbi1zaW5rLW9zcmV4aXQtZGVmYXVsdC12YWx1ZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACit2YXIgbiA9IDEwMDAwMDAwOworCitmdW5jdGlvbiBi
YXIoc2V0KSB7IAorICAgIHZhciByZXN1bHQgPSBzZXQoMCk7CisgICAgaWYgKHJlc3VsdCAhPT0g
dm9pZCAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHJlc3VsdDsKK30K
KworZnVuY3Rpb24gZm9vKGIpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgaW1VbmRl
ZmluZWQ7CisgICAgdmFyIHNldCA9IGZ1bmN0aW9uICh4KSB7IAorICAgICAgICByZXN1bHQgPSB4
OyAKKyAgICAgICAgcmV0dXJuIGltVW5kZWZpbmVkOworICAgIH0KKyAgICBpZiAoYikgeworICAg
ICAgICBPU1JFeGl0KCk7CisgICAgICAgIGlmIChiKSB7CisgICAgICAgICAgICBiYXIoc2V0KTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworbm9JbmxpbmUoYmFyKTsKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgbjsgaSsrKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyghKGkgJSAxMDApKTsKKyAgICBpZiAo
cmVzdWx0ICE9IDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3Vs
dDsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253466</attachid>
            <date>2015-05-20 15:24:40 -0700</date>
            <delta_ts>2015-05-21 18:12:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>work-backup.diff</filename>
            <type>text/plain</type>
            <size>19811</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0NjY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE1LTA1LTIwICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBPYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlIHNob3VsZCBleHBsaWNpdGx5IGNy
ZWF0ZSBib3R0b20gdmFsdWVzIGZvciBDcmVhdGVBY3RpdmF0aW9uIHNpbmsgY2FuZGlkYXRlcyBh
bmQgQ3JlYXRlQWN0aXZhdGlvbiBzaG91bGQgaGF2ZSBTeW1ib2xUYWJsZSBhcyBhIGNoaWxkIG5v
ZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTE5
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4g
d2Ugc2luayBDcmVhdGVBY3RpdmF0aW9uIGFuZCBnZW5lcmF0ZSBNYXRlcmlhbGl6ZUNyZWF0ZUFj
dGl2YXRpb24KKyAgICAgICAgaW4gdGhlIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2Us
IHdlIG5vdyBleHBsaWN0bHkgYWRkIFB1dEhpbnRzIGZvciAKKyAgICAgICAgYWxsIHZhcmlhYmxl
cyBvbiB0aGUgYWN0aXZhdGlvbiBzZXR0aW5nIHRob3NlIHZhcmlhYmxlcyB0byB0aGVpciBkZWZh
dWx0IHZhbHVlIAorICAgICAgICAodW5kZWZpbmVkIGZvciBGdW5jdGlvbiBhY3RpdmF0aW9ucyBh
bmQgc29vbiB0byBiZSBKUyBFbXB0eSBWYWx1ZSBmb3IgYmxvY2sgc2NvcGUgYWN0aXZhdGlvbnMp
LiAKKyAgICAgICAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIGNvZGUgdGhhdCBmaWxscyBGVEwg
ZmFzdCBhY3RpdmF0aW9uIGFsbG9jYXRpb25zIHdpdGggVW5kZWZpbmVkLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWxzbyBhZGRzIHRoZSB0aGUgY29uc3RhbnQgU3ltYm9sVGFibGUgYXMgYW4gT3BJ
bmZvIG9mIENyZWF0ZUFjdGl2YXRpb24gCisgICAgICAgIG5vZGVzLiBUaGlzIGlzIGluIHByZXBh
cmF0aW9uIGZvciBFUzYgYmxvY2sgc2NvcGluZyB3aGljaCB3aWxsIGludHJvZHVjZSBhIG5ldyAK
KyAgICAgICAgb3AgY29kZSB0aGF0IGdldHMgbG93ZXJlZCB0byBDcmVhdGVBY3RpdmF0aW9uLgor
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0NlbGxPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpoYXNDZWxsT3BlcmFuZDIpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OmNlbGxPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjZWxsT3BlcmFu
ZDIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNhc3RPcGVyYW5kKToKKyAgICAgICAgKiBk
ZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6bG93ZXJOb25SZWFkaW5nT3BlcmF0aW9u
c09uUGhhbnRvbUFsbG9jYXRpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlOjpjcmVhdGVNYXRlcmlhbGl6ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6cG9wdWxhdGVNYXRlcmlhbGl6ZSk6
CisgICAgICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdU
Rjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9u
Lmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRpb24pOgorICAgICAgICAq
IGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZU1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAg
ICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJhdGlvbk1h
dGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hY3RpdmF0aW9u
LXNpbmstZGVmYXVsdC12YWx1ZS5qczogQWRkZWQuCisgICAgICAgIChiYXIpOgorICAgICAgICAq
IHRlc3RzL3N0cmVzcy9hY3RpdmF0aW9uLXNpbmstb3NyZXhpdC1kZWZhdWx0LXZhbHVlLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGZvby5zZXQgcmVzdWx0KToKKwogMjAxNS0wNS0yMCAgQW5kcmVhcyBL
bGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRWRlbiBjb2xsZWN0aW9ucyBzaG91
bGQgZXh0ZW5kIHRoZSBJbmNyZW1lbnRhbFN3ZWVwZXIgd29yayBsaXN0LCBub3QgcmVwbGFjZSBp
dC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxODQ1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzczMSw3ICszNzMxLDggQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewot
ICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25tZW50ID0gYWRkVG9HcmFwaChDcmVhdGVB
Y3RpdmF0aW9uLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBo
LmZyZWV6ZVN0cm9uZyhtX2dyYXBoLnN5bWJvbFRhYmxlRm9yKGN1cnJlbnROb2RlT3JpZ2luKCku
c2VtYW50aWMpKTsKKyAgICAgICAgICAgIE5vZGUqIGxleGljYWxFbnZpcm9ubWVudCA9IGFkZFRv
R3JhcGgoQ3JlYXRlQWN0aXZhdGlvbiwgT3BJbmZvKHN5bWJvbFRhYmxlKSwgZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgbGV4
aWNhbEVudmlyb25tZW50KTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCksIGxleGljYWxFbnZpcm9ubWVudCk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTg0NTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjog
ewotICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBncmFwaC5zeW1ib2xUYWJsZUZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBub2RlLT5j
YXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7CiAgICAgICAgIGlmICh0YWJsZS0+c2luZ2xldG9u
U2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICB3cml0ZShXYXRjaHBvaW50X2Zp
cmUpOwogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTg0NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyODIsNiArMTI4MiwxNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgICAgICBjYXNl
IE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAgIGNhc2UgQ3Jl
YXRlQWN0aXZhdGlvbjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBoYXNDZWxsT3BlcmFuZDIoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAg
ICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MjkzLDYgKzEzMDQsMTIgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoaGFzQ2VsbE9w
ZXJhbmQoKSk7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEZyb3plblZhbHVlKj4o
bV9vcEluZm8pOwogICAgIH0KKworICAgIEZyb3plblZhbHVlKiBjZWxsT3BlcmFuZDIoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGhhc0NlbGxPcGVyYW5kMigpKTsKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8RnJvemVuVmFsdWUqPihtX29wSW5mbzIpOworICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIFQgY2FzdE9wZXJhbmQoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODQ1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01ODYsNiArNTg2LDI3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4ICsgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihBY3RpdmF0aW9uU2NvcGVQTG9jLCBub2RlKS5jcmVhdGVIaW50KAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLT5vcmlnaW4sIG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3ltYm9s
VGFibGVOb2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgbm9kZS0+b3JpZ2luLCBub2RlLT5jZWxsT3Bl
cmFuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uKEFjdGl2YXRpb25TeW1ib2xUYWJs
ZVBMb2MsIG5vZGUpLmNyZWF0ZUhpbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG5vZGUtPm9yaWdpbiwgc3ltYm9sVGFibGVOb2RlKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUgPSBub2RlLT5jYXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogdW5kZWZpbmVkID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCAr
IDEsIG5vZGUtPm9yaWdpbiwganNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBzeW1ib2xUYWJsZS0+
YmVnaW4obG9ja2VyKSwgZW5kID0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBM
b2NhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbG9zdXJl
VmFyUExvYywgbm9kZSwgaXRlci0+dmFsdWUuc2NvcGVPZmZzZXQoKS5vZmZzZXQoKSkuY3JlYXRl
SGludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBu
b2RlLT5vcmlnaW4sIHVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb24oKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTU5Nyw2ICs2MTgsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uKEFjdGl2YXRpb25TY29w
ZVBMb2MsIG5vZGUpLmNyZWF0ZUhpbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG5vZGUtPm9yaWdpbiwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS5ub2Rl
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN5bWJvbFRhYmxlTm9kZSA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCArIDEsIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2VsbE9wZXJhbmQyKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oQWN0aXZhdGlvblN5bWJvbFRhYmxlUExvYywgbm9kZSku
Y3JlYXRlSGludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9k
ZS0+b3JpZ2luLCBzeW1ib2xUYWJsZU5vZGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE9i
amVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gZGF0YS5tX3Byb3BlcnRpZXNbaV0u
bV9pZGVudGlmaWVyTnVtYmVyOwpAQCAtODI5LDcgKzg1Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgICAg
ICBpZiAoIW1fZ3JhcGguc3ltYm9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c2lu
Z2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmNh
c3RPcGVyYW5kPFN5bWJvbFRhYmxlKj4oKS0+c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlk
KCkpCiAgICAgICAgICAgICAgICAgc2lua0NhbmRpZGF0ZSgpOwogICAgICAgICAgICAgZXNjYXBl
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTkzMiwxMyAr
OTU5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAg
ICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246IHsKICAgICAgICAgICAgIE9iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEqIGRhdGEgPSBtX2dyYXBoLm1fb2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YS5hZGQoKTsKLQorICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0g
ZXNjYXBlZS0+b3AoKSA9PSBDcmVhdGVBY3RpdmF0aW9uID8gZXNjYXBlZS0+Y2VsbE9wZXJhbmQo
KSA6IGVzY2FwZWUtPmNlbGxPcGVyYW5kMigpOwogICAgICAgICAgICAgcmVzdWx0ID0gbV9ncmFw
aC5hZGROb2RlKAogICAgICAgICAgICAgICAgIGVzY2FwZWUtPnByZWRpY3Rpb24oKSwgTm9kZTo6
VmFyQXJnLCBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb24sCiAgICAgICAgICAgICAgICAgTm9k
ZU9yaWdpbigKICAgICAgICAgICAgICAgICAgICAgZXNjYXBlZS0+b3JpZ2luLnNlbWFudGljLAog
ICAgICAgICAgICAgICAgICAgICB3aGVyZS0+b3JpZ2luLmZvckV4aXQpLAotICAgICAgICAgICAg
ICAgIE9wSW5mbyhkYXRhKSwgT3BJbmZvKCksIDAsIDApOworICAgICAgICAgICAgICAgIE9wSW5m
byhkYXRhKSwgT3BJbmZvKHN5bWJvbFRhYmxlKSwgMCwgMCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCkBAIC0xMDA5LDYgKzEwMzYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
VmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPiBsb2NhdGlvbnMgPSBtX2xvY2F0aW9uc0ZvckFs
bG9jYXRpb24uZ2V0KGVzY2FwZWUpOwogCiAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlv
biBzY29wZShBY3RpdmF0aW9uU2NvcGVQTG9jLCBlc2NhcGVlKTsKKyAgICAgICAgICAgIFByb21v
dGVkSGVhcExvY2F0aW9uIHN5bWJvbFRhYmxlKEFjdGl2YXRpb25TeW1ib2xUYWJsZVBMb2MsIGVz
Y2FwZWUpOwogICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9ucy5jb250YWlucyhzY29wZSkpOwog
CiAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKEVkZ2UocmVzb2x2
ZShibG9jaywgc2NvcGUpLCBLbm93bkNlbGxVc2UpKTsKQEAgLTEwMjAsNiArMTA0OCwxMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAK
KyAgICAgICAgICAgICAgICBjYXNlIEFjdGl2YXRpb25TeW1ib2xUYWJsZVBMb2M6IHsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uc1tpXSA9PSBzeW1ib2xUYWJsZSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhclBMb2M6IHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSByZXNvbHZlKGJsb2NrLCBsb2NhdGlvbnNbaV0pOwogICAgICAgICAgICAgICAgICAgICBp
ZiAodmFsdWUtPm9wKCkgPT0gQm90dG9tVmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24g
MTg0NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2Nh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEwIEBAIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm8KICAgICBjYXNlIFN0cnVjdHVyZVBMb2M6CiAgICAg
ICAgIG91dC5wcmludCgiU3RydWN0dXJlUExvYyIpOwogICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlIEFjdGl2YXRpb25TeW1ib2xUYWJsZVBMb2M6CisgICAgICAgIG91dC5wcmludCgiQWN0aXZh
dGlvblN5bWJvbFRhYmxlUExvYyIpOworICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNh
c2UgTmFtZWRQcm9wZXJ0eVBMb2M6CiAgICAgICAgIG91dC5wcmludCgiTmFtZWRQcm9wZXJ0eVBM
b2MiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9j
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDE4NDU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsNyBAQCBlbnVtIFByb21vdGVkTG9jYXRpb25LaW5kIHsKICAgICBJbnZhbGlkUHJvbW90
ZWRMb2NhdGlvbktpbmQsCiAgICAgCiAgICAgU3RydWN0dXJlUExvYywKKyAgICBBY3RpdmF0aW9u
U3ltYm9sVGFibGVQTG9jLAogICAgIE5hbWVkUHJvcGVydHlQTG9jLAogICAgIEFyZ3VtZW50UExv
YywKICAgICBBcmd1bWVudENvdW50UExvYywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODQ1ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUyMSw3ICs0NTIxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndh
cmRWYXJhcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihO
b2RlKiBub2RlKQogewotICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1faml0LmdyYXBoKCkuc3lt
Ym9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBTeW1ib2xUYWJsZSogdGFi
bGUgPSBub2RlLT5jYXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcigKICAgICAgICAgbm9kZS0+
b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShy
ZXZpc2lvbiAxODQ1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk0Nyw3ICsyOTQ3LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKCkKICAgICB7CiAgICAgICAgIExWYWx1
ZSBzY29wZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIFN5bWJvbFRhYmxl
KiB0YWJsZSA9IG1fZ3JhcGguc3ltYm9sVGFibGVGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPFN5bWJv
bFRhYmxlKj4oKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUo
KTsKICAgICAgICAgCiAgICAgICAgIGlmICh0YWJsZS0+c2luZ2xldG9uU2NvcGUoKS0+aXNTdGls
bFZhbGlkKCkpIHsKQEAgLTUyNjQsNyArNTI2NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2
YWx1ZXMuYXBwZW5kKGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEgKyBp
KSkpOwogCiAgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDApKTsKLSAgICAgICAgU3ltYm9sVGFibGUqIHRhYmxlID0gbV9ncmFwaC5zeW1i
b2xUYWJsZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIFN5bWJvbFRhYmxl
KiB0YWJsZSA9IG1fbm9kZS0+Y2VsbE9wZXJhbmQyKCktPmNhc3Q8U3ltYm9sVGFibGUqPigpOwog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpOwogCiAgICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6
ZUNyZWF0ZUFjdGl2YXRpb24gc2xvdyBwYXRoIikpOwpAQCAtNTI3OCwxMSArNTI3OCw2IEBAIHBy
aXZhdGU6CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHNjb3BlLCBmYXN0T2JqZWN0LCBtX2hlYXBz
LkpTU2NvcGVfbmV4dCk7CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHdlYWtQb2ludGVyKHRhYmxl
KSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU1N5bWJvbFRhYmxlT2JqZWN0X3N5bWJvbFRhYmxlKTsK
IAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUtPnNjb3BlU2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLAotICAgICAgICAgICAg
ICAgIGZhc3RPYmplY3QsIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZXNbaV0p
OwotICAgICAgICB9CiAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihmYXN0T2JqZWN0KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpA
QCAtNTI5NiwxMSArNTI5MSwyOSBAQCBwcml2YXRlOgogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICBMVmFsdWUgYWN0aXZhdGlvbiA9IG1f
b3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChkYXRhLm1fcHJvcGVydGllcy5zaXplKCkgPj0gdGFibGUtPnNjb3BlU2l6
ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlc1tpXSwKICAg
ICAgICAgICAgICAgICBhY3RpdmF0aW9uLAogICAgICAgICAgICAgICAgIG1faGVhcHMuSlNFbnZp
cm9ubWVudFJlY29yZF92YXJpYWJsZXNbZGF0YS5tX3Byb3BlcnRpZXNbaV0ubV9pZGVudGlmaWVy
TnVtYmVyXSk7CiAgICAgICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gVmFsaWRhdGUgdG8gbWFrZSBzdXJlIGV2ZXJ5IHNsb3QgaW4gdGhlIHNjb3BlIGhh
cyBhdCBsZWFzdCBvbmUgdmFsdWUuCisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcih0YWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgIGZvciAoYXV0byBpdGVyID0gdGFibGUt
PmJlZ2luKGxvY2tlciksIGVuZCA9IHRhYmxlLT5lbmQobG9ja2VyKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgeworICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLnNjb3BlT2Zmc2V0KCku
b2Zmc2V0KCkgPT0gZGF0YS5tX3Byb3BlcnRpZXNbaV0ubV9pZGVudGlmaWVyTnVtYmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBBU1NFUlQoZm91bmQpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisj
ZW5kaWYKICAgICAgICAgc2V0SlNWYWx1ZShhY3RpdmF0aW9uKTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTg0
NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE1LDIxICsxMTUsMjQgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aQogICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246IHsKICAg
ICAgICAgLy8gRmlndXJlIG91dCB3aGVyZSB0aGUgc2NvcGUgaXMKICAgICAgICAgSlNTY29wZSog
c2NvcGUgPSBudWxscHRyOworICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBudWxscHRyOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5z
aXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9w
ZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOwotICAgICAgICAgICAgaWYg
KHByb3BlcnR5LmxvY2F0aW9uKCkgIT0gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoQWN0aXZh
dGlvblNjb3BlUExvYykpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBz
Y29wZSA9IGpzQ2FzdDxKU1Njb3BlKj4oSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAg
ICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkgPT0gUHJvbW90ZWRMb2NhdGlvbkRlc2Ny
aXB0b3IoQWN0aXZhdGlvblNjb3BlUExvYykpCisgICAgICAgICAgICAgICAgc2NvcGUgPSBqc0Nh
c3Q8SlNTY29wZSo+KEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkgPT0gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3Io
QWN0aXZhdGlvblN5bWJvbFRhYmxlUExvYykpCisgICAgICAgICAgICAgICAgdGFibGUgPSBqc0Nh
c3Q8U3ltYm9sVGFibGUqPihKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7CiAgICAgICAgIH0K
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NvcGUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0
YWJsZSk7CiAKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9j
a0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKAogICAgICAgICAgICAgbWF0ZXJpYWxpemF0
aW9uLT5vcmlnaW4oKSwgZXhlYy0+Y29kZUJsb2NrKCkpOwotICAgICAgICBTeW1ib2xUYWJsZSog
dGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgp
OwogCiAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiByZXN1bHQgPSBKU0xleGljYWxFbnZp
cm9ubWVudDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHNjb3BlLCB0YWJsZSk7CiAKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpID49IHRh
YmxlLT5zY29wZVNpemUoKSk7CiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBwb3B1bGF0
ZSB0aGUgYWN0aXZhdGlvbiB3aXRoCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFs
aXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgY29uc3Qg
RXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVz
KClbaV07CkBAIC0xMzgsNiArMTQxLDI2IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGkKIAogICAgICAgICAgICAgcmVzdWx0LT52YXJpYWJsZUF0KFNjb3BlT2Zmc2V0
KHByb3BlcnR5LmxvY2F0aW9uKCkuaW5mbygpKSkuc2V0KGV4ZWMtPnZtKCksIHJlc3VsdCwgSlNW
YWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOwogICAgICAgICB9CisjaWZuZGVmIE5ERUJVRworICAg
ICAgICB7CisgICAgICAgICAgICAvLyBWYWxpZGF0ZSB0byBtYWtlIHN1cmUgZXZlcnkgc2xvdCBp
biB0aGUgc2NvcGUgaGFzIGF0IGxlYXN0IG9uZSB2YWx1ZS4KKyAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKHRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgZm9yIChhdXRv
IGl0ZXIgPSB0YWJsZS0+YmVnaW4obG9ja2VyKSwgZW5kID0gdGFibGUtPmVuZChsb2NrZXIpOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJv
cGVydGllcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBFeGl0
UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtp
XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpICE9
IENsb3N1cmVWYXJQTG9jKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKFNjb3BlT2Zmc2V0KHByb3BlcnR5LmxvY2F0aW9uKCkuaW5m
bygpKSA9PSBpdGVyLT52YWx1ZS5zY29wZU9mZnNldCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NF
UlQoZm91bmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvYWN0aXZhdGlvbi1zaW5rLWRlZmF1bHQtdmFsdWUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hY3RpdmF0aW9uLXNpbmstZGVmYXVsdC12
YWx1ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvYWN0aXZhdGlvbi1zaW5rLWRlZmF1bHQtdmFsdWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNyBAQAordmFyIG4gPSAxMDAwMDAwMDsKKworZnVuY3Rpb24gYmFyKGYpIHsgZigxMCk7
IH0KKworZnVuY3Rpb24gZm9vKGIpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgaW1V
bmRlZmluZWQ7CisgICAgdmFyIHNldCA9IGZ1bmN0aW9uICh4KSB7IHJlc3VsdCA9IHg7IHJldHVy
biBpbVVuZGVmaW5lZDsgfQorICAgIGlmIChiKSB7CisgICAgICAgIGJhcihzZXQpOworICAgICAg
ICBpZiAocmVzdWx0ICE9IDEwKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQ6ICIgKyBy
ZXN1bHQ7CisgICAgICAgIGlmIChpbVVuZGVmaW5lZCAhPT0gdm9pZCAwKQorICAgICAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBpbVVuZGVmaW5lZDsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGJhcik7Citub0lu
bGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgeworICAgIHZhciByZXN1
bHQgPSBmb28oIShpICUgMTAwKSk7CisgICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2FjdGl2YXRpb24tc2luay1vc3JleGl0LWRlZmF1bHQtdmFs
dWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9h
Y3RpdmF0aW9uLXNpbmstb3NyZXhpdC1kZWZhdWx0LXZhbHVlLmpzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hY3RpdmF0aW9uLXNpbmstb3NyZXhp
dC1kZWZhdWx0LXZhbHVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKK3ZhciBu
ID0gMTAwMDAwMDA7CisKK2Z1bmN0aW9uIGJhcihzZXQpIHsgCisgICAgdmFyIHJlc3VsdCA9IHNl
dCgwKTsKKyAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHZhbHVlOiAiICsgcmVzdWx0OworfQorCitmdW5jdGlvbiBmb28oYikgeworICAgIHZhciBy
ZXN1bHQgPSAwOworICAgIHZhciBpbVVuZGVmaW5lZDsKKyAgICB2YXIgc2V0ID0gZnVuY3Rpb24g
KHgpIHsgCisgICAgICAgIHJlc3VsdCA9IHg7IAorICAgICAgICByZXR1cm4gaW1VbmRlZmluZWQ7
CisgICAgfQorICAgIGlmIChiKSB7CisgICAgICAgIE9TUkV4aXQoKTsKKyAgICAgICAgaWYgKGIp
IHsKKyAgICAgICAgICAgIGJhcihzZXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitub0lubGluZShiYXIpOworbm9JbmxpbmUo
Zm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICB2YXIgcmVzdWx0ID0g
Zm9vKCEoaSAlIDEwMCkpOworICAgIGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253566</attachid>
            <date>2015-05-21 18:12:24 -0700</date>
            <delta_ts>2015-05-21 18:18:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>work-backup.diff</filename>
            <type>text/plain</type>
            <size>20236</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0NzQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDE1LTA1LTIxICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBPYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlIHNob3VsZCBleHBsaWNpdGx5IGNy
ZWF0ZSBib3R0b20gdmFsdWVzIGZvciBDcmVhdGVBY3RpdmF0aW9uIHNpbmsgY2FuZGlkYXRlcyBh
bmQgQ3JlYXRlQWN0aXZhdGlvbiBzaG91bGQgaGF2ZSBTeW1ib2xUYWJsZSBhcyBhIGNoaWxkIG5v
ZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTE5
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4g
d2Ugc2luayBDcmVhdGVBY3RpdmF0aW9uIGFuZCBnZW5lcmF0ZSBNYXRlcmlhbGl6ZUNyZWF0ZUFj
dGl2YXRpb24KKyAgICAgICAgaW4gdGhlIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2Us
IHdlIG5vdyBleHBsaWN0bHkgYWRkIFB1dEhpbnRzIGZvciAKKyAgICAgICAgYWxsIHZhcmlhYmxl
cyBvbiB0aGUgYWN0aXZhdGlvbiBzZXR0aW5nIHRob3NlIHZhcmlhYmxlcyB0byB0aGVpciBkZWZh
dWx0IHZhbHVlIAorICAgICAgICAodW5kZWZpbmVkIGZvciBGdW5jdGlvbiBhY3RpdmF0aW9ucyBh
bmQgc29vbiB0byBiZSBKUyBFbXB0eSBWYWx1ZSBmb3IgYmxvY2sgc2NvcGUgYWN0aXZhdGlvbnMp
LiAKKyAgICAgICAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIGNvZGUgdGhhdCBmaWxscyBGVEwg
ZmFzdCBhY3RpdmF0aW9uIGFsbG9jYXRpb25zIHdpdGggVW5kZWZpbmVkLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWxzbyBhZGRzIHRoZSBjb25zdGFudCBTeW1ib2xUYWJsZSBhcyBhbiBPcEluZm8g
b2YgQ3JlYXRlQWN0aXZhdGlvbiBhbmQgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uCisgICAg
ICAgIG5vZGVzLiBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBFUzYgYmxvY2sgc2NvcGluZyB3
aGljaCB3aWxsIGludHJvZHVjZSBhIG5ldyAKKyAgICAgICAgb3AgY29kZSB0aGF0IGdldHMgbG93
ZXJlZCB0byBDcmVhdGVBY3RpdmF0aW9uLgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9i
YmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Omhhc0NlbGxPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjZWxsT3BlcmFu
ZCk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Omxvd2VyTm9u
UmVhZGluZ09wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6OkRG
Rzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6Y3JlYXRlTWF0ZXJpYWxpemUp
OgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnBvcHVs
YXRlTWF0ZXJpYWxpemUpOgorICAgICAgICAqIGRmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5j
cHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmF0
aW9uKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2
YXRpb24pOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAgKiB0ZXN0cy9z
dHJlc3MvYWN0aXZhdGlvbi1zaW5rLWRlZmF1bHQtdmFsdWUuanM6IEFkZGVkLgorICAgICAgICAo
YmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvYWN0aXZhdGlvbi1zaW5rLW9zcmV4aXQtZGVm
YXVsdC12YWx1ZS5qczogQWRkZWQuCisgICAgICAgIChmb28uc2V0IHJlc3VsdCk6CisKIDIwMTUt
MDUtMjEgIFBlciBBcm5lIFZvbGxhbiAgPHBlYXZvQG91dGxvb2suY29tPgogCiAgICAgICAgIE1T
VkMgaW50ZXJuYWwgY29tcGlsZXIgZXJyb3Igd2hlbiBjb21waWxpbmcgVGVtcGxhdGVSZWdpc3Ry
eUtleSBjbGFzcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODQ1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzczMSw3ICsz
NzMxLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9u
bWVudDogewotICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25tZW50ID0gYWRkVG9HcmFw
aChDcmVhdGVBY3RpdmF0aW9uLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUg
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2dyYXBoLnN5bWJvbFRhYmxlRm9yKGN1cnJlbnROb2Rl
T3JpZ2luKCkuc2VtYW50aWMpKTsKKyAgICAgICAgICAgIE5vZGUqIGxleGljYWxFbnZpcm9ubWVu
dCA9IGFkZFRvR3JhcGgoQ3JlYXRlQWN0aXZhdGlvbiwgT3BJbmZvKHN5bWJvbFRhYmxlKSwgZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwogICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwgbGV4aWNhbEVudmlyb25tZW50KTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCksIGxleGljYWxFbnZpcm9ubWVudCk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNp
b24gMTg0NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQ3JlYXRlQWN0
aXZhdGlvbjogewotICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBncmFwaC5zeW1ib2xUYWJs
ZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUg
PSBub2RlLT5jYXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7CiAgICAgICAgIGlmICh0YWJsZS0+
c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICB3cml0ZShXYXRj
aHBvaW50X2ZpcmUpOwogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTg0NTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyODIsNiArMTI4
Miw4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAg
ICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICAgICAgY2FzZSBOZXdGdW5jdGlvbjoKKyAgICAgICAg
Y2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0
aXZhdGlvbjoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI5MSw3ICsxMjkzLDEzIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICBGcm96ZW5WYWx1ZSogY2VsbE9wZXJhbmQoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGhhc0NlbGxPcGVyYW5kKCkpOwotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxGcm96
ZW5WYWx1ZSo+KG1fb3BJbmZvKTsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgICAg
ICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxGcm96ZW5WYWx1ZSo+KG1fb3BJbmZvMik7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEZyb3pl
blZhbHVlKj4obV9vcEluZm8pOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4NDU4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4Niw2ICs1ODYsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFByb21vdGVkSGVhcExvY2F0aW9uKEFjdGl2YXRpb25TY29wZVBMb2MsIG5vZGUpLmNyZWF0ZUhp
bnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUtPm9yaWdp
biwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBzeW1ib2xUYWJsZU5vZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBub2RlLT5vcmlnaW4sIG5vZGUt
PmNlbGxPcGVyYW5kKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oQWN0aXZhdGlvblN5
bWJvbFRhYmxlUExvYywgbm9kZSkuY3JlYXRlSGludCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBzeW1ib2xUYWJsZU5vZGUpKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSA9IG5vZGUtPmNhc3RPcGVyYW5kPFN5bWJvbFRhYmxlKj4oKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiB1bmRlZmluZWQgPSBtX2luc2VydGlv
blNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4ICsgMSwgbm9kZS0+b3JpZ2luLCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9s
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHN5bWJv
bFRhYmxlLT5iZWdpbihsb2NrZXIpLCBlbmQgPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcik7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21v
dGVkSGVhcExvY2F0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENsb3N1cmVWYXJQTG9jLCBub2RlLCBpdGVyLT52YWx1ZS5zY29wZU9mZnNldCgpLm9mZnNldCgp
KS5jcmVhdGVIaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgsIG5vZGUtPm9yaWdpbiwgdW5kZWZpbmVkKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tQ3JlYXRlQWN0aXZhdGlvbigpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTk3LDYgKzYxOCwx
MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24oQWN0aXZh
dGlvblNjb3BlUExvYywgbm9kZSkuY3JlYXRlSGludCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogc3ltYm9sVGFibGVO
b2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4ICsgMSwgbm9kZS0+b3JpZ2luLCBub2RlLT5jZWxsT3BlcmFuZCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0aW9uKEFjdGl2YXRpb25TeW1ib2xUYWJsZVBMb2Ms
IG5vZGUpLmNyZWF0ZUhpbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIG5vZGUtPm9yaWdpbiwgc3ltYm9sVGFibGVOb2RlKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBkYXRhID0gbm9kZS0+b2JqZWN0TWF0ZXJp
YWxpemF0aW9uRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IGRhdGEubV9wcm9wZXJ0
aWVzW2ldLm1faWRlbnRpZmllck51bWJlcjsKQEAgLTgyOSw3ICs4NTYsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgotICAg
ICAgICAgICAgaWYgKCFtX2dyYXBoLnN5bWJvbFRhYmxlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPnNpbmdsZXRvblNjb3BlKCktPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgaWYgKCFu
b2RlLT5jYXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCktPnNpbmdsZXRvblNjb3BlKCktPmlzU3Rp
bGxWYWxpZCgpKQogICAgICAgICAgICAgICAgIHNpbmtDYW5kaWRhdGUoKTsKICAgICAgICAgICAg
IGVzY2FwZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05
MzIsMTMgKzk1OSwxMyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246
CiAgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOiB7CiAgICAgICAgICAg
ICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKiBkYXRhID0gbV9ncmFwaC5tX29iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEuYWRkKCk7Ci0KKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xU
YWJsZSA9IGVzY2FwZWUtPmNlbGxPcGVyYW5kKCk7CiAgICAgICAgICAgICByZXN1bHQgPSBtX2dy
YXBoLmFkZE5vZGUoCiAgICAgICAgICAgICAgICAgZXNjYXBlZS0+cHJlZGljdGlvbigpLCBOb2Rl
OjpWYXJBcmcsIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbiwKICAgICAgICAgICAgICAgICBO
b2RlT3JpZ2luKAogICAgICAgICAgICAgICAgICAgICBlc2NhcGVlLT5vcmlnaW4uc2VtYW50aWMs
CiAgICAgICAgICAgICAgICAgICAgIHdoZXJlLT5vcmlnaW4uZm9yRXhpdCksCi0gICAgICAgICAg
ICAgICAgT3BJbmZvKGRhdGEpLCBPcEluZm8oKSwgMCwgMCk7CisgICAgICAgICAgICAgICAgT3BJ
bmZvKGRhdGEpLCBPcEluZm8oc3ltYm9sVGFibGUpLCAwLCAwKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKQEAgLTEwMDksNiArMTAzNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+IGxvY2F0aW9ucyA9IG1fbG9jYXRpb25zRm9y
QWxsb2NhdGlvbi5nZXQoZXNjYXBlZSk7CiAKICAgICAgICAgICAgIFByb21vdGVkSGVhcExvY2F0
aW9uIHNjb3BlKEFjdGl2YXRpb25TY29wZVBMb2MsIGVzY2FwZWUpOworICAgICAgICAgICAgUHJv
bW90ZWRIZWFwTG9jYXRpb24gc3ltYm9sVGFibGUoQWN0aXZhdGlvblN5bWJvbFRhYmxlUExvYywg
ZXNjYXBlZSk7CiAgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zLmNvbnRhaW5zKHNjb3BlKSk7
CiAKICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoRWRnZShyZXNv
bHZlKGJsb2NrLCBzY29wZSksIEtub3duQ2VsbFVzZSkpOwpAQCAtMTAyMCw2ICsxMDQ4LDExIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgICAgIGNhc2UgQWN0aXZhdGlvblN5bWJvbFRhYmxlUExvYzogeworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25zW2ldID09IHN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyUExvYzogewogICAgICAgICAgICAgICAgICAgICBOb2RlKiB2
YWx1ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uc1tpXSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmICh2YWx1ZS0+b3AoKSA9PSBCb3R0b21WYWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lv
biAxODQ1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExv
Y2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTAgQEAgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFBybwogICAgIGNhc2UgU3RydWN0dXJlUExvYzoKICAg
ICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVQTG9jIik7CiAgICAgICAgIHJldHVybjsKKworICAg
IGNhc2UgQWN0aXZhdGlvblN5bWJvbFRhYmxlUExvYzoKKyAgICAgICAgb3V0LnByaW50KCJBY3Rp
dmF0aW9uU3ltYm9sVGFibGVQTG9jIik7CisgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBOYW1lZFByb3BlcnR5UExvYzoKICAgICAgICAgb3V0LnByaW50KCJOYW1lZFByb3BlcnR5
UExvYyIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBM
b2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
bW90ZWRIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMTg0NTg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBAIGVudW0gUHJvbW90ZWRMb2NhdGlvbktpbmQgewogICAgIEludmFsaWRQcm9t
b3RlZExvY2F0aW9uS2luZCwKICAgICAKICAgICBTdHJ1Y3R1cmVQTG9jLAorICAgIEFjdGl2YXRp
b25TeW1ib2xUYWJsZVBMb2MsCiAgICAgTmFtZWRQcm9wZXJ0eVBMb2MsCiAgICAgQXJndW1lbnRQ
TG9jLAogICAgIEFyZ3VtZW50Q291bnRQTG9jLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4NDU4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTIxLDcgKzQ1MjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRm9y
d2FyZFZhcmFyCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmF0aW9u
KE5vZGUqIG5vZGUpCiB7Ci0gICAgU3ltYm9sVGFibGUqIHRhYmxlID0gbV9qaXQuZ3JhcGgoKS5z
eW1ib2xUYWJsZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgIFN5bWJvbFRhYmxlKiB0
YWJsZSA9IG5vZGUtPmNhc3RPcGVyYW5kPFN5bWJvbFRhYmxlKj4oKTsKICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKAogICAgICAgICBub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHJldmlzaW9uIDE4NDU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQ3LDcgKzI5NDcsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oKQogICAgIHsKICAgICAgICAgTFZh
bHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3ltYm9sVGFi
bGUqIHRhYmxlID0gbV9ncmFwaC5zeW1ib2xUYWJsZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7CisgICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1fbm9kZS0+Y2FzdE9wZXJhbmQ8U3lt
Ym9sVGFibGUqPigpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVy
ZSgpOwogICAgICAgICAKICAgICAgICAgaWYgKHRhYmxlLT5zaW5nbGV0b25TY29wZSgpLT5pc1N0
aWxsVmFsaWQoKSkgewpAQCAtNTI2NCw3ICs1MjY0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHZhbHVlcy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSAr
IGkpKSk7CiAKICAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMCkpOwotICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBtX2dyYXBoLnN5
bWJvbFRhYmxlRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgU3ltYm9sVGFi
bGUqIHRhYmxlID0gbV9ub2RlLT5jYXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7CiAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7CiAKICAgICAgICAgTEJhc2lj
QmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplQ3JlYXRl
QWN0aXZhdGlvbiBzbG93IHBhdGgiKSk7CkBAIC01Mjc4LDExICs1Mjc4LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIGZhc3RPYmplY3QsIG1faGVhcHMuSlNTY29w
ZV9uZXh0KTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIod2Vha1BvaW50ZXIodGFibGUpLCBmYXN0
T2JqZWN0LCBtX2hlYXBzLkpTU3ltYm9sVGFibGVPYmplY3Rfc3ltYm9sVGFibGUpOwogCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+c2NvcGVTaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdElu
dDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksCi0gICAgICAgICAgICAgICAgZmFz
dE9iamVjdCwgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1tpXSk7Ci0gICAg
ICAgIH0KIAogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGZhc3RPYmplY3QpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CkBAIC01Mjk2
LDExICs1MjkxLDI4IEBAIHByaXZhdGU6CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIExWYWx1ZSBhY3RpdmF0aW9uID0gbV9vdXQucGhp
KG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKSA9PSB0YWJsZS0+c2NvcGVTaXplKCkpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWVzW2ldLAogICAgICAgICAg
ICAgICAgIGFjdGl2YXRpb24sCiAgICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmlyb25tZW50
UmVjb3JkX3ZhcmlhYmxlc1tkYXRhLm1fcHJvcGVydGllc1tpXS5tX2lkZW50aWZpZXJOdW1iZXJd
KTsKICAgICAgICAgfQorCisgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7CisgICAg
ICAgICAgICAvLyBWYWxpZGF0ZSB0byBtYWtlIHN1cmUgZXZlcnkgc2xvdCBpbiB0aGUgc2NvcGUg
aGFzIG9uZSB2YWx1ZS4KKyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRh
YmxlLT5tX2xvY2spOworICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSB0YWJsZS0+YmVnaW4o
bG9ja2VyKSwgZW5kID0gdGFibGUtPmVuZChsb2NrZXIpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CisgICAgICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUuc2NvcGVPZmZzZXQoKS5vZmZzZXQo
KSA9PSBkYXRhLm1fcHJvcGVydGllc1tpXS5tX2lkZW50aWZpZXJOdW1iZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIEFTU0VSVChmb3VuZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAg
ICBzZXRKU1ZhbHVlKGFjdGl2YXRpb24pOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODQ1ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsMjEgKzExNSwyNCBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpCiAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICAvLyBGaWd1
cmUgb3V0IHdoZXJlIHRoZSBzY29wZSBpcwogICAgICAgICBKU1Njb3BlKiBzY29wZSA9IG51bGxw
dHI7CisgICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG51bGxwdHI7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykg
ewogICAgICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJp
YWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07Ci0gICAgICAgICAgICBpZiAocHJvcGVydHkubG9j
YXRpb24oKSAhPSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihBY3RpdmF0aW9uU2NvcGVQTG9j
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHNjb3BlID0ganNDYXN0
PEpTU2NvcGUqPihKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7CisgICAgICAgICAgICBpZiAo
cHJvcGVydHkubG9jYXRpb24oKSA9PSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihBY3RpdmF0
aW9uU2NvcGVQTG9jKSkKKyAgICAgICAgICAgICAgICBzY29wZSA9IGpzQ2FzdDxKU1Njb3BlKj4o
SlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOworICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVy
dHkubG9jYXRpb24oKSA9PSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihBY3RpdmF0aW9uU3lt
Ym9sVGFibGVQTG9jKSkKKyAgICAgICAgICAgICAgICB0YWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJs
ZSo+KEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKICAgICAgICAgfQogICAgICAgICBSRUxF
QVNFX0FTU0VSVChzY29wZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhYmxlKTsKIAogICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2soCiAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigp
LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0gICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IGNvZGVC
bG9jay0+c3ltYm9sVGFibGUoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7CiAKICAgICAgICAg
SlNMZXhpY2FsRW52aXJvbm1lbnQqIHJlc3VsdCA9IEpTTGV4aWNhbEVudmlyb25tZW50OjpjcmVh
dGUodm0sIHN0cnVjdHVyZSwgc2NvcGUsIHRhYmxlKTsKIAorICAgICAgICBSRUxFQVNFX0FTU0VS
VChtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCkgLSAyID09IHRhYmxlLT5zY29w
ZVNpemUoKSk7CiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBwb3B1bGF0ZSB0aGUgYWN0
aXZhdGlvbiB3aXRoCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+
cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgY29uc3QgRXhpdFByb3Bl
cnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07CkBA
IC0xMzksNiArMTQyLDMxIEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGkKICAgICAgICAgICAgIHJlc3VsdC0+dmFyaWFibGVBdChTY29wZU9mZnNldChwcm9wZXJ0eS5s
b2NhdGlvbigpLmluZm8oKSkpLnNldChleGVjLT52bSgpLCByZXN1bHQsIEpTVmFsdWU6OmRlY29k
ZSh2YWx1ZXNbaV0pKTsKICAgICAgICAgfQogCisgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxl
ZCgpKSB7CisgICAgICAgICAgICAvLyBWYWxpZGF0ZSB0byBtYWtlIHN1cmUgZXZlcnkgc2xvdCBp
biB0aGUgc2NvcGUgaGFzIG9uZSB2YWx1ZS4KKyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKHRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSB0
YWJsZS0+YmVnaW4obG9ja2VyKSwgZW5kID0gdGFibGUtPmVuZChsb2NrZXIpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygp
LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlW
YWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpICE9IENsb3N1cmVW
YXJQTG9jKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChTY29wZU9mZnNldChwcm9wZXJ0eS5sb2NhdGlvbigpLmluZm8oKSkgPT0gaXRl
ci0+dmFsdWUuc2NvcGVPZmZzZXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKGZvdW5kKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2xvc3VyZVZhclBs
b2MgPSAwOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5w
cm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgRXhpdFBy
b3BlcnR5VmFsdWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07
CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkua2luZCgpID09IENsb3N1
cmVWYXJQTG9jKQorICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkNsb3N1cmVWYXJQbG9jKys7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQobnVtYmVyT2ZDbG9zdXJlVmFyUGxv
YyA9PSB0YWJsZS0+c2NvcGVTaXplKCkpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
YWN0aXZhdGlvbi1zaW5rLWRlZmF1bHQtdmFsdWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hY3RpdmF0aW9uLXNpbmstZGVmYXVsdC12YWx1ZS5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYWN0
aXZhdGlvbi1zaW5rLWRlZmF1bHQtdmFsdWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MSBAQAordmFyIG4gPSAxMDAwMDAwMDsKKworZnVuY3Rpb24gYmFyKGYpIHsgZigxMCk7IH0KKwor
ZnVuY3Rpb24gZm9vKGIpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgaW1VbmRlZmlu
ZWQ7CisgICAgdmFyIGJhejsKKyAgICB2YXIgc2V0ID0gZnVuY3Rpb24gKHgpIHsgcmVzdWx0ID0g
eDsgcmV0dXJuIChpbVVuZGVmaW5lZCwgYmF6KTsgfQorICAgIGJheiA9IDQwOworICAgIGlmIChi
KSB7CisgICAgICAgIGJhcihzZXQpOworICAgICAgICBpZiAocmVzdWx0ICE9IDEwKQorICAgICAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQ6ICIgKyByZXN1bHQ7CisgICAgICAgIGlmIChiYXogIT09
IDQwKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQ6ICIgKyBiYXo7CisgICAgICAgIGlm
IChpbVVuZGVmaW5lZCAhPT0gdm9pZCAwKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWU6ICIgKyBpbVVuZGVmaW5lZDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGJhcik7Citub0lubGluZShmb28pOworCitmb3Ig
KHZhciBpID0gMDsgaSA8IG47IGkrKykgeworICAgIHZhciByZXN1bHQgPSBmb28oIShpICUgMTAw
KSk7CisgICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQ6ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2FjdGl2YXRpb24tc2luay1vc3JleGl0LWRlZmF1bHQtdmFsdWUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hY3RpdmF0aW9uLXNpbmstb3Ny
ZXhpdC1kZWZhdWx0LXZhbHVlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9hY3RpdmF0aW9uLXNpbmstb3NyZXhpdC1kZWZhdWx0LXZhbHVlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKK3ZhciBuID0gMTAwMDAwMDA7CisKK2Z1
bmN0aW9uIGJhcihzZXQpIHsgCisgICAgdmFyIHJlc3VsdCA9IHNldCgwKTsKKyAgICBpZiAocmVz
dWx0ICE9PSB2b2lkIDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgcmVz
dWx0OworfQorCitmdW5jdGlvbiBmb28oYikgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZh
ciBpbVVuZGVmaW5lZDsKKyAgICB2YXIgYmF6OworICAgIHZhciBzZXQgPSBmdW5jdGlvbiAoeCkg
eyAKKyAgICAgICAgcmVzdWx0ID0geDsgCisgICAgICAgIGlmIChiYXogIT09IDUwKQorICAgICAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBiYXo7CisgICAgICAgIHJldHVybiBp
bVVuZGVmaW5lZDsKKyAgICB9CisgICAgYmF6ID0gNTA7CisgICAgaWYgKGIpIHsKKyAgICAgICAg
T1NSRXhpdCgpOworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgYmFyKHNldCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K25vSW5saW5lKGJhcik7Citub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IG47
IGkrKykgeworICAgIHZhciByZXN1bHQgPSBmb28oIShpICUgMTAwKSk7CisgICAgaWYgKHJlc3Vs
dCAhPSAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253568</attachid>
            <date>2015-05-21 18:18:55 -0700</date>
            <delta_ts>2015-05-21 19:39:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>work-backup.diff</filename>
            <type>text/plain</type>
            <size>20220</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0NzQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDE1LTA1LTIxICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBPYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNlIHNob3VsZCBleHBsaWNpdGx5IGNy
ZWF0ZSBib3R0b20gdmFsdWVzIGZvciBDcmVhdGVBY3RpdmF0aW9uIHNpbmsgY2FuZGlkYXRlcyBh
bmQgQ3JlYXRlQWN0aXZhdGlvbiBzaG91bGQgaGF2ZSBTeW1ib2xUYWJsZSBhcyBhIGNoaWxkIG5v
ZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTE5
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4g
d2Ugc2luayBDcmVhdGVBY3RpdmF0aW9uIGFuZCBnZW5lcmF0ZSBNYXRlcmlhbGl6ZUNyZWF0ZUFj
dGl2YXRpb24KKyAgICAgICAgaW4gdGhlIG9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2Us
IHdlIG5vdyBleHBsaWN0bHkgYWRkIFB1dEhpbnRzIGZvciAKKyAgICAgICAgYWxsIHZhcmlhYmxl
cyBvbiB0aGUgYWN0aXZhdGlvbiBzZXR0aW5nIHRob3NlIHZhcmlhYmxlcyB0byB0aGVpciBkZWZh
dWx0IHZhbHVlIAorICAgICAgICAodW5kZWZpbmVkIGZvciBGdW5jdGlvbiBhY3RpdmF0aW9ucyBh
bmQgc29vbiB0byBiZSBKUyBFbXB0eSBWYWx1ZSBmb3IgYmxvY2sgc2NvcGUgYWN0aXZhdGlvbnMp
LiAKKyAgICAgICAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIGNvZGUgdGhhdCBmaWxscyBGVEwg
ZmFzdCBhY3RpdmF0aW9uIGFsbG9jYXRpb25zIHdpdGggVW5kZWZpbmVkLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWxzbyBhZGRzIHRoZSBjb25zdGFudCBTeW1ib2xUYWJsZSBhcyBhbiBPcEluZm8g
b2YgQ3JlYXRlQWN0aXZhdGlvbiBhbmQgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uCisgICAg
ICAgIG5vZGVzLiBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBFUzYgYmxvY2sgc2NvcGluZyB3
aGljaCB3aWxsIGludHJvZHVjZSBhIG5ldyAKKyAgICAgICAgb3AgY29kZSB0aGF0IGdldHMgbG93
ZXJlZCB0byBDcmVhdGVBY3RpdmF0aW9uLgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9i
YmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Omhhc0NlbGxPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjZWxsT3BlcmFu
ZCk6CisgICAgICAgICogZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Omxvd2VyTm9u
UmVhZGluZ09wZXJhdGlvbnNPblBoYW50b21BbGxvY2F0aW9ucyk6CisgICAgICAgIChKU0M6OkRG
Rzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZTo6Y3JlYXRlTWF0ZXJpYWxpemUp
OgorICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnBvcHVs
YXRlTWF0ZXJpYWxpemUpOgorICAgICAgICAqIGRmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5j
cHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmF0
aW9uKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2
YXRpb24pOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpvcGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKToKKyAgICAgICAgKiB0ZXN0cy9z
dHJlc3MvYWN0aXZhdGlvbi1zaW5rLWRlZmF1bHQtdmFsdWUuanM6IEFkZGVkLgorICAgICAgICAo
YmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvYWN0aXZhdGlvbi1zaW5rLW9zcmV4aXQtZGVm
YXVsdC12YWx1ZS5qczogQWRkZWQuCisgICAgICAgIChmb28uc2V0IHJlc3VsdCk6CisKIDIwMTUt
MDUtMjEgIFBlciBBcm5lIFZvbGxhbiAgPHBlYXZvQG91dGxvb2suY29tPgogCiAgICAgICAgIE1T
VkMgaW50ZXJuYWwgY29tcGlsZXIgZXJyb3Igd2hlbiBjb21waWxpbmcgVGVtcGxhdGVSZWdpc3Ry
eUtleSBjbGFzcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODQ1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzczMSw3ICsz
NzMxLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9u
bWVudDogewotICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25tZW50ID0gYWRkVG9HcmFw
aChDcmVhdGVBY3RpdmF0aW9uLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogc3ltYm9sVGFibGUg
PSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2dyYXBoLnN5bWJvbFRhYmxlRm9yKGN1cnJlbnROb2Rl
T3JpZ2luKCkuc2VtYW50aWMpKTsKKyAgICAgICAgICAgIE5vZGUqIGxleGljYWxFbnZpcm9ubWVu
dCA9IGFkZFRvR3JhcGgoQ3JlYXRlQWN0aXZhdGlvbiwgT3BJbmZvKHN5bWJvbFRhYmxlKSwgZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwogICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwgbGV4aWNhbEVudmlyb25tZW50KTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCksIGxleGljYWxFbnZpcm9ubWVudCk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNp
b24gMTg0NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQ3JlYXRlQWN0
aXZhdGlvbjogewotICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBncmFwaC5zeW1ib2xUYWJs
ZUZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUg
PSBub2RlLT5jYXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7CiAgICAgICAgIGlmICh0YWJsZS0+
c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpCiAgICAgICAgICAgICB3cml0ZShXYXRj
aHBvaW50X2ZpcmUpOwogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTg0NTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyODIsNiArMTI4
Miw4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAg
ICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICAgICAgY2FzZSBOZXdGdW5jdGlvbjoKKyAgICAgICAg
Y2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0
aXZhdGlvbjoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI5MSw3ICsxMjkzLDEzIEBAIHN0cnVjdCBOb2Rl
IHsKICAgICBGcm96ZW5WYWx1ZSogY2VsbE9wZXJhbmQoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGhhc0NlbGxPcGVyYW5kKCkpOwotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxGcm96
ZW5WYWx1ZSo+KG1fb3BJbmZvKTsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNh
c2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8RnJvemVuVmFsdWUqPihtX29wSW5mbzIpOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RnJvemVuVmFsdWUqPihtX29wSW5m
byk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2lu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMTg0NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTg2LDYgKzU4NiwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCArIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9j
YXRpb24oQWN0aXZhdGlvblNjb3BlUExvYywgbm9kZSkuY3JlYXRlSGludCgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHN5bWJvbFRhYmxlTm9k
ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCArIDEsIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2VsbE9wZXJhbmQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbihBY3RpdmF0aW9uU3ltYm9sVGFibGVQTG9jLCBu
b2RlKS5jcmVhdGVIaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LCBub2RlLT5vcmlnaW4sIHN5bWJvbFRhYmxlTm9kZSkpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gbm9kZS0+Y2FzdE9wZXJhbmQ8U3ltYm9sVGFibGUqPigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0
YW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLCBub2Rl
LT5vcmlnaW4sIGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdGVyID0gc3ltYm9sVGFibGUtPmJlZ2luKGxv
Y2tlciksIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24o
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc3VyZVZhclBMb2Ms
IG5vZGUsIGl0ZXItPnZhbHVlLnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCkpLmNyZWF0ZUhpbnQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZS0+b3Jp
Z2luLCB1bmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZl
cnRUb1BoYW50b21DcmVhdGVBY3RpdmF0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01OTcsNiArNjE4LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlvbihBY3RpdmF0aW9uU2NvcGVQTG9jLCBu
b2RlKS5jcmVhdGVIaW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LCBub2RlLT5vcmlnaW4sIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkubm9kZSgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBzeW1ib2xUYWJsZU5vZGUgPSBtX2luc2VydGlv
blNldC5pbnNlcnRDb25zdGFudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXggKyAxLCBub2RlLT5vcmlnaW4sIG5vZGUtPmNlbGxPcGVyYW5kKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbW90
ZWRIZWFwTG9jYXRpb24oQWN0aXZhdGlvblN5bWJvbFRhYmxlUExvYywgbm9kZSkuY3JlYXRlSGlu
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZS0+b3JpZ2lu
LCBzeW1ib2xUYWJsZU5vZGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdE1hdGVy
aWFsaXphdGlvbkRhdGEmIGRhdGEgPSBub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5t
X3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gZGF0YS5tX3Byb3BlcnRpZXNbaV0ubV9pZGVudGlm
aWVyTnVtYmVyOwpAQCAtODI5LDcgKzg1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgICAgICBpZiAoIW1f
Z3JhcGguc3ltYm9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c2luZ2xldG9uU2Nv
cGUoKS0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUtPmNhc3RPcGVyYW5k
PFN5bWJvbFRhYmxlKj4oKS0+c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpCiAgICAg
ICAgICAgICAgICAgc2lua0NhbmRpZGF0ZSgpOwogICAgICAgICAgICAgZXNjYXBlKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTkzMiwxMyArOTU5LDEzIEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBN
YXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246IHsKICAgICAgICAgICAgIE9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEqIGRhdGEgPSBtX2dyYXBoLm1fb2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5h
ZGQoKTsKLQorICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gZXNjYXBlZS0+
Y2VsbE9wZXJhbmQoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKICAg
ICAgICAgICAgICAgICBlc2NhcGVlLT5wcmVkaWN0aW9uKCksIE5vZGU6OlZhckFyZywgTWF0ZXJp
YWxpemVDcmVhdGVBY3RpdmF0aW9uLAogICAgICAgICAgICAgICAgIE5vZGVPcmlnaW4oCiAgICAg
ICAgICAgICAgICAgICAgIGVzY2FwZWUtPm9yaWdpbi5zZW1hbnRpYywKICAgICAgICAgICAgICAg
ICAgICAgd2hlcmUtPm9yaWdpbi5mb3JFeGl0KSwKLSAgICAgICAgICAgICAgICBPcEluZm8oZGF0
YSksIE9wSW5mbygpLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIE9wSW5m
byhzeW1ib2xUYWJsZSksIDAsIDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtMTAwOSw2ICsxMDM2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFZlY3RvcjxQcm9tb3Rl
ZEhlYXBMb2NhdGlvbj4gbG9jYXRpb25zID0gbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmdldChl
c2NhcGVlKTsKIAogICAgICAgICAgICAgUHJvbW90ZWRIZWFwTG9jYXRpb24gc2NvcGUoQWN0aXZh
dGlvblNjb3BlUExvYywgZXNjYXBlZSk7CisgICAgICAgICAgICBQcm9tb3RlZEhlYXBMb2NhdGlv
biBzeW1ib2xUYWJsZShBY3RpdmF0aW9uU3ltYm9sVGFibGVQTG9jLCBlc2NhcGVlKTsKICAgICAg
ICAgICAgIEFTU0VSVChsb2NhdGlvbnMuY29udGFpbnMoc2NvcGUpKTsKIAogICAgICAgICAgICAg
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChFZGdlKHJlc29sdmUoYmxvY2ssIHNjb3Bl
KSwgS25vd25DZWxsVXNlKSk7CkBAIC0xMDIwLDYgKzEwNDgsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAg
ICAgY2FzZSBBY3RpdmF0aW9uU3ltYm9sVGFibGVQTG9jOiB7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChsb2NhdGlvbnNbaV0gPT0gc3ltYm9sVGFibGUpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBjYXNlIENsb3N1
cmVWYXJQTG9jOiB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gcmVzb2x2ZShi
bG9jaywgbG9jYXRpb25zW2ldKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5vcCgp
ID09IEJvdHRvbVZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9t
b3RlZEhlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE4NDU4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgUHJvCiAgICAgY2FzZSBTdHJ1Y3R1cmVQTG9jOgogICAgICAgICBvdXQucHJpbnQo
IlN0cnVjdHVyZVBMb2MiKTsKICAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBBY3RpdmF0aW9u
U3ltYm9sVGFibGVQTG9jOgorICAgICAgICBvdXQucHJpbnQoIkFjdGl2YXRpb25TeW1ib2xUYWJs
ZVBMb2MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIE5hbWVkUHJvcGVy
dHlQTG9jOgogICAgICAgICBvdXQucHJpbnQoIk5hbWVkUHJvcGVydHlQTG9jIik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9tb3RlZEhlYXBMb2NhdGlv
bi5oCShyZXZpc2lvbiAxODQ1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b21vdGVkSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgZW51
bSBQcm9tb3RlZExvY2F0aW9uS2luZCB7CiAgICAgSW52YWxpZFByb21vdGVkTG9jYXRpb25LaW5k
LAogICAgIAogICAgIFN0cnVjdHVyZVBMb2MsCisgICAgQWN0aXZhdGlvblN5bWJvbFRhYmxlUExv
YywKICAgICBOYW1lZFByb3BlcnR5UExvYywKICAgICBBcmd1bWVudFBMb2MsCiAgICAgQXJndW1l
bnRDb3VudFBMb2MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTg0NTg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MjEsNyAr
NDUyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGb3J3YXJkVmFyYXIKIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oTm9kZSogbm9kZSkKIHsK
LSAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBtX2ppdC5ncmFwaCgpLnN5bWJvbFRhYmxlRm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgU3ltYm9sVGFibGUqIHRhYmxlID0gbm9kZS0+Y2Fz
dE9wZXJhbmQ8U3ltYm9sVGFibGUqPigpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9q
aXQuZ3JhcGgoKS5nbG9iYWxPYmplY3RGb3IoCiAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTg0NTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5NDcsNyArMjk0Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21w
aWxlQ3JlYXRlQWN0aXZhdGlvbigpCiAgICAgewogICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBtX2dy
YXBoLnN5bWJvbFRhYmxlRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgU3lt
Ym9sVGFibGUqIHRhYmxlID0gbV9ub2RlLT5jYXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7CiAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7CiAgICAgICAgIAog
ICAgICAgICBpZiAodGFibGUtPnNpbmdsZXRvblNjb3BlKCktPmlzU3RpbGxWYWxpZCgpKSB7CkBA
IC01MjY0LDcgKzUyNjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChs
b3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpKTsKIAogICAgICAg
ICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7
Ci0gICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1fZ3JhcGguc3ltYm9sVGFibGVGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBtX25v
ZGUtPmNhc3RPcGVyYW5kPFN5bWJvbFRhYmxlKj4oKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykt
PmFjdGl2YXRpb25TdHJ1Y3R1cmUoKTsKIAogICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uIHNsb3cg
cGF0aCIpKTsKQEAgLTUyNzgsMTEgKzUyNzgsNiBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5z
dG9yZVB0cihzY29wZSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU1Njb3BlX25leHQpOwogICAgICAg
ICBtX291dC5zdG9yZVB0cih3ZWFrUG9pbnRlcih0YWJsZSksIGZhc3RPYmplY3QsIG1faGVhcHMu
SlNTeW1ib2xUYWJsZU9iamVjdF9zeW1ib2xUYWJsZSk7CiAKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRhYmxlLT5zY29wZVNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBtX291
dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSwKLSAgICAgICAgICAgICAgICBmYXN0T2JqZWN0LCBtX2hlYXBz
LkpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzW2ldKTsKLSAgICAgICAgfQogCiAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdE9iamVjdCk7CiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKQEAgLTUyOTYsMTEgKzUyOTEsMjggQEAg
cHJpdmF0ZToKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKICAgICAgICAgTFZhbHVlIGFjdGl2YXRpb24gPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBm
YXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5tX3By
b3BlcnRpZXMuc2l6ZSgpID09IHRhYmxlLT5zY29wZVNpemUoKSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZXNbaV0sCiAgICAgICAgICAgICAgICAgYWN0aXZhdGlv
biwKICAgICAgICAgICAgICAgICBtX2hlYXBzLkpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVz
W2RhdGEubV9wcm9wZXJ0aWVzW2ldLm1faWRlbnRpZmllck51bWJlcl0pOwogICAgICAgICB9CisK
KyAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAgICAgIC8vIFZhbGlk
YXRlIHRvIG1ha2Ugc3VyZSBldmVyeSBzbG90IGluIHRoZSBzY29wZSBoYXMgb25lIHZhbHVlLgor
ICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIodGFibGUtPm1fbG9jayk7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHRhYmxlLT5iZWdpbihsb2NrZXIpLCBlbmQgPSB0
YWJsZS0+ZW5kKGxvY2tlcik7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAg
ICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpdGVyLT52YWx1ZS5zY29wZU9mZnNldCgpLm9mZnNldCgpID09IGRhdGEubV9wcm9w
ZXJ0aWVzW2ldLm1faWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKGZv
dW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHNldEpTVmFsdWUoYWN0
aXZhdGlvbik7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4NDU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwyMSArMTE1LDI0
IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICBjYXNlIFBo
YW50b21DcmVhdGVBY3RpdmF0aW9uOiB7CiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hlcmUgdGhl
IHNjb3BlIGlzCiAgICAgICAgIEpTU2NvcGUqIHNjb3BlID0gbnVsbHB0cjsKKyAgICAgICAgU3lt
Ym9sVGFibGUqIHRhYmxlID0gbnVsbHB0cjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0
ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBj
b25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3Bl
cnRpZXMoKVtpXTsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpICE9IFByb21v
dGVkTG9jYXRpb25EZXNjcmlwdG9yKEFjdGl2YXRpb25TY29wZVBMb2MpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc2NvcGUgPSBqc0Nhc3Q8SlNTY29wZSo+KEpTVmFs
dWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlv
bigpID09IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKEFjdGl2YXRpb25TY29wZVBMb2MpKQor
ICAgICAgICAgICAgICAgIHNjb3BlID0ganNDYXN0PEpTU2NvcGUqPihKU1ZhbHVlOjpkZWNvZGUo
dmFsdWVzW2ldKSk7CisgICAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpID09
IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKEFjdGl2YXRpb25TeW1ib2xUYWJsZVBMb2MpKQor
ICAgICAgICAgICAgICAgIHRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oSlNWYWx1ZTo6ZGVj
b2RlKHZhbHVlc1tpXSkpOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjb3Bl
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFibGUpOwogCiAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9j
aygKICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+b3JpZ2luKCksIGV4ZWMtPmNvZGVCbG9j
aygpKTsKLSAgICAgICAgU3ltYm9sVGFibGUqIHRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJs
ZSgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKTsKIAogICAgICAgICBKU0xleGljYWxFbnZpcm9u
bWVudCogcmVzdWx0ID0gSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
LCBzY29wZSwgdGFibGUpOwogCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1hdGVyaWFsaXphdGlv
bi0+cHJvcGVydGllcygpLnNpemUoKSAtIDIgPT0gdGFibGUtPnNjb3BlU2l6ZSgpKTsKICAgICAg
ICAgLy8gRmlndXJlIG91dCB3aGF0IHRvIHBvcHVsYXRlIHRoZSBhY3RpdmF0aW9uIHdpdGgKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVy
dHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKQEAgLTEzOSw2ICsxNDIsMzEg
QEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAg
cmVzdWx0LT52YXJpYWJsZUF0KFNjb3BlT2Zmc2V0KHByb3BlcnR5LmxvY2F0aW9uKCkuaW5mbygp
KSkuc2V0KGV4ZWMtPnZtKCksIHJlc3VsdCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOwog
ICAgICAgICB9CiAKKyAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgIC8vIFZhbGlkYXRlIHRvIG1ha2Ugc3VyZSBldmVyeSBzbG90IGluIHRoZSBzY29wZSBoYXMg
b25lIHZhbHVlLgorICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIodGFibGUt
Pm1fbG9jayk7CisgICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHRhYmxlLT5iZWdpbihsb2Nr
ZXIpLCBlbmQgPSB0YWJsZS0+ZW5kKGxvY2tlcik7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAg
ICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9
IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpW2ldOworICAgICAgICAgICAgICAgICAgICBp
ZiAocHJvcGVydHkubG9jYXRpb24oKS5raW5kKCkgIT0gQ2xvc3VyZVZhclBMb2MpCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFNjb3Bl
T2Zmc2V0KHByb3BlcnR5LmxvY2F0aW9uKCkuaW5mbygpKSA9PSBpdGVyLT52YWx1ZS5zY29wZU9m
ZnNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoZm91bmQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDbG9zdXJlVmFyUGxvYyA9IDA7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJv
cGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKKyAgICAgICAgICAgICAg
ICBpZiAocHJvcGVydHkubG9jYXRpb24oKS5raW5kKCkgPT0gQ2xvc3VyZVZhclBMb2MpCisgICAg
ICAgICAgICAgICAgICAgIG51bWJlck9mQ2xvc3VyZVZhclBsb2MrKzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIEFTU0VSVChudW1iZXJPZkNsb3N1cmVWYXJQbG9jID09IHRhYmxlLT5zY29w
ZVNpemUoKSk7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hY3RpdmF0aW9uLXNpbmst
ZGVmYXVsdC12YWx1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2FjdGl2YXRpb24tc2luay1kZWZhdWx0LXZhbHVlLmpzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hY3RpdmF0aW9uLXNpbmstZGVm
YXVsdC12YWx1ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACit2YXIgbiA9IDEw
MDAwMDAwOworCitmdW5jdGlvbiBiYXIoZikgeyBmKDEwKTsgfQorCitmdW5jdGlvbiBmb28oYikg
eworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBpbVVuZGVmaW5lZDsKKyAgICB2YXIgYmF6
OworICAgIHZhciBzZXQgPSBmdW5jdGlvbiAoeCkgeyByZXN1bHQgPSB4OyByZXR1cm4gKGltVW5k
ZWZpbmVkLCBiYXopOyB9CisgICAgYmF6ID0gNDA7CisgICAgaWYgKGIpIHsKKyAgICAgICAgYmFy
KHNldCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gMTApCisgICAgICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZDogIiArIHJlc3VsdDsKKyAgICAgICAgaWYgKGJheiAhPT0gNDApCisgICAgICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZDogIiArIGJhejsKKyAgICAgICAgaWYgKGltVW5kZWZpbmVkICE9
PSB2b2lkIDApCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGltVW5k
ZWZpbmVkOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kworbm9JbmxpbmUoYmFyKTsKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
bjsgaSsrKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyghKGkgJSAxMDApKTsKKyAgICBpZiAocmVz
dWx0ICE9IDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
K30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYWN0aXZhdGlvbi1z
aW5rLW9zcmV4aXQtZGVmYXVsdC12YWx1ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2FjdGl2YXRpb24tc2luay1vc3JleGl0LWRlZmF1bHQtdmFs
dWUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2FjdGl2YXRpb24tc2luay1vc3JleGl0LWRlZmF1bHQtdmFsdWUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNyBAQAordmFyIG4gPSAxMDAwMDAwMDsKKworZnVuY3Rpb24gYmFyKHNldCkg
eyAKKyAgICB2YXIgcmVzdWx0ID0gc2V0KDApOworICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyByZXN1bHQ7Cit9CisKK2Z1bmN0
aW9uIGZvbyhiKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIGltVW5kZWZpbmVkOwor
ICAgIHZhciBiYXo7CisgICAgdmFyIHNldCA9IGZ1bmN0aW9uICh4KSB7IAorICAgICAgICByZXN1
bHQgPSB4OyAKKyAgICAgICAgaWYgKGJheiAhPT0gNTApCisgICAgICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCB2YWx1ZTogIiArIGJhejsKKyAgICAgICAgcmV0dXJuIGltVW5kZWZpbmVkOworICAg
IH0KKyAgICBiYXogPSA1MDsKKyAgICBpZiAoYikgeworICAgICAgICBPU1JFeGl0KCk7CisgICAg
ICAgIGlmIChiKSB7CisgICAgICAgICAgICBiYXIoc2V0KTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoYmFyKTsK
K25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgdmFy
IHJlc3VsdCA9IGZvbyghKGkgJSAxMDApKTsKKyAgICBpZiAocmVzdWx0ICE9IDApCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>