<?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>123821</bug_id>
          
          <creation_ts>2013-11-05 13:17:53 -0800</creation_ts>
          <short_desc>-dealloc callbacks from wrapped Objective-C objects can happen at bad times</short_desc>
          <delta_ts>2013-11-18 03:17:11 -0800</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>
          <dependson>124490</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>buildbot</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ossy</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rniwa</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>947308</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-05 13:17:53 -0800</bug_when>
    <thetext>Currently with the JSC Obj-C API, JS wrappers for client Obj-C objects retain their associated Obj-C object. When they are swept, they release their Obj-C objects which can trigger a call to that object&apos;s -dealloc method. These -dealloc methods can then call back into the same VM, which is not allowed during lazy sweeping or VM shutdown.

We can gracefully handle this case by creating our own pool of Obj-C objects to be released when it is safe to do so. The basic idea is:

&quot;Scoped object for ObjC dealloc calls. Holds a Vector&lt;RetainPtr&gt;. Destructors use std::move to put things in this vector, instead of calling release directly. Scoped object does the right callback shim thingy. lastChanceToFinalize makes sure to use the scoped object.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947311</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-05 13:18:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/15395983&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950831</commentid>
    <comment_count>2</comment_count>
      <attachid>216976</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-14 13:50:32 -0800</bug_when>
    <thetext>Created attachment 216976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950837</commentid>
    <comment_count>3</comment_count>
      <attachid>216976</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-14 14:00:59 -0800</bug_when>
    <thetext>Comment on attachment 216976
Patch

Attachment 216976 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/23748057</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950838</commentid>
    <comment_count>4</comment_count>
      <attachid>216976</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-14 14:06:08 -0800</bug_when>
    <thetext>Comment on attachment 216976
Patch

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

r=me, but I think you&apos;ve got some fixup to do before landing.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:415
&gt;              [[m_invocation.get() target] release];

Do we need the same treatment for our invocation&apos;s target? What if that -dealloc did something unpleasant?

&gt; Source/JavaScriptCore/heap/DelayedReleaseScope.h:38
&gt; +        , m_savedScope(markedSpace.m_currentDelayedReleaseScope)

I don&apos;t think we want to save the previous scope like this. If we did re-entrently create a DelayedReleaseScope (which I believe is impossible), it would not be correct to release those interior objects right away -- we would need to wait until we popped the outermost DelayedReleaseScope, or we would be violating its invariants. So, I guess we should ASSERT that the current scope is NULL, and then set ourselves as the current scope.

&gt; Source/JavaScriptCore/heap/DelayedReleaseScope.h:48
&gt; +    ~DelayedReleaseScope()
&gt; +    {
&gt; +        APICallbackShim callbackShim(*m_markedSpace.m_heap-&gt;vm());
&gt; +        m_delayedReleaseObjects.clear();
&gt; +        m_markedSpace.m_currentDelayedReleaseScope = m_savedScope;
&gt; +    }

Here, we need to unset the current scope right away, and not after we clear the vector. Otherwise, while the -dealloc methods run, we might accumulate new objects into m_delayedReleaseObjects, which we don&apos;t really want.

&gt; Source/JavaScriptCore/heap/Heap.h:190
&gt; +        template &lt;typename T&gt;
&gt; +        void delayReleaseForObject(RetainPtr&lt;T&gt;&amp;&amp;);

Let&apos;s call this &quot;releaseSoon&quot; or &quot;releaseAfterGC&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950840</commentid>
    <comment_count>5</comment_count>
      <attachid>216976</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-11-14 14:14:21 -0800</bug_when>
    <thetext>Comment on attachment 216976
Patch

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

&gt; Source/JavaScriptCore/API/APIShims.h:108
&gt; +            return 0;

nullptr

&gt; Source/JavaScriptCore/API/APIShims.h:113
&gt; +            return 0;

nullptr

&gt; Source/JavaScriptCore/API/APIShims.h:119
&gt; +        if (!vmForDropAllLocks(exec-&gt;vm()))

Seems a bit peculiar to do it this way. Why not just a function that returns a boolean?

&gt; Source/JavaScriptCore/API/APIShims.h:120
&gt; +            return 0;

nullptr

&gt; Source/JavaScriptCore/API/JSAPIWrapperObject.mm:59
&gt; +    RetainPtr&lt;CFTypeRef&gt; retainedObject(wrapperObject-&gt;wrappedObject());
&gt; +    JSC::Heap::heap(wrapperObject)-&gt;delayReleaseForObject(std::move(retainedObject));
&gt;      [static_cast&lt;id&gt;(wrapperObject-&gt;wrappedObject()) release];

Is the local variable really needed here? Instead of calling release here, I suggest we call adoptNS above. That will be faster.

    JSC::Heap::heap(wrapperObject)-&gt;delayReleaseForObject(adoptNS(wrapperObject-&gt;wrappedObject()));

The one line would replace all three lines of code above.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:416
&gt; +            RetainPtr&lt;CFTypeRef&gt; target([m_invocation.get() target]);
&gt;              [[m_invocation.get() target] release];
&gt; +            heap.delayReleaseForObject(std::move(target));

Same here:

    heap.delayReleaseForObject(adoptNS([m_invocation.get() target]));

&gt;&gt; Source/JavaScriptCore/heap/DelayedReleaseScope.h:48
&gt;&gt; +    ~DelayedReleaseScope()
&gt;&gt; +    {
&gt;&gt; +        APICallbackShim callbackShim(*m_markedSpace.m_heap-&gt;vm());
&gt;&gt; +        m_delayedReleaseObjects.clear();
&gt;&gt; +        m_markedSpace.m_currentDelayedReleaseScope = m_savedScope;
&gt;&gt; +    }
&gt; 
&gt; Here, we need to unset the current scope right away, and not after we clear the vector. Otherwise, while the -dealloc methods run, we might accumulate new objects into m_delayedReleaseObjects, which we don&apos;t really want.

I’d also suggest including:

    ASSERT(m_markedSpace.m_currentDelayedReleaseScope == this);

&gt; Source/JavaScriptCore/heap/DelayedReleaseScope.h:53
&gt; +        m_delayedReleaseObjects.append(reinterpret_cast&lt;RetainPtr&lt;CFTypeRef&gt;&amp;&amp;&gt;(object));

This reinterpret_cast is not a safe approach. We need to instead find a way to make this work with move constructors in the RetainPtr class.

&gt;&gt; Source/JavaScriptCore/heap/Heap.h:190
&gt;&gt; +        template &lt;typename T&gt;
&gt;&gt; +        void delayReleaseForObject(RetainPtr&lt;T&gt;&amp;&amp;);
&gt; 
&gt; Let&apos;s call this &quot;releaseSoon&quot; or &quot;releaseAfterGC&quot;.

I think this would read better as a single line.

&gt; Source/JavaScriptCore/heap/MarkedSpace.cpp:85
&gt; +    , m_currentDelayedReleaseScope(0)

nullptr

&gt; Source/JavaScriptCore/heap/MarkedSpace.h:119
&gt; +    template &lt;typename T&gt;
&gt; +    void delayReleaseForObject(RetainPtr&lt;T&gt;&amp;&amp;);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950842</commentid>
    <comment_count>6</comment_count>
      <attachid>216976</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-14 14:15:44 -0800</bug_when>
    <thetext>Comment on attachment 216976
Patch

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

&gt;&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:415
&gt;&gt;              [[m_invocation.get() target] release];
&gt; 
&gt; Do we need the same treatment for our invocation&apos;s target? What if that -dealloc did something unpleasant?

We are delaying the release for the invocation&apos;s target. Do you mean the invocation itself? I think the only objects that the NSInvocation could release would be the target and the arguments. Since we&apos;re not using -retainArguments, those won&apos;t be dealloc-ed during the invocation&apos;s dealloc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950844</commentid>
    <comment_count>7</comment_count>
      <attachid>216976</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-14 14:17:23 -0800</bug_when>
    <thetext>Comment on attachment 216976
Patch

Attachment 216976 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/22869444</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950847</commentid>
    <comment_count>8</comment_count>
      <attachid>216976</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-14 14:23:34 -0800</bug_when>
    <thetext>Comment on attachment 216976
Patch

Attachment 216976 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/23698060</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950859</commentid>
    <comment_count>9</comment_count>
      <attachid>216976</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-11-14 14:54:06 -0800</bug_when>
    <thetext>Comment on attachment 216976
Patch

Attachment 216976 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/23628066</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950865</commentid>
    <comment_count>10</comment_count>
      <attachid>216987</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-14 15:07:04 -0800</bug_when>
    <thetext>Created attachment 216987
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950868</commentid>
    <comment_count>11</comment_count>
      <attachid>216987</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-14 15:14:37 -0800</bug_when>
    <thetext>Comment on attachment 216987
Patch

Attachment 216987 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/23618068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950872</commentid>
    <comment_count>12</comment_count>
      <attachid>216988</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-14 15:24:39 -0800</bug_when>
    <thetext>Created attachment 216988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950874</commentid>
    <comment_count>13</comment_count>
      <attachid>216988</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-14 15:29:56 -0800</bug_when>
    <thetext>Comment on attachment 216988
Patch

Attachment 216988 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/23688068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950875</commentid>
    <comment_count>14</comment_count>
      <attachid>216989</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-14 15:33:27 -0800</bug_when>
    <thetext>Created attachment 216989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950914</commentid>
    <comment_count>15</comment_count>
      <attachid>216989</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-11-14 17:44:01 -0800</bug_when>
    <thetext>Comment on attachment 216989
Patch

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

&gt; Source/JavaScriptCore/API/APIShims.h:86
&gt; +        : m_dropAllLocks(shouldDropAllLocks(exec-&gt;vm()) ? exec : 0)

nullptr

&gt; Source/JavaScriptCore/API/APIShims.h:93
&gt; +        : m_dropAllLocks(shouldDropAllLocks(vm) ? &amp;vm : 0)

nullptr

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:411
&gt;          // We need to explicity release the target since we didn&apos;t call 

Missing an &quot;l&quot; in explicitly. Should probably grep for this typo. I think I’ve seen it elsewhere too.

&gt; Source/JavaScriptCore/API/ObjCCallbackFunction.mm:524
&gt; +    ObjCCallbackFunction* function = jsCast&lt;ObjCCallbackFunction*&gt;(cell);

I’d use a reference for the local variable since it’s never null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951145</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-11-15 11:51:19 -0800</bug_when>
    <thetext>Committed r159351: &lt;http://trac.webkit.org/changeset/159351&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>951558</commentid>
    <comment_count>17</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-11-18 03:17:11 -0800</bug_when>
    <thetext>It caused assertions on !CF platforms, see https://bugs.webkit.org/show_bug.cgi?id=124490 for details and proposed fix.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216976</attachid>
            <date>2013-11-14 13:50:32 -0800</date>
            <delta_ts>2013-11-14 15:07:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123821-20131114135029.patch</filename>
            <type>text/plain</type>
            <size>23948</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDEzLTExLTE0ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgLWRlYWxsb2MgY2FsbGJhY2tzIGZyb20gd3JhcHBlZCBPYmplY3RpdmUtQyBvYmpl
Y3RzIGNhbiBoYXBwZW4gYXQgYmFkIHRpbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgd2l0aCB0aGUgSlNDIE9iai1DIEFQSSwgSlMg
d3JhcHBlcnMgZm9yIGNsaWVudCBPYmotQyBvYmplY3RzIHJldGFpbiB0aGVpciBhc3NvY2lhdGVk
IE9iai1DIAorICAgICAgICBvYmplY3QuIFdoZW4gdGhleSBhcmUgc3dlcHQsIHRoZXkgcmVsZWFz
ZSB0aGVpciBPYmotQyBvYmplY3RzIHdoaWNoIGNhbiB0cmlnZ2VyIGEgY2FsbCB0byB0aGF0IAor
ICAgICAgICBvYmplY3QncyAtZGVhbGxvYyBtZXRob2QuIFRoZXNlIC1kZWFsbG9jIG1ldGhvZHMg
Y2FuIHRoZW4gY2FsbCBiYWNrIGludG8gdGhlIHNhbWUgVk0sIHdoaWNoIGlzIG5vdCAKKyAgICAg
ICAgYWxsb3dlZCBkdXJpbmcgc3dlZXBpbmcgb3IgVk0gc2h1dGRvd24uCisKKyAgICAgICAgV2Ug
Y2FuIGhhbmRsZSB0aGlzIGNhc2UgYnkgY3JlYXRpbmcgb3VyIG93biBwb29sIG9mIE9iai1DIG9i
amVjdHMgdG8gYmUgcmVsZWFzZWQgd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLgorICAgICAgICBU
aGlzIGlzIGFjY29tcGxpc2hlZCBieSB1c2luZyBEZWxheWVkUmVsZWFzZVNjb3BlLCBhbiBSQUlJ
LXN0eWxlIG9iamVjdCB0aGF0IHdpbGwgcmV0YWluIGFsbCBvYmplY3RzCisgICAgICAgIHRoYXQg
YXJlIHVuc2FmZSB0byByZWxlYXNlIHVudGlsIHRoZSBlbmQgb2YgdGhlIERlbGF5ZWRSZWxlYXNl
U2NvcGUuCisKKyAgICAgICAgKiBBUEkvQVBJU2hpbXMuaDoKKyAgICAgICAgKEpTQzo6QVBJQ2Fs
bGJhY2tTaGltOjpBUElDYWxsYmFja1NoaW0pOgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1No
aW06OnZtRm9yRHJvcEFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6QVBJQ2FsbGJhY2tTaGltOjpl
eGVjRm9yRHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBBUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
OgorICAgICAgICAoSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplKToKKyAg
ICAgICAgKiBBUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW06CisgICAgICAgIChKU0M6Ok9iakND
YWxsYmFja0Z1bmN0aW9uSW1wbDo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6Ok9iakNDYWxsYmFj
a0Z1bmN0aW9uOjpkZXN0cm95KToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAg
ICAgICAgKC1bVGlueURPTU5vZGUgaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpdKToKKyAgICAgICAg
KC1bVGlueURPTU5vZGUgZGVhbGxvY10pOgorICAgICAgICAoLVtUaW55RE9NTm9kZSBhcHBlbmRD
aGlsZDpdKToKKyAgICAgICAgKC1bVGlueURPTU5vZGUgcmVtb3ZlQ2hpbGRBdEluZGV4Ol0pOgor
ICAgICAgICAoLVtFdmlsQWxsb2NhdGlvbk9iamVjdCBpbml0V2l0aENvbnRleHQ6XSk6CisgICAg
ICAgICgtW0V2aWxBbGxvY2F0aW9uT2JqZWN0IGRlYWxsb2NdKToKKyAgICAgICAgKC1bRXZpbEFs
bG9jYXRpb25PYmplY3QgZG9FdmlsVGhpbmdzV2l0aENvbnRleHQ6XSk6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0Rl
bGF5ZWRSZWxlYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRlbGF5ZWRSZWxlYXNl
U2NvcGU6OkRlbGF5ZWRSZWxlYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpEZWxheWVkUmVsZWFz
ZVNjb3BlOjp+RGVsYXllZFJlbGVhc2VTY29wZSk6CisgICAgICAgIChKU0M6OkRlbGF5ZWRSZWxl
YXNlU2NvcGU6OmRlbGF5UmVsZWFzZUZvck9iamVjdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjpkZWxheVJlbGVhc2VGb3JPYmplY3QpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKToKKyAgICAgICAgKiBoZWFwL0hl
YXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVsYXlSZWxlYXNlRm9yT2JqZWN0KToKKyAgICAg
ICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9j
YXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6
CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZFNwYWNlOjpzd2VlcCk6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5oOgorCiAyMDEzLTEx
LTE0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT04gKHIxNTkyNzYpOiBGaXggbG90cyBvZiBjcmFzaGVzIGZvciBhcm1fdHJhZGl0aW9uYWwg
YXJjaGl0ZWN0dXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElTaGltcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJU2hpbXMuaAkocmV2
aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElTaGltcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MywxOCArODMsNDQgQEAgcHJpdmF0ZToKIGNsYXNzIEFQSUNhbGxi
YWNrU2hpbSB7CiBwdWJsaWM6CiAgICAgQVBJQ2FsbGJhY2tTaGltKEV4ZWNTdGF0ZSogZXhlYykK
LSAgICAgICAgOiBtX2Ryb3BBbGxMb2NrcyhleGVjLT52bSgpLmV4Y2x1c2l2ZVRocmVhZCA/IDAg
OiBleGVjKQorICAgICAgICA6IG1fZHJvcEFsbExvY2tzKGV4ZWNGb3JEcm9wQWxsTG9ja3MoZXhl
YykpCiAgICAgICAgICwgbV92bSgmZXhlYy0+dm0oKSkKICAgICB7CiAgICAgICAgIHd0ZlRocmVh
ZERhdGEoKS5yZXNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoKTsKICAgICB9CiAKKyAgICBBUElD
YWxsYmFja1NoaW0oVk0mIHZtKQorICAgICAgICA6IG1fZHJvcEFsbExvY2tzKHZtRm9yRHJvcEFs
bExvY2tzKHZtKSkKKyAgICAgICAgLCBtX3ZtKCZ2bSkKKyAgICB7CisgICAgICAgIHd0ZlRocmVh
ZERhdGEoKS5yZXNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoKTsKKyAgICB9CisKICAgICB+QVBJ
Q2FsbGJhY2tTaGltKCkKICAgICB7CiAgICAgICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50
SWRlbnRpZmllclRhYmxlKG1fdm0tPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCiBwcml2YXRl
OgorICAgIHN0YXRpYyBWTSogdm1Gb3JEcm9wQWxsTG9ja3MoVk0mIHZtKQorICAgIHsKKyAgICAg
ICAgaWYgKHZtLmV4Y2x1c2l2ZVRocmVhZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAvLyBJZiB0aGUgVk0gaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZyBkZXN0cm95ZWQgdGhlbiB3
ZSBkb24ndCB3YW50IHRvIHJlc3VycmVjdCBpdAorICAgICAgICAvLyBieSBhbGxvd2luZyBEcm9w
QWxsTG9ja3MgdG8gcmVmIGl0LiBCeSB0aGlzIHBvaW50IHRoZSBBUElMb2NrIGhhcyBhbHJlYWR5
IGJlZW4gCisgICAgICAgIC8vIHJlbGVhc2VkIGFueXdheXMsIHNvIGl0IGRvZXNuJ3QgbWF0dGVy
IHRoYXQgRHJvcEFsbExvY2tzIGlzIGEgbm8tb3AuCisgICAgICAgIGlmICghdm0ucmVmQ291bnQo
KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gJnZtOworICAgIH0KKwor
ICAgIHN0YXRpYyBFeGVjU3RhdGUqIGV4ZWNGb3JEcm9wQWxsTG9ja3MoRXhlY1N0YXRlKiBleGVj
KQorICAgIHsKKyAgICAgICAgaWYgKCF2bUZvckRyb3BBbGxMb2NrcyhleGVjLT52bSgpKSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gZXhlYzsKKyAgICB9CisKICAgICBK
U0xvY2s6OkRyb3BBbGxMb2NrcyBtX2Ryb3BBbGxMb2NrczsKICAgICBWTSogbV92bTsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJV3JhcHBlck9iamVjdC5t
bQkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVdy
YXBwZXJPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDExIEBAIHZvaWQgSlNB
UElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmEKICAgICBKU0M6OkpTQVBJV3JhcHBlck9i
amVjdCogd3JhcHBlck9iamVjdCA9IEpTQzo6anNDYXN0PEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0
Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICBpZiAoIXdyYXBwZXJPYmplY3QtPndyYXBw
ZWRPYmplY3QoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgUmV0YWluUHRyPENGVHlwZVJlZj4g
cmV0YWluZWRPYmplY3Qod3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKTsKKyAgICBKU0M6
OkhlYXA6OmhlYXAod3JhcHBlck9iamVjdCktPmRlbGF5UmVsZWFzZUZvck9iamVjdChzdGQ6Om1v
dmUocmV0YWluZWRPYmplY3QpKTsKICAgICBbc3RhdGljX2Nhc3Q8aWQ+KHdyYXBwZXJPYmplY3Qt
PndyYXBwZWRPYmplY3QoKSkgcmVsZWFzZV07CisKICAgICBKU0M6OldlYWtTZXQ6OmRlYWxsb2Nh
dGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgpKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5t
bQkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2Fs
bGJhY2tGdW5jdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCAiQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIgogI2ltcG9ydCAiQVBJQ2FzdC5oIgogI2ltcG9ydCAi
QVBJU2hpbXMuaCIKKyNpbXBvcnQgIkRlbGF5ZWRSZWxlYXNlU2NvcGUuaCIKICNpbXBvcnQgIkVy
cm9yLmgiCiAjaW1wb3J0ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2ltcG9ydCAiSlNDZWxsLmgi
CkBAIC00MDUsMTIgKzQwNiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCgodHlwZSAhPSBD
YWxsYmFja0luc3RhbmNlTWV0aG9kICYmIHR5cGUgIT0gQ2FsbGJhY2tJbml0TWV0aG9kKSB8fCBp
bnN0YW5jZUNsYXNzKTsKICAgICB9CiAKLSAgICB+T2JqQ0NhbGxiYWNrRnVuY3Rpb25JbXBsKCkK
KyAgICB2b2lkIGRlc3Ryb3koSGVhcCYgaGVhcCkKICAgICB7CiAgICAgICAgIC8vIFdlIG5lZWQg
dG8gZXhwbGljaXR5IHJlbGVhc2UgdGhlIHRhcmdldCBzaW5jZSB3ZSBkaWRuJ3QgY2FsbCAKICAg
ICAgICAgLy8gLXJldGFpbkFyZ3VtZW50cyBvbiBtX2ludm9jYXRpb24gKGFuZCB3ZSBkb24ndCB3
YW50IHRvIGRvIHNvKS4KLSAgICAgICAgaWYgKG1fdHlwZSA9PSBDYWxsYmFja0Jsb2NrIHx8IG1f
dHlwZSA9PSBDYWxsYmFja0NsYXNzTWV0aG9kKQorICAgICAgICBpZiAobV90eXBlID09IENhbGxi
YWNrQmxvY2sgfHwgbV90eXBlID09IENhbGxiYWNrQ2xhc3NNZXRob2QpIHsKKyAgICAgICAgICAg
IFJldGFpblB0cjxDRlR5cGVSZWY+IHRhcmdldChbbV9pbnZvY2F0aW9uLmdldCgpIHRhcmdldF0p
OwogICAgICAgICAgICAgW1ttX2ludm9jYXRpb24uZ2V0KCkgdGFyZ2V0XSByZWxlYXNlXTsKKyAg
ICAgICAgICAgIGhlYXAuZGVsYXlSZWxlYXNlRm9yT2JqZWN0KHN0ZDo6bW92ZSh0YXJnZXQpKTsK
KyAgICAgICAgfQogICAgICAgICBbbV9pbnN0YW5jZUNsYXNzIHJlbGVhc2VdOwogICAgIH0KIApA
QCAtNTIwLDcgKzUyNCw5IEBAIE9iakNDYWxsYmFja0Z1bmN0aW9uKiBPYmpDQ2FsbGJhY2tGdW5j
dGkKIAogdm9pZCBPYmpDQ2FsbGJhY2tGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7
Ci0gICAgc3RhdGljX2Nhc3Q8T2JqQ0NhbGxiYWNrRnVuY3Rpb24qPihjZWxsKS0+T2JqQ0NhbGxi
YWNrRnVuY3Rpb246On5PYmpDQ2FsbGJhY2tGdW5jdGlvbigpOworICAgIE9iakNDYWxsYmFja0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlvbio+KGNlbGwpOwor
ICAgIGZ1bmN0aW9uLT5pbXBsKCktPmRlc3Ryb3koKkhlYXA6OmhlYXAoY2VsbCkpOworICAgIGZ1
bmN0aW9uLT5PYmpDQ2FsbGJhY2tGdW5jdGlvbjo6fk9iakNDYWxsYmFja0Z1bmN0aW9uKCk7CiB9
CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQko
cmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0
YXBpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNTQgKzE4Miw0MyBAQCAtICh2b2lkKXJlbW92
ZUNoaWxkQXRJbmRleDooTlNVSW50ZWdlcilpCiBAZW5kCiAKIEBpbnRlcmZhY2UgVGlueURPTU5v
ZGUgOiBOU09iamVjdDxUaW55RE9NTm9kZT4KLSsgKEpTVmlydHVhbE1hY2hpbmUgKilzaGFyZWRW
aXJ0dWFsTWFjaGluZTsKLSsgKHZvaWQpY2xlYXJTaGFyZWRWaXJ0dWFsTWFjaGluZTsKIEBlbmQK
IAogQGltcGxlbWVudGF0aW9uIFRpbnlET01Ob2RlIHsKICAgICBOU011dGFibGVBcnJheSAqbV9j
aGlsZHJlbjsKKyAgICBKU1ZpcnR1YWxNYWNoaW5lICptX3NoYXJlZFZpcnR1YWxNYWNoaW5lOwog
fQogCi1zdGF0aWMgSlNWaXJ0dWFsTWFjaGluZSAqc2hhcmVkSW5zdGFuY2UgPSBuaWw7Ci0KLSsg
KEpTVmlydHVhbE1hY2hpbmUgKilzaGFyZWRWaXJ0dWFsTWFjaGluZQotewotICAgIGlmICghc2hh
cmVkSW5zdGFuY2UpCi0gICAgICAgIHNoYXJlZEluc3RhbmNlID0gW1tKU1ZpcnR1YWxNYWNoaW5l
IGFsbG9jXSBpbml0XTsKLSAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7Ci19Ci0KLSsgKHZvaWQp
Y2xlYXJTaGFyZWRWaXJ0dWFsTWFjaGluZQotewotICAgIHNoYXJlZEluc3RhbmNlID0gbmlsOwot
fQotCi0tIChpZClpbml0CistIChpZClpbml0V2l0aFZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxN
YWNoaW5lICopdmlydHVhbE1hY2hpbmUKIHsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAg
IGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIG1fY2hpbGRyZW4gPSBbW05T
TXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OjBdOworICAgIG1fc2hhcmVkVmly
dHVhbE1hY2hpbmUgPSB2aXJ0dWFsTWFjaGluZTsKKyNpZiAhX19oYXNfZmVhdHVyZShvYmpjX2Fy
YykKKyAgICBbbV9zaGFyZWRWaXJ0dWFsTWFjaGluZSByZXRhaW5dOworI2VuZGlmCiAKICAgICBy
ZXR1cm4gc2VsZjsKIH0KIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgTlNFbnVtZXJhdG9yICpl
bnVtZXJhdG9yID0gW21fY2hpbGRyZW4gb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgaWQgbmV4dENo
aWxkOwotICAgIHdoaWxlICgobmV4dENoaWxkID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pKQot
ICAgICAgICBbW1RpbnlET01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5lXSByZW1vdmVNYW5hZ2Vk
UmVmZXJlbmNlOm5leHRDaGlsZCB3aXRoT3duZXI6c2VsZl07CisgICAgZm9yIChUaW55RE9NTm9k
ZSAqY2hpbGQgaW4gbV9jaGlsZHJlbikKKyAgICAgICAgW21fc2hhcmVkVmlydHVhbE1hY2hpbmUg
cmVtb3ZlTWFuYWdlZFJlZmVyZW5jZTpjaGlsZCB3aXRoT3duZXI6c2VsZl07CiAKICNpZiAhX19o
YXNfZmVhdHVyZShvYmpjX2FyYykKKyAgICBbbV9jaGlsZHJlbiByZWxlYXNlXTsKKyAgICBbbV9z
aGFyZWRWaXJ0dWFsTWFjaGluZSByZWxlYXNlXTsKICAgICBbc3VwZXIgZGVhbGxvY107CiAjZW5k
aWYKIH0KIAogLSAodm9pZClhcHBlbmRDaGlsZDooVGlueURPTU5vZGUgKiljaGlsZAogewotICAg
IFtbVGlueURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdIGFkZE1hbmFnZWRSZWZlcmVuY2U6
Y2hpbGQgd2l0aE93bmVyOnNlbGZdOworICAgIFttX3NoYXJlZFZpcnR1YWxNYWNoaW5lIGFkZE1h
bmFnZWRSZWZlcmVuY2U6Y2hpbGQgd2l0aE93bmVyOnNlbGZdOwogICAgIFttX2NoaWxkcmVuIGFk
ZE9iamVjdDpjaGlsZF07CiB9CiAKQEAgLTI0OSw3ICsyMzgsNyBAQCAtICh2b2lkKXJlbW92ZUNo
aWxkQXRJbmRleDooTlNVSW50ZWdlcilpCiB7CiAgICAgaWYgKGluZGV4ID49IFttX2NoaWxkcmVu
IGNvdW50XSkKICAgICAgICAgcmV0dXJuOwotICAgIFtbVGlueURPTU5vZGUgc2hhcmVkVmlydHVh
bE1hY2hpbmVdIHJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6W21fY2hpbGRyZW4gb2JqZWN0QXRJbmRl
eDppbmRleF0gd2l0aE93bmVyOnNlbGZdOworICAgIFttX3NoYXJlZFZpcnR1YWxNYWNoaW5lIHJl
bW92ZU1hbmFnZWRSZWZlcmVuY2U6W21fY2hpbGRyZW4gb2JqZWN0QXRJbmRleDppbmRleF0gd2l0
aE93bmVyOnNlbGZdOwogICAgIFttX2NoaWxkcmVuIHJlbW92ZU9iamVjdEF0SW5kZXg6aW5kZXhd
OwogfQogCkBAIC00MjQsNiArNDEzLDQ3IEBAIC0gKGlkKWluaXRXaXRoQTooaW50KWEKICAgICBy
ZXR1cm4gc2VsZjsKIH0KIEBlbmQKKworc3RhdGljIGJvb2wgZXZpbEFsbG9jYXRpb25PYmplY3RX
YXNEZWFsbG9jZWQgPSBmYWxzZTsKKworQGludGVyZmFjZSBFdmlsQWxsb2NhdGlvbk9iamVjdCA6
IE5TT2JqZWN0CistIChKU1ZhbHVlICopZG9FdmlsVGhpbmdzV2l0aENvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQ7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBFdmlsQWxsb2NhdGlvbk9iamVj
dCB7CisgICAgSlNDb250ZXh0ICptX2NvbnRleHQ7Cit9CistIChpZClpbml0V2l0aENvbnRleHQ6
KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlm
ICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIG1fY29udGV4dCA9IGNvbnRleHQ7
CisKKyAgICByZXR1cm4gc2VsZjsKK30KKy0gKHZvaWQpZGVhbGxvYworeworICAgIFtzZWxmIGRv
RXZpbFRoaW5nc1dpdGhDb250ZXh0Om1fY29udGV4dF07CisgICAgZXZpbEFsbG9jYXRpb25PYmpl
Y3RXYXNEZWFsbG9jZWQgPSB0cnVlOworfQorCistIChKU1ZhbHVlICopZG9FdmlsVGhpbmdzV2l0
aENvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQKK3sKKyAgICByZXR1cm4gW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCIgXAorICAgICAgICAoZnVuY3Rpb24oKSB7IFwKKyAgICAgICAgICAgIHZh
ciBhID0gW107IFwKKyAgICAgICAgICAgIHZhciBzdW0gPSAwOyBcCisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsgXAorICAgICAgICAgICAgICAgIHN1bSArPSBp
OyBcCisgICAgICAgICAgICAgICAgYVtpXSA9IHN1bTsgXAorICAgICAgICAgICAgfSBcCisgICAg
ICAgICAgICByZXR1cm4gc3VtOyBcCisgICAgICAgIH0pKCkiXTsKK30KK0BlbmQKKwogc3RhdGlj
IHZvaWQgY2hlY2tSZXN1bHQoTlNTdHJpbmcgKmRlc2NyaXB0aW9uLCBib29sIHBhc3NlZCkKIHsK
ICAgICBOU0xvZyhAIlRFU1Q6IFwiJUBcIjogJUAiLCBkZXNjcmlwdGlvbiwgcGFzc2VkID8gQCJQ
QVNTRUQiIDogQCJGQUlMRUQiKTsKQEAgLTk1OCwxMiArOTg4LDExIEBAIHZvaWQgdGVzdE9iamVj
dGl2ZUNBUEkoKQogICAgIH0KIAogICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBKU1Zp
cnR1YWxNYWNoaW5lICp2bSA9IFtUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFsTWFjaGluZV07Ci0g
ICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZp
cnR1YWxNYWNoaW5lOnZtXTsKLSAgICAgICAgVGlueURPTU5vZGUgKnJvb3QgPSBbW1RpbnlET01O
b2RlIGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRl
eHQgYWxsb2NdIGluaXRdOworICAgICAgICBUaW55RE9NTm9kZSAqcm9vdCA9IFtbVGlueURPTU5v
ZGUgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGluZV07
CiAgICAgICAgIFRpbnlET01Ob2RlICpsYXN0Tm9kZSA9IHJvb3Q7CiAgICAgICAgIGZvciAoTlNV
SW50ZWdlciBpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAgICAgVGlueURPTU5vZGUgKm5l
d05vZGUgPSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAgIFRpbnlET01O
b2RlICpuZXdOb2RlID0gW1tUaW55RE9NTm9kZSBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGlu
ZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lXTsKICAgICAgICAgICAgIFtsYXN0Tm9kZSBhcHBlbmRD
aGlsZDpuZXdOb2RlXTsKICAgICAgICAgICAgIGxhc3ROb2RlID0gbmV3Tm9kZTsKICAgICAgICAg
fQpAQCAtOTg1LDE3ICsxMDE0LDE0IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogCiAgICAg
ICAgIEpTVmFsdWUgKm15Q3VzdG9tUHJvcGVydHkgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpA
ImdldExhc3ROb2RlSW5DaGFpbihyb290KS5teUN1c3RvbVByb3BlcnR5Il07CiAgICAgICAgIGNo
ZWNrUmVzdWx0KEAiTXkgY3VzdG9tIHByb3BlcnR5ID09IDQyIiwgW215Q3VzdG9tUHJvcGVydHkg
aXNOdW1iZXJdICYmIFtteUN1c3RvbVByb3BlcnR5IHRvSW50MzJdID09IDQyKTsKLQotICAgICAg
ICBbVGlueURPTU5vZGUgY2xlYXJTaGFyZWRWaXJ0dWFsTWFjaGluZV07CiAgICAgfQogCiAgICAg
QGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZtID0gW1RpbnlE
T01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5lXTsKLSAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0
ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6dm1dOwotICAgICAg
ICBUaW55RE9NTm9kZSAqcm9vdCA9IFtbVGlueURPTU5vZGUgYWxsb2NdIGluaXRdOworICAgICAg
ICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdF07CisgICAgICAg
IFRpbnlET01Ob2RlICpyb290ID0gW1tUaW55RE9NTm9kZSBhbGxvY10gaW5pdFdpdGhWaXJ0dWFs
TWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lXTsKICAgICAgICAgVGlueURPTU5vZGUgKmxh
c3ROb2RlID0gcm9vdDsKICAgICAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgMzsgaSsr
KSB7Ci0gICAgICAgICAgICBUaW55RE9NTm9kZSAqbmV3Tm9kZSA9IFtbVGlueURPTU5vZGUgYWxs
b2NdIGluaXRdOworICAgICAgICAgICAgVGlueURPTU5vZGUgKm5ld05vZGUgPSBbW1RpbnlET01O
b2RlIGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmVd
OwogICAgICAgICAgICAgW2xhc3ROb2RlIGFwcGVuZENoaWxkOm5ld05vZGVdOwogICAgICAgICAg
ICAgbGFzdE5vZGUgPSBuZXdOb2RlOwogICAgICAgICB9CkBAIC0xMDIwLDggKzEwNDYsNiBAQCB2
b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKIAogICAgICAgICBKU1ZhbHVlICpteUN1c3RvbVByb3Bl
cnR5ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJnZXRMYXN0Tm9kZUluQ2hhaW4ocm9vdCku
bXlDdXN0b21Qcm9wZXJ0eSJdOwogICAgICAgICBjaGVja1Jlc3VsdChAImR1cGxpY2F0ZSBjYWxs
cyB0byBhZGRNYW5hZ2VkUmVmZXJlbmNlIGRvbid0IGNhdXNlIHRoaW5ncyB0byBkaWUiLCBbbXlD
dXN0b21Qcm9wZXJ0eSBpc051bWJlcl0gJiYgW215Q3VzdG9tUHJvcGVydHkgdG9JbnQzMl0gPT0g
NDIpOwotCi0gICAgICAgIFtUaW55RE9NTm9kZSBjbGVhclNoYXJlZFZpcnR1YWxNYWNoaW5lXTsK
ICAgICB9CiAKICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKQEAgLTExNjEsNiArMTE4NSwxNyBAQCB2
b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKICAgICAgICAgY2hlY2tSZXN1bHQoQCJSZXR1cm5pbmcg
aW5zdGFuY2Ugb2YgQ2xhc3NFIGZyb20gQ2xhc3NEJ3MgaW5pdCBoYXMgY29ycmVjdCBjbGFzcyIs
IFtkIGlzSW5zdGFuY2VPZjpjb250ZXh0W0AiQ2xhc3NFIl1dKTsKICAgICB9CiAKKyAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQg
YWxsb2NdIGluaXRdOworICAgICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgICAgIEV2
aWxBbGxvY2F0aW9uT2JqZWN0ICpldmlsT2JqZWN0ID0gW1tFdmlsQWxsb2NhdGlvbk9iamVjdCBh
bGxvY10gaW5pdFdpdGhDb250ZXh0OmNvbnRleHRdOworICAgICAgICAgICAgY29udGV4dFtAImV2
aWxPYmplY3QiXSA9IGV2aWxPYmplY3Q7CisgICAgICAgICAgICBjb250ZXh0W0AiZXZpbE9iamVj
dCJdID0gbmlsOworICAgICAgICB9CisgICAgICAgIEpTU3luY2hyb25vdXNHYXJiYWdlQ29sbGVj
dEZvckRlYnVnZ2luZyhbY29udGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKKyAgICAgICAgY2hl
Y2tSZXN1bHQoQCJFdmlsQWxsb2NhdGlvbk9iamVjdCB3YXMgc3VjY2Vzc2Z1bGx5IGRlYWxsb2Nl
ZCB3aXRob3V0IGNyYXNoaW5nIiwgZXZpbEFsbG9jYXRpb25PYmplY3RXYXNEZWFsbG9jZWQpOwor
ICAgIH0KKwogICAgIGN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0KCk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTkzMDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNzA1LDYgKzcwNSw3IEBACiAJCTFBQ0Y3Mzc3MTcxQ0E2RkIw
MEM5QkIxRSAvKiBXZWFrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLzsgfTsKIAkJ
MjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE0MTUyQkFBQTcwMDkx
RUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi87IH07CiAJCTI2MDBCNUE3MTUyQkFBQTcwMDkx
RUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVy
LmggKi87IH07CisJCTJBMjgyNUQwMTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVsZWFzZVNj
b3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTI4
MjVDRjE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oICovOyB9OwogCQky
QTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMUI1NzQxNzZBMjI0RDAw
MEUyQTIzIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKIAkJMkE2RjQ2MjYxN0U5NTlD
RTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJBNkY0NjI1MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MkE3QTU4RUYxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8q
IERlZmVyR0MuY3BwICovOyB9OwpAQCAtMTk1Nyw2ICsxOTU4LDcgQEAKIAkJMUNBQThCNEIwRDMy
QzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHRDb3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ0pvaW5lci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmlu
Z0pvaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0pvaW5l
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQTI4MjVDRjE4MzQxRjJEMDA4N0ZC
QTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZWxheWVkUmVsZWFzZVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJBNkY0NjI1MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBPcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJHQy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJBRDg5MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0
aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEl0ZXJhdGlv
blNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDk0LDYgKzMwOTYsNyBA
QAogCQkJCTE0MTUwMTMyMTU0QkIxM0YwMDVEOEM5OCAvKiBXZWFrU2V0SW5saW5lcy5oICovLAog
CQkJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAq
LywKIAkJCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5o
ICovLAorCQkJCTJBMjgyNUNGMTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVsZWFzZVNjb3Bl
LmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGhlYXA7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwpAQCAtNDc0NSw2ICs0NzQ4LDcgQEAKIAkJCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyog
U2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDg4NjBFRDIxQzNEMDBC
ODk2MTkgLyogU2FtcGxpbmdUb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1MjE3RUUy
NzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywK
KwkJCQkyQTI4MjVEMDE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyOTlEQTYxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OURBMjE3RDEyODQ4MDA1RjVGRjkgLyogU2V0
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBQTEzNUU1RTFDMDA5NjMwMTIg
LyogU0g0QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0RlbGF5ZWRSZWxlYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9EZWxheWVkUmVsZWFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWxheWVkUmVsZWFzZVNjb3BlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVsYXllZFJlbGVh
c2VTY29wZV9oCisjZGVmaW5lIERlbGF5ZWRSZWxlYXNlU2NvcGVfaAorCisjaW5jbHVkZSAiQVBJ
U2hpbXMuaCIKKyNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgRGVsYXllZFJlbGVhc2VTY29wZSB7CitwdWJsaWM6CisgICAgRGVsYXllZFJlbGVhc2VT
Y29wZShNYXJrZWRTcGFjZSYgbWFya2VkU3BhY2UpCisgICAgICAgIDogbV9tYXJrZWRTcGFjZSht
YXJrZWRTcGFjZSkKKyAgICAgICAgLCBtX3NhdmVkU2NvcGUobWFya2VkU3BhY2UubV9jdXJyZW50
RGVsYXllZFJlbGVhc2VTY29wZSkKKyAgICB7CisgICAgICAgIG1fbWFya2VkU3BhY2UubV9jdXJy
ZW50RGVsYXllZFJlbGVhc2VTY29wZSA9IHRoaXM7CisgICAgfQorCisgICAgfkRlbGF5ZWRSZWxl
YXNlU2NvcGUoKQorICAgIHsKKyAgICAgICAgQVBJQ2FsbGJhY2tTaGltIGNhbGxiYWNrU2hpbSgq
bV9tYXJrZWRTcGFjZS5tX2hlYXAtPnZtKCkpOworICAgICAgICBtX2RlbGF5ZWRSZWxlYXNlT2Jq
ZWN0cy5jbGVhcigpOworICAgICAgICBtX21hcmtlZFNwYWNlLm1fY3VycmVudERlbGF5ZWRSZWxl
YXNlU2NvcGUgPSBtX3NhdmVkU2NvcGU7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgdm9pZCBkZWxheVJlbGVhc2VGb3JPYmplY3QoUmV0YWluUHRyPFQ+JiYgb2JqZWN0
KQorICAgIHsKKyAgICAgICAgbV9kZWxheWVkUmVsZWFzZU9iamVjdHMuYXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8UmV0YWluUHRyPENGVHlwZVJlZj4mJj4ob2JqZWN0KSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIE1hcmtlZFNwYWNlJiBtX21hcmtlZFNwYWNlOworICAgIERlbGF5ZWRSZWxlYXNl
U2NvcGUqIG1fc2F2ZWRTY29wZTsKKyAgICBWZWN0b3I8UmV0YWluUHRyPENGVHlwZVJlZj4+IG1f
ZGVsYXllZFJlbGVhc2VPYmplY3RzOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citpbmxp
bmUgdm9pZCBNYXJrZWRTcGFjZTo6ZGVsYXlSZWxlYXNlRm9yT2JqZWN0KFJldGFpblB0cjxUPiYm
IG9iamVjdCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50RGVsYXllZFJlbGVhc2VTY29wZSk7Cisg
ICAgbV9jdXJyZW50RGVsYXllZFJlbGVhc2VTY29wZS0+ZGVsYXlSZWxlYXNlRm9yT2JqZWN0KHN0
ZDo6bW92ZShvYmplY3QpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBE
ZWxheWVkUmVsZWFzZVNjb3BlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CShyZXZpc2lvbiAxNTkzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNvcGllZFNwYWNl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkRG
R1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiRGVsYXllZFJlbGVhc2VTY29wZS5oIgogI2luY2x1ZGUg
IkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0
SW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgpAQCAtNzI5LDYgKzcz
MCw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UoKQogICAgIGlmICghbV9pc1NhZmVU
b0NvbGxlY3QpCiAgICAgICAgIHJldHVybjsKICAgICAKKyAgICBEZWxheWVkUmVsZWFzZVNjb3Bl
IGRlbGF5ZWRSZWxlYXNlU2NvcGUobV9vYmplY3RTcGFjZSk7CiAgICAgY29sbGVjdChEb1N3ZWVw
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTU5MzA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODYsNiArMTg2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBib29s
IGlzRGVmZXJyZWQoKSBjb25zdCB7IHJldHVybiAhIW1fZGVmZXJyYWxEZXB0aDsgfQogCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICB2b2lkIGRlbGF5UmVsZWFzZUZvck9i
amVjdChSZXRhaW5QdHI8VD4mJik7CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xh
c3MgQ29kZUJsb2NrOwogICAgICAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxvY2s7CkBAIC00Njgs
NiArNDcxLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9ibG9ja0FsbG9j
YXRvcjsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgdm9p
ZCBIZWFwOjpkZWxheVJlbGVhc2VGb3JPYmplY3QoUmV0YWluUHRyPFQ+JiYgb2JqZWN0KQorICAg
IHsKKyAgICAgICAgbV9vYmplY3RTcGFjZS5kZWxheVJlbGVhc2VGb3JPYmplY3Qoc3RkOjptb3Zl
KG9iamVjdCkpOworICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBIZWFw
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKIAorI2luY2x1ZGUgIkRl
bGF5ZWRSZWxlYXNlU2NvcGUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNp
bmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCkBAIC03Nyw2
ICs3OCw3IEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXQKIHZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCiB7CiAgICAg
QVNTRVJUKG1faGVhcC0+dm0oKS0+Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Cisg
ICAgRGVsYXllZFJlbGVhc2VTY29wZSBkZWxheWVkUmVsZWFzZVNjb3BlKCptX21hcmtlZFNwYWNl
KTsKICNpZiBDT0xMRUNUX09OX0VWRVJZX0FMTE9DQVRJT04KICAgICBpZiAoIW1faGVhcC0+aXNE
ZWZlcnJlZCgpKQogICAgICAgICBtX2hlYXAtPmNvbGxlY3RBbGxHYXJiYWdlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAxNTkz
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJNYXJrZWRTcGFjZS5oIgogCisjaW5jbHVkZSAiRGVsYXllZFJlbGVhc2VTY29wZS5oIgogI2lu
Y2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC04MSw2ICs4Miw3IEBAIE1hcmtlZFNwYWNlOjpNYXJr
ZWRTcGFjZShIZWFwKiBoZWFwKQogICAgIDogbV9oZWFwKGhlYXApCiAgICAgLCBtX2NhcGFjaXR5
KDApCiAgICAgLCBtX2lzSXRlcmF0aW5nKGZhbHNlKQorICAgICwgbV9jdXJyZW50RGVsYXllZFJl
bGVhc2VTY29wZSgwKQogewogICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7
IGNlbGxTaXplIDw9IHByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7CiAg
ICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaW5pdChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwg
TWFya2VkQmxvY2s6Ok5vbmUpOwpAQCAtMTExLDEyICsxMTMsMTQgQEAgc3RydWN0IExhc3RDaGFu
Y2VUb0ZpbmFsaXplIDogTWFya2VkQmxvYwogCiB2b2lkIE1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgpCiB7CisgICAgRGVsYXllZFJlbGVhc2VTY29wZSBkZWxheWVkUmVsZWFzZVNj
b3BlKCp0aGlzKTsKICAgICBzdG9wQWxsb2NhdGluZygpOwogICAgIGZvckVhY2hCbG9jazxMYXN0
Q2hhbmNlVG9GaW5hbGl6ZT4oKTsKIH0KIAogdm9pZCBNYXJrZWRTcGFjZTo6c3dlZXAoKQogewor
ICAgIEFTU0VSVChtX2N1cnJlbnREZWxheWVkUmVsZWFzZVNjb3BlKTsKICAgICBtX2hlYXAtPnN3
ZWVwZXIoKS0+d2lsbEZpbmlzaFN3ZWVwaW5nKCk7CiAgICAgZm9yRWFjaEJsb2NrPFN3ZWVwPigp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZp
c2lvbiAxNTkzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitj
bGFzcyBEZWxheWVkUmVsZWFzZVNjb3BlOwogY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBJdGVyYXRp
b25TY29wZTsKIGNsYXNzIEpTQ2VsbDsKQEAgLTExNCw3ICsxMTUsMTEgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICB2b2lkIGRlbGF5UmVsZWFzZUZvck9iamVjdChSZXRhaW5QdHI8VD4mJik7
CisKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIERlbGF5ZWRSZWxlYXNlU2NvcGU7CiAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEFsbG9jYXRvcihGdW5jdG9yJik7CkBAIC0xNDQsNiAr
MTQ5LDggQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jYXBhY2l0eTsKICAgICBib29sIG1faXNJ
dGVyYXRpbmc7CiAgICAgTWFya2VkQmxvY2tTZXQgbV9ibG9ja3M7CisKKyAgICBEZWxheWVkUmVs
ZWFzZVNjb3BlKiBtX2N1cnJlbnREZWxheWVkUmVsZWFzZVNjb3BlOwogfTsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgTWFy
a2VkU3BhY2U6OmZvckVhY2hMaXZlQ2VsbChIZWFwSXRlcmF0aW9uU2NvcGUmLCBGdW5jdG9yJiBm
dW5jdG9yKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216987</attachid>
            <date>2013-11-14 15:07:04 -0800</date>
            <delta_ts>2013-11-14 15:24:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123821-20131114150658.patch</filename>
            <type>text/plain</type>
            <size>25876</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDEzLTExLTE0ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgLWRlYWxsb2MgY2FsbGJhY2tzIGZyb20gd3JhcHBlZCBPYmplY3RpdmUtQyBvYmpl
Y3RzIGNhbiBoYXBwZW4gYXQgYmFkIHRpbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgd2l0aCB0aGUgSlNDIE9iai1DIEFQSSwgSlMg
d3JhcHBlcnMgZm9yIGNsaWVudCBPYmotQyBvYmplY3RzIHJldGFpbiB0aGVpciBhc3NvY2lhdGVk
IE9iai1DIAorICAgICAgICBvYmplY3QuIFdoZW4gdGhleSBhcmUgc3dlcHQsIHRoZXkgcmVsZWFz
ZSB0aGVpciBPYmotQyBvYmplY3RzIHdoaWNoIGNhbiB0cmlnZ2VyIGEgY2FsbCB0byB0aGF0IAor
ICAgICAgICBvYmplY3QncyAtZGVhbGxvYyBtZXRob2QuIFRoZXNlIC1kZWFsbG9jIG1ldGhvZHMg
Y2FuIHRoZW4gY2FsbCBiYWNrIGludG8gdGhlIHNhbWUgVk0sIHdoaWNoIGlzIG5vdCAKKyAgICAg
ICAgYWxsb3dlZCBkdXJpbmcgc3dlZXBpbmcgb3IgVk0gc2h1dGRvd24uCisKKyAgICAgICAgV2Ug
Y2FuIGhhbmRsZSB0aGlzIGNhc2UgYnkgY3JlYXRpbmcgb3VyIG93biBwb29sIG9mIE9iai1DIG9i
amVjdHMgdG8gYmUgcmVsZWFzZWQgd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLgorICAgICAgICBU
aGlzIGlzIGFjY29tcGxpc2hlZCBieSB1c2luZyBEZWxheWVkUmVsZWFzZVNjb3BlLCBhbiBSQUlJ
LXN0eWxlIG9iamVjdCB0aGF0IHdpbGwgcmV0YWluIGFsbCBvYmplY3RzCisgICAgICAgIHRoYXQg
YXJlIHVuc2FmZSB0byByZWxlYXNlIHVudGlsIHRoZSBlbmQgb2YgdGhlIERlbGF5ZWRSZWxlYXNl
U2NvcGUuCisKKyAgICAgICAgKiBBUEkvQVBJU2hpbXMuaDoKKyAgICAgICAgKEpTQzo6QVBJQ2Fs
bGJhY2tTaGltOjpBUElDYWxsYmFja1NoaW0pOgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1No
aW06OnZtRm9yRHJvcEFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6QVBJQ2FsbGJhY2tTaGltOjpl
eGVjRm9yRHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBBUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
OgorICAgICAgICAoSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplKToKKyAg
ICAgICAgKiBBUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW06CisgICAgICAgIChKU0M6Ok9iakND
YWxsYmFja0Z1bmN0aW9uSW1wbDo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6Ok9iakNDYWxsYmFj
a0Z1bmN0aW9uOjpkZXN0cm95KToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAg
ICAgICAgKC1bVGlueURPTU5vZGUgaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpdKToKKyAgICAgICAg
KC1bVGlueURPTU5vZGUgZGVhbGxvY10pOgorICAgICAgICAoLVtUaW55RE9NTm9kZSBhcHBlbmRD
aGlsZDpdKToKKyAgICAgICAgKC1bVGlueURPTU5vZGUgcmVtb3ZlQ2hpbGRBdEluZGV4Ol0pOgor
ICAgICAgICAoLVtFdmlsQWxsb2NhdGlvbk9iamVjdCBpbml0V2l0aENvbnRleHQ6XSk6CisgICAg
ICAgICgtW0V2aWxBbGxvY2F0aW9uT2JqZWN0IGRlYWxsb2NdKToKKyAgICAgICAgKC1bRXZpbEFs
bG9jYXRpb25PYmplY3QgZG9FdmlsVGhpbmdzV2l0aENvbnRleHQ6XSk6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0Rl
bGF5ZWRSZWxlYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRlbGF5ZWRSZWxlYXNl
U2NvcGU6OkRlbGF5ZWRSZWxlYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpEZWxheWVkUmVsZWFz
ZVNjb3BlOjp+RGVsYXllZFJlbGVhc2VTY29wZSk6CisgICAgICAgIChKU0M6OkRlbGF5ZWRSZWxl
YXNlU2NvcGU6OnJlbGVhc2VTb29uKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnJlbGVh
c2VTb29uKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpj
b2xsZWN0QWxsR2FyYmFnZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6
OkhlYXA6OnJlbGVhc2VTb29uKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAg
ICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpN
YXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5h
bGl6ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzd2VlcCk6CisgICAgICAgICogaGVh
cC9NYXJrZWRTcGFjZS5oOgorCiAyMDEzLTExLTE0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxNTkyNzYpOiBGaXggbG90cyBvZiBj
cmFzaGVzIGZvciBhcm1fdHJhZGl0aW9uYWwgYXJjaGl0ZWN0dXJlLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1OTMwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC00ODYsOCArNDg2LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29weVdvcmtMaXN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuaCBcCi0gICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9E
ZWZlckdDLmNwcCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaCBcCisgICAgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvRGVsYXllZFJlbGVhc2VTY29wZS5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0Fzc2VydGlvbnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9BUElTaGltcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvQVBJU2hpbXMuaAkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9BUElTaGltcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxOCArODMsMzkgQEAgcHJpdmF0
ZToKIGNsYXNzIEFQSUNhbGxiYWNrU2hpbSB7CiBwdWJsaWM6CiAgICAgQVBJQ2FsbGJhY2tTaGlt
KEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgOiBtX2Ryb3BBbGxMb2NrcyhleGVjLT52bSgpLmV4
Y2x1c2l2ZVRocmVhZCA/IDAgOiBleGVjKQorICAgICAgICA6IG1fZHJvcEFsbExvY2tzKHNob3Vs
ZERyb3BBbGxMb2NrcyhleGVjLT52bSgpKSA/IGV4ZWMgOiAwKQogICAgICAgICAsIG1fdm0oJmV4
ZWMtPnZtKCkpCiAgICAgewogICAgICAgICB3dGZUaHJlYWREYXRhKCkucmVzZXRDdXJyZW50SWRl
bnRpZmllclRhYmxlKCk7CiAgICAgfQogCisgICAgQVBJQ2FsbGJhY2tTaGltKFZNJiB2bSkKKyAg
ICAgICAgOiBtX2Ryb3BBbGxMb2NrcyhzaG91bGREcm9wQWxsTG9ja3Modm0pID8gJnZtIDogMCkK
KyAgICAgICAgLCBtX3ZtKCZ2bSkKKyAgICB7CisgICAgICAgIHd0ZlRocmVhZERhdGEoKS5yZXNl
dEN1cnJlbnRJZGVudGlmaWVyVGFibGUoKTsKKyAgICB9CisKICAgICB+QVBJQ2FsbGJhY2tTaGlt
KCkKICAgICB7CiAgICAgICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRh
YmxlKG1fdm0tPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCiBwcml2YXRlOgorICAgIHN0YXRp
YyBib29sIHNob3VsZERyb3BBbGxMb2NrcyhWTSYgdm0pCisgICAgeworICAgICAgICBpZiAodm0u
ZXhjbHVzaXZlVGhyZWFkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8v
IElmIHRoZSBWTSBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nIGRlc3Ryb3llZCB0aGVuIHdlIGRv
bid0IHdhbnQgdG8gcmVzdXJyZWN0IGl0CisgICAgICAgIC8vIGJ5IGFsbG93aW5nIERyb3BBbGxM
b2NrcyB0byByZWYgaXQuIEJ5IHRoaXMgcG9pbnQgdGhlIEFQSUxvY2sgaGFzIGFscmVhZHkgYmVl
biAKKyAgICAgICAgLy8gcmVsZWFzZWQgYW55d2F5cywgc28gaXQgZG9lc24ndCBtYXR0ZXIgdGhh
dCBEcm9wQWxsTG9ja3MgaXMgYSBuby1vcC4KKyAgICAgICAgaWYgKCF2bS5yZWZDb3VudCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KwogICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIG1fZHJvcEFsbExvY2tzOwogICAgIFZNKiBtX3Zt
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVy
T2JqZWN0Lm1tCShyZXZpc2lvbiAxNTkzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsOCBAQCB2
b2lkIEpTQVBJV3JhcHBlck9iamVjdEhhbmRsZU93bmVyOjpmaW5hCiAgICAgSlNDOjpKU0FQSVdy
YXBwZXJPYmplY3QqIHdyYXBwZXJPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0M6OkpTQVBJV3JhcHBl
ck9iamVjdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgaWYgKCF3cmFwcGVyT2JqZWN0
LT53cmFwcGVkT2JqZWN0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBbc3RhdGljX2Nhc3Q8aWQ+
KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSkgcmVsZWFzZV07CisKKyAgICBKU0M6Okhl
YXA6OmhlYXAod3JhcHBlck9iamVjdCktPnJlbGVhc2VTb29uKGFkb3B0TlMoc3RhdGljX2Nhc3Q8
aWQ+KHdyYXBwZXJPYmplY3QtPndyYXBwZWRPYmplY3QoKSkpKTsKICAgICBKU0M6OldlYWtTZXQ6
OmRlYWxsb2NhdGUoSlNDOjpXZWFrSW1wbDo6YXNXZWFrSW1wbChoYW5kbGUuc2xvdCgpKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24u
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PYmpDQ2FsbGJhY2tG
dW5jdGlvbi5tbQkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9PYmpDQ2FsbGJhY2tGdW5jdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogI2ltcG9ydCAiQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIgogI2ltcG9ydCAiQVBJQ2FzdC5oIgog
I2ltcG9ydCAiQVBJU2hpbXMuaCIKKyNpbXBvcnQgIkRlbGF5ZWRSZWxlYXNlU2NvcGUuaCIKICNp
bXBvcnQgIkVycm9yLmgiCiAjaW1wb3J0ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2ltcG9ydCAi
SlNDZWxsLmgiCkBAIC00MDUsMTIgKzQwNiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCgo
dHlwZSAhPSBDYWxsYmFja0luc3RhbmNlTWV0aG9kICYmIHR5cGUgIT0gQ2FsbGJhY2tJbml0TWV0
aG9kKSB8fCBpbnN0YW5jZUNsYXNzKTsKICAgICB9CiAKLSAgICB+T2JqQ0NhbGxiYWNrRnVuY3Rp
b25JbXBsKCkKKyAgICB2b2lkIGRlc3Ryb3koSGVhcCYgaGVhcCkKICAgICB7CiAgICAgICAgIC8v
IFdlIG5lZWQgdG8gZXhwbGljaXR5IHJlbGVhc2UgdGhlIHRhcmdldCBzaW5jZSB3ZSBkaWRuJ3Qg
Y2FsbCAKICAgICAgICAgLy8gLXJldGFpbkFyZ3VtZW50cyBvbiBtX2ludm9jYXRpb24gKGFuZCB3
ZSBkb24ndCB3YW50IHRvIGRvIHNvKS4KICAgICAgICAgaWYgKG1fdHlwZSA9PSBDYWxsYmFja0Js
b2NrIHx8IG1fdHlwZSA9PSBDYWxsYmFja0NsYXNzTWV0aG9kKQotICAgICAgICAgICAgW1ttX2lu
dm9jYXRpb24uZ2V0KCkgdGFyZ2V0XSByZWxlYXNlXTsKKyAgICAgICAgICAgIGhlYXAucmVsZWFz
ZVNvb24oYWRvcHROUyhbbV9pbnZvY2F0aW9uLmdldCgpIHRhcmdldF0pKTsKICAgICAgICAgW21f
aW5zdGFuY2VDbGFzcyByZWxlYXNlXTsKICAgICB9CiAKQEAgLTUyMCw3ICs1MjEsOSBAQCBPYmpD
Q2FsbGJhY2tGdW5jdGlvbiogT2JqQ0NhbGxiYWNrRnVuY3RpCiAKIHZvaWQgT2JqQ0NhbGxiYWNr
RnVuY3Rpb246OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewotICAgIHN0YXRpY19jYXN0PE9iakND
YWxsYmFja0Z1bmN0aW9uKj4oY2VsbCktPk9iakNDYWxsYmFja0Z1bmN0aW9uOjp+T2JqQ0NhbGxi
YWNrRnVuY3Rpb24oKTsKKyAgICBPYmpDQ2FsbGJhY2tGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nh
c3Q8T2JqQ0NhbGxiYWNrRnVuY3Rpb24qPihjZWxsKTsKKyAgICBmdW5jdGlvbi0+aW1wbCgpLT5k
ZXN0cm95KCpIZWFwOjpoZWFwKGNlbGwpKTsKKyAgICBmdW5jdGlvbi0+T2JqQ0NhbGxiYWNrRnVu
Y3Rpb246On5PYmpDQ2FsbGJhY2tGdW5jdGlvbigpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlzaW9uIDE1OTMwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTgyLDU0ICsxODIsNDMgQEAgLSAodm9pZClyZW1vdmVDaGlsZEF0SW5kZXg6KE5TVUludGVn
ZXIpaQogQGVuZAogCiBAaW50ZXJmYWNlIFRpbnlET01Ob2RlIDogTlNPYmplY3Q8VGlueURPTU5v
ZGU+Ci0rIChKU1ZpcnR1YWxNYWNoaW5lICopc2hhcmVkVmlydHVhbE1hY2hpbmU7Ci0rICh2b2lk
KWNsZWFyU2hhcmVkVmlydHVhbE1hY2hpbmU7CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBUaW55
RE9NTm9kZSB7CiAgICAgTlNNdXRhYmxlQXJyYXkgKm1fY2hpbGRyZW47CisgICAgSlNWaXJ0dWFs
TWFjaGluZSAqbV9zaGFyZWRWaXJ0dWFsTWFjaGluZTsKIH0KIAotc3RhdGljIEpTVmlydHVhbE1h
Y2hpbmUgKnNoYXJlZEluc3RhbmNlID0gbmlsOwotCi0rIChKU1ZpcnR1YWxNYWNoaW5lICopc2hh
cmVkVmlydHVhbE1hY2hpbmUKLXsKLSAgICBpZiAoIXNoYXJlZEluc3RhbmNlKQotICAgICAgICBz
aGFyZWRJbnN0YW5jZSA9IFtbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF07Ci0gICAgcmV0
dXJuIHNoYXJlZEluc3RhbmNlOwotfQotCi0rICh2b2lkKWNsZWFyU2hhcmVkVmlydHVhbE1hY2hp
bmUKLXsKLSAgICBzaGFyZWRJbnN0YW5jZSA9IG5pbDsKLX0KLQotLSAoaWQpaW5pdAorLSAoaWQp
aW5pdFdpdGhWaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZpcnR1YWxNYWNoaW5l
CiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKICAgICBtX2NoaWxkcmVuID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhDYXBhY2l0eTowXTsKKyAgICBtX3NoYXJlZFZpcnR1YWxNYWNoaW5lID0gdmlydHVhbE1h
Y2hpbmU7CisjaWYgIV9faGFzX2ZlYXR1cmUob2JqY19hcmMpCisgICAgW21fc2hhcmVkVmlydHVh
bE1hY2hpbmUgcmV0YWluXTsKKyNlbmRpZgogCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKIC0gKHZv
aWQpZGVhbGxvYwogewotICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFttX2NoaWxkcmVu
IG9iamVjdEVudW1lcmF0b3JdOwotICAgIGlkIG5leHRDaGlsZDsKLSAgICB3aGlsZSAoKG5leHRD
aGlsZCA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSkKLSAgICAgICAgW1tUaW55RE9NTm9kZSBz
aGFyZWRWaXJ0dWFsTWFjaGluZV0gcmVtb3ZlTWFuYWdlZFJlZmVyZW5jZTpuZXh0Q2hpbGQgd2l0
aE93bmVyOnNlbGZdOworICAgIGZvciAoVGlueURPTU5vZGUgKmNoaWxkIGluIG1fY2hpbGRyZW4p
CisgICAgICAgIFttX3NoYXJlZFZpcnR1YWxNYWNoaW5lIHJlbW92ZU1hbmFnZWRSZWZlcmVuY2U6
Y2hpbGQgd2l0aE93bmVyOnNlbGZdOwogCiAjaWYgIV9faGFzX2ZlYXR1cmUob2JqY19hcmMpCisg
ICAgW21fY2hpbGRyZW4gcmVsZWFzZV07CisgICAgW21fc2hhcmVkVmlydHVhbE1hY2hpbmUgcmVs
ZWFzZV07CiAgICAgW3N1cGVyIGRlYWxsb2NdOwogI2VuZGlmCiB9CiAKIC0gKHZvaWQpYXBwZW5k
Q2hpbGQ6KFRpbnlET01Ob2RlICopY2hpbGQKIHsKLSAgICBbW1RpbnlET01Ob2RlIHNoYXJlZFZp
cnR1YWxNYWNoaW5lXSBhZGRNYW5hZ2VkUmVmZXJlbmNlOmNoaWxkIHdpdGhPd25lcjpzZWxmXTsK
KyAgICBbbV9zaGFyZWRWaXJ0dWFsTWFjaGluZSBhZGRNYW5hZ2VkUmVmZXJlbmNlOmNoaWxkIHdp
dGhPd25lcjpzZWxmXTsKICAgICBbbV9jaGlsZHJlbiBhZGRPYmplY3Q6Y2hpbGRdOwogfQogCkBA
IC0yNDksNyArMjM4LDcgQEAgLSAodm9pZClyZW1vdmVDaGlsZEF0SW5kZXg6KE5TVUludGVnZXIp
aQogewogICAgIGlmIChpbmRleCA+PSBbbV9jaGlsZHJlbiBjb3VudF0pCiAgICAgICAgIHJldHVy
bjsKLSAgICBbW1RpbnlET01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5lXSByZW1vdmVNYW5hZ2Vk
UmVmZXJlbmNlOlttX2NoaWxkcmVuIG9iamVjdEF0SW5kZXg6aW5kZXhdIHdpdGhPd25lcjpzZWxm
XTsKKyAgICBbbV9zaGFyZWRWaXJ0dWFsTWFjaGluZSByZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOltt
X2NoaWxkcmVuIG9iamVjdEF0SW5kZXg6aW5kZXhdIHdpdGhPd25lcjpzZWxmXTsKICAgICBbbV9j
aGlsZHJlbiByZW1vdmVPYmplY3RBdEluZGV4OmluZGV4XTsKIH0KIApAQCAtNDI0LDYgKzQxMyw0
NyBAQCAtIChpZClpbml0V2l0aEE6KGludClhCiAgICAgcmV0dXJuIHNlbGY7CiB9CiBAZW5kCisK
K3N0YXRpYyBib29sIGV2aWxBbGxvY2F0aW9uT2JqZWN0V2FzRGVhbGxvY2VkID0gZmFsc2U7CisK
K0BpbnRlcmZhY2UgRXZpbEFsbG9jYXRpb25PYmplY3QgOiBOU09iamVjdAorLSAoSlNWYWx1ZSAq
KWRvRXZpbFRoaW5nc1dpdGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0OworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gRXZpbEFsbG9jYXRpb25PYmplY3QgeworICAgIEpTQ29udGV4dCAqbV9j
b250ZXh0OworfQorLSAoaWQpaW5pdFdpdGhDb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0Cit7
CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworCisgICAgcmV0dXJuIHNlbGY7Cit9
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBbc2VsZiBkb0V2aWxUaGluZ3NXaXRoQ29udGV4dDpt
X2NvbnRleHRdOworICAgIGV2aWxBbGxvY2F0aW9uT2JqZWN0V2FzRGVhbGxvY2VkID0gdHJ1ZTsK
K30KKworLSAoSlNWYWx1ZSAqKWRvRXZpbFRoaW5nc1dpdGhDb250ZXh0OihKU0NvbnRleHQgKilj
b250ZXh0Cit7CisgICAgcmV0dXJuIFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiIFwKKyAgICAg
ICAgKGZ1bmN0aW9uKCkgeyBcCisgICAgICAgICAgICB2YXIgYSA9IFtdOyBcCisgICAgICAgICAg
ICB2YXIgc3VtID0gMDsgXAorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsg
KytpKSB7IFwKKyAgICAgICAgICAgICAgICBzdW0gKz0gaTsgXAorICAgICAgICAgICAgICAgIGFb
aV0gPSBzdW07IFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgcmV0dXJuIHN1bTsgXAor
ICAgICAgICB9KSgpIl07Cit9CitAZW5kCisKIHN0YXRpYyB2b2lkIGNoZWNrUmVzdWx0KE5TU3Ry
aW5nICpkZXNjcmlwdGlvbiwgYm9vbCBwYXNzZWQpCiB7CiAgICAgTlNMb2coQCJURVNUOiBcIiVA
XCI6ICVAIiwgZGVzY3JpcHRpb24sIHBhc3NlZCA/IEAiUEFTU0VEIiA6IEAiRkFJTEVEIik7CkBA
IC05NTgsMTIgKzk4OCwxMSBAQCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKICAgICB9CiAKICAg
ICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdm0gPSBbVGlu
eURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdOwotICAgICAgICBKU0NvbnRleHQgKmNvbnRl
eHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTp2bV07Ci0gICAg
ICAgIFRpbnlET01Ob2RlICpyb290ID0gW1tUaW55RE9NTm9kZSBhbGxvY10gaW5pdF07CisgICAg
ICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAg
ICAgVGlueURPTU5vZGUgKnJvb3QgPSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0V2l0aFZpcnR1
YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmVdOwogICAgICAgICBUaW55RE9NTm9kZSAq
bGFzdE5vZGUgPSByb290OwogICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCAzOyBp
KyspIHsKLSAgICAgICAgICAgIFRpbnlET01Ob2RlICpuZXdOb2RlID0gW1tUaW55RE9NTm9kZSBh
bGxvY10gaW5pdF07CisgICAgICAgICAgICBUaW55RE9NTm9kZSAqbmV3Tm9kZSA9IFtbVGlueURP
TU5vZGUgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFjaGlu
ZV07CiAgICAgICAgICAgICBbbGFzdE5vZGUgYXBwZW5kQ2hpbGQ6bmV3Tm9kZV07CiAgICAgICAg
ICAgICBsYXN0Tm9kZSA9IG5ld05vZGU7CiAgICAgICAgIH0KQEAgLTk4NSwxNyArMTAxNCwxNCBA
QCB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKIAogICAgICAgICBKU1ZhbHVlICpteUN1c3RvbVBy
b3BlcnR5ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJnZXRMYXN0Tm9kZUluQ2hhaW4ocm9v
dCkubXlDdXN0b21Qcm9wZXJ0eSJdOwogICAgICAgICBjaGVja1Jlc3VsdChAIk15IGN1c3RvbSBw
cm9wZXJ0eSA9PSA0MiIsIFtteUN1c3RvbVByb3BlcnR5IGlzTnVtYmVyXSAmJiBbbXlDdXN0b21Q
cm9wZXJ0eSB0b0ludDMyXSA9PSA0Mik7Ci0KLSAgICAgICAgW1RpbnlET01Ob2RlIGNsZWFyU2hh
cmVkVmlydHVhbE1hY2hpbmVdOwogICAgIH0KIAogICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAg
ICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2bSA9IFtUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFsTWFj
aGluZV07Ci0gICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBp
bml0V2l0aFZpcnR1YWxNYWNoaW5lOnZtXTsKLSAgICAgICAgVGlueURPTU5vZGUgKnJvb3QgPSBb
W1RpbnlET01Ob2RlIGFsbG9jXSBpbml0XTsKKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W1tKU0NvbnRleHQgYWxsb2NdIGluaXRdOworICAgICAgICBUaW55RE9NTm9kZSAqcm9vdCA9IFtb
VGlueURPTU5vZGUgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFs
TWFjaGluZV07CiAgICAgICAgIFRpbnlET01Ob2RlICpsYXN0Tm9kZSA9IHJvb3Q7CiAgICAgICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAgICAgVGlueURP
TU5vZGUgKm5ld05vZGUgPSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAg
IFRpbnlET01Ob2RlICpuZXdOb2RlID0gW1tUaW55RE9NTm9kZSBhbGxvY10gaW5pdFdpdGhWaXJ0
dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNoaW5lXTsKICAgICAgICAgICAgIFtsYXN0Tm9k
ZSBhcHBlbmRDaGlsZDpuZXdOb2RlXTsKICAgICAgICAgICAgIGxhc3ROb2RlID0gbmV3Tm9kZTsK
ICAgICAgICAgfQpAQCAtMTAyMCw4ICsxMDQ2LDYgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgp
CiAKICAgICAgICAgSlNWYWx1ZSAqbXlDdXN0b21Qcm9wZXJ0eSA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAiZ2V0TGFzdE5vZGVJbkNoYWluKHJvb3QpLm15Q3VzdG9tUHJvcGVydHkiXTsKICAg
ICAgICAgY2hlY2tSZXN1bHQoQCJkdXBsaWNhdGUgY2FsbHMgdG8gYWRkTWFuYWdlZFJlZmVyZW5j
ZSBkb24ndCBjYXVzZSB0aGluZ3MgdG8gZGllIiwgW215Q3VzdG9tUHJvcGVydHkgaXNOdW1iZXJd
ICYmIFtteUN1c3RvbVByb3BlcnR5IHRvSW50MzJdID09IDQyKTsKLQotICAgICAgICBbVGlueURP
TU5vZGUgY2xlYXJTaGFyZWRWaXJ0dWFsTWFjaGluZV07CiAgICAgfQogCiAgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CkBAIC0xMTYxLDYgKzExODUsMTcgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgp
CiAgICAgICAgIGNoZWNrUmVzdWx0KEAiUmV0dXJuaW5nIGluc3RhbmNlIG9mIENsYXNzRSBmcm9t
IENsYXNzRCdzIGluaXQgaGFzIGNvcnJlY3QgY2xhc3MiLCBbZCBpc0luc3RhbmNlT2Y6Y29udGV4
dFtAIkNsYXNzRSJdXSk7CiAgICAgfQogCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAg
IEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAgICAgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgICAgICBFdmlsQWxsb2NhdGlvbk9iamVjdCAqZXZp
bE9iamVjdCA9IFtbRXZpbEFsbG9jYXRpb25PYmplY3QgYWxsb2NdIGluaXRXaXRoQ29udGV4dDpj
b250ZXh0XTsKKyAgICAgICAgICAgIGNvbnRleHRbQCJldmlsT2JqZWN0Il0gPSBldmlsT2JqZWN0
OworICAgICAgICAgICAgY29udGV4dFtAImV2aWxPYmplY3QiXSA9IG5pbDsKKyAgICAgICAgfQor
ICAgICAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRleHQg
SlNHbG9iYWxDb250ZXh0UmVmXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiRXZpbEFsbG9jYXRp
b25PYmplY3Qgd2FzIHN1Y2Nlc3NmdWxseSBkZWFsbG9jZWQgd2l0aG91dCBjcmFzaGluZyIsIGV2
aWxBbGxvY2F0aW9uT2JqZWN0V2FzRGVhbGxvY2VkKTsKKyAgICB9CisKICAgICBjdXJyZW50VGhp
c0luc2lkZUJsb2NrR2V0dGVyVGVzdCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1OTMwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTkzNiw2ICs5MzYsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxDb3B5VmlzaXRvcklubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxoZWFwXENvcHlXb3JrTGlzdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhl
YXBcRGVmZXJHQy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcRGVsYXll
ZFJlbGVhc2VTY29wZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NB
c3NlcnRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVh
ZC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWRTaGFyZWRE
YXRhLmgiIC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVycwkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTU5LDYgKzE1NTksOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caGVhcFxEZWZlckdDLmgiPg0KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KICAg
ICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXERlbGF5ZWRS
ZWxlYXNlU2NwZS5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ0Fzc2VydGlvbnMuaCI+
DQogICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTkzMDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNzA1LDYgKzcwNSw3IEBACiAJCTFBQ0Y3Mzc3MTcxQ0E2RkIwMEM5
QkIxRSAvKiBXZWFrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLzsgfTsKIAkJMjYw
MEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1
RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi87IH07CiAJCTI2MDBCNUE3MTUyQkFBQTcwMDkxRUU1
RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmgg
Ki87IH07CisJCTJBMjgyNUQwMTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVsZWFzZVNjb3Bl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTI4MjVD
RjE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oICovOyB9OwogCQkyQTQ4
RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMUI1NzQxNzZBMjI0RDAwMEUy
QTIzIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKIAkJMkE2RjQ2MjYxN0U5NTlDRTAw
QzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJBNkY0NjI1MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkE3
QTU4RUYxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERl
ZmVyR0MuY3BwICovOyB9OwpAQCAtMTk1Nyw2ICsxOTU4LDcgQEAKIAkJMUNBQThCNEIwRDMyQzM5
QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHRDb3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEphdmFTY3JpcHRDb3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2
MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ0pvaW5lci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pv
aW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0pvaW5lci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQTI4MjVDRjE4MzQxRjJEMDA4N0ZCQTkg
LyogRGVsYXllZFJlbGVhc2VTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZWxheWVkUmVsZWFzZVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJB
NkY0NjI1MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBPcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJHQy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJBRDg5MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9u
U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEl0ZXJhdGlvblNj
b3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDk0LDYgKzMwOTYsNyBAQAog
CQkJCTE0MTUwMTMyMTU0QkIxM0YwMDVEOEM5OCAvKiBXZWFrU2V0SW5saW5lcy5oICovLAogCQkJ
CTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLywK
IAkJCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICov
LAorCQkJCTJBMjgyNUNGMTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVsZWFzZVNjb3BlLmgg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IGhlYXA7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtNDc0NSw2ICs0NzQ4LDcgQEAKIAkJCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2Ft
cGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDg4NjBFRDIxQzNEMDBCODk2
MTkgLyogU2FtcGxpbmdUb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1MjE3RUUyNzQ5
MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkyQTI4MjVEMDE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcyOTlEQTYxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OURBMjE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBQTEzNUU1RTFDMDA5NjMwMTIgLyog
U0g0QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0RlbGF5ZWRSZWxlYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9EZWxheWVkUmVsZWFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWxheWVkUmVsZWFzZVNjb3BlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVsYXllZFJlbGVhc2VT
Y29wZV9oCisjZGVmaW5lIERlbGF5ZWRSZWxlYXNlU2NvcGVfaAorCisjaW5jbHVkZSAiQVBJU2hp
bXMuaCIKKyNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2lm
IFVTRShDRikKKworY2xhc3MgRGVsYXllZFJlbGVhc2VTY29wZSB7CitwdWJsaWM6CisgICAgRGVs
YXllZFJlbGVhc2VTY29wZShNYXJrZWRTcGFjZSYgbWFya2VkU3BhY2UpCisgICAgICAgIDogbV9t
YXJrZWRTcGFjZShtYXJrZWRTcGFjZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9tYXJrZWRT
cGFjZS5tX2N1cnJlbnREZWxheWVkUmVsZWFzZVNjb3BlKTsKKyAgICAgICAgbV9tYXJrZWRTcGFj
ZS5tX2N1cnJlbnREZWxheWVkUmVsZWFzZVNjb3BlID0gdGhpczsKKyAgICB9CisKKyAgICB+RGVs
YXllZFJlbGVhc2VTY29wZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9tYXJrZWRTcGFjZS5t
X2N1cnJlbnREZWxheWVkUmVsZWFzZVNjb3BlID09IHRoaXMpOworICAgICAgICBtX21hcmtlZFNw
YWNlLm1fY3VycmVudERlbGF5ZWRSZWxlYXNlU2NvcGUgPSBudWxscHRyOworCisgICAgICAgIEFQ
SUNhbGxiYWNrU2hpbSBjYWxsYmFja1NoaW0oKm1fbWFya2VkU3BhY2UubV9oZWFwLT52bSgpKTsK
KyAgICAgICAgbV9kZWxheWVkUmVsZWFzZU9iamVjdHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHJlbGVhc2VTb29uKFJldGFpblB0cjxUPiYm
IG9iamVjdCkKKyAgICB7CisgICAgICAgIG1fZGVsYXllZFJlbGVhc2VPYmplY3RzLmFwcGVuZChz
dGQ6Om1vdmUob2JqZWN0KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1hcmtlZFNwYWNlJiBt
X21hcmtlZFNwYWNlOworICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZUeXBlUmVmPj4gbV9kZWxheWVk
UmVsZWFzZU9iamVjdHM7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lk
IE1hcmtlZFNwYWNlOjpyZWxlYXNlU29vbihSZXRhaW5QdHI8VD4mJiBvYmplY3QpCit7CisgICAg
QVNTRVJUKG1fY3VycmVudERlbGF5ZWRSZWxlYXNlU2NvcGUpOworICAgIG1fY3VycmVudERlbGF5
ZWRSZWxlYXNlU2NvcGUtPnJlbGVhc2VTb29uKHN0ZDo6bW92ZShvYmplY3QpKTsKK30KKworI2Vs
aWYgLy8gVVNFKENGKQorCitjbGFzcyBEZWxheWVkUmVsZWFzZVNjb3BlIHsKK3B1YmxpYzoKKyAg
ICBEZWxheWVkUmVsZWFzZVNjb3BlKE1hcmtlZFNwYWNlJikKKyAgICB7CisgICAgfQorfTsKKwor
I2VuZGlmIC8vIFVTRShDRikKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEZWxh
eWVkUmVsZWFzZVNjb3BlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAxNTkzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR1dv
cmtsaXN0LmgiCisjaW5jbHVkZSAiRGVsYXllZFJlbGVhc2VTY29wZS5oIgogI2luY2x1ZGUgIkdD
QWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5s
aW5lcy5oIgogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgpAQCAtNzI5LDYgKzczMCw3
IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UoKQogICAgIGlmICghbV9pc1NhZmVUb0Nv
bGxlY3QpCiAgICAgICAgIHJldHVybjsKICAgICAKKyAgICBEZWxheWVkUmVsZWFzZVNjb3BlIGRl
bGF5ZWRSZWxlYXNlU2NvcGUobV9vYmplY3RTcGFjZSk7CiAgICAgY29sbGVjdChEb1N3ZWVwKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTU5MzA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODYsNiArMTg2LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgYm9vbCBp
c0RlZmVycmVkKCkgY29uc3QgeyByZXR1cm4gISFtX2RlZmVycmFsRGVwdGg7IH0KIAorI2lmIFVT
RShDRikKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCByZWxlYXNlU29vbihSZXRh
aW5QdHI8VD4mJik7CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBDb2RlQmxvY2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRCbG9jazsKQEAgLTQ2OCw2
ICs0NzIsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX2Jsb2NrQWxsb2Nh
dG9yOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGlubGluZSB2b2lk
IEhlYXA6OnJlbGVhc2VTb29uKFJldGFpblB0cjxUPiYmIG9iamVjdCkKKyAgICB7CisgICAgICAg
IG1fb2JqZWN0U3BhY2UucmVsZWFzZVNvb24oc3RkOjptb3ZlKG9iamVjdCkpOworICAgIH0KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBIZWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTU5MzA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJNYXJrZWRBbGxvY2F0b3IuaCIKIAorI2luY2x1ZGUgIkRlbGF5ZWRSZWxlYXNlU2NvcGUuaCIK
ICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5j
bHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCkBAIC03Nyw2ICs3OCw3IEBAIGlubGluZSB2b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXQKIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgQVNTRVJUKG1faGVhcC0+dm0oKS0+
Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgRGVsYXllZFJlbGVhc2VTY29w
ZSBkZWxheWVkUmVsZWFzZVNjb3BlKCptX21hcmtlZFNwYWNlKTsKICNpZiBDT0xMRUNUX09OX0VW
RVJZX0FMTE9DQVRJT04KICAgICBpZiAoIW1faGVhcC0+aXNEZWZlcnJlZCgpKQogICAgICAgICBt
X2hlYXAtPmNvbGxlY3RBbGxHYXJiYWdlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAxNTkzMDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogCisj
aW5jbHVkZSAiRGVsYXllZFJlbGVhc2VTY29wZS5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dl
ZXBlci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgi
CkBAIC04MSw2ICs4Miw3IEBAIE1hcmtlZFNwYWNlOjpNYXJrZWRTcGFjZShIZWFwKiBoZWFwKQog
ICAgIDogbV9oZWFwKGhlYXApCiAgICAgLCBtX2NhcGFjaXR5KDApCiAgICAgLCBtX2lzSXRlcmF0
aW5nKGZhbHNlKQorICAgICwgbV9jdXJyZW50RGVsYXllZFJlbGVhc2VTY29wZShudWxscHRyKQog
ewogICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IHBy
ZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHByZWNpc2VTdGVwKSB7CiAgICAgICAgIGFsbG9jYXRv
ckZvcihjZWxsU2l6ZSkuaW5pdChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgTWFya2VkQmxvY2s6Ok5v
bmUpOwpAQCAtMTExLDEyICsxMTMsMTQgQEAgc3RydWN0IExhc3RDaGFuY2VUb0ZpbmFsaXplIDog
TWFya2VkQmxvYwogCiB2b2lkIE1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiB7
CisgICAgRGVsYXllZFJlbGVhc2VTY29wZSBkZWxheWVkUmVsZWFzZVNjb3BlKCp0aGlzKTsKICAg
ICBzdG9wQWxsb2NhdGluZygpOwogICAgIGZvckVhY2hCbG9jazxMYXN0Q2hhbmNlVG9GaW5hbGl6
ZT4oKTsKIH0KIAogdm9pZCBNYXJrZWRTcGFjZTo6c3dlZXAoKQogeworICAgIEFTU0VSVChtX2N1
cnJlbnREZWxheWVkUmVsZWFzZVNjb3BlKTsKICAgICBtX2hlYXAtPnN3ZWVwZXIoKS0+d2lsbEZp
bmlzaFN3ZWVwaW5nKCk7CiAgICAgZm9yRWFjaEJsb2NrPFN3ZWVwPigpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAxNTkzMDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBEZWxheWVkUmVs
ZWFzZVNjb3BlOwogY2xhc3MgSGVhcDsKIGNsYXNzIEhlYXBJdGVyYXRpb25TY29wZTsKIGNsYXNz
IEpTQ2VsbDsKQEAgLTExNCw3ICsxMTUsMTIgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1BhZ2Vk
T3V0KGRvdWJsZSBkZWFkbGluZSk7CiAKKyNpZiBVU0UoQ0YpCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdm9pZCByZWxlYXNlU29vbihSZXRhaW5QdHI8VD4mJik7CisjZW5kaWYKKwogcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgRGVsYXllZFJlbGVhc2VTY29wZTsKICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4gdm9pZCBmb3JFYWNoQWxsb2NhdG9yKEZ1bmN0b3ImKTsKQEAgLTE0NCw2ICsxNTAsOCBAQCBw
cml2YXRlOgogICAgIHNpemVfdCBtX2NhcGFjaXR5OwogICAgIGJvb2wgbV9pc0l0ZXJhdGluZzsK
ICAgICBNYXJrZWRCbG9ja1NldCBtX2Jsb2NrczsKKworICAgIERlbGF5ZWRSZWxlYXNlU2NvcGUq
IG1fY3VycmVudERlbGF5ZWRSZWxlYXNlU2NvcGU7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBNYXJrZWRTcGFjZTo6
Zm9yRWFjaExpdmVDZWxsKEhlYXBJdGVyYXRpb25TY29wZSYsIEZ1bmN0b3ImIGZ1bmN0b3IpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216988</attachid>
            <date>2013-11-14 15:24:39 -0800</date>
            <delta_ts>2013-11-14 15:33:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123821-20131114152433.patch</filename>
            <type>text/plain</type>
            <size>26096</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDEzLTExLTE0ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgLWRlYWxsb2MgY2FsbGJhY2tzIGZyb20gd3JhcHBlZCBPYmplY3RpdmUtQyBvYmpl
Y3RzIGNhbiBoYXBwZW4gYXQgYmFkIHRpbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgd2l0aCB0aGUgSlNDIE9iai1DIEFQSSwgSlMg
d3JhcHBlcnMgZm9yIGNsaWVudCBPYmotQyBvYmplY3RzIHJldGFpbiB0aGVpciBhc3NvY2lhdGVk
IE9iai1DIAorICAgICAgICBvYmplY3QuIFdoZW4gdGhleSBhcmUgc3dlcHQsIHRoZXkgcmVsZWFz
ZSB0aGVpciBPYmotQyBvYmplY3RzIHdoaWNoIGNhbiB0cmlnZ2VyIGEgY2FsbCB0byB0aGF0IAor
ICAgICAgICBvYmplY3QncyAtZGVhbGxvYyBtZXRob2QuIFRoZXNlIC1kZWFsbG9jIG1ldGhvZHMg
Y2FuIHRoZW4gY2FsbCBiYWNrIGludG8gdGhlIHNhbWUgVk0sIHdoaWNoIGlzIG5vdCAKKyAgICAg
ICAgYWxsb3dlZCBkdXJpbmcgc3dlZXBpbmcgb3IgVk0gc2h1dGRvd24uCisKKyAgICAgICAgV2Ug
Y2FuIGhhbmRsZSB0aGlzIGNhc2UgYnkgY3JlYXRpbmcgb3VyIG93biBwb29sIG9mIE9iai1DIG9i
amVjdHMgdG8gYmUgcmVsZWFzZWQgd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLgorICAgICAgICBU
aGlzIGlzIGFjY29tcGxpc2hlZCBieSB1c2luZyBEZWxheWVkUmVsZWFzZVNjb3BlLCBhbiBSQUlJ
LXN0eWxlIG9iamVjdCB0aGF0IHdpbGwgcmV0YWluIGFsbCBvYmplY3RzCisgICAgICAgIHRoYXQg
YXJlIHVuc2FmZSB0byByZWxlYXNlIHVudGlsIHRoZSBlbmQgb2YgdGhlIERlbGF5ZWRSZWxlYXNl
U2NvcGUuCisKKyAgICAgICAgKiBBUEkvQVBJU2hpbXMuaDoKKyAgICAgICAgKEpTQzo6QVBJQ2Fs
bGJhY2tTaGltOjpBUElDYWxsYmFja1NoaW0pOgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1No
aW06OnZtRm9yRHJvcEFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6QVBJQ2FsbGJhY2tTaGltOjpl
eGVjRm9yRHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBBUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
OgorICAgICAgICAoSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplKToKKyAg
ICAgICAgKiBBUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW06CisgICAgICAgIChKU0M6Ok9iakND
YWxsYmFja0Z1bmN0aW9uSW1wbDo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6Ok9iakNDYWxsYmFj
a0Z1bmN0aW9uOjpkZXN0cm95KToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAg
ICAgICAgKC1bVGlueURPTU5vZGUgaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpdKToKKyAgICAgICAg
KC1bVGlueURPTU5vZGUgZGVhbGxvY10pOgorICAgICAgICAoLVtUaW55RE9NTm9kZSBhcHBlbmRD
aGlsZDpdKToKKyAgICAgICAgKC1bVGlueURPTU5vZGUgcmVtb3ZlQ2hpbGRBdEluZGV4Ol0pOgor
ICAgICAgICAoLVtFdmlsQWxsb2NhdGlvbk9iamVjdCBpbml0V2l0aENvbnRleHQ6XSk6CisgICAg
ICAgICgtW0V2aWxBbGxvY2F0aW9uT2JqZWN0IGRlYWxsb2NdKToKKyAgICAgICAgKC1bRXZpbEFs
bG9jYXRpb25PYmplY3QgZG9FdmlsVGhpbmdzV2l0aENvbnRleHQ6XSk6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0Rl
bGF5ZWRSZWxlYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRlbGF5ZWRSZWxlYXNl
U2NvcGU6OkRlbGF5ZWRSZWxlYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpEZWxheWVkUmVsZWFz
ZVNjb3BlOjp+RGVsYXllZFJlbGVhc2VTY29wZSk6CisgICAgICAgIChKU0M6OkRlbGF5ZWRSZWxl
YXNlU2NvcGU6OnJlbGVhc2VTb29uKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnJlbGVh
c2VTb29uKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpj
b2xsZWN0QWxsR2FyYmFnZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6
OkhlYXA6OnJlbGVhc2VTb29uKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAg
ICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpN
YXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5h
bGl6ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzd2VlcCk6CisgICAgICAgICogaGVh
cC9NYXJrZWRTcGFjZS5oOgorCiAyMDEzLTExLTE0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxNTkyNzYpOiBGaXggbG90cyBvZiBj
cmFzaGVzIGZvciBhcm1fdHJhZGl0aW9uYWwgYXJjaGl0ZWN0dXJlLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1OTMwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC00ODYsOCArNDg2LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29weVdvcmtMaXN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuaCBcCi0gICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9E
ZWZlckdDLmNwcCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaCBcCisgICAgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvRGVsYXllZFJlbGVhc2VTY29wZS5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0Fzc2VydGlvbnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9BUElTaGltcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvQVBJU2hpbXMuaAkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9BUElTaGltcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxOCArODMsMzkgQEAgcHJpdmF0
ZToKIGNsYXNzIEFQSUNhbGxiYWNrU2hpbSB7CiBwdWJsaWM6CiAgICAgQVBJQ2FsbGJhY2tTaGlt
KEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgOiBtX2Ryb3BBbGxMb2NrcyhleGVjLT52bSgpLmV4
Y2x1c2l2ZVRocmVhZCA/IDAgOiBleGVjKQorICAgICAgICA6IG1fZHJvcEFsbExvY2tzKHNob3Vs
ZERyb3BBbGxMb2NrcyhleGVjLT52bSgpKSA/IGV4ZWMgOiAwKQogICAgICAgICAsIG1fdm0oJmV4
ZWMtPnZtKCkpCiAgICAgewogICAgICAgICB3dGZUaHJlYWREYXRhKCkucmVzZXRDdXJyZW50SWRl
bnRpZmllclRhYmxlKCk7CiAgICAgfQogCisgICAgQVBJQ2FsbGJhY2tTaGltKFZNJiB2bSkKKyAg
ICAgICAgOiBtX2Ryb3BBbGxMb2NrcyhzaG91bGREcm9wQWxsTG9ja3Modm0pID8gJnZtIDogMCkK
KyAgICAgICAgLCBtX3ZtKCZ2bSkKKyAgICB7CisgICAgICAgIHd0ZlRocmVhZERhdGEoKS5yZXNl
dEN1cnJlbnRJZGVudGlmaWVyVGFibGUoKTsKKyAgICB9CisKICAgICB+QVBJQ2FsbGJhY2tTaGlt
KCkKICAgICB7CiAgICAgICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRh
YmxlKG1fdm0tPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCiBwcml2YXRlOgorICAgIHN0YXRp
YyBib29sIHNob3VsZERyb3BBbGxMb2NrcyhWTSYgdm0pCisgICAgeworICAgICAgICBpZiAodm0u
ZXhjbHVzaXZlVGhyZWFkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8v
IElmIHRoZSBWTSBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nIGRlc3Ryb3llZCB0aGVuIHdlIGRv
bid0IHdhbnQgdG8gcmVzdXJyZWN0IGl0CisgICAgICAgIC8vIGJ5IGFsbG93aW5nIERyb3BBbGxM
b2NrcyB0byByZWYgaXQuIEJ5IHRoaXMgcG9pbnQgdGhlIEFQSUxvY2sgaGFzIGFscmVhZHkgYmVl
biAKKyAgICAgICAgLy8gcmVsZWFzZWQgYW55d2F5cywgc28gaXQgZG9lc24ndCBtYXR0ZXIgdGhh
dCBEcm9wQWxsTG9ja3MgaXMgYSBuby1vcC4KKyAgICAgICAgaWYgKCF2bS5yZWZDb3VudCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KwogICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIG1fZHJvcEFsbExvY2tzOwogICAgIFZNKiBtX3Zt
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVy
T2JqZWN0Lm1tCShyZXZpc2lvbiAxNTkzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogCisj
aW5jbHVkZSAiRGVsYXllZFJlbGVhc2VTY29wZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ2VsbElu
bGluZXMuaCIKQEAgLTUzLDcgKzU0LDggQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVP
d25lcjo6ZmluYQogICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0g
SlNDOjpqc0Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxs
KCkpOwogICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgW3N0YXRpY19jYXN0PGlkPih3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0
KCkpIHJlbGVhc2VdOworCisgICAgSlNDOjpIZWFwOjpoZWFwKHdyYXBwZXJPYmplY3QpLT5yZWxl
YXNlU29vbihhZG9wdE5TKHN0YXRpY19jYXN0PGlkPih3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2Jq
ZWN0KCkpKSk7CiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFz
V2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlzaW9uIDE1OTMwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIkFQSUNhbGxiYWNrRnVuY3Rp
b24uaCIKICNpbXBvcnQgIkFQSUNhc3QuaCIKICNpbXBvcnQgIkFQSVNoaW1zLmgiCisjaW1wb3J0
ICJEZWxheWVkUmVsZWFzZVNjb3BlLmgiCiAjaW1wb3J0ICJFcnJvci5oIgogI2ltcG9ydCAiSlND
SlNWYWx1ZUlubGluZXMuaCIKICNpbXBvcnQgIkpTQ2VsbC5oIgpAQCAtNDA1LDEyICs0MDYsMTIg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQoKHR5cGUgIT0gQ2FsbGJhY2tJbnN0YW5jZU1ldGhv
ZCAmJiB0eXBlICE9IENhbGxiYWNrSW5pdE1ldGhvZCkgfHwgaW5zdGFuY2VDbGFzcyk7CiAgICAg
fQogCi0gICAgfk9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbCgpCisgICAgdm9pZCBkZXN0cm95KEhl
YXAmIGhlYXApCiAgICAgewogICAgICAgICAvLyBXZSBuZWVkIHRvIGV4cGxpY2l0eSByZWxlYXNl
IHRoZSB0YXJnZXQgc2luY2Ugd2UgZGlkbid0IGNhbGwgCiAgICAgICAgIC8vIC1yZXRhaW5Bcmd1
bWVudHMgb24gbV9pbnZvY2F0aW9uIChhbmQgd2UgZG9uJ3Qgd2FudCB0byBkbyBzbykuCiAgICAg
ICAgIGlmIChtX3R5cGUgPT0gQ2FsbGJhY2tCbG9jayB8fCBtX3R5cGUgPT0gQ2FsbGJhY2tDbGFz
c01ldGhvZCkKLSAgICAgICAgICAgIFtbbV9pbnZvY2F0aW9uLmdldCgpIHRhcmdldF0gcmVsZWFz
ZV07CisgICAgICAgICAgICBoZWFwLnJlbGVhc2VTb29uKGFkb3B0TlMoW21faW52b2NhdGlvbi5n
ZXQoKSB0YXJnZXRdKSk7CiAgICAgICAgIFttX2luc3RhbmNlQ2xhc3MgcmVsZWFzZV07CiAgICAg
fQogCkBAIC01MjAsNyArNTIxLDkgQEAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIE9iakNDYWxsYmFj
a0Z1bmN0aQogCiB2b2lkIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKIHsKLSAgICBzdGF0aWNfY2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlvbio+KGNlbGwpLT5PYmpD
Q2FsbGJhY2tGdW5jdGlvbjo6fk9iakNDYWxsYmFja0Z1bmN0aW9uKCk7CisgICAgT2JqQ0NhbGxi
YWNrRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PE9iakNDYWxsYmFja0Z1bmN0aW9uKj4oY2Vs
bCk7CisgICAgZnVuY3Rpb24tPmltcGwoKS0+ZGVzdHJveSgqSGVhcDo6aGVhcChjZWxsKSk7Cisg
ICAgZnVuY3Rpb24tPk9iakNDYWxsYmFja0Z1bmN0aW9uOjp+T2JqQ0NhbGxiYWNrRnVuY3Rpb24o
KTsKIH0KIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBp
Lm1tCShyZXZpc2lvbiAxNTkzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4Miw1NCArMTgyLDQzIEBAIC0gKHZvaWQp
cmVtb3ZlQ2hpbGRBdEluZGV4OihOU1VJbnRlZ2VyKWkKIEBlbmQKIAogQGludGVyZmFjZSBUaW55
RE9NTm9kZSA6IE5TT2JqZWN0PFRpbnlET01Ob2RlPgotKyAoSlNWaXJ0dWFsTWFjaGluZSAqKXNo
YXJlZFZpcnR1YWxNYWNoaW5lOwotKyAodm9pZCljbGVhclNoYXJlZFZpcnR1YWxNYWNoaW5lOwog
QGVuZAogCiBAaW1wbGVtZW50YXRpb24gVGlueURPTU5vZGUgewogICAgIE5TTXV0YWJsZUFycmF5
ICptX2NoaWxkcmVuOworICAgIEpTVmlydHVhbE1hY2hpbmUgKm1fc2hhcmVkVmlydHVhbE1hY2hp
bmU7CiB9CiAKLXN0YXRpYyBKU1ZpcnR1YWxNYWNoaW5lICpzaGFyZWRJbnN0YW5jZSA9IG5pbDsK
LQotKyAoSlNWaXJ0dWFsTWFjaGluZSAqKXNoYXJlZFZpcnR1YWxNYWNoaW5lCi17Ci0gICAgaWYg
KCFzaGFyZWRJbnN0YW5jZSkKLSAgICAgICAgc2hhcmVkSW5zdGFuY2UgPSBbW0pTVmlydHVhbE1h
Y2hpbmUgYWxsb2NdIGluaXRdOwotICAgIHJldHVybiBzaGFyZWRJbnN0YW5jZTsKLX0KLQotKyAo
dm9pZCljbGVhclNoYXJlZFZpcnR1YWxNYWNoaW5lCi17Ci0gICAgc2hhcmVkSW5zdGFuY2UgPSBu
aWw7Ci19Ci0KLS0gKGlkKWluaXQKKy0gKGlkKWluaXRXaXRoVmlydHVhbE1hY2hpbmU6KEpTVmly
dHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZQogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CiAgICAgaWYgKCFzZWxmKQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgbV9jaGlsZHJlbiA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6MF07CisgICAgbV9zaGFy
ZWRWaXJ0dWFsTWFjaGluZSA9IHZpcnR1YWxNYWNoaW5lOworI2lmICFfX2hhc19mZWF0dXJlKG9i
amNfYXJjKQorICAgIFttX3NoYXJlZFZpcnR1YWxNYWNoaW5lIHJldGFpbl07CisjZW5kaWYKIAog
ICAgIHJldHVybiBzZWxmOwogfQogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBOU0VudW1lcmF0
b3IgKmVudW1lcmF0b3IgPSBbbV9jaGlsZHJlbiBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICBpZCBu
ZXh0Q2hpbGQ7Ci0gICAgd2hpbGUgKChuZXh0Q2hpbGQgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0
XSkpCi0gICAgICAgIFtbVGlueURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdIHJlbW92ZU1h
bmFnZWRSZWZlcmVuY2U6bmV4dENoaWxkIHdpdGhPd25lcjpzZWxmXTsKKyAgICBmb3IgKFRpbnlE
T01Ob2RlICpjaGlsZCBpbiBtX2NoaWxkcmVuKQorICAgICAgICBbbV9zaGFyZWRWaXJ0dWFsTWFj
aGluZSByZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOmNoaWxkIHdpdGhPd25lcjpzZWxmXTsKIAogI2lm
ICFfX2hhc19mZWF0dXJlKG9iamNfYXJjKQorICAgIFttX2NoaWxkcmVuIHJlbGVhc2VdOworICAg
IFttX3NoYXJlZFZpcnR1YWxNYWNoaW5lIHJlbGVhc2VdOwogICAgIFtzdXBlciBkZWFsbG9jXTsK
ICNlbmRpZgogfQogCiAtICh2b2lkKWFwcGVuZENoaWxkOihUaW55RE9NTm9kZSAqKWNoaWxkCiB7
Ci0gICAgW1tUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFsTWFjaGluZV0gYWRkTWFuYWdlZFJlZmVy
ZW5jZTpjaGlsZCB3aXRoT3duZXI6c2VsZl07CisgICAgW21fc2hhcmVkVmlydHVhbE1hY2hpbmUg
YWRkTWFuYWdlZFJlZmVyZW5jZTpjaGlsZCB3aXRoT3duZXI6c2VsZl07CiAgICAgW21fY2hpbGRy
ZW4gYWRkT2JqZWN0OmNoaWxkXTsKIH0KIApAQCAtMjQ5LDcgKzIzOCw3IEBAIC0gKHZvaWQpcmVt
b3ZlQ2hpbGRBdEluZGV4OihOU1VJbnRlZ2VyKWkKIHsKICAgICBpZiAoaW5kZXggPj0gW21fY2hp
bGRyZW4gY291bnRdKQogICAgICAgICByZXR1cm47Ci0gICAgW1tUaW55RE9NTm9kZSBzaGFyZWRW
aXJ0dWFsTWFjaGluZV0gcmVtb3ZlTWFuYWdlZFJlZmVyZW5jZTpbbV9jaGlsZHJlbiBvYmplY3RB
dEluZGV4OmluZGV4XSB3aXRoT3duZXI6c2VsZl07CisgICAgW21fc2hhcmVkVmlydHVhbE1hY2hp
bmUgcmVtb3ZlTWFuYWdlZFJlZmVyZW5jZTpbbV9jaGlsZHJlbiBvYmplY3RBdEluZGV4OmluZGV4
XSB3aXRoT3duZXI6c2VsZl07CiAgICAgW21fY2hpbGRyZW4gcmVtb3ZlT2JqZWN0QXRJbmRleDpp
bmRleF07CiB9CiAKQEAgLTQyNCw2ICs0MTMsNDcgQEAgLSAoaWQpaW5pdFdpdGhBOihpbnQpYQog
ICAgIHJldHVybiBzZWxmOwogfQogQGVuZAorCitzdGF0aWMgYm9vbCBldmlsQWxsb2NhdGlvbk9i
amVjdFdhc0RlYWxsb2NlZCA9IGZhbHNlOworCitAaW50ZXJmYWNlIEV2aWxBbGxvY2F0aW9uT2Jq
ZWN0IDogTlNPYmplY3QKKy0gKEpTVmFsdWUgKilkb0V2aWxUaGluZ3NXaXRoQ29udGV4dDooSlND
b250ZXh0ICopY29udGV4dDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEV2aWxBbGxvY2F0aW9u
T2JqZWN0IHsKKyAgICBKU0NvbnRleHQgKm1fY29udGV4dDsKK30KKy0gKGlkKWluaXRXaXRoQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgbV9jb250ZXh0ID0gY29u
dGV4dDsKKworICAgIHJldHVybiBzZWxmOworfQorLSAodm9pZClkZWFsbG9jCit7CisgICAgW3Nl
bGYgZG9FdmlsVGhpbmdzV2l0aENvbnRleHQ6bV9jb250ZXh0XTsKKyAgICBldmlsQWxsb2NhdGlv
bk9iamVjdFdhc0RlYWxsb2NlZCA9IHRydWU7Cit9CisKKy0gKEpTVmFsdWUgKilkb0V2aWxUaGlu
Z3NXaXRoQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbY29udGV4
dCBldmFsdWF0ZVNjcmlwdDpAIiBcCisgICAgICAgIChmdW5jdGlvbigpIHsgXAorICAgICAgICAg
ICAgdmFyIGEgPSBbXTsgXAorICAgICAgICAgICAgdmFyIHN1bSA9IDA7IFwKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeyBcCisgICAgICAgICAgICAgICAgc3Vt
ICs9IGk7IFwKKyAgICAgICAgICAgICAgICBhW2ldID0gc3VtOyBcCisgICAgICAgICAgICB9IFwK
KyAgICAgICAgICAgIHJldHVybiBzdW07IFwKKyAgICAgICAgfSkoKSJdOworfQorQGVuZAorCiBz
dGF0aWMgdm9pZCBjaGVja1Jlc3VsdChOU1N0cmluZyAqZGVzY3JpcHRpb24sIGJvb2wgcGFzc2Vk
KQogewogICAgIE5TTG9nKEAiVEVTVDogXCIlQFwiOiAlQCIsIGRlc2NyaXB0aW9uLCBwYXNzZWQg
PyBAIlBBU1NFRCIgOiBAIkZBSUxFRCIpOwpAQCAtOTU4LDEyICs5ODgsMTEgQEAgdm9pZCB0ZXN0
T2JqZWN0aXZlQ0FQSSgpCiAgICAgfQogCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAg
IEpTVmlydHVhbE1hY2hpbmUgKnZtID0gW1RpbnlET01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5l
XTsKLSAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRX
aXRoVmlydHVhbE1hY2hpbmU6dm1dOwotICAgICAgICBUaW55RE9NTm9kZSAqcm9vdCA9IFtbVGlu
eURPTU5vZGUgYWxsb2NdIGluaXRdOworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pT
Q29udGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIFRpbnlET01Ob2RlICpyb290ID0gW1tUaW55
RE9NTm9kZSBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNo
aW5lXTsKICAgICAgICAgVGlueURPTU5vZGUgKmxhc3ROb2RlID0gcm9vdDsKICAgICAgICAgZm9y
IChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgICAgICBUaW55RE9NTm9k
ZSAqbmV3Tm9kZSA9IFtbVGlueURPTU5vZGUgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgVGlu
eURPTU5vZGUgKm5ld05vZGUgPSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0V2l0aFZpcnR1YWxN
YWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmVdOwogICAgICAgICAgICAgW2xhc3ROb2RlIGFw
cGVuZENoaWxkOm5ld05vZGVdOwogICAgICAgICAgICAgbGFzdE5vZGUgPSBuZXdOb2RlOwogICAg
ICAgICB9CkBAIC05ODUsMTcgKzEwMTQsMTQgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAK
ICAgICAgICAgSlNWYWx1ZSAqbXlDdXN0b21Qcm9wZXJ0eSA9IFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAiZ2V0TGFzdE5vZGVJbkNoYWluKHJvb3QpLm15Q3VzdG9tUHJvcGVydHkiXTsKICAgICAg
ICAgY2hlY2tSZXN1bHQoQCJNeSBjdXN0b20gcHJvcGVydHkgPT0gNDIiLCBbbXlDdXN0b21Qcm9w
ZXJ0eSBpc051bWJlcl0gJiYgW215Q3VzdG9tUHJvcGVydHkgdG9JbnQzMl0gPT0gNDIpOwotCi0g
ICAgICAgIFtUaW55RE9NTm9kZSBjbGVhclNoYXJlZFZpcnR1YWxNYWNoaW5lXTsKICAgICB9CiAK
ICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdm0gPSBb
VGlueURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdOwotICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTp2bV07Ci0g
ICAgICAgIFRpbnlET01Ob2RlICpyb290ID0gW1tUaW55RE9NTm9kZSBhbGxvY10gaW5pdF07Cisg
ICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAg
ICAgICAgVGlueURPTU5vZGUgKnJvb3QgPSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0V2l0aFZp
cnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmVdOwogICAgICAgICBUaW55RE9NTm9k
ZSAqbGFzdE5vZGUgPSByb290OwogICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCAz
OyBpKyspIHsKLSAgICAgICAgICAgIFRpbnlET01Ob2RlICpuZXdOb2RlID0gW1tUaW55RE9NTm9k
ZSBhbGxvY10gaW5pdF07CisgICAgICAgICAgICBUaW55RE9NTm9kZSAqbmV3Tm9kZSA9IFtbVGlu
eURPTU5vZGUgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFj
aGluZV07CiAgICAgICAgICAgICBbbGFzdE5vZGUgYXBwZW5kQ2hpbGQ6bmV3Tm9kZV07CiAgICAg
ICAgICAgICBsYXN0Tm9kZSA9IG5ld05vZGU7CiAgICAgICAgIH0KQEAgLTEwMjAsOCArMTA0Niw2
IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogCiAgICAgICAgIEpTVmFsdWUgKm15Q3VzdG9t
UHJvcGVydHkgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImdldExhc3ROb2RlSW5DaGFpbihy
b290KS5teUN1c3RvbVByb3BlcnR5Il07CiAgICAgICAgIGNoZWNrUmVzdWx0KEAiZHVwbGljYXRl
IGNhbGxzIHRvIGFkZE1hbmFnZWRSZWZlcmVuY2UgZG9uJ3QgY2F1c2UgdGhpbmdzIHRvIGRpZSIs
IFtteUN1c3RvbVByb3BlcnR5IGlzTnVtYmVyXSAmJiBbbXlDdXN0b21Qcm9wZXJ0eSB0b0ludDMy
XSA9PSA0Mik7Ci0KLSAgICAgICAgW1RpbnlET01Ob2RlIGNsZWFyU2hhcmVkVmlydHVhbE1hY2hp
bmVdOwogICAgIH0KIAogICAgIEBhdXRvcmVsZWFzZXBvb2wgewpAQCAtMTE2MSw2ICsxMTg1LDE3
IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgICAgICBjaGVja1Jlc3VsdChAIlJldHVy
bmluZyBpbnN0YW5jZSBvZiBDbGFzc0UgZnJvbSBDbGFzc0QncyBpbml0IGhhcyBjb3JyZWN0IGNs
YXNzIiwgW2QgaXNJbnN0YW5jZU9mOmNvbnRleHRbQCJDbGFzc0UiXV0pOwogICAgIH0KIAorICAg
IEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29u
dGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAg
ICAgRXZpbEFsbG9jYXRpb25PYmplY3QgKmV2aWxPYmplY3QgPSBbW0V2aWxBbGxvY2F0aW9uT2Jq
ZWN0IGFsbG9jXSBpbml0V2l0aENvbnRleHQ6Y29udGV4dF07CisgICAgICAgICAgICBjb250ZXh0
W0AiZXZpbE9iamVjdCJdID0gZXZpbE9iamVjdDsKKyAgICAgICAgICAgIGNvbnRleHRbQCJldmls
T2JqZWN0Il0gPSBuaWw7CisgICAgICAgIH0KKyAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VD
b2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOworICAgICAg
ICBjaGVja1Jlc3VsdChAIkV2aWxBbGxvY2F0aW9uT2JqZWN0IHdhcyBzdWNjZXNzZnVsbHkgZGVh
bGxvY2VkIHdpdGhvdXQgY3Jhc2hpbmciLCBldmlsQWxsb2NhdGlvbk9iamVjdFdhc0RlYWxsb2Nl
ZCk7CisgICAgfQorCiAgICAgY3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QoKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAx
NTkzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05MzYsNiArOTM2LDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29weVZpc2l0b3JJbmxpbmVzLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxDb3B5V29ya0xpc3QuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXERlZmVyR0MuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXERlbGF5ZWRSZWxlYXNlU2NvcGUuaCIgLz4NCiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDQXNzZXJ0aW9ucy5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxoZWFwXEdDVGhyZWFkU2hhcmVkRGF0YS5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE1OTMw
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTU1OSw2ICsxNTU5
LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcRGVmZXJHQy5oIj4NCiAgICAg
ICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caGVhcFxEZWxheWVkUmVsZWFzZVNjcGUuaCI+DQorICAgICAgPEZpbHRl
cj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcR0NBc3NlcnRpb25zLmgiPg0KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVy
Pg0KICAgICA8L0NsSW5jbHVkZT4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcwNSw2ICs3MDUs
NyBAQAogCQkxQUNGNzM3NzE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUNGNzM3NjE3MUNBNkZCMDBDOUJC
MUUgLyogV2Vhay5jcHAgKi87IH07CiAJCTI2MDBCNUE2MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0
cmluZ0pvaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwICovOyB9
OwogCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE1MTUyQkFBQTcw
MDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oICovOyB9OworCQkyQTI4MjVEMDE4MzQxRjJEMDA4
N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRS
ZWxlYXNlU2NvcGUuaCAqLzsgfTsKIAkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNh
bGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyMTFCNTc0MTc2QTIyNEQwMDBFMkEyMyAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmgg
Ki87IH07CiAJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTZGNDYyNTE3RTk1
OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZl
ckdDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJB
N0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLzsgfTsKQEAgLTE5NTcsNiAr
MTk1OCw3IEBACiAJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0Q29yZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYgLyogSlNT
dHJpbmdKb2luZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
dHJpbmdKb2luZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjAwQjVBNTE1
MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNTdHJpbmdKb2luZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVsYXllZFJlbGVhc2VTY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVh
cE9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwT3BlcmF0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBN0E1OEVFMTgwOEE0QzQwMDIw
QkRGNyAvKiBEZWZlckdDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERlZmVyR0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQUQ4OTMyOTE3RTM4
NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEhlYXBJdGVyYXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzA5NCw2ICszMDk2LDcgQEAKIAkJCQkxNDE1MDEzMjE1NEJCMTNGMDA1RDhDOTgg
LyogV2Vha1NldElubGluZXMuaCAqLywKIAkJCQkwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi8sCiAJCQkJMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLywKKwkJCQkyQTI4MjVDRjE4MzQxRjJEMDA4N0ZC
QTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBoZWFwOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ3NDUsNiArNDc0OCw3IEBACiAJCQkJQzIy
QjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQyOUQ4ODYwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyNEU1NTIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkEyODI1RDAxODM0MUYyRDAwODdGQkE5IC8q
IERlbGF5ZWRSZWxlYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mjk5REE2MTdEMTI4
NTgwMDVGNUZGOSAvKiBTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyOTlE
QTIxN0QxMjg0ODAwNUY1RkY5IC8qIFNldFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZBRTY0QUExMzVFNUUxQzAwOTYzMDEyIC8qIFNINEFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWxheWVkUmVsZWFzZVNjb3BlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVsYXllZFJlbGVhc2VT
Y29wZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVsYXll
ZFJlbGVhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIERlbGF5ZWRSZWxlYXNlU2NvcGVfaAorI2RlZmluZSBEZWxheWVkUmVsZWFz
ZVNjb3BlX2gKKworI2luY2x1ZGUgIkFQSVNoaW1zLmgiCisjaW5jbHVkZSAiTWFya2VkU3BhY2Uu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoQ0YpCisKK2NsYXNzIERlbGF5ZWRSZWxl
YXNlU2NvcGUgeworcHVibGljOgorICAgIERlbGF5ZWRSZWxlYXNlU2NvcGUoTWFya2VkU3BhY2Um
IG1hcmtlZFNwYWNlKQorICAgICAgICA6IG1fbWFya2VkU3BhY2UobWFya2VkU3BhY2UpCisgICAg
eworICAgICAgICBBU1NFUlQoIW1fbWFya2VkU3BhY2UubV9jdXJyZW50RGVsYXllZFJlbGVhc2VT
Y29wZSk7CisgICAgICAgIG1fbWFya2VkU3BhY2UubV9jdXJyZW50RGVsYXllZFJlbGVhc2VTY29w
ZSA9IHRoaXM7CisgICAgfQorCisgICAgfkRlbGF5ZWRSZWxlYXNlU2NvcGUoKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fbWFya2VkU3BhY2UubV9jdXJyZW50RGVsYXllZFJlbGVhc2VTY29wZSA9
PSB0aGlzKTsKKyAgICAgICAgbV9tYXJrZWRTcGFjZS5tX2N1cnJlbnREZWxheWVkUmVsZWFzZVNj
b3BlID0gbnVsbHB0cjsKKworICAgICAgICBBUElDYWxsYmFja1NoaW0gY2FsbGJhY2tTaGltKCpt
X21hcmtlZFNwYWNlLm1faGVhcC0+dm0oKSk7CisgICAgICAgIG1fZGVsYXllZFJlbGVhc2VPYmpl
Y3RzLmNsZWFyKCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdm9p
ZCByZWxlYXNlU29vbihSZXRhaW5QdHI8VD4mJiBvYmplY3QpCisgICAgeworICAgICAgICBtX2Rl
bGF5ZWRSZWxlYXNlT2JqZWN0cy5hcHBlbmQoc3RkOjptb3ZlKG9iamVjdCkpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBNYXJrZWRTcGFjZSYgbV9tYXJrZWRTcGFjZTsKKyAgICBWZWN0b3I8UmV0
YWluUHRyPENGVHlwZVJlZj4+IG1fZGVsYXllZFJlbGVhc2VPYmplY3RzOworfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6cmVsZWFzZVNvb24oUmV0
YWluUHRyPFQ+JiYgb2JqZWN0KQoreworICAgIEFTU0VSVChtX2N1cnJlbnREZWxheWVkUmVsZWFz
ZVNjb3BlKTsKKyAgICBtX2N1cnJlbnREZWxheWVkUmVsZWFzZVNjb3BlLT5yZWxlYXNlU29vbihz
dGQ6Om1vdmUob2JqZWN0KSk7Cit9CisKKyNlbGlmIC8vIFVTRShDRikKKworY2xhc3MgRGVsYXll
ZFJlbGVhc2VTY29wZSB7CitwdWJsaWM6CisgICAgRGVsYXllZFJlbGVhc2VTY29wZShNYXJrZWRT
cGFjZSYpCisgICAgeworICAgIH0KK307CisKKyNlbmRpZiAvLyBVU0UoQ0YpCisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRGVsYXllZFJlbGVhc2VTY29wZV9oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZXMuaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkRlbGF5ZWRS
ZWxlYXNlU2NvcGUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRl
ICJHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCIKICNpbmNsdWRlICJIZWFwSXRlcmF0
aW9uU2NvcGUuaCIKQEAgLTcyOSw2ICs3MzAsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJi
YWdlKCkKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm47CiAgICAg
CisgICAgRGVsYXllZFJlbGVhc2VTY29wZSBkZWxheWVkUmVsZWFzZVNjb3BlKG1fb2JqZWN0U3Bh
Y2UpOwogICAgIGNvbGxlY3QoRG9Td2VlcCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHJldmlzaW9uIDE1OTMwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4NiwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0IHsgcmV0dXJuICEh
bV9kZWZlcnJhbERlcHRoOyB9CiAKKyNpZiBVU0UoQ0YpCisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgcmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+JiYpOworI2VuZGlmCisKICAgICBw
cml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgICAgICBmcmllbmQg
Y2xhc3MgQ29waWVkQmxvY2s7CkBAIC00NjgsNiArNDcyLDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4gbV9ibG9ja0FsbG9jYXRvcjsKICAgICB9CiAKKyNpZiBVU0UoQ0YpCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNv
b24oUmV0YWluUHRyPFQ+JiYgb2JqZWN0KQorICAgIHsKKyAgICAgICAgbV9vYmplY3RTcGFjZS5y
ZWxlYXNlU29vbihzdGQ6Om1vdmUob2JqZWN0KSk7CisgICAgfQorI2VuZGlmCisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSGVhcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE1OTMwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QWxsb2NhdG9yLmgiCiAKKyNpbmNsdWRlICJEZWxheWVkUmVsZWFzZVNjb3BlLmgiCiAjaW5jbHVk
ZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIklu
Y3JlbWVudGFsU3dlZXBlci5oIgpAQCAtNzcsNiArNzgsNyBAQCBpbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0CiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2Uoc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIERlbGF5ZWRSZWxlYXNlU2NvcGUgZGVsYXll
ZFJlbGVhc2VTY29wZSgqbV9tYXJrZWRTcGFjZSk7CiAjaWYgQ09MTEVDVF9PTl9FVkVSWV9BTExP
Q0FUSU9OCiAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkKICAgICAgICAgbV9oZWFwLT5j
b2xsZWN0QWxsR2FyYmFnZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKIAorI2luY2x1ZGUg
IkRlbGF5ZWRSZWxlYXNlU2NvcGUuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIK
ICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgpAQCAtODEs
NiArODIsNyBAQCBNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UoSGVhcCogaGVhcCkKICAgICA6IG1f
aGVhcChoZWFwKQogICAgICwgbV9jYXBhY2l0eSgwKQogICAgICwgbV9pc0l0ZXJhdGluZyhmYWxz
ZSkKKyAgICAsIG1fY3VycmVudERlbGF5ZWRSZWxlYXNlU2NvcGUobnVsbHB0cikKIHsKICAgICBm
b3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0
b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewogICAgICAgICBhbGxvY2F0b3JGb3IoY2Vs
bFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNpemUsIE1hcmtlZEJsb2NrOjpOb25lKTsKQEAg
LTExMSwxMiArMTEzLDE0IEBAIHN0cnVjdCBMYXN0Q2hhbmNlVG9GaW5hbGl6ZSA6IE1hcmtlZEJs
b2MKIAogdm9pZCBNYXJrZWRTcGFjZTo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogeworICAgIERl
bGF5ZWRSZWxlYXNlU2NvcGUgZGVsYXllZFJlbGVhc2VTY29wZSgqdGhpcyk7CiAgICAgc3RvcEFs
bG9jYXRpbmcoKTsKICAgICBmb3JFYWNoQmxvY2s8TGFzdENoYW5jZVRvRmluYWxpemU+KCk7CiB9
CiAKIHZvaWQgTWFya2VkU3BhY2U6OnN3ZWVwKCkKIHsKKyAgICBBU1NFUlQobV9jdXJyZW50RGVs
YXllZFJlbGVhc2VTY29wZSk7CiAgICAgbV9oZWFwLT5zd2VlcGVyKCktPndpbGxGaW5pc2hTd2Vl
cGluZygpOwogICAgIGZvckVhY2hCbG9jazxTd2VlcD4oKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NiArMzYsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVsYXllZFJlbGVhc2VTY29w
ZTsKIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFwSXRlcmF0aW9uU2NvcGU7CiBjbGFzcyBKU0NlbGw7
CkBAIC0xMTQsNyArMTE1LDEyIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNQYWdlZE91dChkb3Vi
bGUgZGVhZGxpbmUpOwogCisjaWYgVVNFKENGKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZv
aWQgcmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+JiYpOworI2VuZGlmCisKIHByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIERlbGF5ZWRSZWxlYXNlU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaEFsbG9jYXRvcihGdW5jdG9yJik7CkBAIC0xNDQsNiArMTUwLDggQEAgcHJpdmF0ZToK
ICAgICBzaXplX3QgbV9jYXBhY2l0eTsKICAgICBib29sIG1faXNJdGVyYXRpbmc7CiAgICAgTWFy
a2VkQmxvY2tTZXQgbV9ibG9ja3M7CisKKyAgICBEZWxheWVkUmVsZWFzZVNjb3BlKiBtX2N1cnJl
bnREZWxheWVkUmVsZWFzZVNjb3BlOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgTWFya2VkU3BhY2U6OmZvckVhY2hM
aXZlQ2VsbChIZWFwSXRlcmF0aW9uU2NvcGUmLCBGdW5jdG9yJiBmdW5jdG9yKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216989</attachid>
            <date>2013-11-14 15:33:27 -0800</date>
            <delta_ts>2013-11-14 17:44:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-123821-20131114153321.patch</filename>
            <type>text/plain</type>
            <size>26096</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5MzEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDEzLTExLTE0ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgLWRlYWxsb2MgY2FsbGJhY2tzIGZyb20gd3JhcHBlZCBPYmplY3RpdmUtQyBvYmpl
Y3RzIGNhbiBoYXBwZW4gYXQgYmFkIHRpbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM4MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgd2l0aCB0aGUgSlNDIE9iai1DIEFQSSwgSlMg
d3JhcHBlcnMgZm9yIGNsaWVudCBPYmotQyBvYmplY3RzIHJldGFpbiB0aGVpciBhc3NvY2lhdGVk
IE9iai1DIAorICAgICAgICBvYmplY3QuIFdoZW4gdGhleSBhcmUgc3dlcHQsIHRoZXkgcmVsZWFz
ZSB0aGVpciBPYmotQyBvYmplY3RzIHdoaWNoIGNhbiB0cmlnZ2VyIGEgY2FsbCB0byB0aGF0IAor
ICAgICAgICBvYmplY3QncyAtZGVhbGxvYyBtZXRob2QuIFRoZXNlIC1kZWFsbG9jIG1ldGhvZHMg
Y2FuIHRoZW4gY2FsbCBiYWNrIGludG8gdGhlIHNhbWUgVk0sIHdoaWNoIGlzIG5vdCAKKyAgICAg
ICAgYWxsb3dlZCBkdXJpbmcgc3dlZXBpbmcgb3IgVk0gc2h1dGRvd24uCisKKyAgICAgICAgV2Ug
Y2FuIGhhbmRsZSB0aGlzIGNhc2UgYnkgY3JlYXRpbmcgb3VyIG93biBwb29sIG9mIE9iai1DIG9i
amVjdHMgdG8gYmUgcmVsZWFzZWQgd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLgorICAgICAgICBU
aGlzIGlzIGFjY29tcGxpc2hlZCBieSB1c2luZyBEZWxheWVkUmVsZWFzZVNjb3BlLCBhbiBSQUlJ
LXN0eWxlIG9iamVjdCB0aGF0IHdpbGwgcmV0YWluIGFsbCBvYmplY3RzCisgICAgICAgIHRoYXQg
YXJlIHVuc2FmZSB0byByZWxlYXNlIHVudGlsIHRoZSBlbmQgb2YgdGhlIERlbGF5ZWRSZWxlYXNl
U2NvcGUuCisKKyAgICAgICAgKiBBUEkvQVBJU2hpbXMuaDoKKyAgICAgICAgKEpTQzo6QVBJQ2Fs
bGJhY2tTaGltOjpBUElDYWxsYmFja1NoaW0pOgorICAgICAgICAoSlNDOjpBUElDYWxsYmFja1No
aW06OnZtRm9yRHJvcEFsbExvY2tzKToKKyAgICAgICAgKEpTQzo6QVBJQ2FsbGJhY2tTaGltOjpl
eGVjRm9yRHJvcEFsbExvY2tzKToKKyAgICAgICAgKiBBUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1t
OgorICAgICAgICAoSlNBUElXcmFwcGVyT2JqZWN0SGFuZGxlT3duZXI6OmZpbmFsaXplKToKKyAg
ICAgICAgKiBBUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW06CisgICAgICAgIChKU0M6Ok9iakND
YWxsYmFja0Z1bmN0aW9uSW1wbDo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6Ok9iakNDYWxsYmFj
a0Z1bmN0aW9uOjpkZXN0cm95KToKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAg
ICAgICAgKC1bVGlueURPTU5vZGUgaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpdKToKKyAgICAgICAg
KC1bVGlueURPTU5vZGUgZGVhbGxvY10pOgorICAgICAgICAoLVtUaW55RE9NTm9kZSBhcHBlbmRD
aGlsZDpdKToKKyAgICAgICAgKC1bVGlueURPTU5vZGUgcmVtb3ZlQ2hpbGRBdEluZGV4Ol0pOgor
ICAgICAgICAoLVtFdmlsQWxsb2NhdGlvbk9iamVjdCBpbml0V2l0aENvbnRleHQ6XSk6CisgICAg
ICAgICgtW0V2aWxBbGxvY2F0aW9uT2JqZWN0IGRlYWxsb2NdKToKKyAgICAgICAgKC1bRXZpbEFs
bG9jYXRpb25PYmplY3QgZG9FdmlsVGhpbmdzV2l0aENvbnRleHQ6XSk6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBoZWFwL0Rl
bGF5ZWRSZWxlYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRlbGF5ZWRSZWxlYXNl
U2NvcGU6OkRlbGF5ZWRSZWxlYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpEZWxheWVkUmVsZWFz
ZVNjb3BlOjp+RGVsYXllZFJlbGVhc2VTY29wZSk6CisgICAgICAgIChKU0M6OkRlbGF5ZWRSZWxl
YXNlU2NvcGU6OnJlbGVhc2VTb29uKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OnJlbGVh
c2VTb29uKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpj
b2xsZWN0QWxsR2FyYmFnZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6
OkhlYXA6OnJlbGVhc2VTb29uKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6
CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAg
ICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpN
YXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5h
bGl6ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpzd2VlcCk6CisgICAgICAgICogaGVh
cC9NYXJrZWRTcGFjZS5oOgorCiAyMDEzLTExLTE0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxNTkyNzYpOiBGaXggbG90cyBvZiBj
cmFzaGVzIGZvciBhcm1fdHJhZGl0aW9uYWwgYXJjaGl0ZWN0dXJlLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1OTMwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC00ODYsOCArNDg2LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29weVdvcmtMaXN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuaCBcCi0gICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9E
ZWZlckdDLmNwcCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaCBcCisgICAgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvRGVsYXllZFJlbGVhc2VTY29wZS5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0Fzc2VydGlvbnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9BUElTaGltcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvQVBJU2hpbXMuaAkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9BUElTaGltcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxOCArODMsMzkgQEAgcHJpdmF0
ZToKIGNsYXNzIEFQSUNhbGxiYWNrU2hpbSB7CiBwdWJsaWM6CiAgICAgQVBJQ2FsbGJhY2tTaGlt
KEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgOiBtX2Ryb3BBbGxMb2NrcyhleGVjLT52bSgpLmV4
Y2x1c2l2ZVRocmVhZCA/IDAgOiBleGVjKQorICAgICAgICA6IG1fZHJvcEFsbExvY2tzKHNob3Vs
ZERyb3BBbGxMb2NrcyhleGVjLT52bSgpKSA/IGV4ZWMgOiAwKQogICAgICAgICAsIG1fdm0oJmV4
ZWMtPnZtKCkpCiAgICAgewogICAgICAgICB3dGZUaHJlYWREYXRhKCkucmVzZXRDdXJyZW50SWRl
bnRpZmllclRhYmxlKCk7CiAgICAgfQogCisgICAgQVBJQ2FsbGJhY2tTaGltKFZNJiB2bSkKKyAg
ICAgICAgOiBtX2Ryb3BBbGxMb2NrcyhzaG91bGREcm9wQWxsTG9ja3Modm0pID8gJnZtIDogMCkK
KyAgICAgICAgLCBtX3ZtKCZ2bSkKKyAgICB7CisgICAgICAgIHd0ZlRocmVhZERhdGEoKS5yZXNl
dEN1cnJlbnRJZGVudGlmaWVyVGFibGUoKTsKKyAgICB9CisKICAgICB+QVBJQ2FsbGJhY2tTaGlt
KCkKICAgICB7CiAgICAgICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRh
YmxlKG1fdm0tPmlkZW50aWZpZXJUYWJsZSk7CiAgICAgfQogCiBwcml2YXRlOgorICAgIHN0YXRp
YyBib29sIHNob3VsZERyb3BBbGxMb2NrcyhWTSYgdm0pCisgICAgeworICAgICAgICBpZiAodm0u
ZXhjbHVzaXZlVGhyZWFkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8v
IElmIHRoZSBWTSBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nIGRlc3Ryb3llZCB0aGVuIHdlIGRv
bid0IHdhbnQgdG8gcmVzdXJyZWN0IGl0CisgICAgICAgIC8vIGJ5IGFsbG93aW5nIERyb3BBbGxM
b2NrcyB0byByZWYgaXQuIEJ5IHRoaXMgcG9pbnQgdGhlIEFQSUxvY2sgaGFzIGFscmVhZHkgYmVl
biAKKyAgICAgICAgLy8gcmVsZWFzZWQgYW55d2F5cywgc28gaXQgZG9lc24ndCBtYXR0ZXIgdGhh
dCBEcm9wQWxsTG9ja3MgaXMgYSBuby1vcC4KKyAgICAgICAgaWYgKCF2bS5yZWZDb3VudCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KwogICAgIEpTTG9jazo6RHJvcEFsbExvY2tzIG1fZHJvcEFsbExvY2tzOwogICAgIFZNKiBtX3Zt
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVyT2JqZWN0
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElXcmFwcGVy
T2JqZWN0Lm1tCShyZXZpc2lvbiAxNTkzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJV3JhcHBlck9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogCisj
aW5jbHVkZSAiRGVsYXllZFJlbGVhc2VTY29wZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ2VsbElu
bGluZXMuaCIKQEAgLTUzLDcgKzU0LDggQEAgdm9pZCBKU0FQSVdyYXBwZXJPYmplY3RIYW5kbGVP
d25lcjo6ZmluYQogICAgIEpTQzo6SlNBUElXcmFwcGVyT2JqZWN0KiB3cmFwcGVyT2JqZWN0ID0g
SlNDOjpqc0Nhc3Q8SlNDOjpKU0FQSVdyYXBwZXJPYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxs
KCkpOwogICAgIGlmICghd3JhcHBlck9iamVjdC0+d3JhcHBlZE9iamVjdCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgW3N0YXRpY19jYXN0PGlkPih3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2JqZWN0
KCkpIHJlbGVhc2VdOworCisgICAgSlNDOjpIZWFwOjpoZWFwKHdyYXBwZXJPYmplY3QpLT5yZWxl
YXNlU29vbihhZG9wdE5TKHN0YXRpY19jYXN0PGlkPih3cmFwcGVyT2JqZWN0LT53cmFwcGVkT2Jq
ZWN0KCkpKSk7CiAgICAgSlNDOjpXZWFrU2V0OjpkZWFsbG9jYXRlKEpTQzo6V2Vha0ltcGw6OmFz
V2Vha0ltcGwoaGFuZGxlLnNsb3QoKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL09iakNDYWxsYmFja0Z1bmN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHJldmlzaW9uIDE1OTMwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT2JqQ0NhbGxiYWNrRnVuY3Rpb24ubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIkFQSUNhbGxiYWNrRnVuY3Rp
b24uaCIKICNpbXBvcnQgIkFQSUNhc3QuaCIKICNpbXBvcnQgIkFQSVNoaW1zLmgiCisjaW1wb3J0
ICJEZWxheWVkUmVsZWFzZVNjb3BlLmgiCiAjaW1wb3J0ICJFcnJvci5oIgogI2ltcG9ydCAiSlND
SlNWYWx1ZUlubGluZXMuaCIKICNpbXBvcnQgIkpTQ2VsbC5oIgpAQCAtNDA1LDEyICs0MDYsMTIg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQoKHR5cGUgIT0gQ2FsbGJhY2tJbnN0YW5jZU1ldGhv
ZCAmJiB0eXBlICE9IENhbGxiYWNrSW5pdE1ldGhvZCkgfHwgaW5zdGFuY2VDbGFzcyk7CiAgICAg
fQogCi0gICAgfk9iakNDYWxsYmFja0Z1bmN0aW9uSW1wbCgpCisgICAgdm9pZCBkZXN0cm95KEhl
YXAmIGhlYXApCiAgICAgewogICAgICAgICAvLyBXZSBuZWVkIHRvIGV4cGxpY2l0eSByZWxlYXNl
IHRoZSB0YXJnZXQgc2luY2Ugd2UgZGlkbid0IGNhbGwgCiAgICAgICAgIC8vIC1yZXRhaW5Bcmd1
bWVudHMgb24gbV9pbnZvY2F0aW9uIChhbmQgd2UgZG9uJ3Qgd2FudCB0byBkbyBzbykuCiAgICAg
ICAgIGlmIChtX3R5cGUgPT0gQ2FsbGJhY2tCbG9jayB8fCBtX3R5cGUgPT0gQ2FsbGJhY2tDbGFz
c01ldGhvZCkKLSAgICAgICAgICAgIFtbbV9pbnZvY2F0aW9uLmdldCgpIHRhcmdldF0gcmVsZWFz
ZV07CisgICAgICAgICAgICBoZWFwLnJlbGVhc2VTb29uKGFkb3B0TlMoW21faW52b2NhdGlvbi5n
ZXQoKSB0YXJnZXRdKSk7CiAgICAgICAgIFttX2luc3RhbmNlQ2xhc3MgcmVsZWFzZV07CiAgICAg
fQogCkBAIC01MjAsNyArNTIxLDkgQEAgT2JqQ0NhbGxiYWNrRnVuY3Rpb24qIE9iakNDYWxsYmFj
a0Z1bmN0aQogCiB2b2lkIE9iakNDYWxsYmFja0Z1bmN0aW9uOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKIHsKLSAgICBzdGF0aWNfY2FzdDxPYmpDQ2FsbGJhY2tGdW5jdGlvbio+KGNlbGwpLT5PYmpD
Q2FsbGJhY2tGdW5jdGlvbjo6fk9iakNDYWxsYmFja0Z1bmN0aW9uKCk7CisgICAgT2JqQ0NhbGxi
YWNrRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PE9iakNDYWxsYmFja0Z1bmN0aW9uKj4oY2Vs
bCk7CisgICAgZnVuY3Rpb24tPmltcGwoKS0+ZGVzdHJveSgqSGVhcDo6aGVhcChjZWxsKSk7Cisg
ICAgZnVuY3Rpb24tPk9iakNDYWxsYmFja0Z1bmN0aW9uOjp+T2JqQ0NhbGxiYWNrRnVuY3Rpb24o
KTsKIH0KIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBp
Lm1tCShyZXZpc2lvbiAxNTkzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4Miw1NCArMTgyLDQzIEBAIC0gKHZvaWQp
cmVtb3ZlQ2hpbGRBdEluZGV4OihOU1VJbnRlZ2VyKWkKIEBlbmQKIAogQGludGVyZmFjZSBUaW55
RE9NTm9kZSA6IE5TT2JqZWN0PFRpbnlET01Ob2RlPgotKyAoSlNWaXJ0dWFsTWFjaGluZSAqKXNo
YXJlZFZpcnR1YWxNYWNoaW5lOwotKyAodm9pZCljbGVhclNoYXJlZFZpcnR1YWxNYWNoaW5lOwog
QGVuZAogCiBAaW1wbGVtZW50YXRpb24gVGlueURPTU5vZGUgewogICAgIE5TTXV0YWJsZUFycmF5
ICptX2NoaWxkcmVuOworICAgIEpTVmlydHVhbE1hY2hpbmUgKm1fc2hhcmVkVmlydHVhbE1hY2hp
bmU7CiB9CiAKLXN0YXRpYyBKU1ZpcnR1YWxNYWNoaW5lICpzaGFyZWRJbnN0YW5jZSA9IG5pbDsK
LQotKyAoSlNWaXJ0dWFsTWFjaGluZSAqKXNoYXJlZFZpcnR1YWxNYWNoaW5lCi17Ci0gICAgaWYg
KCFzaGFyZWRJbnN0YW5jZSkKLSAgICAgICAgc2hhcmVkSW5zdGFuY2UgPSBbW0pTVmlydHVhbE1h
Y2hpbmUgYWxsb2NdIGluaXRdOwotICAgIHJldHVybiBzaGFyZWRJbnN0YW5jZTsKLX0KLQotKyAo
dm9pZCljbGVhclNoYXJlZFZpcnR1YWxNYWNoaW5lCi17Ci0gICAgc2hhcmVkSW5zdGFuY2UgPSBu
aWw7Ci19Ci0KLS0gKGlkKWluaXQKKy0gKGlkKWluaXRXaXRoVmlydHVhbE1hY2hpbmU6KEpTVmly
dHVhbE1hY2hpbmUgKil2aXJ0dWFsTWFjaGluZQogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CiAgICAgaWYgKCFzZWxmKQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgbV9jaGlsZHJlbiA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6MF07CisgICAgbV9zaGFy
ZWRWaXJ0dWFsTWFjaGluZSA9IHZpcnR1YWxNYWNoaW5lOworI2lmICFfX2hhc19mZWF0dXJlKG9i
amNfYXJjKQorICAgIFttX3NoYXJlZFZpcnR1YWxNYWNoaW5lIHJldGFpbl07CisjZW5kaWYKIAog
ICAgIHJldHVybiBzZWxmOwogfQogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICBOU0VudW1lcmF0
b3IgKmVudW1lcmF0b3IgPSBbbV9jaGlsZHJlbiBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICBpZCBu
ZXh0Q2hpbGQ7Ci0gICAgd2hpbGUgKChuZXh0Q2hpbGQgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0
XSkpCi0gICAgICAgIFtbVGlueURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdIHJlbW92ZU1h
bmFnZWRSZWZlcmVuY2U6bmV4dENoaWxkIHdpdGhPd25lcjpzZWxmXTsKKyAgICBmb3IgKFRpbnlE
T01Ob2RlICpjaGlsZCBpbiBtX2NoaWxkcmVuKQorICAgICAgICBbbV9zaGFyZWRWaXJ0dWFsTWFj
aGluZSByZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOmNoaWxkIHdpdGhPd25lcjpzZWxmXTsKIAogI2lm
ICFfX2hhc19mZWF0dXJlKG9iamNfYXJjKQorICAgIFttX2NoaWxkcmVuIHJlbGVhc2VdOworICAg
IFttX3NoYXJlZFZpcnR1YWxNYWNoaW5lIHJlbGVhc2VdOwogICAgIFtzdXBlciBkZWFsbG9jXTsK
ICNlbmRpZgogfQogCiAtICh2b2lkKWFwcGVuZENoaWxkOihUaW55RE9NTm9kZSAqKWNoaWxkCiB7
Ci0gICAgW1tUaW55RE9NTm9kZSBzaGFyZWRWaXJ0dWFsTWFjaGluZV0gYWRkTWFuYWdlZFJlZmVy
ZW5jZTpjaGlsZCB3aXRoT3duZXI6c2VsZl07CisgICAgW21fc2hhcmVkVmlydHVhbE1hY2hpbmUg
YWRkTWFuYWdlZFJlZmVyZW5jZTpjaGlsZCB3aXRoT3duZXI6c2VsZl07CiAgICAgW21fY2hpbGRy
ZW4gYWRkT2JqZWN0OmNoaWxkXTsKIH0KIApAQCAtMjQ5LDcgKzIzOCw3IEBAIC0gKHZvaWQpcmVt
b3ZlQ2hpbGRBdEluZGV4OihOU1VJbnRlZ2VyKWkKIHsKICAgICBpZiAoaW5kZXggPj0gW21fY2hp
bGRyZW4gY291bnRdKQogICAgICAgICByZXR1cm47Ci0gICAgW1tUaW55RE9NTm9kZSBzaGFyZWRW
aXJ0dWFsTWFjaGluZV0gcmVtb3ZlTWFuYWdlZFJlZmVyZW5jZTpbbV9jaGlsZHJlbiBvYmplY3RB
dEluZGV4OmluZGV4XSB3aXRoT3duZXI6c2VsZl07CisgICAgW21fc2hhcmVkVmlydHVhbE1hY2hp
bmUgcmVtb3ZlTWFuYWdlZFJlZmVyZW5jZTpbbV9jaGlsZHJlbiBvYmplY3RBdEluZGV4OmluZGV4
XSB3aXRoT3duZXI6c2VsZl07CiAgICAgW21fY2hpbGRyZW4gcmVtb3ZlT2JqZWN0QXRJbmRleDpp
bmRleF07CiB9CiAKQEAgLTQyNCw2ICs0MTMsNDcgQEAgLSAoaWQpaW5pdFdpdGhBOihpbnQpYQog
ICAgIHJldHVybiBzZWxmOwogfQogQGVuZAorCitzdGF0aWMgYm9vbCBldmlsQWxsb2NhdGlvbk9i
amVjdFdhc0RlYWxsb2NlZCA9IGZhbHNlOworCitAaW50ZXJmYWNlIEV2aWxBbGxvY2F0aW9uT2Jq
ZWN0IDogTlNPYmplY3QKKy0gKEpTVmFsdWUgKilkb0V2aWxUaGluZ3NXaXRoQ29udGV4dDooSlND
b250ZXh0ICopY29udGV4dDsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEV2aWxBbGxvY2F0aW9u
T2JqZWN0IHsKKyAgICBKU0NvbnRleHQgKm1fY29udGV4dDsKK30KKy0gKGlkKWluaXRXaXRoQ29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgbV9jb250ZXh0ID0gY29u
dGV4dDsKKworICAgIHJldHVybiBzZWxmOworfQorLSAodm9pZClkZWFsbG9jCit7CisgICAgW3Nl
bGYgZG9FdmlsVGhpbmdzV2l0aENvbnRleHQ6bV9jb250ZXh0XTsKKyAgICBldmlsQWxsb2NhdGlv
bk9iamVjdFdhc0RlYWxsb2NlZCA9IHRydWU7Cit9CisKKy0gKEpTVmFsdWUgKilkb0V2aWxUaGlu
Z3NXaXRoQ29udGV4dDooSlNDb250ZXh0ICopY29udGV4dAoreworICAgIHJldHVybiBbY29udGV4
dCBldmFsdWF0ZVNjcmlwdDpAIiBcCisgICAgICAgIChmdW5jdGlvbigpIHsgXAorICAgICAgICAg
ICAgdmFyIGEgPSBbXTsgXAorICAgICAgICAgICAgdmFyIHN1bSA9IDA7IFwKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeyBcCisgICAgICAgICAgICAgICAgc3Vt
ICs9IGk7IFwKKyAgICAgICAgICAgICAgICBhW2ldID0gc3VtOyBcCisgICAgICAgICAgICB9IFwK
KyAgICAgICAgICAgIHJldHVybiBzdW07IFwKKyAgICAgICAgfSkoKSJdOworfQorQGVuZAorCiBz
dGF0aWMgdm9pZCBjaGVja1Jlc3VsdChOU1N0cmluZyAqZGVzY3JpcHRpb24sIGJvb2wgcGFzc2Vk
KQogewogICAgIE5TTG9nKEAiVEVTVDogXCIlQFwiOiAlQCIsIGRlc2NyaXB0aW9uLCBwYXNzZWQg
PyBAIlBBU1NFRCIgOiBAIkZBSUxFRCIpOwpAQCAtOTU4LDEyICs5ODgsMTEgQEAgdm9pZCB0ZXN0
T2JqZWN0aXZlQ0FQSSgpCiAgICAgfQogCiAgICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAg
IEpTVmlydHVhbE1hY2hpbmUgKnZtID0gW1RpbnlET01Ob2RlIHNoYXJlZFZpcnR1YWxNYWNoaW5l
XTsKLSAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRX
aXRoVmlydHVhbE1hY2hpbmU6dm1dOwotICAgICAgICBUaW55RE9NTm9kZSAqcm9vdCA9IFtbVGlu
eURPTU5vZGUgYWxsb2NdIGluaXRdOworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pT
Q29udGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIFRpbnlET01Ob2RlICpyb290ID0gW1tUaW55
RE9NTm9kZSBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTpjb250ZXh0LnZpcnR1YWxNYWNo
aW5lXTsKICAgICAgICAgVGlueURPTU5vZGUgKmxhc3ROb2RlID0gcm9vdDsKICAgICAgICAgZm9y
IChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgICAgICBUaW55RE9NTm9k
ZSAqbmV3Tm9kZSA9IFtbVGlueURPTU5vZGUgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgVGlu
eURPTU5vZGUgKm5ld05vZGUgPSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0V2l0aFZpcnR1YWxN
YWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmVdOwogICAgICAgICAgICAgW2xhc3ROb2RlIGFw
cGVuZENoaWxkOm5ld05vZGVdOwogICAgICAgICAgICAgbGFzdE5vZGUgPSBuZXdOb2RlOwogICAg
ICAgICB9CkBAIC05ODUsMTcgKzEwMTQsMTQgQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiAK
ICAgICAgICAgSlNWYWx1ZSAqbXlDdXN0b21Qcm9wZXJ0eSA9IFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAiZ2V0TGFzdE5vZGVJbkNoYWluKHJvb3QpLm15Q3VzdG9tUHJvcGVydHkiXTsKICAgICAg
ICAgY2hlY2tSZXN1bHQoQCJNeSBjdXN0b20gcHJvcGVydHkgPT0gNDIiLCBbbXlDdXN0b21Qcm9w
ZXJ0eSBpc051bWJlcl0gJiYgW215Q3VzdG9tUHJvcGVydHkgdG9JbnQzMl0gPT0gNDIpOwotCi0g
ICAgICAgIFtUaW55RE9NTm9kZSBjbGVhclNoYXJlZFZpcnR1YWxNYWNoaW5lXTsKICAgICB9CiAK
ICAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdm0gPSBb
VGlueURPTU5vZGUgc2hhcmVkVmlydHVhbE1hY2hpbmVdOwotICAgICAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTp2bV07Ci0g
ICAgICAgIFRpbnlET01Ob2RlICpyb290ID0gW1tUaW55RE9NTm9kZSBhbGxvY10gaW5pdF07Cisg
ICAgICAgIEpTQ29udGV4dCAqY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0XTsKKyAg
ICAgICAgVGlueURPTU5vZGUgKnJvb3QgPSBbW1RpbnlET01Ob2RlIGFsbG9jXSBpbml0V2l0aFZp
cnR1YWxNYWNoaW5lOmNvbnRleHQudmlydHVhbE1hY2hpbmVdOwogICAgICAgICBUaW55RE9NTm9k
ZSAqbGFzdE5vZGUgPSByb290OwogICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCAz
OyBpKyspIHsKLSAgICAgICAgICAgIFRpbnlET01Ob2RlICpuZXdOb2RlID0gW1tUaW55RE9NTm9k
ZSBhbGxvY10gaW5pdF07CisgICAgICAgICAgICBUaW55RE9NTm9kZSAqbmV3Tm9kZSA9IFtbVGlu
eURPTU5vZGUgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6Y29udGV4dC52aXJ0dWFsTWFj
aGluZV07CiAgICAgICAgICAgICBbbGFzdE5vZGUgYXBwZW5kQ2hpbGQ6bmV3Tm9kZV07CiAgICAg
ICAgICAgICBsYXN0Tm9kZSA9IG5ld05vZGU7CiAgICAgICAgIH0KQEAgLTEwMjAsOCArMTA0Niw2
IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogCiAgICAgICAgIEpTVmFsdWUgKm15Q3VzdG9t
UHJvcGVydHkgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImdldExhc3ROb2RlSW5DaGFpbihy
b290KS5teUN1c3RvbVByb3BlcnR5Il07CiAgICAgICAgIGNoZWNrUmVzdWx0KEAiZHVwbGljYXRl
IGNhbGxzIHRvIGFkZE1hbmFnZWRSZWZlcmVuY2UgZG9uJ3QgY2F1c2UgdGhpbmdzIHRvIGRpZSIs
IFtteUN1c3RvbVByb3BlcnR5IGlzTnVtYmVyXSAmJiBbbXlDdXN0b21Qcm9wZXJ0eSB0b0ludDMy
XSA9PSA0Mik7Ci0KLSAgICAgICAgW1RpbnlET01Ob2RlIGNsZWFyU2hhcmVkVmlydHVhbE1hY2hp
bmVdOwogICAgIH0KIAogICAgIEBhdXRvcmVsZWFzZXBvb2wgewpAQCAtMTE2MSw2ICsxMTg1LDE3
IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogICAgICAgICBjaGVja1Jlc3VsdChAIlJldHVy
bmluZyBpbnN0YW5jZSBvZiBDbGFzc0UgZnJvbSBDbGFzc0QncyBpbml0IGhhcyBjb3JyZWN0IGNs
YXNzIiwgW2QgaXNJbnN0YW5jZU9mOmNvbnRleHRbQCJDbGFzc0UiXV0pOwogICAgIH0KIAorICAg
IEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbW0pTQ29u
dGV4dCBhbGxvY10gaW5pdF07CisgICAgICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICAg
ICAgRXZpbEFsbG9jYXRpb25PYmplY3QgKmV2aWxPYmplY3QgPSBbW0V2aWxBbGxvY2F0aW9uT2Jq
ZWN0IGFsbG9jXSBpbml0V2l0aENvbnRleHQ6Y29udGV4dF07CisgICAgICAgICAgICBjb250ZXh0
W0AiZXZpbE9iamVjdCJdID0gZXZpbE9iamVjdDsKKyAgICAgICAgICAgIGNvbnRleHRbQCJldmls
T2JqZWN0Il0gPSBuaWw7CisgICAgICAgIH0KKyAgICAgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VD
b2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOworICAgICAg
ICBjaGVja1Jlc3VsdChAIkV2aWxBbGxvY2F0aW9uT2JqZWN0IHdhcyBzdWNjZXNzZnVsbHkgZGVh
bGxvY2VkIHdpdGhvdXQgY3Jhc2hpbmciLCBldmlsQWxsb2NhdGlvbk9iamVjdFdhc0RlYWxsb2Nl
ZCk7CisgICAgfQorCiAgICAgY3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QoKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAx
NTkzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05MzYsNiArOTM2LDcgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29weVZpc2l0b3JJbmxpbmVzLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxDb3B5V29ya0xpc3QuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXERlZmVyR0MuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXERlbGF5ZWRSZWxlYXNlU2NvcGUuaCIgLz4NCiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDQXNzZXJ0aW9ucy5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxoZWFwXEdDVGhyZWFkU2hhcmVkRGF0YS5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE1OTMw
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTU1OSw2ICsxNTU5
LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcRGVmZXJHQy5oIj4NCiAgICAg
ICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caGVhcFxEZWxheWVkUmVsZWFzZVNjcGUuaCI+DQorICAgICAgPEZpbHRl
cj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcR0NBc3NlcnRpb25zLmgiPg0KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVy
Pg0KICAgICA8L0NsSW5jbHVkZT4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcwNSw2ICs3MDUs
NyBAQAogCQkxQUNGNzM3NzE3MUNBNkZCMDBDOUJCMUUgLyogV2Vhay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUNGNzM3NjE3MUNBNkZCMDBDOUJC
MUUgLyogV2Vhay5jcHAgKi87IH07CiAJCTI2MDBCNUE2MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0
cmluZ0pvaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwICovOyB9
OwogCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE1MTUyQkFBQTcw
MDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oICovOyB9OworCQkyQTI4MjVEMDE4MzQxRjJEMDA4
N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRS
ZWxlYXNlU2NvcGUuaCAqLzsgfTsKIAkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNh
bGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyMTFCNTc0MTc2QTIyNEQwMDBFMkEyMyAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmgg
Ki87IH07CiAJCTJBNkY0NjI2MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTZGNDYyNTE3RTk1
OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZl
ckdDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJB
N0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLzsgfTsKQEAgLTE5NTcsNiAr
MTk1OCw3IEBACiAJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0Q29yZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYgLyogSlNT
dHJpbmdKb2luZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
dHJpbmdKb2luZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjAwQjVBNTE1
MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNTdHJpbmdKb2luZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVsYXllZFJlbGVhc2VTY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVh
cE9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwT3BlcmF0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBN0E1OEVFMTgwOEE0QzQwMDIw
QkRGNyAvKiBEZWZlckdDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERlZmVyR0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQUQ4OTMyOTE3RTM4
NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEhlYXBJdGVyYXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzA5NCw2ICszMDk2LDcgQEAKIAkJCQkxNDE1MDEzMjE1NEJCMTNGMDA1RDhDOTgg
LyogV2Vha1NldElubGluZXMuaCAqLywKIAkJCQkwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi8sCiAJCQkJMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLywKKwkJCQkyQTI4MjVDRjE4MzQxRjJEMDA4N0ZC
QTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBoZWFwOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ3NDUsNiArNDc0OCw3IEBACiAJCQkJQzIy
QjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQyOUQ4ODYwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyNEU1NTIxN0VFMjc0OTAwQUJCMjE3IC8qIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkEyODI1RDAxODM0MUYyRDAwODdGQkE5IC8q
IERlbGF5ZWRSZWxlYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mjk5REE2MTdEMTI4
NTgwMDVGNUZGOSAvKiBTZXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyOTlE
QTIxN0QxMjg0ODAwNUY1RkY5IC8qIFNldFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZBRTY0QUExMzVFNUUxQzAwOTYzMDEyIC8qIFNINEFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWxheWVkUmVsZWFzZVNjb3BlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVsYXllZFJlbGVhc2VT
Y29wZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVsYXll
ZFJlbGVhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIERlbGF5ZWRSZWxlYXNlU2NvcGVfaAorI2RlZmluZSBEZWxheWVkUmVsZWFz
ZVNjb3BlX2gKKworI2luY2x1ZGUgIkFQSVNoaW1zLmgiCisjaW5jbHVkZSAiTWFya2VkU3BhY2Uu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoQ0YpCisKK2NsYXNzIERlbGF5ZWRSZWxl
YXNlU2NvcGUgeworcHVibGljOgorICAgIERlbGF5ZWRSZWxlYXNlU2NvcGUoTWFya2VkU3BhY2Um
IG1hcmtlZFNwYWNlKQorICAgICAgICA6IG1fbWFya2VkU3BhY2UobWFya2VkU3BhY2UpCisgICAg
eworICAgICAgICBBU1NFUlQoIW1fbWFya2VkU3BhY2UubV9jdXJyZW50RGVsYXllZFJlbGVhc2VT
Y29wZSk7CisgICAgICAgIG1fbWFya2VkU3BhY2UubV9jdXJyZW50RGVsYXllZFJlbGVhc2VTY29w
ZSA9IHRoaXM7CisgICAgfQorCisgICAgfkRlbGF5ZWRSZWxlYXNlU2NvcGUoKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fbWFya2VkU3BhY2UubV9jdXJyZW50RGVsYXllZFJlbGVhc2VTY29wZSA9
PSB0aGlzKTsKKyAgICAgICAgbV9tYXJrZWRTcGFjZS5tX2N1cnJlbnREZWxheWVkUmVsZWFzZVNj
b3BlID0gbnVsbHB0cjsKKworICAgICAgICBBUElDYWxsYmFja1NoaW0gY2FsbGJhY2tTaGltKCpt
X21hcmtlZFNwYWNlLm1faGVhcC0+dm0oKSk7CisgICAgICAgIG1fZGVsYXllZFJlbGVhc2VPYmpl
Y3RzLmNsZWFyKCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdm9p
ZCByZWxlYXNlU29vbihSZXRhaW5QdHI8VD4mJiBvYmplY3QpCisgICAgeworICAgICAgICBtX2Rl
bGF5ZWRSZWxlYXNlT2JqZWN0cy5hcHBlbmQoc3RkOjptb3ZlKG9iamVjdCkpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBNYXJrZWRTcGFjZSYgbV9tYXJrZWRTcGFjZTsKKyAgICBWZWN0b3I8UmV0
YWluUHRyPENGVHlwZVJlZj4+IG1fZGVsYXllZFJlbGVhc2VPYmplY3RzOworfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6cmVsZWFzZVNvb24oUmV0
YWluUHRyPFQ+JiYgb2JqZWN0KQoreworICAgIEFTU0VSVChtX2N1cnJlbnREZWxheWVkUmVsZWFz
ZVNjb3BlKTsKKyAgICBtX2N1cnJlbnREZWxheWVkUmVsZWFzZVNjb3BlLT5yZWxlYXNlU29vbihz
dGQ6Om1vdmUob2JqZWN0KSk7Cit9CisKKyNlbHNlIC8vIFVTRShDRikKKworY2xhc3MgRGVsYXll
ZFJlbGVhc2VTY29wZSB7CitwdWJsaWM6CisgICAgRGVsYXllZFJlbGVhc2VTY29wZShNYXJrZWRT
cGFjZSYpCisgICAgeworICAgIH0KK307CisKKyNlbmRpZiAvLyBVU0UoQ0YpCisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRGVsYXllZFJlbGVhc2VTY29wZV9oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZXMuaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkRlbGF5ZWRS
ZWxlYXNlU2NvcGUuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRl
ICJHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCIKICNpbmNsdWRlICJIZWFwSXRlcmF0
aW9uU2NvcGUuaCIKQEAgLTcyOSw2ICs3MzAsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJi
YWdlKCkKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm47CiAgICAg
CisgICAgRGVsYXllZFJlbGVhc2VTY29wZSBkZWxheWVkUmVsZWFzZVNjb3BlKG1fb2JqZWN0U3Bh
Y2UpOwogICAgIGNvbGxlY3QoRG9Td2VlcCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHJldmlzaW9uIDE1OTMwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4NiwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0IHsgcmV0dXJuICEh
bV9kZWZlcnJhbERlcHRoOyB9CiAKKyNpZiBVU0UoQ0YpCisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgcmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+JiYpOworI2VuZGlmCisKICAgICBw
cml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgICAgICBmcmllbmQg
Y2xhc3MgQ29waWVkQmxvY2s7CkBAIC00NjgsNiArNDcyLDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4gbV9ibG9ja0FsbG9jYXRvcjsKICAgICB9CiAKKyNpZiBVU0UoQ0YpCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIHZvaWQgSGVhcDo6cmVsZWFzZVNv
b24oUmV0YWluUHRyPFQ+JiYgb2JqZWN0KQorICAgIHsKKyAgICAgICAgbV9vYmplY3RTcGFjZS5y
ZWxlYXNlU29vbihzdGQ6Om1vdmUob2JqZWN0KSk7CisgICAgfQorI2VuZGlmCisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSGVhcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE1OTMwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QWxsb2NhdG9yLmgiCiAKKyNpbmNsdWRlICJEZWxheWVkUmVsZWFzZVNjb3BlLmgiCiAjaW5jbHVk
ZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIklu
Y3JlbWVudGFsU3dlZXBlci5oIgpAQCAtNzcsNiArNzgsNyBAQCBpbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0CiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xv
d0Nhc2Uoc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIERlbGF5ZWRSZWxlYXNlU2NvcGUgZGVsYXll
ZFJlbGVhc2VTY29wZSgqbV9tYXJrZWRTcGFjZSk7CiAjaWYgQ09MTEVDVF9PTl9FVkVSWV9BTExP
Q0FUSU9OCiAgICAgaWYgKCFtX2hlYXAtPmlzRGVmZXJyZWQoKSkKICAgICAgICAgbV9oZWFwLT5j
b2xsZWN0QWxsR2FyYmFnZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKIAorI2luY2x1ZGUg
IkRlbGF5ZWRSZWxlYXNlU2NvcGUuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIK
ICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgpAQCAtODEs
NiArODIsNyBAQCBNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UoSGVhcCogaGVhcCkKICAgICA6IG1f
aGVhcChoZWFwKQogICAgICwgbV9jYXBhY2l0eSgwKQogICAgICwgbV9pc0l0ZXJhdGluZyhmYWxz
ZSkKKyAgICAsIG1fY3VycmVudERlbGF5ZWRSZWxlYXNlU2NvcGUobnVsbHB0cikKIHsKICAgICBm
b3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBwcmVjaXNlQ3V0
b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewogICAgICAgICBhbGxvY2F0b3JGb3IoY2Vs
bFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNpemUsIE1hcmtlZEJsb2NrOjpOb25lKTsKQEAg
LTExMSwxMiArMTEzLDE0IEBAIHN0cnVjdCBMYXN0Q2hhbmNlVG9GaW5hbGl6ZSA6IE1hcmtlZEJs
b2MKIAogdm9pZCBNYXJrZWRTcGFjZTo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogeworICAgIERl
bGF5ZWRSZWxlYXNlU2NvcGUgZGVsYXllZFJlbGVhc2VTY29wZSgqdGhpcyk7CiAgICAgc3RvcEFs
bG9jYXRpbmcoKTsKICAgICBmb3JFYWNoQmxvY2s8TGFzdENoYW5jZVRvRmluYWxpemU+KCk7CiB9
CiAKIHZvaWQgTWFya2VkU3BhY2U6OnN3ZWVwKCkKIHsKKyAgICBBU1NFUlQobV9jdXJyZW50RGVs
YXllZFJlbGVhc2VTY29wZSk7CiAgICAgbV9oZWFwLT5zd2VlcGVyKCktPndpbGxGaW5pc2hTd2Vl
cGluZygpOwogICAgIGZvckVhY2hCbG9jazxTd2VlcD4oKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTU5MzA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NiArMzYsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgRGVsYXllZFJlbGVhc2VTY29w
ZTsKIGNsYXNzIEhlYXA7CiBjbGFzcyBIZWFwSXRlcmF0aW9uU2NvcGU7CiBjbGFzcyBKU0NlbGw7
CkBAIC0xMTQsNyArMTE1LDEyIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNQYWdlZE91dChkb3Vi
bGUgZGVhZGxpbmUpOwogCisjaWYgVVNFKENGKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZv
aWQgcmVsZWFzZVNvb24oUmV0YWluUHRyPFQ+JiYpOworI2VuZGlmCisKIHByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIERlbGF5ZWRSZWxlYXNlU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
Zm9yRWFjaEFsbG9jYXRvcihGdW5jdG9yJik7CkBAIC0xNDQsNiArMTUwLDggQEAgcHJpdmF0ZToK
ICAgICBzaXplX3QgbV9jYXBhY2l0eTsKICAgICBib29sIG1faXNJdGVyYXRpbmc7CiAgICAgTWFy
a2VkQmxvY2tTZXQgbV9ibG9ja3M7CisKKyAgICBEZWxheWVkUmVsZWFzZVNjb3BlKiBtX2N1cnJl
bnREZWxheWVkUmVsZWFzZVNjb3BlOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgTWFya2VkU3BhY2U6OmZvckVhY2hM
aXZlQ2VsbChIZWFwSXRlcmF0aW9uU2NvcGUmLCBGdW5jdG9yJiBmdW5jdG9yKQo=
</data>
<flag name="review"
          id="240059"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>