<?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>108294</bug_id>
          
          <creation_ts>2013-01-29 22:13:58 -0800</creation_ts>
          <short_desc>Coordinated Graphics: CoordinatedGraphicsLayer makes CoordinatedGraphicsScene perform via CoordinatedGraphicsOperation.</short_desc>
          <delta_ts>2013-03-08 02:06:59 -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>Layout and Rendering</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>111569</dependson>
          <blocked>103854</blocked>
    
    <blocked>108296</blocked>
    
    <blocked>109579</blocked>
    
    <blocked>109782</blocked>
    
    <blocked>108295</blocked>
    
    <blocked>111829</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dongseong Hwang">dongseong.hwang</reporter>
          <assigned_to name="Dongseong Hwang">dongseong.hwang</assigned_to>
          <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>cwhong893</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>jaepark</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kadam</cc>
    
    <cc>kbalazs</cc>
    
    <cc>levin+threading</cc>
    
    <cc>luiz</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>noam</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yoon</cc>
    
    <cc>zarvai</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>819797</commentid>
    <comment_count>0</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-01-29 22:13:58 -0800</bug_when>
    <thetext>CoordinatedLayerTreeHostProxy has so many IPC messages (e.g. SyncCanvas and CreateTile), and there are function chain from CoordinatedGraphicsLayer to LayerTreeRenderer (4 classes).
If we want to add new function, we need to add boilerplate code into 4 classes.

Now CoordinatedLayerTreeHost has only one IPC message: CommitCooridnatedGraphicsOperations.
CoordinatedGraphicsLayer makes TextureMapperScene run as follows
1. CoordinatedGraphicsLayer makes CooridnatedGraphicsOperation (e.g. CreateTile).
2. CoordinatedLayerTreeHost stores all operations.
3. CoordinatedLayerTreeHost sends all operations to CoordinatedLayerTreeHostProxy at the time to flush via CommitCooridnatedGraphicsOperations message.
4. TextureMapperScene executes all operations.

There is one big behavior change. All operations (e.g. createLayer, syncCanvas, etc.) are performed at the same time, when TextureMapperScene::commitCooridnatedGraphicsOperations is called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822588</commentid>
    <comment_count>1</comment_count>
      <attachid>186001</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-01 03:51:32 -0800</bug_when>
    <thetext>Created attachment 186001
WIP: I&apos;ll change to use Data for simple encoding</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822613</commentid>
    <comment_count>2</comment_count>
      <attachid>186006</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-01 04:25:50 -0800</bug_when>
    <thetext>Created attachment 186006
WIP: use Data to remove switch statement in encoding.

IMO it is impossible to remove switch statement.
SimpleArgumentCoder just copy binary data, so in this example, the heap memory of &quot;Vector&lt;CoordinatedLayerID&gt; layerIDs&quot; cannot be encoded.

Moreover, CoordinatedGraphicsScene must derefer one level more:
from operation-&gt;layerIDs to operation-&gt;data-&gt;layerIDs.

I don&apos;t have good idea to remove switch statement yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822623</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-01 04:38:52 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created an attachment (id=186006) [details]
&gt; WIP: use Data to remove switch statement in encoding.
&gt; 
&gt; IMO it is impossible to remove switch statement.
&gt; SimpleArgumentCoder just copy binary data, so in this example, the heap memory of &quot;Vector&lt;CoordinatedLayerID&gt; layerIDs&quot; cannot be encoded.
&gt; 
&gt; Moreover, CoordinatedGraphicsScene must derefer one level more:
&gt; from operation-&gt;layerIDs to operation-&gt;data-&gt;layerIDs.
&gt; 
&gt; I don&apos;t have good idea to remove switch statement yet.
We can&apos;t remove it completely, but we can use a single case: for all the operations that have a &quot;raw&quot; data type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822642</commentid>
    <comment_count>4</comment_count>
      <attachid>186014</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-01 05:01:22 -0800</bug_when>
    <thetext>Created attachment 186014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822647</commentid>
    <comment_count>5</comment_count>
      <attachid>186016</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-01 05:07:48 -0800</bug_when>
    <thetext>Created attachment 186016
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822654</commentid>
    <comment_count>6</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-01 05:15:09 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Created an attachment (id=186006) [details] [details]
&gt; &gt; Moreover, CoordinatedGraphicsScene must derefer one level more:
&gt; &gt; from operation-&gt;layerIDs to operation-&gt;data-&gt;layerIDs.
&gt; &gt; 
&gt; &gt; I don&apos;t have good idea to remove switch statement yet.
&gt; We can&apos;t remove it completely, but we can use a single case: for all the operations that have a &quot;raw&quot; data type.

yes, I see.
For example, the same case can encode SetRootLayerType, SetLayerStateType,  CreateTileType,  UpdateTileType, and  RemoveTileType because all are just POD.
But CoordinatedGraphicsScene need to change from &quot;static_cast&lt;const CoordinatedGraphicsOperation::SetRootLayer*&gt;(operation)-&gt;layerID&quot; to &quot;static_cast&lt;const CoordinatedGraphicsOperation::SetRootLayer*&gt;(operation)-&gt;data-&gt;layerID&quot;

Do you think we should go to Data?
If so, I&apos;ll apply some Operations that have just POD data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822660</commentid>
    <comment_count>7</comment_count>
      <attachid>186016</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-01 05:19:41 -0800</bug_when>
    <thetext>Comment on attachment 186016
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:98
&gt; +        : layerIDs(ids)

I&apos;ll indent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822687</commentid>
    <comment_count>8</comment_count>
      <attachid>186016</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-01 05:58:40 -0800</bug_when>
    <thetext>Comment on attachment 186016
Patch

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

Have some comments, but I think it&apos;s a good direction. More input from others welcome...

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:48
&gt; +class CoordinatedGraphicsLayerClient : public CoordinatedGraphicsOperation::Queue {

I wouldn&apos;t use inheritance here.
Instead, CoordinatedGraphicsLayerClient should have a function that returns a queue.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:59
&gt; +        CreateLayersType,
&gt; +        DeleteLayersType,
&gt; +        SetRootLayerType,
&gt; +        SetLayerStateType,
&gt; +        SetLayerChildrenType,
&gt; +        CreateTileType,
&gt; +        UpdateTileType,
&gt; +        RemoveTileType,
&gt; +        CreateUpdateAtlasType,
&gt; +        RemoveUpdateAtlasType,

...
Let&apos;s use caps here, CREATE_LAYERS etc., like FilterOperation and TransformOperation. Then you also don&apos;t need the word Type everywhere.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:83
&gt; +        NoneType

I don&apos;t see the point of NoneType.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:86
&gt; +    class Operation : public RefCounted&lt;Operation&gt; {

I don&apos;t see the point of this inner class... This virtual class can be part of CoordinatedGraphicsOperation, and the subclasses can be inner classes.
Also, it has to be ThreadSafeRefCounted.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:614
&gt; +void CoordinatedLayerTreeHost::enqueueCoordinatedGraphicsOperation(PassRefPtr&lt;CoordinatedGraphicsOperation::Operation&gt; operation)

I think this should be divided to two functions. One called willEnqueueCoordinatedGraphicsOperation, that handles your switch statement and is called from this function. This function should only call willEnqueue, and then append to the vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822700</commentid>
    <comment_count>9</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-01 06:12:09 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=186016&amp;action=review

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:83
&gt; +        NoneType

Do we really need it?

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:87
&gt; +    public:

virtual destructor?

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:91
&gt; +    class CreateLayers : public Operation {

How about template&lt;OperationType Type&gt; OperationBase { CoordinatedGraphicsOperation::OperationType getOperationType() const {return Type} }; ?
That would let you not to override &apos;getOperationType&apos; in every implementation but rather inherit from: OperationBase&lt;NeededType&gt;

Also we could think of adding another template parameter for the type of the contained data, and that I believe could significantly reduce the size of this patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822747</commentid>
    <comment_count>10</comment_count>
      <attachid>186016</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-02-01 07:21:01 -0800</bug_when>
    <thetext>Comment on attachment 186016
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        If we want to add a new message, we need to add boilerplate code into 4 classes.

Suggestion: I would mention in the ChangeLog what need to be changed to add a new operation now: create new operation subclass, code to handle in executeCoordinatedGraphicsOperation(), encode/decode and optionally special treatment in enqueue.

&gt;&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:86
&gt;&gt; +    class Operation : public RefCounted&lt;Operation&gt; {
&gt; 
&gt; I don&apos;t see the point of this inner class... This virtual class can be part of CoordinatedGraphicsOperation, and the subclasses can be inner classes.
&gt; Also, it has to be ThreadSafeRefCounted.

Agreed that you should merge Operation into CoordinatedGraphicsOperation.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperations.h:44
&gt; +    const CoordinatedGraphicsOperation::Operation* at(size_t index) const { return index &lt; m_operations.size() ? m_operations.at(index).get() : 0; }

Do we need this bound checking version of at()?

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:574
&gt; +void CoordinatedGraphicsScene::executeCoordinatedGraphicsOperation(const CoordinatedGraphicsOperation::Operation* operation)

Did you consider the approach of making a &quot;virtual void execute(CoordinatedGraphicsScene*)&quot; virtual function in Operation? Then you could simply call it here and avoid the switch. The piece of code for each operation would be in the operations themselves, with no static_cast to clutter the code.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:867
&gt; +            encoder &lt;&lt; static_cast&lt;const CoordinatedGraphicsOperation::CreateTile*&gt;(operation)-&gt;layerID;
&gt; +            encoder &lt;&lt; static_cast&lt;const CoordinatedGraphicsOperation::CreateTile*&gt;(operation)-&gt;tileID;
&gt; +            encoder &lt;&lt; static_cast&lt;const CoordinatedGraphicsOperation::CreateTile*&gt;(operation)-&gt;tileRect;
&gt; +            encoder &lt;&lt; static_cast&lt;const CoordinatedGraphicsOperation::CreateTile*&gt;(operation)-&gt;updateInfo;

For POD types you could use SimpleArgumentCoder. In this case those lines could be replaced by SimpleArgumentCoder&lt;CoordinatedGraphicsOperation::CreateTile&gt;::encode(encoder, operation). Same trick can be used for decoder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822751</commentid>
    <comment_count>11</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-01 07:24:14 -0800</bug_when>
    <thetext>&gt; 
&gt; Did you consider the approach of making a &quot;virtual void execute(CoordinatedGraphicsScene*)&quot; virtual function in Operation? Then you could simply call it here and avoid the switch. The piece of code for each operation would be in the operations themselves, with no static_cast to clutter the code.

This was in the original version... Maybe it is a better idea than the giant switch statement.

&gt; For POD types you could use SimpleArgumentCoder. In this case those lines could be replaced by SimpleArgumentCoder&lt;CoordinatedGraphicsOperation::CreateTile&gt;::encode(encoder, operation). Same trick can be used for decoder.
We would need to have a Data struct for the data, since we don&apos;t want to do this for the RefCounted header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822759</commentid>
    <comment_count>12</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-02-01 07:30:43 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; For POD types you could use SimpleArgumentCoder. In this case those lines could be replaced by SimpleArgumentCoder&lt;CoordinatedGraphicsOperation::CreateTile&gt;::encode(encoder, operation). Same trick can be used for decoder.
&gt; We would need to have a Data struct for the data, since we don&apos;t want to do this for the RefCounted header.

Hmm. Right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823998</commentid>
    <comment_count>13</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-03 20:27:38 -0800</bug_when>
    <thetext>Thank Noam,  Mikhail and Caio for your review!

(In reply to comment #8)
&gt; (From update of attachment 186016 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186016&amp;action=review
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:59
&gt; &gt; +        CreateUpdateAtlasType,
&gt; &gt; +        RemoveUpdateAtlasType,
&gt; 
&gt; ...
&gt; Let&apos;s use caps here, CREATE_LAYERS etc., like FilterOperation and TransformOperation. Then you also don&apos;t need the word Type everywhere.

Unfortunately, CREATE_LAYERS is not allowed by WebKit Coding Style : http://www.webkit.org/coding/coding-style.html
&quot;12. Enum members should use InterCaps with an initial capital letter.&quot;
 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:86
&gt; &gt; +    class Operation : public RefCounted&lt;Operation&gt; {
&gt; 
&gt; I don&apos;t see the point of this inner class... This virtual class can be part of CoordinatedGraphicsOperation, and the subclasses can be inner classes.
&gt; Also, it has to be ThreadSafeRefCounted.

That&apos;s a good idea, but c++ does not support to inherit outer class from inner class as follows. It is because when compiling the inner class, the outer is not complete type yet.
class CGBase {
    virtual void foo(){}
    class Inner : public CGBase {
        virtual void foo() {}
    };
};

We have two requirements
1. we want to call like this : CoordinatedGraphicsOperation::CreateLayers::create
2. Single vector keeps all operations, so we need inheritance.

So I choose this code.
class CoordinatedGraphicsOperation {
     class OperationBase { ... }
     class CreateLayers : public OperationBase { ... }
};

We can go with nested namespace like this. But it is not common in WebKit.
namespace CoordinatedGraphicsOperation {
     class OperationBase { ... }
     class CreateLayers : public OperationBase { ... }
}

(In reply to comment #9)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186016&amp;action=review
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:91
&gt; &gt; +    class CreateLayers : public Operation {
&gt; 
&gt; How about template&lt;OperationType Type&gt; OperationBase { CoordinatedGraphicsOperation::OperationType getOperationType() const {return Type} }; ?
&gt; That would let you not to override &apos;getOperationType&apos; in every implementation but rather inherit from: OperationBase&lt;NeededType&gt;
&gt; 
&gt; Also we could think of adding another template parameter for the type of the contained data, and that I believe could significantly reduce the size of this patch :)

Great! Thank you.


(In reply to comment #10)
&gt; (From update of attachment 186016 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186016&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        If we want to add a new message, we need to add boilerplate code into 4 classes.
&gt; 
&gt; Suggestion: I would mention in the ChangeLog what need to be changed to add a new operation now: create new operation subclass, code to handle in executeCoordinatedGraphicsOperation(), encode/decode and optionally special treatment in enqueue.

Yes, I&apos;ll do.

(In reply to comment #11)
&gt; &gt; 
&gt; &gt; Did you consider the approach of making a &quot;virtual void execute(CoordinatedGraphicsScene*)&quot; virtual function in Operation? Then you could simply call it here and avoid the switch. The piece of code for each operation would be in the operations themselves, with no static_cast to clutter the code.
&gt; 
&gt; This was in the original version... Maybe it is a better idea than the giant switch statement.

Ok, I&apos;ll go to original &apos;execute&apos; version.

&gt; &gt; For POD types you could use SimpleArgumentCoder. In this case those lines could be replaced by SimpleArgumentCoder&lt;CoordinatedGraphicsOperation::CreateTile&gt;::encode(encoder, operation). Same trick can be used for decoder.
&gt; We would need to have a Data struct for the data, since we don&apos;t want to do this for the RefCounted header.

I also want to use SimpleArgumentCoder like your suggestion.
So I&apos;ll add Data struct to simple data operations like SetLayerState.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824015</commentid>
    <comment_count>14</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-03 21:07:24 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186016&amp;action=review
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:91
&gt; &gt; +    class CreateLayers : public Operation {
&gt; 
&gt; How about template&lt;OperationType Type&gt; OperationBase { CoordinatedGraphicsOperation::OperationType getOperationType() const {return Type} }; ?
&gt; That would let you not to override &apos;getOperationType&apos; in every implementation but rather inherit from: OperationBase&lt;NeededType&gt;
&gt; 
&gt; Also we could think of adding another template parameter for the type of the contained data, and that I believe could significantly reduce the size of this patch :)

To apply your suggestion, we need two level inheritance, because we need to have two base classes for different purpose respectively.
1. Single Vector can store all operation.
2. Base class should know Type info.

So we can not make it by one inheritance.

enum CGEnum {
    AAA,
    BBB,
};
template&lt;CGEnum T&gt; class CGBase {
    CGEnum type() { return T; }
};
class CGImpl : public CGBase&lt;AAA&gt; {
    void foo() {}
};
class CGBases {
    Vector&lt;CGBase&lt;AAA&gt; &gt; bases; // __This vector cannot keep CGBase&lt;BBB&gt;.__
};

We need two level inheritance. I&apos;m not sure that it is readable. How about your opinion?
enum CGEnum {
    AAA,
    BBB,
};
class CGBase {
    virtual CGEnum type() = 0;
};
template&lt;CGEnum T&gt; class CGBaseTemplete : public CGBase {
    virtual CGEnum type() { return T; }

};
class CGImpl : public CGBaseTemplete&lt;AAA&gt; {
    void foo() {}
    int num;
};
class CGBaseVector {
    Vector&lt;CGBase*&gt; bases;
    void useCase()
    {
        static_cast&lt;CGImpl*&gt;(bases[0])-&gt;num; // __Is it safe?__
    }
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824116</commentid>
    <comment_count>15</comment_count>
      <attachid>186317</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-04 00:29:37 -0800</bug_when>
    <thetext>Created attachment 186317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824119</commentid>
    <comment_count>16</comment_count>
      <attachid>186317</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-04 00:34:25 -0800</bug_when>
    <thetext>Comment on attachment 186317
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        Now CoordinatedLayerTreeHost has only one IPC message: CommitCooridnatedGraphicsOperations.
&gt; +        CoordinatedGraphicsLayer makes CoordinatedGraphicsScene run as follows:
&gt; +        1. CoordinatedGraphicsLayer makes a CooridnatedGraphicsOperation (e.g. CreateTile).

Spelling issues here Cooridnated*

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:816
&gt; +    m_coordinator-&gt;operationQueue()-&gt;enqueueCoordinatedGraphicsOperation(CoordinatedGraphicsOperation::RemoveTile::create(id(), tileID));

wouldnt operationQueue-&gt;encodeOperation not be sufficient?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824120</commentid>
    <comment_count>17</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-04 00:35:06 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created an attachment (id=186317) [details]
&gt; Patch

&gt; &gt; For POD types you could use SimpleArgumentCoder. In this case those lines could be replaced by SimpleArgumentCoder&lt;CoordinatedGraphicsOperation::CreateTile&gt;::encode(encoder, operation). Same trick can be used for decoder.
&gt; We would need to have a Data struct for the data, since we don&apos;t want to do this for the RefCounted header.

I made some trials, but all trials made CoordinatedGraphicsOperation.h more complex to remove some case statement in ArgumentCoder&lt;CoordinatedGraphicsOperations&gt;::encode().
I could not find good solution for this. But I open your suggestion! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824121</commentid>
    <comment_count>18</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-04 00:36:45 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 186317 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186317&amp;action=review
&gt; Spelling issues here Cooridnated*

Oops. Thank you!

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:816
&gt; &gt; +    m_coordinator-&gt;operationQueue()-&gt;enqueueCoordinatedGraphicsOperation(CoordinatedGraphicsOperation::RemoveTile::create(id(), tileID));
&gt; 
&gt; wouldnt operationQueue-&gt;encodeOperation not be sufficient?

I think your suggestion is sufficient. I&apos;ll change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824128</commentid>
    <comment_count>19</comment_count>
      <attachid>186318</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-04 01:04:43 -0800</bug_when>
    <thetext>Created attachment 186318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824133</commentid>
    <comment_count>20</comment_count>
      <attachid>186317</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-04 01:16:25 -0800</bug_when>
    <thetext>Comment on attachment 186317
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:105
&gt; +        explicit CreateLayers(const Vector&lt;CoordinatedLayerID&gt;&amp; ids)

shouldn&apos;t it be private?

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:108
&gt; +        virtual ~CreateLayers() { }

since the class is final, empty destructor can be omitted.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:518
&gt; +        virtual void enqueueCoordinatedGraphicsOperation(PassRefPtr&lt;CoordinatedGraphicsOperation::OperationBase&gt;) = 0;

virtual destructor is required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824134</commentid>
    <comment_count>21</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-04 01:18:09 -0800</bug_when>
    <thetext>&gt; We need two level inheritance. I&apos;m not sure that it is readable. How about your opinion?

Sure we need, but I consider it to be much better than copy/pasting same function to each class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824142</commentid>
    <comment_count>22</comment_count>
      <attachid>186322</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-04 01:30:02 -0800</bug_when>
    <thetext>Created attachment 186322
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824145</commentid>
    <comment_count>23</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-04 01:31:30 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 186317 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186317&amp;action=review
&gt; shouldn&apos;t it be private?
exactly. Done.

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:108
&gt; &gt; +        virtual ~CreateLayers() { }
&gt; 
&gt; since the class is final, empty destructor can be omitted.
&gt; virtual destructor is required.

Thank you. Done.

&gt; &gt; We need two level inheritance. I&apos;m not sure that it is readable. How about your opinion?
&gt; Sure we need, but I consider it to be much better than copy/pasting same function to each class.

I&apos;m sure now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824149</commentid>
    <comment_count>24</comment_count>
      <attachid>186323</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-04 01:36:23 -0800</bug_when>
    <thetext>Created attachment 186323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824151</commentid>
    <comment_count>25</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-04 01:38:58 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=186318&amp;action=review

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.cpp:36
&gt; +{

only one line.. maybe it&apos;s worth defining it inside the class declaration??

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.cpp:41
&gt; +{

ditto, and same for the rest

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:109
&gt; +        virtual void execute(CoordinatedGraphicsScene*) OVERRIDE;

seems this method can be const, as it just invokes some CoordinatedGraphicsScene method inside.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825143</commentid>
    <comment_count>26</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-04 22:15:50 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186318&amp;action=review

Thank you for helping me improve code!

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.cpp:36
&gt; &gt; +{
&gt; 
&gt; only one line.. maybe it&apos;s worth defining it inside the class declaration??
&gt; ditto, and same for the rest

I decide to create cpp file for small two reasons.
1. I don&apos;t want CoordinatedGraphicsOperation.h to include CoordinatedGraphicsScene.h for build performance. Many files include CoordinatedGraphicsOperation.h.
2. I want to get together execute() implementations to see quickly what each CoordinatedGraphicsOperation performs using CoordinatedGraphicsScene.

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:109
&gt; &gt; +        virtual void execute(CoordinatedGraphicsScene*) OVERRIDE;
&gt; 
&gt; seems this method can be const, as it just invokes some CoordinatedGraphicsScene method inside.

yes, I think const is possible, but I think it is more natural without const.
1. Other task classes implement something like execute() without const. for instance, FunctionWrapper::operator()() and FileThreadTask1::performTask().
2. CoordinatedGraphicsOperation::execute() will call any methods of CoordinatedGraphicsScene, so execute() with const is a bit weird.

Above is just my opinion. If your opinion is different, please let me know! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825171</commentid>
    <comment_count>27</comment_count>
      <attachid>186318</attachid>
    <who name="Rafael Brandao">rafael.lobo</who>
    <bug_when>2013-02-04 23:18:28 -0800</bug_when>
    <thetext>Comment on attachment 186318
Patch

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

&gt; Source/WebCore/ChangeLog:23
&gt; +        CoordinatedGraphicsScene::commitCoordinatedGraphicsOperations is called.

This change is a huge win! It will avoid a lot of tricky bugs we&apos;ve found in the past. :-)

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:42
&gt; +PassRefPtr&lt;CoordinatedImageBacking&gt; CoordinatedImageBacking::create(CoordinatedGraphicsOperation::Queue* queue, PassRefPtr&lt;Image&gt; image)

Is it ok that we&apos;re keeping around a raw pointer of the queue? Is it possible that we run into enqueue function with a dangling pointer?

&gt; Source/WebCore/platform/graphics/texmap/coordinated/UpdateAtlas.cpp:33
&gt; +UpdateAtlas::UpdateAtlas(CoordinatedGraphicsOperation::Queue* queue, int dimension, CoordinatedSurface::Flags flags)

Same concern as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825235</commentid>
    <comment_count>28</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-05 00:50:11 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186318&amp;action=review
&gt; 
&gt; Thank you for helping me improve code!
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.cpp:36
&gt; &gt; &gt; +{
&gt; &gt; 
&gt; &gt; only one line.. maybe it&apos;s worth defining it inside the class declaration??
&gt; &gt; ditto, and same for the rest
&gt; 
&gt; I decide to create cpp file for small two reasons.
&gt; 1. I don&apos;t want CoordinatedGraphicsOperation.h to include CoordinatedGraphicsScene.h for build performance. Many files include CoordinatedGraphicsOperation.h.
&gt; 2. I want to get together execute() implementations to see quickly what each CoordinatedGraphicsOperation performs using CoordinatedGraphicsScene.
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsOperation.h:109
&gt; &gt; &gt; +        virtual void execute(CoordinatedGraphicsScene*) OVERRIDE;
&gt; &gt; 
&gt; &gt; seems this method can be const, as it just invokes some CoordinatedGraphicsScene method inside.
&gt; 
&gt; yes, I think const is possible, but I think it is more natural without const.
&gt; 1. Other task classes implement something like execute() without const. for instance, FunctionWrapper::operator()() and FileThreadTask1::performTask().
&gt; 2. CoordinatedGraphicsOperation::execute() will call any methods of CoordinatedGraphicsScene, so execute() with const is a bit weird.
&gt; 
&gt; Above is just my opinion. If your opinion is different, please let me know! :)
I agree with your points, think we can keep it as it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825250</commentid>
    <comment_count>29</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-05 01:12:27 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 186318 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186318&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:23
&gt; &gt; +        CoordinatedGraphicsScene::commitCoordinatedGraphicsOperations is called.
&gt; 
&gt; This change is a huge win! It will avoid a lot of tricky bugs we&apos;ve found in the past. :-)

I hope. thank you! :)

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:42
&gt; &gt; +PassRefPtr&lt;CoordinatedImageBacking&gt; CoordinatedImageBacking::create(CoordinatedGraphicsOperation::Queue* queue, PassRefPtr&lt;Image&gt; image)
&gt; 
&gt; Is it ok that we&apos;re keeping around a raw pointer of the queue? Is it possible that we run into enqueue function with a dangling pointer?

Currently CoordinatedGraphicsOperation::Queue is CoordinatedLayerTreeHost which holds CoordinatedImageBacking and UpdateAtlas as a OwnPtr, so queue can not be a dangling pointer.

(In reply to comment #28)
&gt; &gt; Above is just my opinion. If your opinion is different, please let me know! :)
&gt; I agree with your points, think we can keep it as it is.

Thank you for good review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825983</commentid>
    <comment_count>30</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-05 18:06:30 -0800</bug_when>
    <thetext>As we discussed in IRC, we will remove all encode/decode code in CoordinatedGraphicsArgumentCoder, and then we will encode/decode CoordinatedGraphicsOperations in our own classes: CoordinatedGraphicsEncoder, CoordinatedGraphicsDecoder.
I explain how we go. If you have good idea, please let me know! :)

Client code will be changed as follows:
@@ -289,7 +289,9 @@ bool CoordinatedLayerTreeHost::flushPendingLayerChanges()
         IntRect coveredRect = toCoordinatedGraphicsLayer(m_nonCompositedContentLayer.get())-&gt;coverRect();
-        m_webPage-&gt;send(Messages::CoordinatedLayerTreeHostProxy::CommitCoordinatedGraphicsOperations(m_operations, m_visibleContentsRect.location(), contentsSize, coveredRect));
+        CoordinatedGraphicsEncoder encoder;
+        SharedBuffer buffer = encoder.encode(m_operations);
+        m_webPage-&gt;send(Messages::CoordinatedLayerTreeHostProxy::CommitCoordinatedGraphicsOperations(buffer, m_visibleContentsRect.location(), contentsSize, coveredRect));
         m_operations.clear();
         m_waitingForUIProcess = true;

@@ -54,8 +54,10 @@ void CoordinatedLayerTreeHostProxy::dispatchUpdate(const Function&lt;void()&gt;&amp; funct
-void CoordinatedLayerTreeHostProxy::commitCoordinatedGraphicsOperations(const CoordinatedGraphicsOperations&amp; operations, const FloatPoint&amp; scrollPosition, const IntSize&amp; contentsSize, const IntRect&amp; coveredRect)
+void CoordinatedLayerTreeHostProxy::commitCoordinatedGraphicsOperations(const SharedBuffer&amp; buffer, const FloatPoint&amp; scrollPosition, const IntSize&amp; contentsSize, const IntRect&amp; coveredRect)
 {
+    CoordinatedGraphicsDecoder decode;
+    CoordinatedGraphicsOperations operations = decoder.decode(buffer);
     dispatchUpdate(bind(&amp;CoordinatedGraphicsScene::commitCoordinatedGraphicsOperations, m_scene.get(), operations, scrollPosition));
     updateViewport();

Currently, CoordinatedGraphicsArgumentCoder has more than 1000 line code, and most of all deal with filters, animations and surface as well as operatons.
If CoordinatedGraphics[De|En]coder deals with encode/decode, CoordinatedGraphicsArgumentCoder no longer needs to encode/decode above stuffs.

CoordinatedGraphicsEncoder will extends WTF::Encoder as follows:
CoordinatedGraphicsEncoder : public WTF::Encoder { encodeAnimation() encodeFilter() encodeSurface() }

However, I&apos;m not sure that inheritance of WTF::Encoder is necessary. how do you think?

CoordinatedGraphicsEncoder::encode serializes CoordinatedGraphicsOperations to binary data, while CoordinatedGraphicsDecoder::decode creates CoordinatedGraphicsOperations from binary data.
encoding/decoding  filters or animations is the implementation detail of CoordinatedGraphics[De|En]coder.

Now, could you feedback me? :D

Gwangyoon Hwang (ryumiel) will contribute to this encode/decode work, because I am going to vacation until next Tuesday. lol
So if you don&apos;t mind, I wish this patch is reviewed and ryumiel will work based on upstream webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829033</commentid>
    <comment_count>31</comment_count>
      <attachid>186323</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-09 08:31:40 -0800</bug_when>
    <thetext>Comment on attachment 186323
Patch

As discussed on IRC, waiting for a new patch that uses templates instead of a lot of broilerplate code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832031</commentid>
    <comment_count>32</comment_count>
      <attachid>186323</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2013-02-13 10:24:44 -0800</bug_when>
    <thetext>Comment on attachment 186323
Patch

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

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:58
&gt; -void CoordinatedLayerTreeHostProxy::didRenderFrame(const IntSize&amp; contentsSize, const IntRect&amp; coveredRect)
&gt; +void CoordinatedLayerTreeHostProxy::commitCoordinatedGraphicsOperations(const CoordinatedGraphicsOperations&amp; operations, const WebCore::IntSize&amp; contentsSize, const WebCore::IntRect&amp; coveredRect)
&gt;  {

I would keep the name didRenderFrame, it is more straightforward to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832398</commentid>
    <comment_count>33</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-13 15:08:12 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 186323 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186323&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp:58
&gt; &gt; -void CoordinatedLayerTreeHostProxy::didRenderFrame(const IntSize&amp; contentsSize, const IntRect&amp; coveredRect)
&gt; &gt; +void CoordinatedLayerTreeHostProxy::commitCoordinatedGraphicsOperations(const CoordinatedGraphicsOperations&amp; operations, const WebCore::IntSize&amp; contentsSize, const WebCore::IntRect&amp; coveredRect)
&gt; &gt;  {
&gt; 
&gt; I would keep the name didRenderFrame, it is more straightforward to me.

Thank you for suggestion. How do you think, noam? :) commitCoordinatedGraphicsOperations was suggested by noam because there are no arguments like IntSize and IntRect except for operations when we discussed.

btw, ryumiel are doing best to complete this bug now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832780</commentid>
    <comment_count>34</comment_count>
      <attachid>188273</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-02-14 00:08:31 -0800</bug_when>
    <thetext>Created attachment 188273
WIP. Just for discussion

What I try to do is removing CoordiantedGraphicsArgumentCoder things from WebKit2.
CoordinatedGraphicsOperation[De|En]coder takes care about that.

And commitCoordinatedGraphicsOperations uses only CoreIPC::DataReference. 

Noam, could you give some feedback?
I think I need to check basic design before digging deeper.

TODO.
1. Implement unimplemented
2. Debug encoder/decoder
3. Provide &quot;pretty&quot; encode/decode interface in CoordinatedSurface
4. Find a way to remove duplicated implementations with CoreIPC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832797</commentid>
    <comment_count>35</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-02-14 00:43:34 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Created an attachment (id=188273) [details]
&gt; WIP. Just for discussion
&gt; 
&gt; What I try to do is removing CoordiantedGraphicsArgumentCoder things from WebKit2.
&gt; CoordinatedGraphicsOperation[De|En]coder takes care about that.
&gt; 
&gt; And commitCoordinatedGraphicsOperations uses only CoreIPC::DataReference. 
&gt; 
&gt; Noam, could you give some feedback?
&gt; I think I need to check basic design before digging deeper.
&gt; 
&gt; TODO.
&gt; 1. Implement unimplemented
&gt; 2. Debug encoder/decoder
&gt; 3. Provide &quot;pretty&quot; encode/decode interface in CoordinatedSurface
&gt; 4. Find a way to remove duplicated implementations with CoreIPC

Due to the way implemented CoordinatedGraphicsOperationBase, we cannot use plain WTF::encoder/decoder. (It doesn&apos;t provide templates)

I&apos;ll modify CoordinatedGraphicsOperation[En/De]coder to use WTF::encoder to remove duplication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837381</commentid>
    <comment_count>36</comment_count>
      <attachid>189296</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-02-20 05:37:23 -0800</bug_when>
    <thetext>Created attachment 189296
WIP. discussion for APIs for CoordinatedGraphicsOperation

I purpose several changes in this patch.

1.CoordinatedGraphicsOperation should be encoded right after the operation
is created. Because SharedableSurface::Handle is non copyable.

2. CoordinatedGraphicsScene::TileUpdate could be removed, SurfaceUpdateInfo
can be used instead of it. 

3. By implement overrided execute method in CoordinatedGraphicsOperation[0-5],
we can remove annoying codes in CoordinatedGraphicsOperation.cpp.

To support this, CoordinatedGraphicsOperation::[Operation] should be
matched with CoordinatedGraphicsScene::[method]. We need to modify types
of CoordinatedGraphicsOperation::UpdateImageBacking, CreateCanvas,
CreateUpdateAtlas, and CreateTile.


I need jobs to do before complete this bug.

1. CoordinatedSurface and GraphicsSurface should provide encode/decode
methods.

2. After discussion with noamr in IRC, we agreed about current code of
CoordinatedGraphicsArgumentCoders.cpp (CoordinatedGraphicsOperationCoders.cpp in this patch)
is a little bit messy,because it has 600 lines of code cares about FilterOperations,
TransformOperations, and TimingFunction.

To remove bunch of codes in CoordinatedGraphicsArgumentCoders, which is
needed to [en|de]code GraphicsLayerAnimation. We need to add [en|de]code
method to these classes.

This mess will be clean up in seperated bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837512</commentid>
    <comment_count>37</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2013-02-20 09:22:06 -0800</bug_when>
    <thetext>
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:48
&gt; &gt; +class CoordinatedGraphicsLayerClient : public CoordinatedGraphicsOperation::Queue {
&gt; 
&gt; I wouldn&apos;t use inheritance here.
&gt; Instead, CoordinatedGraphicsLayerClient should have a function that returns a queue.

I have a selfish request about this. Could we probably keep the interface of GraphicsLayerClient as is and make the queue an implementation deal, i.e. CoordintedLayerTreeHost would push the items for it&apos;s own? To achieve the goal of bug 109579 I need to be able to merge operations from more than one flush, so I need to preprocess them before sending (i.e. if there is two update for the same tile, I should only keep the second). I could possibly merge them just before sending the message but it would be more straighforward to do such filtering incrementally when an operation is enqueued. Actually we already have some cross dependencies across operations, that are handled in willEnqueue in the patch.

Another observation: I think we should keep RequestAnimationFrame to be a separate message because it should force a repaint in the UI immediately even if nothing triggers a flush in the web process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837573</commentid>
    <comment_count>38</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-20 10:48:26 -0800</bug_when>
    <thetext>
&gt; 2. After discussion with noamr in IRC, we agreed about current code of
&gt; CoordinatedGraphicsArgumentCoders.cpp (CoordinatedGraphicsOperationCoders.cpp in this patch)
&gt; is a little bit messy,because it has 600 lines of code cares about FilterOperations,
&gt; TransformOperations, and TimingFunction.
&gt; 
&gt; To remove bunch of codes in CoordinatedGraphicsArgumentCoders, which is
&gt; needed to [en|de]code GraphicsLayerAnimation. We need to add [en|de]code
&gt; method to these classes.
&gt; 
&gt; This mess will be clean up in seperated bug.
I talked to andersca on IRC about this, and he asked that we wait before moving stuff to WTF::encoder, as he would like to make changes to the encoding/decoding infrastructure first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843034</commentid>
    <comment_count>39</comment_count>
      <attachid>190515</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-02-27 07:18:03 -0800</bug_when>
    <thetext>Created attachment 190515
WIP. discussion for APIs for CoordinatedGraphicsState

As we discussed in IRC, I made new patch for this issue.

The main focus of this patch is unifying coordinated graphic&apos;s messages into CoordinatedGraphicsState.

Each CoordinatedGraphicsLayer has a CoordiantedGraphicsLayerState, and whenever it needs sync, CoordinatedGraphicsLayer
commits to CoordinatedLayerTreeHost, which will store committed states from layers.

And CoordinatedLayerTreeHost sends stored states from layers, and state changes for global state using single command.
(current patch uses DidRenderFrame but it will be better to use CommitCooridnatedGraphicsState)
We can add preprocessing steps for IPC in LayerTreeCoordiantedHost.
The requirement from https://bugs.webkit.org/show_bug.cgi?id=109579 can be achieved using this.(#37)
(But I am not sure it is correct design decision)

To minimize IPC overhead, the size of encoded CoordinatedGraphicsLayerState is variable.
(CoordinatedGraphicsArgumentCoder checks dirty bit of CoordinatedGraphicsLayerState before encoding.) 

This patch is not working now, due to the bugs, but I think I need to share status.


I&apos;ll post working/clean version ASAP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843060</commentid>
    <comment_count>40</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-27 07:45:34 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; Created an attachment (id=190515) [details]
&gt; WIP. discussion for APIs for CoordinatedGraphicsState
&gt; 
&gt; As we discussed in IRC, I made new patch for this issue.
&gt; 
&gt; The main focus of this patch is unifying coordinated graphic&apos;s messages into CoordinatedGraphicsState.
&gt; 
&gt; Each CoordinatedGraphicsLayer has a CoordiantedGraphicsLayerState, and whenever it needs sync, CoordinatedGraphicsLayer
&gt; commits to CoordinatedLayerTreeHost, which will store committed states from layers.
&gt; 
&gt; And CoordinatedLayerTreeHost sends stored states from layers, and state changes for global state using single command.
&gt; (current patch uses DidRenderFrame but it will be better to use CommitCooridnatedGraphicsState)
&gt; We can add preprocessing steps for IPC in LayerTreeCoordiantedHost.
&gt; The requirement from https://bugs.webkit.org/show_bug.cgi?id=109579 can be achieved using this.(#37)
&gt; (But I am not sure it is correct design decision)
&gt; 
&gt; To minimize IPC overhead, the size of encoded CoordinatedGraphicsLayerState is variable.
&gt; (CoordinatedGraphicsArgumentCoder checks dirty bit of CoordinatedGraphicsLayerState before encoding.) 
&gt; 
&gt; This patch is not working now, due to the bugs, but I think I need to share status.
&gt; 
&gt; 
&gt; I&apos;ll post working/clean version ASAP.

Looks really good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843763</commentid>
    <comment_count>41</comment_count>
      <attachid>190515</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-02-27 23:03:52 -0800</bug_when>
    <thetext>Comment on attachment 190515
WIP. discussion for APIs for CoordinatedGraphicsState

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

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:614
&gt; +    m_layerState.contentsOpaque = contentsOpaque();

It is not needed because we already did in setContentsOpaque.
Below code ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846319</commentid>
    <comment_count>42</comment_count>
      <attachid>191198</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-04 03:53:33 -0800</bug_when>
    <thetext>Created attachment 191198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846320</commentid>
    <comment_count>43</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-04 03:54:21 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; (From update of attachment 190515 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190515&amp;action=review
&gt; LGTM :)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:614
&gt; &gt; +    m_layerState.contentsOpaque = contentsOpaque();
&gt; 
&gt; It is not needed because we already did in setContentsOpaque.
&gt; Below code ditto.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846321</commentid>
    <comment_count>44</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-04 03:56:31 -0800</bug_when>
    <thetext>I post refined patch for review.

But I didn&apos;t remove UpdateAtlasClient and CoordinatedImageBacking::Coordinator
in this patch. I think that should be done in separated patch.

I&apos;ll make / post a bug &amp; patch for that ASAP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846345</commentid>
    <comment_count>45</comment_count>
      <attachid>191198</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-03-04 05:11:11 -0800</bug_when>
    <thetext>Comment on attachment 191198
Patch

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

I have some nitpicks, but otherwise I think this is ready for a WK2 owner to look at.

&gt; Source/WebCore/ChangeLog:29
&gt; +        No new tests, as it is a refactoring.

I would simply say that this is covered by existing tests.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:451
&gt; +    // TODO WHAT?

Probably something like m_layerState.imageBackingChanged = true.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:613
&gt; +    // State Properties

Unnecessary comment.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:79
&gt; +    void flushStateChanges(const CoordinatedGraphicsState&amp;);

Let&apos;s call this commitSceneState.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:105
&gt; +    // Real Operations for flushStateChanges

Comment not needed.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:142
&gt; +    Vector&lt;std::pair&lt;uint32_t /* tileID */, float /* scale */&gt; &gt; tilesToCreate;

I don&apos;t like the use of std::pair here. Let&apos;s have a proper struct with tileID and scale.

&gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:880
&gt; +    if (!decodeLayerStateIfNeeded(decoder, state.flags, state.flagsChanged))

I think the ifNeeded function is unnecessary. You can do
if (state.flagsChanged &amp;&amp; !decoder.decode(state.flags))
and it would be as readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846476</commentid>
    <comment_count>46</comment_count>
      <attachid>191198</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-03-04 07:34:36 -0800</bug_when>
    <thetext>Comment on attachment 191198
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        CoordinatedGraphicsScene (4 classes).
&gt; +        If we want to add a new message, we need to add similar functions into 4 classes.
&gt; +

Today, if we ... With this patch, that is not needed anymore

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:354
&gt; +        // Never make the root layer clip.

Never clip the root layer?

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:617
&gt; +    for (LayerUpdatePairVector::const_iterator iter = state.layersToUpdate.begin(); iter != end; ++iter)

not iter and not it which is more commonly used?

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:127
&gt; +    {
&gt; +    }
&gt; +    FloatPoint pos;

newline after }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847026</commentid>
    <comment_count>47</comment_count>
      <attachid>191353</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-04 16:50:15 -0800</bug_when>
    <thetext>Created attachment 191353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847028</commentid>
    <comment_count>48</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-04 16:51:03 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 191198 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191198&amp;action=review
&gt; 
&gt; I have some nitpicks, but otherwise I think this is ready for a WK2 owner to look at.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:29
&gt; &gt; +        No new tests, as it is a refactoring.
&gt; 
&gt; I would simply say that this is covered by existing tests.
&gt; 
That&apos;s good.

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:451
&gt; &gt; +    // TODO WHAT?
&gt; 
&gt; Probably something like m_layerState.imageBackingChanged = true.
&gt; 
I forgot to remove that line. :)
m_layerState.imageBackingChanged will be set in CoordinatedGraphicsLayer::syncImageBacking()

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:613
&gt; &gt; +    // State Properties
&gt; 
&gt; Unnecessary comment.
&gt;
Removed.
 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:79
&gt; &gt; +    void flushStateChanges(const CoordinatedGraphicsState&amp;);
&gt; 
&gt; Let&apos;s call this commitSceneState.
&gt; 
Good naming.

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:105
&gt; &gt; +    // Real Operations for flushStateChanges
&gt; 
&gt; Comment not needed.
&gt; 
Removed.

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:142
&gt; &gt; +    Vector&lt;std::pair&lt;uint32_t /* tileID */, float /* scale */&gt; &gt; tilesToCreate;
&gt; 
&gt; I don&apos;t like the use of std::pair here. Let&apos;s have a proper struct with tileID and scale.
&gt; 
I made struct TileCreationInfo. How about it?

&gt; &gt; Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:880
&gt; &gt; +    if (!decodeLayerStateIfNeeded(decoder, state.flags, state.flagsChanged))
&gt; 
&gt; I think the ifNeeded function is unnecessary. You can do
&gt; if (state.flagsChanged &amp;&amp; !decoder.decode(state.flags))
&gt; and it would be as readable.
&gt;
[de|en]codeLayerStateIfNeeded are removed, for the sake of consistency.



(In reply to comment #46)
&gt; (From update of attachment 191198 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191198&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        CoordinatedGraphicsScene (4 classes).
&gt; &gt; +        If we want to add a new message, we need to add similar functions into 4 classes.
&gt; &gt; +
&gt; 
&gt; Today, if we ... With this patch, that is not needed anymore
&gt; 
AFAIK, that sentence describes a existing problem , which this patch should solve.
I think it is needed :)

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:354
&gt; &gt; +        // Never make the root layer clip.
&gt; 
&gt; Never clip the root layer?
Changed.


&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:617
&gt; &gt; +    for (LayerUpdatePairVector::const_iterator iter = state.layersToUpdate.begin(); iter != end; ++iter)
&gt; 
&gt; not iter and not it which is more commonly used?
&gt; 
I loosed my consistency. I prefer to use &quot;it&quot; for iterator. changed.

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:127
&gt; &gt; +    {
&gt; &gt; +    }
&gt; &gt; +    FloatPoint pos;
&gt; 
&gt; newline after }
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847263</commentid>
    <comment_count>49</comment_count>
      <attachid>191399</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-04 21:58:16 -0800</bug_when>
    <thetext>Created attachment 191399
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847304</commentid>
    <comment_count>50</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-04 23:01:03 -0800</bug_when>
    <thetext>UpdateImageBacking is not handled in posted patch. I will update patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847309</commentid>
    <comment_count>51</comment_count>
      <attachid>191399</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-03-04 23:07:11 -0800</bug_when>
    <thetext>Comment on attachment 191399
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:490
&gt; +    Vector&lt;uint32_t&gt;::const_iterator end = state.tilesToRemove.end();
&gt; +    for (Vector&lt;uint32_t&gt;::const_iterator it = state.tilesToRemove.begin(); it != end; ++it)

We usually don&apos;t use Vector::iterator, instead just iterate using size() and an integer.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:502
&gt; +    createTilesIfNeeded(layer, state);
&gt; +    removeTilesIfNeeded(layer, state);
&gt; +
&gt; +    if (state.tilesToUpdate.isEmpty())
&gt; +        return;

I would have createTilesIfNeeded, removeTilesIfNeeded and updateTilesIfNeeded called from setLayerState separately.

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:508
&gt; +    Vector&lt;TileUpdateInfo&gt;::const_iterator end = state.tilesToUpdate.end();
&gt; +    for (Vector&lt;TileUpdateInfo&gt;::const_iterator it = state.tilesToUpdate.begin(); it != end; ++it) {

Ditto for Vector::iterator

&gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:617
&gt; +    typedef Vector&lt;std::pair&lt;CoordinatedLayerID, CoordinatedGraphicsLayerState&gt; &gt; LayerUpdatePairVector;
&gt; +    LayerUpdatePairVector::const_iterator end = state.layersToUpdate.end();
&gt; +    for (LayerUpdatePairVector::const_iterator it = state.layersToUpdate.begin(); it != end; ++it)

Ditto for Vector :)

&gt; Source/WebKit2/Scripts/webkit2/messages.py:401
&gt; +        &apos;WebCore::CoordinatedGraphicsLayerState&apos;: [&apos;&lt;WebCore/CoordinatedGraphicsState.h&gt;&apos;],

This is not needed.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:381
&gt; +void CoordinatedLayerTreeHost::preprocessStateChange(CoordinatedGraphicsLayerState&amp; state)
&gt;  {
&gt; -    m_shouldSyncFrame = true;
&gt; -    m_webPage-&gt;send(Messages::CoordinatedLayerTreeHostProxy::SetCompositingLayerChildren(id, children));
&gt; +    preprocessAnimationStateIfNeeded(state);
&gt; +    preprocessFilterOperationsIfNeeded(state);
&gt;  }

Really all you do here is update the custom filters.
I would call this function prepareCustomFilterProxiesIfNeeded, and guard it with CSS_SHADERS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847408</commentid>
    <comment_count>52</comment_count>
      <attachid>191429</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-05 01:11:31 -0800</bug_when>
    <thetext>Created attachment 191429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847413</commentid>
    <comment_count>53</comment_count>
      <attachid>191430</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-05 01:20:17 -0800</bug_when>
    <thetext>Created attachment 191430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847419</commentid>
    <comment_count>54</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-05 01:26:53 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; (From update of attachment 191399 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191399&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:490
&gt; &gt; +    Vector&lt;uint32_t&gt;::const_iterator end = state.tilesToRemove.end();
&gt; &gt; +    for (Vector&lt;uint32_t&gt;::const_iterator it = state.tilesToRemove.begin(); it != end; ++it)
&gt; 
&gt; We usually don&apos;t use Vector::iterator, instead just iterate using size() and an integer.
&gt;
All of Vector::iterator has been removed in this patch.

&gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:502
&gt; &gt; +    createTilesIfNeeded(layer, state);
&gt; &gt; +    removeTilesIfNeeded(layer, state);
&gt; &gt; +
&gt; &gt; +    if (state.tilesToUpdate.isEmpty())
&gt; &gt; +        return;
&gt; 
&gt; I would have createTilesIfNeeded, removeTilesIfNeeded and updateTilesIfNeeded called from setLayerState separately.
&gt;
Good point. Fixed.


&gt; &gt; Source/WebKit2/Scripts/webkit2/messages.py:401
&gt; &gt; +        &apos;WebCore::CoordinatedGraphicsLayerState&apos;: [&apos;&lt;WebCore/CoordinatedGraphicsState.h&gt;&apos;],
&gt; 
&gt; This is not needed.
&gt;
Removed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:381
&gt; &gt; +void CoordinatedLayerTreeHost::preprocessStateChange(CoordinatedGraphicsLayerState&amp; state)
&gt; &gt;  {
&gt; &gt; -    m_shouldSyncFrame = true;
&gt; &gt; -    m_webPage-&gt;send(Messages::CoordinatedLayerTreeHostProxy::SetCompositingLayerChildren(id, children));
&gt; &gt; +    preprocessAnimationStateIfNeeded(state);
&gt; &gt; +    preprocessFilterOperationsIfNeeded(state);
&gt; &gt;  }
&gt; 
&gt; Really all you do here is update the custom filters.
&gt; I would call this function prepareCustomFilterProxiesIfNeeded, and guard it with CSS_SHADERS

I made prepareCustomFilterProxiesIfNeeded, and removed preprocessAnimationsStateIfNeeded and preprocessFilterOperationsIfNeeded.

By the way, current code of CoordinatedLayerTreeHost::setLayerAnimations is weird.

717     GraphicsLayerAnimations activeAnimations = animations.getActiveAnimations();
718 #if ENABLE(CSS_SHADERS)
719     for (size_t i = 0; i &lt; activeAnimations.animations().size(); ++i) {
720         const KeyframeValueList&amp; keyframes = animations.animations().at(i).keyframes();
721         if (keyframes.property() != AnimatedPropertyWebkitFilter)
...
728 #endif
729     m_webPage-&gt;send(Messages::CoordinatedLayerTreeHostProxy::SetLayerAnimations(layerID, activeAnimations));
730 }

It uses size of activeAnimations.animations to iterate animations, but it iterates animations.animations() not activeAnimations.animations.

It seems we need only activeAnimations, so I modified to set activeAnimations on CoordinatedGraphicsLayerState.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847437</commentid>
    <comment_count>55</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-03-05 01:39:04 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; (In reply to comment #51)
&gt; &gt; (From update of attachment 191399 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191399&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:490
&gt; &gt; &gt; +    Vector&lt;uint32_t&gt;::const_iterator end = state.tilesToRemove.end();
&gt; &gt; &gt; +    for (Vector&lt;uint32_t&gt;::const_iterator it = state.tilesToRemove.begin(); it != end; ++it)
&gt; &gt; 
&gt; &gt; We usually don&apos;t use Vector::iterator, instead just iterate using size() and an integer.
&gt; &gt;
&gt; All of Vector::iterator has been removed in this patch.
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:502
&gt; &gt; &gt; +    createTilesIfNeeded(layer, state);
&gt; &gt; &gt; +    removeTilesIfNeeded(layer, state);
&gt; &gt; &gt; +
&gt; &gt; &gt; +    if (state.tilesToUpdate.isEmpty())
&gt; &gt; &gt; +        return;
&gt; &gt; 
&gt; &gt; I would have createTilesIfNeeded, removeTilesIfNeeded and updateTilesIfNeeded called from setLayerState separately.
&gt; &gt;
&gt; Good point. Fixed.
&gt; 
&gt; 
&gt; &gt; &gt; Source/WebKit2/Scripts/webkit2/messages.py:401
&gt; &gt; &gt; +        &apos;WebCore::CoordinatedGraphicsLayerState&apos;: [&apos;&lt;WebCore/CoordinatedGraphicsState.h&gt;&apos;],
&gt; &gt; 
&gt; &gt; This is not needed.
&gt; &gt;
&gt; Removed.
&gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp:381
&gt; &gt; &gt; +void CoordinatedLayerTreeHost::preprocessStateChange(CoordinatedGraphicsLayerState&amp; state)
&gt; &gt; &gt;  {
&gt; &gt; &gt; -    m_shouldSyncFrame = true;
&gt; &gt; &gt; -    m_webPage-&gt;send(Messages::CoordinatedLayerTreeHostProxy::SetCompositingLayerChildren(id, children));
&gt; &gt; &gt; +    preprocessAnimationStateIfNeeded(state);
&gt; &gt; &gt; +    preprocessFilterOperationsIfNeeded(state);
&gt; &gt; &gt;  }
&gt; &gt; 
&gt; &gt; Really all you do here is update the custom filters.
&gt; &gt; I would call this function prepareCustomFilterProxiesIfNeeded, and guard it with CSS_SHADERS
&gt; 
&gt; I made prepareCustomFilterProxiesIfNeeded, and removed preprocessAnimationsStateIfNeeded and preprocessFilterOperationsIfNeeded.
&gt; 
&gt; By the way, current code of CoordinatedLayerTreeHost::setLayerAnimations is weird.
&gt; 
&gt; 717     GraphicsLayerAnimations activeAnimations = animations.getActiveAnimations();
&gt; 718 #if ENABLE(CSS_SHADERS)
&gt; 719     for (size_t i = 0; i &lt; activeAnimations.animations().size(); ++i) {
&gt; 720         const KeyframeValueList&amp; keyframes = animations.animations().at(i).keyframes();
&gt; 721         if (keyframes.property() != AnimatedPropertyWebkitFilter)
&gt; ...
&gt; 728 #endif
&gt; 729     m_webPage-&gt;send(Messages::CoordinatedLayerTreeHostProxy::SetLayerAnimations(layerID, activeAnimations));
&gt; 730 }
&gt; 
&gt; It uses size of activeAnimations.animations to iterate animations, but it iterates animations.animations() not activeAnimations.animations.
&gt; 
&gt; It seems we need only activeAnimations, so I modified to set activeAnimations on CoordinatedGraphicsLayerState.

OK, nice.
We need to have a WK2 owner look at the WK2 changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847471</commentid>
    <comment_count>56</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2013-03-05 02:10:51 -0800</bug_when>
    <thetext>(In reply to comment #55)
&gt; OK, nice.
&gt; We need to have a WK2 owner look at the WK2 changes.

Thanks for review.
I asked to andersca to look at this bug, but we will have a bunch of time lag. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847825</commentid>
    <comment_count>57</comment_count>
      <attachid>191430</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-03-05 11:04:25 -0800</bug_when>
    <thetext>Comment on attachment 191430
Patch

WK2 parts look good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847850</commentid>
    <comment_count>58</comment_count>
      <attachid>191430</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-05 11:18:59 -0800</bug_when>
    <thetext>Comment on attachment 191430
Patch

Clearing flags on attachment: 191430

Committed r144787: &lt;http://trac.webkit.org/changeset/144787&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847851</commentid>
    <comment_count>59</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-05 11:19:09 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848501</commentid>
    <comment_count>60</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-03-05 23:21:32 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; (From update of attachment 191430 [details])
&gt; Clearing flags on attachment: 191430
&gt; 
&gt; Committed r144787: &lt;http://trac.webkit.org/changeset/144787&gt;

Buildfix landed for !USE(GRAPHICS_SURFACE) platforms - https://trac.webkit.org/changeset/144885

But unfortunately Qt-Mac build is still broken:
In file included from /Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:29:
In file included from /Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:32:
In file included from /Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentCoders.h:29:
In file included from /Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.h:29:
/Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentCoder.h:39:10: error: member reference base type &apos;const unsigned long&apos; is not a structure or union
        t.encode(encoder);
        ~^~~~~~~
/Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.h:57:27: note: in instantiation of member function &apos;CoreIPC::ArgumentCoder&lt;unsigned long&gt;::encode&apos; requested here
        ArgumentCoder&lt;T&gt;::encode(*this, t);
                          ^
/Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentEncoder.h:62:9: note: in instantiation of function template specialization &apos;CoreIPC::ArgumentEncoder::encode&lt;unsigned long&gt;&apos; requested here
        encode(t);
        ^
/Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:1018:13: note: in instantiation of function template specialization &apos;CoreIPC::ArgumentEncoder::operator&lt;&lt;&lt;unsigned long&gt;&apos; requested here
    encoder &lt;&lt; state.imagesToUpdate.size();
            ^
In file included from /Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:29:
In file included from /Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h:32:
In file included from /Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentCoders.h:29:
In file included from /Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.h:29:
/Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentCoder.h:44:16: error: type &apos;unsigned long&apos; cannot be used prior to &apos;::&apos; because it has no members
        return T::decode(decoder, t);
               ^
/Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Platform/CoreIPC/ArgumentDecoder.h:90:34: note: in instantiation of member function &apos;CoreIPC::ArgumentCoder&lt;unsigned long&gt;::decode&apos; requested here
        return ArgumentCoder&lt;T&gt;::decode(*this, t);
                                 ^
/Users/admin/work/WebKit-BuildSlave/qt-mountainlion-release/build/Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp:1055:18: note: in instantiation of function template specialization &apos;CoreIPC::ArgumentDecoder::decode&lt;unsigned long&gt;&apos; requested here
    if (!decoder.decode(sizeOfImagesToUpdate))
                 ^
2 errors generated.


cc-ing Qt maintainers, you can be interested in fixing this build failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850999</commentid>
    <comment_count>61</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2013-03-08 02:06:59 -0800</bug_when>
    <thetext>This bug makes regression: A fixed element lags when scrolling and wheeling.
I filed and fixed in Bug 111829.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186001</attachid>
            <date>2013-02-01 03:51:32 -0800</date>
            <delta_ts>2013-02-01 05:01:15 -0800</delta_ts>
            <desc>WIP: I&apos;ll change to use Data for simple encoding</desc>
            <filename>bug-108294-20130201204807.patch</filename>
            <type>text/plain</type>
            <size>125491</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGVkNmY1OGM0MjQ0NzFj
OGRlMDEzOTk3YTMzNTg3YzBjMWYzY2RhYy4uZmUyYjQ1NmZmNTY0MjUzMmEwZjY1Y2Q4ZmYxNzky
MTMwZjNlYWI3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MSBAQAorMjAxMy0wMi0wMSAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIFRleHR1cmVNYXBw
ZXJTY2VuZSBydW4gdmlhIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgyOTQKKworICAgICAgICBO
byBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICBXSVAKKworICAgICAgICAqIFRhcmdldC5w
cmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVDYW52YXNJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVk
QmFja2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb24pOgorICAgICAgICAoT3BlcmF0aW9uKToKKyAgICAgICAgKENyZWF0ZUxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXll
cnM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVMYXllcnM6OkNyZWF0ZUxheWVycyk6CisgICAgICAgIChEZWxldGVMYXllcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRl
TGF5ZXJzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6RGVsZXRlTGF5ZXJzOjpEZWxldGVMYXllcnMpOgorICAgICAgICAoU2V0Um9vdExh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dFJvb3RMYXllcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlNldFJvb3RMYXllcjo6U2V0Um9vdExheWVyKToKKyAgICAgICAgKFNldExh
eWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6U2V0TGF5ZXJTdGF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGU6OlNldExheWVyU3RhdGUpOgorICAgICAg
ICAoU2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjo6U2V0TGF5
ZXJDaGlsZHJlbik6CisgICAgICAgIChDcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlOjpDcmVh
dGVUaWxlKToKKyAgICAgICAgKFVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OlVwZGF0ZVRp
bGUpOgorICAgICAgICAoUmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZTo6UmVtb3ZlVGlsZSk6
CisgICAgICAgIChDcmVhdGVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0
bGFzOjpDcmVhdGVVcGRhdGVBdGxhcyk6CisgICAgICAgIChSZW1vdmVVcGRhdGVBdGxhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRh
dGVBdGxhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzOjpSZW1vdmVVcGRhdGVBdGxhcyk6CisgICAgICAg
IChDcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nOjpD
cmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoVXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFj
a2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlVwZGF0ZUltYWdlQmFja2luZzo6VXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAg
KENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1h
Z2VCYWNraW5nQ29udGVudHM6OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAo
UmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6UmVt
b3ZlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlv
bnM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpTZXRMYXllckFuaW1hdGlvbnM6OlNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAgIChS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZy
YW1lOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoQ3JlYXRlQ2FudmFzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZh
czo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUNhbnZhczo6Q3JlYXRlQ2FudmFzKToKKyAgICAgICAgKFN5bmNDYW52YXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZh
czo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlN5bmNDYW52YXM6OlN5bmNDYW52YXMpOgorICAgICAgICAoRGVzdHJveUNhbnZhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2Fu
dmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6RGVzdHJveUNhbnZhczo6RGVzdHJveUNhbnZhcyk6CisgICAgICAgIChTZXRMYXllckZp
bHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0TGF5ZXJGaWx0ZXJzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzOjpTZXRMYXllckZpbHRlcnMpOgorICAg
ICAgICAoQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAg
ICAgIChSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1v
dmVDdXN0b21GaWx0ZXJQcm9ncmFtOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKToKKyAgICAg
ICAgKFNldExheWVyUmVwYWludENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50
Q291bnQ6OlNldExheWVyUmVwYWludENvdW50KToKKyAgICAgICAgKFNldEJhY2tncm91bmRDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRC
YWNrZ3JvdW5kQ29sb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6OlNldEJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRp
ZENoYW5nZVNjcm9sbFBvc2l0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAg
IChRdWV1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczo6YXBwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczo6aXNFbXB0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczo6c2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczo6YXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZXhlY3V0ZUNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXREcmF3
c0JhY2tncm91bmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVtb3ZlSG9zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNvbnRlbnRzVGltZXJGaXJlZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nLmg6CisgICAgICAgIChDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZv
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0
ZUF0bGFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6
CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGVBdGxhczo6flVwZGF0ZUF0bGFzKToKKyAgICAgICAg
KFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxh
cy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChVcGRhdGVBdGxhcyk6CisKIDIwMTMt
MDItMDEgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHVEtdW0dTdHJlYW1lcl0gRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlckd0ayBpbXBsZW1lbnRh
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IGM1MzI2Nzc4YTgzOTQ0NDkzMmU3MGI4ODBjYjg5Y2ZmYjA5ODQy
ZTkuLmE3MGExMTYwMmFmZTc4YWZmODAxYWVlMjdhM2NlOGIwNzA2OWYyMjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0MSBAQAorMjAxMy0wMi0wMSAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBj
b21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGluYXRlZCBHcmFwaGljczogQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyIG1ha2VzIFRleHR1cmVNYXBwZXJTY2VuZSBydW4gdmlhIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDgyOTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXSVAKKworICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBD
Ojo6OmVuY29kZSk6CisgICAgICAgIChDb3JlSVBDKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVj
b2RlKToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNv
bW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMu
aW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRp
bmdMYXllcnMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRl
bGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0Ojppbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveGllcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjplbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5o
OgorICAgICAgICAoQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKwogMjAxMy0wMi0wMSAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgW0VGTF1b
V0syXSBNaW5pQnJvd3NlciBzZWdmYXVsdHMgb24gbG9hZGluZyBnb29nbGUuY29tCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQppbmRleCBmYTg5M2E4MGJkMDBmMjRjZWFhOThjZjE3MThiOThiNWYyMzk5YjFmLi41ZTQyN2Mx
YzkwNGRhYTFlM2VkOTU3ZWJkYzViMWFhNzk1NzM4MGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTIyNDQs
NiArMjI0NCw4IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggXAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmggXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2lu
Zy5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRMYXllckluZm8uaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDM3MzZmMjYwNGMwYzEwNDM5OTk1N2I5OGEyNTI1
ZWU3ZGJjZGQ5YmIuLmVlNjk3NDBjZDhiZjExNTYzMjIxOTc0ODBmYjY2ZjNiNzFjMjU2NzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuY3BwCkBAIC01MDAsNyArNTAwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnN5bmNDaGlsZHJlbigpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNp
emUoKTsgKytpKQogICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9Db29yZGluYXRlZExheWVySUQo
Y2hpbGRyZW4oKVtpXSkpOwogCi0gICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyQ2hpbGRyZW4o
bV9pZCwgY2hpbGRJRHMpOworICAgIG1fY29vcmRpbmF0b3ItPmVucXVldWVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hp
bGRyZW46OmNyZWF0ZShtX2lkLCBjaGlsZElEcykpOwogfQogCiAjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQpAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
eW5jRmlsdGVycygpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQogICAgICAgICByZXR1
cm47CiAgICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOwotICAgIG1fY29vcmRpbmF0b3It
PnN5bmNMYXllckZpbHRlcnMobV9pZCwgZmlsdGVycygpKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5l
bnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRMYXllckZpbHRlcnM6OmNyZWF0ZShtX2lkLCBmaWx0ZXJzKCkpKTsKIH0KICNl
bmRpZgogCkBAIC01NzAsNyArNTcwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnN5bmNMYXllclN0YXRlKCkKICAgICAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiAgICAg
bV9sYXllckluZm8uc2hvd1JlcGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENvdW50ZXIo
KTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZv
KTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlOjpjcmVhdGUobV9p
ZCwgbV9sYXllckluZm8pKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgpCkBAIC01ODcsNyAr
NTg3LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNBbmltYXRpb25zKCkK
IAogICAgIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMgPSBmYWxzZTsKIAotICAgIG1fY29vcmRpbmF0
b3ItPnNldExheWVyQW5pbWF0aW9ucyhtX2lkLCBtX2FuaW1hdGlvbnMpOworICAgIG1fY29vcmRp
bmF0b3ItPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczo6Y3JlYXRlKG1faWQsIG1fYW5pbWF0
aW9ucykpOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBAIC02MDQsNyArNjA0LDkg
QEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQogICAgIGlmICgh
bV9pc1ZhbGlkQ2FudmFzKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5z
eW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgQVNTRVJUKG1fY2Fu
dmFzUGxhdGZvcm1MYXllcik7CisgICAgdWludDMyX3QgZnJvbnRCdWZmZXIgPSBtX2NhbnZhc1Bs
YXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOworICAgIG1fY29vcmRpbmF0b3It
PmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlN5bmNDYW52YXM6OmNyZWF0ZShtX2lkLCBmcm9udEJ1ZmZlcikpOwogfQogCiB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNhbnZhc0lmTmVlZGVkKCkKQEAg
LTYxMyw3ICs2MTUsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNh
bnZhc0lmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1faXNWYWxpZENhbnZh
cykgewotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5kZXN0cm95Q2FudmFzKG1faWQpOworICAgICAg
ICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpjcmVhdGUobV9pZCkpOwog
ICAgICAgICBtX2lzVmFsaWRDYW52YXMgPSBmYWxzZTsKICAgICB9CiAKQEAgLTYyNyw3ICs2Mjks
OSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQo
KQogCiAgICAgQVNTRVJUKG1fY2FudmFzUGxhdGZvcm1MYXllcik7CiAgICAgaWYgKCFtX2lzVmFs
aWRDYW52YXMpIHsKLSAgICAgICAgbV9jb29yZGluYXRvci0+Y3JlYXRlQ2FudmFzKG1faWQsIG1f
Y2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgICAgIEludFNpemUgY2FudmFzU2l6ZSA9IG1fY2Fu
dmFzUGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKTsKKyAgICAgICAgR3JhcGhpY3NT
dXJmYWNlVG9rZW4gdG9rZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFj
ZVRva2VuKCk7CisgICAgICAgIG1fY29vcmRpbmF0b3ItPmVucXVldWVDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6
Y3JlYXRlKG1faWQsIGNhbnZhc1NpemUsIHRva2VuKSk7CiAgICAgICAgIG1faXNWYWxpZENhbnZh
cyA9IHRydWU7CiAgICAgfQogCkBAIC03MzYsNyArNzQwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFp
bnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCiB7CiAgICAgaWYgKGlz
U2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgJiYgIXVwZGF0ZWRSZWN0cy5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fY29vcmRpbmF0b3ItPnNldExheWVyUmVwYWludENvdW50KGlkKCksIGluY3JlbWVudFJl
cGFpbnRDb3VudCgpKTsKKyAgICAgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJS
ZXBhaW50Q291bnQ6OmNyZWF0ZShpZCgpLCBpbmNyZW1lbnRSZXBhaW50Q291bnQoKSkpOwogfQog
CiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVIYXNQZW5k
aW5nVGlsZUNyZWF0aW9uKCkKQEAgLTc5NSwyMSArNzk5LDIxIEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluCiB7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwogICAgIEFTU0VSVChtX2Nvb3Jk
aW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAgIG1fY29vcmRpbmF0b3ItPmNy
ZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVjdCk7CisgICAgbV9jb29y
ZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZTo6Y3JlYXRlKGlkKCksIHRpbGVJRCwgdGlsZVJl
Y3QsIHVwZGF0ZUluZm8pKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVw
ZGF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRl
SW5mbywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCiB7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0
b3IpOwogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkp
OwotICAgIG1fY29vcmRpbmF0b3ItPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZv
LCB0aWxlUmVjdCk7CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6Y3Jl
YXRlKGlkKCksIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAogdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKQogewogICAg
IEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVz
aGluZ0xheWVyQ2hhbmdlcygpIHx8IG1faXNQdXJnaW5nKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5y
ZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlVGlsZTo6Y3JlYXRlKGlkKCksIHRpbGVJRCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IGE1NTFkMzUxMWFkYTY0
NGViZjczMmJlZjYyZTg2YWQ5ZDg3ZjFhMjAuLjM3ODliZGY0Njk0NjNiMTRkZjgyYjkxOTY0MmQ1
NWViNzAwYWMxMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyX2gKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKIAorI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKICNpbmNsdWRlICJDb29yZGlu
YXRlZEltYWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCiAj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCkBAIC00MywzNCArNDQsMTIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOwotY2xhc3MgR3Jh
cGhpY3NMYXllckFuaW1hdGlvbnM7CiAKLWNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudCB7CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgOiBwdWJsaWMgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUgewogcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgPSAwOwotCi0gICAgLy8gQ29vcmRp
bmF0ZWRUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRM
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3Qg
SW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJ
bnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5
ZXJJRCwgdWludDMyX3QgdGlsZUlEKSA9IDA7Ci0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2aXNp
YmxlQ29udGVudHNSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
Y29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mKSA9IDA7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgdm9p
ZCBzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYpID0gMDsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxheWVyKikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgUGxh
dGZvcm1MYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGlu
YXRlZExheWVySUQpID0gMDsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVw
YWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NM
YXllckFuaW1hdGlvbnMmKSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRM
YXllcnMoKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVn
aW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdz
LCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lZWI0MGQ1ZDZkZjEzYWQ0MGNjOGU1OWU5YjcxYzA5NWFjZmQwYWFhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaApAQCAtMCwwICsxLDUxOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25faAorI2Rl
ZmluZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorI2luY2x1
ZGUgIkN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmgiCisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgorI2VuZGlmCisjaW5jbHVkZSAi
R3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZVRva2Vu
LmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbiB7CitwdWJsaWM6CisgICAg
ZW51bSBPcGVyYXRpb25UeXBlIHsKKyAgICAgICAgQ3JlYXRlTGF5ZXJzVHlwZSwKKyAgICAgICAg
RGVsZXRlTGF5ZXJzVHlwZSwKKyAgICAgICAgU2V0Um9vdExheWVyVHlwZSwKKyAgICAgICAgU2V0
TGF5ZXJTdGF0ZVR5cGUsCisgICAgICAgIFNldExheWVyQ2hpbGRyZW5UeXBlLAorICAgICAgICBD
cmVhdGVUaWxlVHlwZSwKKyAgICAgICAgVXBkYXRlVGlsZVR5cGUsCisgICAgICAgIFJlbW92ZVRp
bGVUeXBlLAorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhc1R5cGUsCisgICAgICAgIFJlbW92ZVVw
ZGF0ZUF0bGFzVHlwZSwKKyAgICAgICAgQ3JlYXRlSW1hZ2VCYWNraW5nVHlwZSwKKyAgICAgICAg
VXBkYXRlSW1hZ2VCYWNraW5nVHlwZSwKKyAgICAgICAgQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50
c1R5cGUsCisgICAgICAgIFJlbW92ZUltYWdlQmFja2luZ1R5cGUsCisgICAgICAgIFNldExheWVy
QW5pbWF0aW9uc1R5cGUsCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAg
ICAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUeXBlLAorI2VuZGlmCisjaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCisgICAgICAgIENyZWF0ZUNhbnZhc1R5cGUsCisgICAgICAgIFN5bmNDYW52YXNU
eXBlLAorICAgICAgICBEZXN0cm95Q2FudmFzVHlwZSwKKyNlbmRpZgorI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKKyAgICAgICAgU2V0TGF5ZXJGaWx0ZXJzVHlwZSwKKyNlbmRpZgorI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICAgICAgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUsCisg
ICAgICAgIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlLAorI2VuZGlmCisgICAgICAgIFNl
dExheWVyUmVwYWludENvdW50VHlwZSwKKyAgICAgICAgU2V0QmFja2dyb3VuZENvbG9yVHlwZSwK
KyAgICAgICAgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb25UeXBlLAorICAgICAgICBOb25lVHlwZQor
ICAgIH07CisKKyAgICBjbGFzcyBPcGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxPcGVyYXRp
b24+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgPSAwOworICAg
IH07CisKKyAgICBjbGFzcyBDcmVhdGVMYXllcnMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZUxheWVycz4gY3JlYXRlKGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBsYXllcklEcykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVMYXllcnMobGF5ZXJJRHMpKTsKKyAg
ICAgICAgfQorICAgICAgICBleHBsaWNpdCBDcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4mIGlkcykKKyAgICAgICAgOiBsYXllcklEcyhpZHMpCisgICAgICAgIHsg
fQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzVHlwZTsgfQorCisgICAgICAgIFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+IGxheWVySURzOworICAgIH07CisKKyAgICBjbGFzcyBE
ZWxldGVMYXllcnMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERlbGV0ZUxheWVycz4gY3JlYXRlKGNvbnN0IFZlY3RvcjxDb29yZGlu
YXRlZExheWVySUQ+JiBsYXllcklEcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBEZWxldGVMYXllcnMobGF5ZXJJRHMpKTsKKyAgICAgICAgfQorICAgICAgICBl
eHBsaWNpdCBEZWxldGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlk
cykKKyAgICAgICAgOiBsYXllcklEcyhpZHMpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1
YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRp
b25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6RGVsZXRlTGF5ZXJzVHlwZTsgfQorCisgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+IGxheWVySURzOworICAgIH07CisKKyAgICBjbGFzcyBTZXRSb290TGF5ZXIgOiBwdWJs
aWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNl
dFJvb3RMYXllcj4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldFJvb3RMYXllcihsYXllcklEKSk7
CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgU2V0Um9vdExheWVyKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCkKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICB7IH0KKworICAgICAgICB2
aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3Bl
cmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldFJvb3RMYXllclR5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRDsKKyAgICB9OworCisgICAgY2xhc3MgU2V0TGF5ZXJTdGF0ZSA6IHB1YmxpYyBP
cGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2V0TGF5
ZXJTdGF0ZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBDb29yZGlu
YXRlZExheWVySW5mbyYgbGF5ZXJJbmZvKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNldExheWVyU3RhdGUobGF5ZXJJRCwgbGF5ZXJJbmZvKSk7CisgICAgICAg
IH0KKyAgICAgICAgU2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENv
b3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQorICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAg
ICwgbGF5ZXJJbmZvKGluZm8pCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJTdGF0ZVR5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsK
KyAgICAgICAgQ29vcmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvOworICAgIH07CisKKworICAg
IGNsYXNzIFNldExheWVyQ2hpbGRyZW4gOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldExheWVyQ2hpbGRyZW4+IGNyZWF0ZShDb29y
ZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4m
IGNoaWxkcmVuKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNl
dExheWVyQ2hpbGRyZW4obGF5ZXJJRCwgY2hpbGRyZW4pKTsKKyAgICAgICAgfQorICAgICAgICBT
ZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuVmVjdG9yKQorICAgICAgICA6IGxheWVySUQoaWQpCisg
ICAgICAgICwgY2hpbGRyZW4oY2hpbGRyZW5WZWN0b3IpCisgICAgICAgIHsgfQorCisgICAgICAg
IHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRP
cGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlblR5cGU7IH0KKworICAgICAgICBDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gY2hp
bGRyZW47CisgICAgfTsKKworICAgIGNsYXNzIENyZWF0ZVRpbGUgOiBwdWJsaWMgT3BlcmF0aW9u
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZVRpbGU+IGNy
ZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJ
bnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlVGlsZShsYXll
cklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CisgICAgICAgIH0KKyAgICAgICAg
Q3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IHRpbGUsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiBpbmZvKQorICAgICAgICA6IGxh
eWVySUQoaWQpCisgICAgICAgICwgdGlsZUlEKHRpbGUpCisgICAgICAgICwgdGlsZVJlY3QocmVj
dCkKKyAgICAgICAgLCB1cGRhdGVJbmZvKGluZm8pCisgICAgICAgIHsgfQorCisgICAgICAgIHZp
cnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVy
YXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6Q3JlYXRlVGlsZVR5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRDsKKyAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0OworICAgICAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgIH07CisKKyAg
ICBjbGFzcyBVcGRhdGVUaWxlIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxVcGRhdGVUaWxlPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXll
cklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFVwZGF0ZVRpbGUobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVj
dCwgdXBkYXRlSW5mbykpOworICAgICAgICB9CisgICAgICAgIFVwZGF0ZVRpbGUoQ29vcmRpbmF0
ZWRMYXllcklEIGlkLCB1aW50MzJfdCB0aWxlLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBT
dXJmYWNlVXBkYXRlSW5mbyYgaW5mbykKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAs
IHRpbGVJRCh0aWxlKQorICAgICAgICAsIHRpbGVSZWN0KHJlY3QpCisgICAgICAgICwgdXBkYXRl
SW5mbyhpbmZvKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGVU
eXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgIHVp
bnQzMl90IHRpbGVJRDsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAgICAgICAgU3VyZmFj
ZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICB9OworCisgICAgY2xhc3MgUmVtb3ZlVGlsZSA6
IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UmVtb3ZlVGlsZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVt
b3ZlVGlsZShsYXllcklELCB0aWxlSUQpKTsKKyAgICAgICAgfQorICAgICAgICBSZW1vdmVUaWxl
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgdGlsZSkKKyAgICAgICAgOiBsYXllcklE
KGlkKQorICAgICAgICAsIHRpbGVJRCh0aWxlKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0
dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0
aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlbW92ZVRpbGVUeXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxh
eWVySUQ7CisgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICB9OworCisgICAgY2xhc3MgQ3Jl
YXRlVXBkYXRlQXRsYXMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZVVwZGF0ZUF0bGFzPiBjcmVhdGUodWludDMyX3QgYXRs
YXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlVXBkYXRlQXRsYXMoYXRsYXNJ
RCwgc3VyZmFjZSkpOworICAgICAgICB9CisgICAgICAgIENyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQz
Ml90IGlkLCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNl
KQorICAgICAgICA6IGF0bGFzSUQoaWQpCisgICAgICAgICwgc3VyZmFjZShjb29yZGluYXRlZFN1
cmZhY2UpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRs
YXNUeXBlOyB9CisKKyAgICAgICAgdWludDMyX3QgYXRsYXNJRDsKKyAgICAgICAgUmVmUHRyPENv
b3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZTsKKyAgICB9OworCisgICAgY2xhc3MgUmVtb3ZlVXBk
YXRlQXRsYXMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJlbW92ZVVwZGF0ZUF0bGFzPiBjcmVhdGUodWludDMyX3QgYXRsYXNJRCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVVcGRhdGVB
dGxhcyhhdGxhc0lEKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgUmVtb3ZlVXBkYXRl
QXRsYXModWludDMyX3QgaWQpCisgICAgICAgIDogYXRsYXNJRChpZCkKKyAgICAgICAgeyB9CisK
KyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhc1R5cGU7IH0KKworICAgICAgICB1
aW50MzJfdCBhdGxhc0lEOworICAgIH07CisKKyAgICBjbGFzcyBDcmVhdGVJbWFnZUJhY2tpbmcg
OiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENyZWF0ZUltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VCYWNraW5nSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlQmFja2luZ0lEKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZXhwbGljaXQgQ3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aWQpCisgICAgICAgIDogaW1hZ2VCYWNraW5nSUQoaWQpCisgICAgICAgIHsgfQorCisgICAgICAg
IHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRP
cGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nVHlwZTsgfQorCisgICAgICAgIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNraW5nSUQ7CisgICAgfTsKKworICAgIGNsYXNzIFVw
ZGF0ZUltYWdlQmFja2luZyA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VXBkYXRlSW1hZ2VCYWNraW5nPiBjcmVhdGUoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1
cmZhY2U+IHN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlQmFja2luZ0lELCBzdXJmYWNlKSk7CisgICAgICAg
IH0KKyAgICAgICAgVXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aWQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCisg
ICAgICAgIDogaW1hZ2VCYWNraW5nSUQoaWQpCisgICAgICAgICwgc3VyZmFjZShjb29yZGluYXRl
ZFN1cmZhY2UpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VC
YWNraW5nVHlwZTsgfQorCisgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VC
YWNraW5nSUQ7CisgICAgICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2U7Cisg
ICAgfTsKKworICAgIGNsYXNzIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMgOiBwdWJsaWMgT3Bl
cmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsZWFySW1h
Z2VCYWNraW5nQ29udGVudHM+IGNyZWF0ZShDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdl
QmFja2luZ0lEKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaW1hZ2VCYWNraW5nSUQpKTsKKyAgICAgICAgfQorICAg
ICAgICBleHBsaWNpdCBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaWQpCisgICAgICAgIDogaW1hZ2VCYWNraW5nSUQoaWQpCisgICAgICAgIHsgfQor
CisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGU7IH0KKwor
ICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lEOworICAgIH07
CisKKyAgICBjbGFzcyBSZW1vdmVJbWFnZUJhY2tpbmcgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZUltYWdlQmFja2luZz4g
Y3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNraW5nSUQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3ZlSW1hZ2VCYWNraW5nKGlt
YWdlQmFja2luZ0lEKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgUmVtb3ZlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQpCisgICAgICAgIDogaW1hZ2VCYWNr
aW5nSUQoaWQpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VC
YWNraW5nVHlwZTsgfQorCisgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VC
YWNraW5nSUQ7CisgICAgfTsKKworICAgIGNsYXNzIFNldExheWVyQW5pbWF0aW9ucyA6IHB1Ymxp
YyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2V0
TGF5ZXJBbmltYXRpb25zPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0
IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhbmlt
YXRpb25zKSk7CisgICAgICAgIH0KKyAgICAgICAgU2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGxheWVyQW5pbWF0
aW9ucykKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAsIGFuaW1hdGlvbnMobGF5ZXJB
bmltYXRpb25zKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5p
bWF0aW9uc1R5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAg
ICAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYW5pbWF0aW9uczsKKyAgICB9OworCisjaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIGNsYXNzIFJlcXVlc3RBbmltYXRp
b25GcmFtZSA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UmVxdWVzdEFuaW1hdGlvbkZyYW1lPiBjcmVhdGUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlcXVlc3RBbmltYXRpb25GcmFtZSgpKTsK
KyAgICAgICAgfQorICAgICAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQorICAgICAgICB7IH0K
KworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZVR5cGU7IH0KKyAgICB9
OworI2VuZGlmCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBjbGFzcyBDcmVhdGVD
YW52YXMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENyZWF0ZUNhbnZhcz4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklE
LCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYg
dG9rZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRl
Q2FudmFzKGxheWVySUQsIGNhbnZhc1NpemUsIHRva2VuKSk7CisgICAgICAgIH0KKyAgICAgICAg
Q3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Y29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHN1cmZhY2VUb2tlbikKKyAgICAgICAgOiBsYXll
cklEKGlkKQorICAgICAgICAsIGNhbnZhc1NpemUoc2l6ZSkKKyAgICAgICAgLCB0b2tlbihzdXJm
YWNlVG9rZW4pCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFz
VHlwZTsgfQorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICBJ
bnRTaXplIGNhbnZhc1NpemU7CisgICAgICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuOwor
ICAgIH07CisKKyAgICBjbGFzcyBTeW5jQ2FudmFzIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTeW5jQ2FudmFzPiBjcmVhdGUoQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN5bmNDYW52YXMobGF5ZXJJRCwgZnJv
bnRCdWZmZXIpKTsKKyAgICAgICAgfQorICAgICAgICBTeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXJIYW5kbGUpCisgICAgICAgIDogbGF5ZXJJRChp
ZCkKKyAgICAgICAgLCBmcm9udEJ1ZmZlcihmcm9udEJ1ZmZlckhhbmRsZSkKKyAgICAgICAgeyB9
CisKKyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzVHlwZTsgfQorCisgICAgICAgIENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICB1aW50MzJfdCBmcm9udEJ1ZmZlcjsKKyAg
ICB9OworCisgICAgY2xhc3MgRGVzdHJveUNhbnZhcyA6IHB1YmxpYyBPcGVyYXRpb24geworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVzdHJveUNhbnZhcz4gY3JlYXRl
KENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERlc3Ryb3lDYW52YXMobGF5ZXJJRCkpOworICAgICAgICB9CisgICAg
ICAgIGV4cGxpY2l0IERlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQorICAgICAg
ICA6IGxheWVySUQoaWQpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJv
eUNhbnZhc1R5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAg
ICB9OworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgY2xhc3MgU2V0TGF5
ZXJGaWx0ZXJzIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTZXRMYXllckZpbHRlcnM+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllckZpbHRlcnMobGF5ZXJJRCwgZmls
dGVycykpOworICAgICAgICB9CisgICAgICAgIFNldExheWVyRmlsdGVycyhDb29yZGluYXRlZExh
eWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlck9wZXJhdGlvbnMpCisgICAg
ICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgLCBmaWx0ZXJzKGZpbHRlck9wZXJhdGlvbnMpCisg
ICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzVHlwZTsgfQor
CisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICBGaWx0ZXJPcGVy
YXRpb25zIGZpbHRlcnM7CisgICAgfTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBj
bGFzcyBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVDdXN0b21GaWx0ZXJQcm9n
cmFtPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVy
UHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3Jh
bUlELCBwcm9ncmFtSW5mbykpOworICAgICAgICB9CisgICAgICAgIENyZWF0ZUN1c3RvbUZpbHRl
clByb2dyYW0oaW50IHByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIGlu
Zm8pCisgICAgICAgIDogY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKHByb2dyYW1JRCkKKyAgICAgICAg
LCBwcm9ncmFtSW5mbyhpbmZvKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNy
ZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlOyB9CisKKyAgICAgICAgaW50IGN1c3RvbUZpbHRl
clByb2dyYW1JRDsKKyAgICAgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gcHJvZ3JhbUluZm87
CisgICAgfTsKKworICAgIGNsYXNzIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0gOiBwdWJsaWMg
T3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW0+IGNyZWF0ZShpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZUN1c3RvbUZp
bHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSk7CisgICAgICAgIH0KKyAgICAgICAg
ZXhwbGljaXQgUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgcHJvZ3JhbUlEKQorICAgICAg
ICA6IGN1c3RvbUZpbHRlclByb2dyYW1JRChwcm9ncmFtSUQpCisgICAgICAgIHsgfQorCisgICAg
ICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBn
ZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGU7IH0KKworICAgICAg
ICBpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlEOworICAgIH07CisjZW5kaWYKKyNlbmRpZgorCisg
ICAgY2xhc3MgU2V0TGF5ZXJSZXBhaW50Q291bnQgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldExheWVyUmVwYWludENvdW50PiBj
cmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGludCByZXBhaW50Q291bnQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJSZXBhaW50Q291
bnQobGF5ZXJJRCwgcmVwYWludENvdW50KSk7CisgICAgICAgIH0KKyAgICAgICAgU2V0TGF5ZXJS
ZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgY291bnQpCisgICAgICAgIDog
bGF5ZXJJRChpZCkKKyAgICAgICAgLCByZXBhaW50Q291bnQoY291bnQpCisgICAgICAgIHsgfQor
CisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnRUeXBlOyB9CisKKyAgICAg
ICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgIGludCByZXBhaW50Q291bnQ7
CisgICAgfTsKKworICAgIGNsYXNzIFNldEJhY2tncm91bmRDb2xvciA6IHB1YmxpYyBPcGVyYXRp
b24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2V0QmFja2dyb3Vu
ZENvbG9yPiBjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNldEJhY2tncm91bmRDb2xvcihjb2xvcikpOworICAgICAg
ICB9CisgICAgICAgIGV4cGxpY2l0IFNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgYmFj
a2dyb3VuZENvbG9yKQorICAgICAgICA6IGNvbG9yKGJhY2tncm91bmRDb2xvcikKKyAgICAgICAg
eyB9CisKKyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3JUeXBlOyB9CisKKyAg
ICAgICAgQ29sb3IgY29sb3I7CisgICAgfTsKKworICAgIGNsYXNzIERpZENoYW5nZVNjcm9sbFBv
c2l0aW9uIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbj4gY3JlYXRlKGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uKSk7CisgICAgICAgIH0KKyAgICAgICAg
ZXhwbGljaXQgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xs
UG9zaXRpb24pCisgICAgICAgIDogcG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHsg
fQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb25UeXBlOyB9CisK
KyAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbjsKKyAgICB9OworCisgICAgY2xhc3MgUXVldWUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIGVucXVldWVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
T3BlcmF0aW9uPikgPSAwOworICAgIH07CisKK307IC8vIGNsYXNzIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb24KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmCisKKyNlbmRpZiAv
LyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wZGY3N2YwNGY2M2NiMDZkY2E4NjQwNWRkMWVkOTgzZjM3Mzc5Zjk2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zX2gKKyNk
ZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnNfaAorCisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb24+IG9wZXJhdGlvbikgeyBtX29wZXJhdGlvbnMuYXBw
ZW5kKG9wZXJhdGlvbik7IH0KKyAgICB2b2lkIGNsZWFyKCkgeyBtX29wZXJhdGlvbnMuY2xlYXIo
KTsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpb25zLmlz
RW1wdHkoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpb25z
LnNpemUoKTsgfQorICAgIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJh
dGlvbiogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA8IG1fb3BlcmF0aW9u
cy5zaXplKCkgPyBtX29wZXJhdGlvbnMuYXQoaW5kZXgpLmdldCgpIDogMDsgfQorCitwcml2YXRl
OgorICAgIFZlY3RvcjxSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0
aW9uPiA+IG1fb3BlcmF0aW9uczsKK307CisKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbnNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCmluZGV4IGQyMTVmYjM2MTNiOTA3YjZi
MWQ5ZjVlODkxMTlkYmIyNjQ0ZjQ1OTQuLmY4NTAwOTVhNjk5NTQ4Yzk3OTYzOTRmOWJlOTAzOGIx
YmZjMmVlYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lLmgiCiAKICNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdTdG9yZS5o
IgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgpAQCAtMjE1LDcgKzIxNiw3
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphZGp1c3RQb3NpdGlvbkZvckZpeGVk
TGF5ZXJzKCkKIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpZENoYW5nZVNjcm9s
bFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQogewotICAgIG1fcGVuZGluZ1Jl
bmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIG1fcmVuZGVyZWRD
b250ZW50c1Njcm9sbFBvc2l0aW9uID0gcG9zaXRpb247CiB9CiAKICNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKQEAgLTU1NCw5ICs1NTUsMTAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OmNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCkKICAgICBtX2JhY2tpbmdT
dG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKIHsKLSAgICBtX3JlbmRlcmVkQ29u
dGVudHNTY3JvbGxQb3NpdGlvbiA9IG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3Np
dGlvbjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnMuc2l6ZSgpOyBpKysp
CisgICAgICAgIGV4ZWN1dGVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKG9wZXJhdGlvbnMu
YXQoaSkpOwogCiAgICAgLy8gU2luY2UgdGhlIGZyYW1lIGhhcyBub3cgYmVlbiByZW5kZXJlZCwg
d2UgY2FuIHNhZmVseSB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgdW50aWwgdGhlIG5leHQgbGF5b3V0
LgogICAgIHNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpOwpAQCAtNTY5LDYgKzU3MSwxMTkgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKICAgICBk
aXNwYXRjaE9uTWFpblRocmVhZChiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbmRl
ck5leHRGcmFtZSwgdGhpcykpOwogfQogCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
ZXhlY3V0ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oY29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6T3BlcmF0aW9uKiBvcGVyYXRpb24pCit7CisgICAgc3dpdGNoIChvcGVy
YXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkgeworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzVHlwZToKKyAgICAgICAgY3JlYXRlTGF5ZXJzKHN0YXRp
Y19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVycyo+
KG9wZXJhdGlvbiktPmxheWVySURzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnNUeXBlOgorICAgICAgICBkZWxldGVM
YXllcnMoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVs
ZXRlTGF5ZXJzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHMpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllclR5cGU6CisgICAg
ICAgIHNldFJvb3RMYXllcklEKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldFJvb3RMYXllcio+KG9wZXJhdGlvbiktPmxheWVySUQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3Rh
dGVUeXBlOgorICAgICAgICBzZXRMYXllclN0YXRlKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGUqPihvcGVyYXRpb24pLT5sYXllcklE
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJTdGF0ZSo+KG9wZXJhdGlvbiktPmxheWVySW5mbyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGls
ZHJlblR5cGU6CisgICAgICAgIHNldExheWVyQ2hpbGRyZW4oc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbio+KG9wZXJhdGlvbikt
PmxheWVySUQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuKj4ob3BlcmF0aW9uKS0+Y2hpbGRyZW4pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNy
ZWF0ZVRpbGVUeXBlOiB7CisgICAgICAgIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZVRpbGUqIGNyZWF0ZVRpbGVPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlKj4ob3BlcmF0aW9uKTsKKyAg
ICAgICAgY3JlYXRlVGlsZShjcmVhdGVUaWxlT3BlcmF0aW9uLT5sYXllcklELCBjcmVhdGVUaWxl
T3BlcmF0aW9uLT50aWxlSUQsIGNyZWF0ZVRpbGVPcGVyYXRpb24tPnVwZGF0ZUluZm8uc2NhbGVG
YWN0b3IpOworICAgICAgICB1cGRhdGVUaWxlKGNyZWF0ZVRpbGVPcGVyYXRpb24tPmxheWVySUQs
IGNyZWF0ZVRpbGVPcGVyYXRpb24tPnRpbGVJRCwKKyAgICAgICAgICAgIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6VGlsZVVwZGF0ZShjcmVhdGVUaWxlT3BlcmF0aW9uLT51cGRhdGVJbmZvLnVw
ZGF0ZVJlY3QsIGNyZWF0ZVRpbGVPcGVyYXRpb24tPnRpbGVSZWN0LCBjcmVhdGVUaWxlT3BlcmF0
aW9uLT51cGRhdGVJbmZvLmF0bGFzSUQsIGNyZWF0ZVRpbGVPcGVyYXRpb24tPnVwZGF0ZUluZm8u
c3VyZmFjZU9mZnNldCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlVHlwZTogeworICAgICAgICBjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlKiB1cGRhdGVUaWxlT3BlcmF0
aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlVGlsZSo+KG9wZXJhdGlvbik7CisgICAgICAgIHVwZGF0ZVRpbGUodXBkYXRlVGlsZU9wZXJh
dGlvbi0+bGF5ZXJJRCwgdXBkYXRlVGlsZU9wZXJhdGlvbi0+dGlsZUlELAorICAgICAgICAgICAg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpUaWxlVXBkYXRlKHVwZGF0ZVRpbGVPcGVyYXRpb24t
PnVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdXBkYXRlVGlsZU9wZXJhdGlvbi0+dGlsZVJlY3QsIHVw
ZGF0ZVRpbGVPcGVyYXRpb24tPnVwZGF0ZUluZm8uYXRsYXNJRCwgdXBkYXRlVGlsZU9wZXJhdGlv
bi0+dXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGVUeXBlOgorICAg
ICAgICByZW1vdmVUaWxlKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlbW92ZVRpbGUqPihvcGVyYXRpb24pLT5sYXllcklELAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZSo+
KG9wZXJhdGlvbiktPnRpbGVJRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXNUeXBlOgorICAgICAgICBjcmVh
dGVVcGRhdGVBdGxhcyhzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVVcGRhdGVBdGxhcyo+KG9wZXJhdGlvbiktPmF0bGFzSUQsCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVV
cGRhdGVBdGxhcyo+KG9wZXJhdGlvbiktPnN1cmZhY2UpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzVHlwZToK
KyAgICAgICAgcmVtb3ZlVXBkYXRlQXRsYXMoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXMqPihvcGVyYXRpb24pLT5hdGxhc0lE
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpDcmVhdGVJbWFnZUJhY2tpbmdUeXBlOgorICAgICAgICBjcmVhdGVJbWFnZUJhY2tpbmcoc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VC
YWNraW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNraW5nSUQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZ1R5
cGU6CisgICAgICAgIHVwZGF0ZUltYWdlQmFja2luZyhzdGF0aWNfY2FzdDxjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5p
bWFnZUJhY2tpbmdJRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbiktPnN1cmZh
Y2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHNUeXBlOgorICAgICAgICBjbGVhckltYWdlQmFj
a2luZ0NvbnRlbnRzKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJ
RCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6UmVtb3ZlSW1hZ2VCYWNraW5nVHlwZToKKyAgICAgICAgcmVtb3ZlSW1hZ2VCYWNraW5nKHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdl
QmFja2luZyo+KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnNU
eXBlOgorICAgICAgICBzZXRMYXllckFuaW1hdGlvbnMoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zKj4ob3BlcmF0aW9uKS0+
bGF5ZXJJRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9ucyo+KG9wZXJhdGlvbiktPmFuaW1hdGlvbnMp
OworICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisg
ICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJh
bWVUeXBlOgorICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKKyAgICAgICAgYnJlYWs7
CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBjYXNlIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhc1R5cGU6IHsKKyAgICAgICAgR3JhcGhpY3NT
dXJmYWNlOjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4
dHVyZVRhcmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOworICAgICAgICBj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXMqIGNyZWF0ZUNh
bnZhc09wZXJhdG9pbiA9IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZUNhbnZhcyo+KG9wZXJhdGlvbik7CisgICAgICAgIGNyZWF0ZUNhbnZhcyhj
cmVhdGVDYW52YXNPcGVyYXRvaW4tPmxheWVySUQsIGNyZWF0ZUNhbnZhc09wZXJhdG9pbi0+Y2Fu
dmFzU2l6ZSwKKyAgICAgICAgICAgIEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNyZWF0ZUNhbnZh
c09wZXJhdG9pbi0+Y2FudmFzU2l6ZSwgc3VyZmFjZUZsYWdzLCBjcmVhdGVDYW52YXNPcGVyYXRv
aW4tPnRva2VuKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXNUeXBlOgorICAgICAgICBzeW5jQ2FudmFzKHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXMq
PihvcGVyYXRpb24pLT5sYXllcklELAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhcyo+KG9wZXJhdGlvbiktPmZyb250
QnVmZmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpEZXN0cm95Q2FudmFzVHlwZToKKyAgICAgICAgZGVzdHJveUNhbnZhcyhzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzKj4o
b3BlcmF0aW9uKS0+bGF5ZXJJRCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQorICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJGaWx0ZXJzVHlwZToKKyAgICAgICAgc2V0TGF5ZXJGaWx0ZXJzKHN0YXRpY19jYXN0PGNv
bnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVycyo+KG9wZXJh
dGlvbiktPmxheWVySUQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnMqPihvcGVyYXRpb24pLT5maWx0ZXJz
KTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAg
Y2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9n
cmFtVHlwZToKKyAgICAgICAgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShzdGF0aWNfY2FzdDxj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9n
cmFtKj4ob3BlcmF0aW9uKS0+Y3VzdG9tRmlsdGVyUHJvZ3JhbUlELAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9t
RmlsdGVyUHJvZ3JhbSo+KG9wZXJhdGlvbiktPnByb2dyYW1JbmZvKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtVHlwZToKKyAgICAgICAgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtKj4ob3BlcmF0aW9uKS0+Y3VzdG9tRmlsdGVyUHJvZ3JhbUlEKTsKKyAgICAgICAg
YnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyUmVwYWludENvdW50VHlwZToKKyAgICAgICAgc2V0TGF5ZXJSZXBhaW50Q291bnQoc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBh
aW50Q291bnQqPihvcGVyYXRpb24pLT5sYXllcklELAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQq
PihvcGVyYXRpb24pLT5yZXBhaW50Q291bnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldEJhY2tncm91bmRDb2xvclR5cGU6CisgICAg
ICAgIHNldEJhY2tncm91bmRDb2xvcihzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3IqPihvcGVyYXRpb24pLT5jb2xvcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlk
Q2hhbmdlU2Nyb2xsUG9zaXRpb25UeXBlOgorICAgICAgICBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlv
bihzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEaWRDaGFu
Z2VTY3JvbGxQb3NpdGlvbio+KG9wZXJhdGlvbiktPnBvc2l0aW9uKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpOb25lVHlwZToKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbmRlck5leHRGcmFtZSgpCiB7CiAgICAgaWYg
KG1fY2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5oCmluZGV4IGNmYWIxNjYyZDFhYzVjNDIzZmQ1MDEwYjAxY2Q3ZTQwNjM2OTMz
ODMuLjA2OWQ5OGVhZDIzN2E1NTg5ZjEzZTNkODhlMWNhYjYyNmY2MDliNmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKQEAgLTIx
LDYgKzIxLDcgQEAKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lX2gKIAogI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJD
b29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTQy
LDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZTsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOworY2xhc3MgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbnM7CiBjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtOwogY2xhc3MgQ3Vz
dG9tRmlsdGVyUHJvZ3JhbUluZm87CiBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CkBAIC04Miwx
MyArODQsNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25z
dCBGbG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxv
YXRSZWN0Jik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvbik7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVh
dGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxH
cmFwaGljc1N1cmZhY2U+KTsKLSAgICB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5h
dGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3Jk
aW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKIAogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9p
ZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwpAQCAtOTgsMzggKzkzLDEw
IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKICAgICB2b2lkIHNldEFj
dGl2ZShib29sKTsKIAotICAgIHZvaWQgY3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGlu
YXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIHNldFJvb3RMYXllcklEKENvb3JkaW5hdGVkTGF5
ZXJJRCk7Ci0gICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIHNldExheWVyU3RhdGUo
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpOwotI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldExheWVyRmlsdGVycyhDb29yZGluYXRlZExh
eWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKLSNlbmRpZgotI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKLSAgICB2b2lkIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0OwotICAgIHZvaWQgY3JlYXRlQ3VzdG9t
RmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7Ci0g
ICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7Ci0jZW5kaWYKLQotICAg
IHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgZmxv
YXQgc2NhbGUpOwotICAgIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCk7Ci0gICAgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJik7Ci0gICAgdm9pZCBjcmVhdGVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOwot
ICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0gICAgdm9pZCBm
bHVzaExheWVyQ2hhbmdlcygpOwotICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPik7Ci0gICAg
dm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
OwotICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
OwotICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKKyAgICB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25zKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJik7CiAg
ICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwotICAgIHZvaWQgc2V0QmFja2dyb3Vu
ZENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCBl
bmFibGUpIHsgbV9zZXREcmF3c0JhY2tncm91bmQgPSBlbmFibGU7IH0KIAotI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgp
OwotI2VuZGlmCisgICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCBlbmFibGUpIHsgbV9z
ZXREcmF3c0JhY2tncm91bmQgPSBlbmFibGU7IH0KIAogcHJpdmF0ZToKICAgICBHcmFwaGljc0xh
eWVyKiBsYXllckJ5SUQoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQpAQCAtMTYwLDYgKzEyNyw0MyBA
QCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKICAg
ICB2b2lkIGRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7CiAKKyAgICAvLyBCZWdpbiBv
cGVyYXRpb24gZXhlY3V0aW9ucy4KKyAgICB2b2lkIGV4ZWN1dGVDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbiop
OworICAgIHZvaWQgY3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+
Jik7CisgICAgdm9pZCBkZWxldGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJ
RD4mKTsKKyAgICB2b2lkIHNldFJvb3RMYXllcklEKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAg
dm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRM
YXllckluZm8mKTsKKyAgICB2b2lkIHNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklE
LCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgY3JlYXRlVGls
ZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgZmxvYXQgc2NhbGUpOworICAg
IHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgVGlsZVVwZGF0ZSYpOworICAgIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IHRpbGVJRCk7CisgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOworICAgIHZvaWQgcmVtb3Zl
VXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7CisgICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZh
Y2U+KTsKKyAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCk7CisgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCk7CisgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXll
cklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKKyAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOworI2Vu
ZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdm9pZCBjcmVhdGVDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZh
Y2U+KTsKKyAgICB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBm
cm9udEJ1ZmZlcik7CisgICAgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7
CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzZXRMYXllckZpbHRl
cnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYK
KyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9n
cmFtKGludCBpZCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKKyAgICB2b2lkIHJl
bW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKKyNlbmRpZgorICAgIHZvaWQgc2V0TGF5
ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklELCBpbnQgdmFsdWUpOworICAgIHZvaWQg
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3Jv
bGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbik7CisgICAgLy8gRW5kIG9wZXJh
dGlvbiBleGVjdXRpb25zLgorCiAgICAgdm9pZCBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdy
YXBoaWNzTGF5ZXIqLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2b2lkIHJlbW92
ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7CiAgICAgdm9pZCBlbnN1cmVSb290TGF5
ZXIoKTsKQEAgLTE3MCw2ICsxNzQsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUJhY2tp
bmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2b2lkIHJlc2V0QmFja2luZ1N0
b3JlU2l6ZVRvTGF5ZXJTaXplKEdyYXBoaWNzTGF5ZXIqKTsKIAorI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKKyAgICB2b2lkIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0OworI2VuZGlmCisKICAgICBGbG9hdFNpemUg
bV9jb250ZW50c1NpemU7CiAgICAgRmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKIApA
QCAtMjA4LDcgKzIxNiw2IEBAIHByaXZhdGU6CiAgICAgTGF5ZXJSYXdQdHJNYXAgbV9maXhlZExh
eWVyczsKICAgICBDb29yZGluYXRlZExheWVySUQgbV9yb290TGF5ZXJJRDsKICAgICBGbG9hdFBv
aW50IG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQgbV9w
ZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwogICAgIGJvb2wgbV9hbmltYXRp
b25zTG9ja2VkOwogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICBib29s
IG1fYW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAppbmRleCBmNjkyNDgyODc1ZDVjZmMyMWRi
NmJiMGQ2ZjIwMGUxZDk5YzViMjBmLi5hOTkyNDZlM2QzZGZjYjVlMzk4OGZlNjgzODRjY2I1ZDhm
YzI0ZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZElt
YWdlQmFja2luZy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCIKIAorI2luY2x1ZGUg
IkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTMgKzM5LDEzIEBAIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQoCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRD4oaW1hZ2UpOwogfQogCi1QYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nPiBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKENvb3JkaW5hdG9yKiBjbGll
bnQsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQorUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdl
QmFja2luZz4gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZShDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpRdWV1ZSogcXVldWUsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQogewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoY2xpZW50LCBp
bWFnZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmco
cXVldWUsIGltYWdlKSk7CiB9CiAKLUNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRl
ZEltYWdlQmFja2luZyhDb29yZGluYXRvciogY2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFn
ZSkKLSAgICA6IG1fY29vcmRpbmF0b3IoY2xpZW50KQorQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1
ZXVlKiBxdWV1ZSwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCisgICAgOiBtX29wZXJhdGlvblF1
ZXVlKHF1ZXVlKQogICAgICwgbV9pbWFnZShpbWFnZSkKICAgICAsIG1faWQoZ2V0Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRChtX2ltYWdlLmdldCgpKSkKICAgICAsIG1fY2xlYXJDb250ZW50c1Rp
bWVyKHRoaXMsICZDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmly
ZWQpCkBAIC01NCw3ICs1NSw3IEBAIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRl
ZEltYWdlQmFja2luZyhDb29yZGluYXRvciogY2xpZW50LCBQYXNzUmVmUHRyCiAgICAgLy8gRklY
TUU6IFdlIHdvdWxkIG5lZWQgdG8gZGVjb2RlIGEgc21hbGwgaW1hZ2UgZGlyZWN0bHkgaW50byBh
IEdyYXBoaWNzU3VyZmFjZS4KICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMTQyNgogCi0g
ICAgbV9jb29yZGluYXRvci0+Y3JlYXRlSW1hZ2VCYWNraW5nKGlkKCkpOworICAgIG1fb3BlcmF0
aW9uUXVldWUtPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlkKCkpKTsKIH0K
IAogQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6On5Db29yZGluYXRlZEltYWdlQmFja2luZygpCkBA
IC03NCw3ICs3NSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUhvc3Qo
SG9zdCogaG9zdCkKICAgICBtX2hvc3RzLnJlbW92ZShwb3NpdGlvbik7CiAKICAgICBpZiAobV9o
b3N0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fY29vcmRpbmF0b3ItPnJlbW92ZUltYWdlQmFja2lu
ZyhpZCgpKTsKKyAgICAgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VC
YWNraW5nOjpjcmVhdGUoaWQoKSkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjptYXJrRGlydHkoKQpAQCAtMTEzLDkgKzExNCw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6OnVwZGF0ZSgpCiAKICAgICBtX25hdGl2ZUltYWdlUHRyID0gbV9pbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIAotICAgIC8vIElmIHNlbmRpbmcgdGhlIG1lc3NhZ2Ug
ZmFpbHMsIHRyeSBhZ2FpbiBpbiB0aGUgbmV4dCB1cGRhdGUuCi0gICAgYm9vbCBzdWNjZXNzID0g
bV9jb29yZGluYXRvci0+dXBkYXRlSW1hZ2VCYWNraW5nKGlkKCksIG1fc3VyZmFjZSk7Ci0gICAg
bV9pc0RpcnR5ID0gIXN1Y2Nlc3M7CisgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5xdWV1ZUNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBk
YXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQoKSwgbV9zdXJmYWNlKSk7CisgICAgbV9pc0RpcnR5
ID0gZmFsc2U7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbGVhc2VTdXJm
YWNlSWZOZWVkZWQoKQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6OnVwZGF0ZVZpc2liaWxpdHlJZk5lZWRlZChib29sJiBjaGFuZ2VkVG9WaXNpYmxlKQog
CiB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNvbnRlbnRzVGltZXJGaXJlZChU
aW1lcjxDb29yZGluYXRlZEltYWdlQmFja2luZz4qKQogewotICAgIG1fY29vcmRpbmF0b3ItPmNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaWQoKSk7CisgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5x
dWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6Y3JlYXRlKGlkKCkpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcuaAppbmRleCA1YjViNTdhNmVjYjEwMWVmNzViMjkxOTFiNTc1MDdi
ZWRkYTJmNzY1Li44YmY0ZGI2NTc5MWJkYjVlYjBiMGU0ZWUzYjA1NDY0OTI4ODE1ZDBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaApA
QCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBDb29yZGluYXRlZEltYWdlQmFja2luZ19oCiAKICNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCiAjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTM5LDIwICs0
MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nIDogcHVibGljIFJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IHsKIHB1Ymxp
YzoKLSAgICBjbGFzcyBDb29yZGluYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsK
LSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKLSAgICB9OwotCiAgICAgY2xhc3MgSG9zdCB7
CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJsZSgp
ID0gMDsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc+IGNyZWF0ZShDb29yZGluYXRvciosIFBhc3NSZWZQdHI8SW1hZ2U+KTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiwgUGFzc1JlZlB0cjxJbWFnZT4pOwogICAgIHZpcnR1
YWwgfkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCk7CiAKICAgICBzdGF0aWMgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCBnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKEltYWdlKik7CkBAIC02
OCwxMyArNjEsMTMgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlKCk7CiAKIHByaXZhdGU6Ci0g
ICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0b3IqLCBQYXNzUmVmUHRyPEltYWdl
Pik7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6UXVldWUqLCBQYXNzUmVmUHRyPEltYWdlPik7CiAKICAgICB2b2lkIHJlbGVhc2VTdXJm
YWNlSWZOZWVkZWQoKTsKICAgICB2b2lkIHVwZGF0ZVZpc2liaWxpdHlJZk5lZWRlZChib29sJiBj
aGFuZ2VkVG9WaXNpYmxlKTsKICAgICB2b2lkIGNsZWFyQ29udGVudHNUaW1lckZpcmVkKFRpbWVy
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiopOwogCi0gICAgQ29vcmRpbmF0b3IqIG1fY29vcmRp
bmF0b3I7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqIG1fb3BlcmF0
aW9uUXVldWU7CiAgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIE5hdGl2ZUltYWdlUHRy
IG1fbmF0aXZlSW1hZ2VQdHI7CiAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBtX2lkOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAppbmRleCA2YWIzODRh
MTFlYWE1ZWEyNTQwODEzYzcwMjVlNWZjOGMxN2QzOTEwLi5lYThiMjVmZWY2ZTk3NzI5MmYwZTM4
OGQ0ODY0MmZhMjI5YjUwOTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVw
ZGF0ZUluZm8uaApAQCAtMjMsMTMgKzIzLDEwIEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN1cmZhY2VVcGRhdGVJbmZvIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdXJmYWNlVXBkYXRlSW5mbyk7Ci0KIHB1YmxpYzoKICAg
ICBTdXJmYWNlVXBkYXRlSW5mbygpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0
bGFzLmNwcAppbmRleCAzNjRmMDY4NzEwODJiNThmY2JkODNhMGVmMzE0NTBiZTQ4MDA4NDhiLi43
ZmNhYmY2OTZkZjE4YThkYTVkOTQ5YmY0N2I3MDAzZGExNDM5YzUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRs
YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKQEAgLTIzLDE0ICsyMywxNSBAQAogCiAjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCogY2xpZW50LCBpbnQg
ZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQotICAgIDogbV9jbGll
bnQoY2xpZW50KQorVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlF1ZXVlKiBxdWV1ZSwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJmYWNl
OjpGbGFncyBmbGFncykKKyAgICA6IG1fb3BlcmF0aW9uUXVldWUocXVldWUpCiAgICAgLCBtX2lu
YWN0aXZpdHlJblNlY29uZHMoMCkKIHsKICAgICBzdGF0aWMgdWludDMyX3QgbmV4dElEID0gMDsK
QEAgLTM4LDE1ICszOSwxMiBAQCBVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoVXBkYXRlQXRsYXND
bGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdQogICAgIEludFNpemUg
c2l6ZSA9IG5leHRQb3dlck9mVHdvKEludFNpemUoZGltZW5zaW9uLCBkaW1lbnNpb24pKTsKICAg
ICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShzaXplLCBmbGFncyk7CiAK
LSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBpZiBzZW5kaW5nIHRoZSBtZXNzYWdlIGZhaWxzLCBV
cGRhdGVBdGxhcyBnaXZlcyB1cCBkcmF3aW5nIGFueXRoaW5nIGltcGxpY2l0bHkuCi0gICAgaWYg
KCFtX2NsaWVudC0+Y3JlYXRlVXBkYXRlQXRsYXMobV9JRCwgbV9zdXJmYWNlKSkKLSAgICAgICAg
bV9zdXJmYWNlLmNsZWFyKCk7CisgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5xdWV1ZUNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRl
VXBkYXRlQXRsYXM6OmNyZWF0ZShtX0lELCBtX3N1cmZhY2UpKTsKIH0KIAogVXBkYXRlQXRsYXM6
On5VcGRhdGVBdGxhcygpCiB7Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgbV9jbGllbnQt
PnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWVD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlJlbW92ZVVwZGF0ZUF0bGFzOjpjcmVhdGUobV9JRCkpOwogfQogCiB2b2lkIFVwZGF0ZUF0bGFz
OjpidWlsZExheW91dElmTmVlZGVkKCkKQEAgLTcyLDkgKzcwLDYgQEAgUGFzc093blB0cjxHcmFw
aGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIo
dWludDMyX3QKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBQYXNzT3du
UHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKIAotICAgIGlmICghbV9zdXJmYWNlKQotICAgICAgICBy
ZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7Ci0KICAgICBhdGxhc0lEID0gbV9J
RDsKIAogICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3Rl
ciB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaAppbmRleCA0OGE2YmY4
NDRhNDkwZjdmZDJjMzlhMDQyNGUzMzBmZGRiMTZkNzhiLi4xNjMxMzhmMTdjMjU2NDA3M2Q5YjU2
ODZiMGE0Mzg4MjlhY2Y0ZDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaApA
QCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBVcGRhdGVBdGxhc19oCiAKICNpbmNsdWRlICJBcmVh
QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIApA
QCAtMzEsMTYgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKIGNsYXNzIEludFBvaW50OwogCi1jbGFzcyBVcGRhdGVBdGxhc0NsaWVudCB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQs
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSA9IDA7Ci19OwotCiBjbGFzcyBVcGRh
dGVBdGxhcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRlQXRsYXMpOwogcHVibGlj
OgotICAgIFVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiwgaW50IGRpbWVuc2lvbiwgQ29v
cmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7CisgICAgVXBkYXRlQXRsYXMoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UXVldWUqLCBpbnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6
OkZsYWdzKTsKICAgICB+VXBkYXRlQXRsYXMoKTsKIAogICAgIGlubGluZSBJbnRTaXplIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnNpemUoKTsgfQpAQCAtNjYsNyArNjEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwogCiBwcml2YXRlOgotICAg
IFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpRdWV1ZSogbV9vcGVyYXRpb25RdWV1ZTsKICAgICBPd25QdHI8R2VuZXJhbEFyZWFB
bGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiBtX3N1cmZhY2U7CiAgICAgZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4
IGMzMzcxZDJjMDg0ZTA1MmRlZGNmNjRlZmY0YmQxNDc1MDBlOWI1NGIuLjRiYTgzNTBkODYyZjdh
MWE1YzYzMTRkYzhjMGNiM2ZiNDI3Zjk3YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVy
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApAQCAtMjksOSArMjksMTEgQEAKICNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKIAogI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIK
ICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Fu
aW1hdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29y
ZGluYXRlZExheWVySW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludDNELmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+CkBAIC03Myw5ICs3NSw3
IEBACiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0jaWYgRU5BQkxFKENTU19T
SEFERVJTKQogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLSNlbmRpZgogCiBuYW1lc3BhY2UgQ29y
ZUlQQyB7CiAKQEAgLTgzNSw2ICs4MzUsMzg0IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxTdXJmYWNl
VXBkYXRlSW5mbz46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFN1cmZhY2VVCiAg
ICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUo
ZGVjb2Rlciwgc3VyZmFjZVVwZGF0ZUluZm8pOwogfQogCit2b2lkIEFyZ3VtZW50Q29kZXI8Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKK3sK
KyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihvcGVyYXRpb25zLnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRpb25zLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbiogb3Bl
cmF0aW9uID0gb3BlcmF0aW9ucy5hdChpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKG9w
ZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsKKworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlv
bi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJz
Kj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnNUeXBlOgorICAgICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpEZWxldGVMYXllcnMqPihvcGVyYXRpb24pLT5sYXllcklEczsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJv
b3RMYXllclR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllcio+KG9wZXJhdGlvbiktPmxh
eWVySUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJT
dGF0ZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGUq
PihvcGVyYXRpb24pLT5sYXllckluZm87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuVHlwZToKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbio+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldExheWVyQ2hpbGRyZW4qPihvcGVyYXRpb24pLT5jaGlsZHJlbjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZVRpbGVUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlKj4ob3BlcmF0aW9uKS0+
bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbiktPnRpbGVJRDsK
KyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbiktPnRpbGVSZWN0OworICAgICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpDcmVhdGVUaWxlKj4ob3BlcmF0aW9uKS0+dXBkYXRlSW5mbzsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0
ZVRpbGVUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlKj4ob3BlcmF0aW9uKS0+bGF5ZXJJ
RDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJhdGlvbiktPnRpbGVJRDsKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJhdGlvbiktPnRpbGVSZWN0OworICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpVcGRhdGVUaWxlKj4ob3BlcmF0aW9uKS0+dXBkYXRlSW5mbzsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGVU
eXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlVGlsZSo+KG9wZXJhdGlvbiktPnRpbGVJRDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0
ZVVwZGF0ZUF0bGFzVHlwZTogeworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhcyo+KG9w
ZXJhdGlvbiktPmF0bGFzSUQ7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2UqIHdl
YkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFjZSo+
KHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVw
ZGF0ZUF0bGFzKj4ob3BlcmF0aW9uKS0+c3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAgICBXZWJD
b29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7CisgICAgICAgICAgICAvLyBGSVhNRTog
V2UgbmVlZCB0byBkZWFsIHdpdGggdGhlIGNhc2UgdGhhdCBoYW5kbGUgY3JlYXRpb24gaXMgZmFp
bGVkLgorICAgICAgICAgICAgd2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFu
ZGxlKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgaGFuZGxlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVVcGRhdGVBdGxhc1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzKj4o
b3BlcmF0aW9uKS0+YXRsYXNJRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZ1R5cGU6CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lE
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nVHlwZTogeworICAgICAgICAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJ
bWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRDsKKyAgICAgICAgICAgIFdl
YkNvb3JkaW5hdGVkU3VyZmFjZSogd2ViQ29vcmRpbmF0ZWRTdXJmYWNlID0gc3RhdGljX2Nhc3Q8
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+c3VyZmFjZS5n
ZXQoKSk7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7
CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkZWFsIHdpdGggdGhlIGNhc2UgdGhh
dCBoYW5kbGUgY3JlYXRpb24gaXMgZmFpbGVkLgorICAgICAgICAgICAgd2ViQ29vcmRpbmF0ZWRT
dXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgaGFu
ZGxlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzVHlwZToKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyo+KG9wZXJhdGlvbiktPmltYWdl
QmFja2luZ0lEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nVHlwZToKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
UmVtb3ZlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNraW5nSUQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllckFuaW1hdGlvbnNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnMq
PihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnMq
PihvcGVyYXRpb24pLT5hbmltYXRpb25zOworICAgICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZVR5cGU6CisgICAgICAgICAgICBicmVh
azsKKyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICBjYXNlIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhc1R5cGU6CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZUNhbnZhcyo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0
ZUNhbnZhcyo+KG9wZXJhdGlvbiktPmNhbnZhc1NpemU7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNh
bnZhcyo+KG9wZXJhdGlvbiktPnRva2VuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhc1R5cGU6CisgICAgICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlN5bmNDYW52YXMqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
eW5jQ2FudmFzKj4ob3BlcmF0aW9uKS0+ZnJvbnRCdWZmZXI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFz
VHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhcyo+KG9wZXJhdGlvbiktPmxheWVySUQ7
CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnNU
eXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnMqPihvcGVyYXRpb24pLT5sYXllcklE
OworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnMqPihvcGVyYXRpb24pLT5maWx0ZXJzOwor
ICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAg
ICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVy
UHJvZ3JhbVR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0qPihv
cGVyYXRpb24pLT5jdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1
c3RvbUZpbHRlclByb2dyYW0qPihvcGVyYXRpb24pLT5wcm9ncmFtSW5mbzsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtKj4ob3BlcmF0aW9uKS0+Y3VzdG9tRmlsdGVyUHJvZ3JhbUlEOworICAgICAgICAg
ICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpTZXRMYXllclJlcGFpbnRDb3VudFR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVw
YWludENvdW50Kj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJS
ZXBhaW50Q291bnQqPihvcGVyYXRpb24pLT5yZXBhaW50Q291bnQ7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3Jv
dW5kQ29sb3JUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3IqPihvcGVyYXRp
b24pLT5jb2xvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uVHlwZToKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24qPihvcGVyYXRpb24pLT5wb3NpdGlvbjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246Ok5vbmVUeXBlOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBBcmd1bWVudENvZGVyPENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCit7CisgICAg
dW5zaWduZWQgb3BlcmF0aW9uc1NpemU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUob3BlcmF0
aW9uc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9wZXJhdGlvbnNTaXplOyArK2kpIHsKKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlOworICAgICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZUVudW0odHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q3JlYXRlTGF5ZXJzVHlwZTogeworICAgICAgICAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJ
RD4gaWRzOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaWRzKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZShpZHMpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzVHlwZTogeworICAgICAgICAgICAgVmVjdG9yPENv
b3JkaW5hdGVkTGF5ZXJJRD4gaWRzOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
aWRzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRp
b25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnM6OmNy
ZWF0ZShpZHMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyVHlwZTogeworICAgICAg
ICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRSb290TGF5ZXI6OmNyZWF0ZShsYXllcklEKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
U3RhdGVUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAg
ICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVySW5m
bzsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySW5mbykpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6Y3JlYXRlKGxheWVySUQs
IGxheWVySW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuVHlwZTogewor
ICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAo
IWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBjaGlsZHJlbjsKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNoaWxkcmVuKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOjpjcmVhdGUobGF5ZXJJRCwgY2hpbGRy
ZW4pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZVR5cGU6IHsKKyAgICAgICAgICAgIENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
dWludDMyX3QgdGlsZUlEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodGlsZUlE
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBJbnRSZWN0IHRp
bGVSZWN0OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodGlsZVJlY3QpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFN1cmZhY2VVcGRhdGVJbmZv
IHVwZGF0ZUluZm87CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh1cGRhdGVJbmZv
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25z
LmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlOjpjcmVhdGUo
bGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpVcGRhdGVUaWxlVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVy
SUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB1aW50MzJfdCB0aWxlSUQ7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0aWxlSUQpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3Q7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZSh0aWxlUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgU3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHVwZGF0ZUluZm8pKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OmNyZWF0ZShsYXllcklELCB0aWxlSUQsIHRpbGVS
ZWN0LCB1cGRhdGVJbmZvKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGVUeXBlOiB7Cisg
ICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKHRpbGVJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3Zl
VGlsZTo6Y3JlYXRlKGxheWVySUQsIHRpbGVJRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVV
cGRhdGVBdGxhc1R5cGU6IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXItPmRlY29kZShhdGxhc0lEKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5k
bGU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzOjpjcmVhdGUoYXRsYXNJ
RCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpSZW1vdmVVcGRhdGVBdGxhc1R5cGU6IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGF0bGFz
SUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShhdGxhc0lEKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhczo6Y3JlYXRlKGF0bGFz
SUQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nVHlwZTogeworICAgICAg
ICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZDsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKGlkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVJbWFnZUJhY2tpbmc6OmNyZWF0ZShpZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFn
ZUJhY2tpbmdUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlk
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaWQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxl
IGhhbmRsZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhbmRsZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUo
aWQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGU6IHsKKyAgICAgICAgICAgIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShpZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0
aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50czo6Y3JlYXRlKGlkKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFj
a2luZ1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQ7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShpZCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0
ZWRMYXllcklEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaWQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJBbmlt
YXRpb25zIGFuaW1hdGlvbnM7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShhbmlt
YXRpb25zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVy
YXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1h
dGlvbnM6OmNyZWF0ZShpZCwgYW5pbWF0aW9ucykpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgICAgIGNhc2Ug
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lVHlwZToK
KyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6Y3JlYXRlKCkpOworICAgICAgICAgICAgYnJlYWs7
CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgY2FzZSBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXNUeXBlOiB7CisgICAgICAgICAgICBD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IEludFNpemUgY2FudmFzU2l6ZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNh
bnZhc1NpemUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEdy
YXBoaWNzU3VyZmFjZVRva2VuIHRva2VuOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUodG9rZW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZh
czo6Y3JlYXRlKGxheWVySUQsIGNhbnZhc1NpemUsIHRva2VuKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlN5bmNDYW52YXNUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJ
RDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90IGZyb250QnVmZmVyOwor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZnJvbnRCdWZmZXIpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6OmNyZWF0ZShsYXllcklELCBmcm9u
dEJ1ZmZlcikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzVHlwZTogeworICAgICAg
ICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpE
ZXN0cm95Q2FudmFzOjpjcmVhdGUobGF5ZXJJRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnNUeXBlOiB7CisgICAgICAg
ICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKGZpbHRlcnMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyRmlsdGVyczo6Y3JlYXRlKGxheWVySUQsIGZpbHRlcnMpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9t
RmlsdGVyUHJvZ3JhbVR5cGU6IHsKKyAgICAgICAgICAgIGludCBjdXN0b21GaWx0ZXJQcm9ncmFt
SUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShjdXN0b21GaWx0ZXJQcm9ncmFt
SUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdlYkNvcmU6
OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvIHByb2dyYW1JbmZvOworICAgICAgICAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUocHJvZ3JhbUluZm8pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZShjdXN0b21GaWx0ZXJQcm9n
cmFtSUQsIHByb2dyYW1JbmZvKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRl
clByb2dyYW1UeXBlOiB7CisgICAgICAgICAgICBpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlEOwor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFw
cGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9n
cmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnRUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVy
SUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIENvb3JkaW5h
dGVkTGF5ZXJJRCByZXBhaW50Q291bnQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShyZXBhaW50Q291bnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExh
eWVyUmVwYWludENvdW50OjpjcmVhdGUobGF5ZXJJRCwgcmVwYWludENvdW50KSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldEJhY2tncm91bmRDb2xvclR5cGU6IHsKKyAgICAgICAgICAgIENvbG9yIGNv
bG9yOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29sb3IpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldEJhY2tncm91bmRDb2xvcjo6Y3JlYXRlKGNvbG9y
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uVHlwZTogeworICAg
ICAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbjsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKHBvc2l0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEaWRD
aGFuZ2VTY3JvbGxQb3NpdGlvbjo6Y3JlYXRlKHBvc2l0aW9uKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
Ok5vbmVUeXBlOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29k
ZXJzLmgKaW5kZXggMmFlZmM2NTc0ZmYzZWE0MTExM2ZjMWU0MmMwMTkxOGY0MjQxYmY2Ny4uYzA5
YjhmZGI5MzdlNjgyNzc3MWJiMTQ3YmE2NmIxZjAxN2ViMWYxNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKQEAgLTMyLDEwICszMiwx
MSBAQAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LWNsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbnM7CiBjbGFzcyBGbG9hdFBvaW50M0Q7CiBjbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9u
OwogY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7CitjbGFzcyBTdXJmYWNlVXBkYXRlSW5m
bzsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9u
czsKIHN0cnVjdCBDb29yZGluYXRlZExheWVySW5mbzsKQEAgLTExNyw2ICsxMTgsMTEgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbz4g
ewogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpTdXJm
YWNlVXBkYXRlSW5mbyYpOwogfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucz4geworICAgIHN0YXRpYyB2b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9ucyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIq
LCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYpOworfTsKKwogfSAvLyBu
YW1lc3BhY2UgQ29yZUlQQwogCiAjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3Bw
CmluZGV4IDk4NjQ5M2MzMmZmODQ2MjhhM2UwYjBlYmIzYTA1MWI3NDE1OTM3NTguLjk1NWZkYjkz
OGEzMzY3YmUwMDA0OGJmNTMwNDQ2NDQ4ZTVjZTBmODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTIzLDE2ICsyMywxMSBA
QAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAKICNpbmNsdWRl
ICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRMYXllckluZm8u
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1
cmZhY2VVcGRhdGVJbmZvLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCIKLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bmFsLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC01OSw3OCArNTQsOSBAQCB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdAogICAgIG1fc2NlbmUtPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CiB9
CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXll
cihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVU
aWxlLCBtX3NjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0
b3IpKTsKLSAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwg
dXBkYXRlSW5mbyk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVw
ZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjp1cGRhdGVUaWxlLCBtX3NjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQsIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRp
bGVSZWN0LCB1cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxh
eWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxl
LCBtX3NjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwg
Y29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0
bGFzLCBtX3NjZW5lLmdldCgpLCBhdGxhc0lELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0
ZShoYW5kbGUpKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJl
bW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVVcGRhdGVBdGxhcywgbV9zY2Vu
ZS5nZXQoKSwgYXRsYXNJRCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpjcmVhdGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYgaWRzKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6Y3JlYXRlTGF5ZXJzLCBtX3NjZW5lLmdldCgpLCBpZHMpKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoY29u
c3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlkcykKLXsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlbGV0ZUxheWVycywgbV9zY2VuZS5n
ZXQoKSwgaWRzKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNl
dFJvb3RDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldFJvb3RMYXllcklE
LCBtX3NjZW5lLmdldCgpLCBpZCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBj
b25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyU3RhdGUsIG1fc2NlbmUuZ2V0
KCksIGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0
IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKLXsKLSAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRyZW4sIG1f
c2NlbmUuZ2V0KCksIGlkLCBjaGlsZHJlbikpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJT
KQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXll
ckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3NjZW5lLmdldCgpLCBpZCwgZmlsdGVycykpOwotfQot
I2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKLXsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUN1c3Rv
bUZpbHRlclByb2dyYW0sIG1fc2NlbmUuZ2V0KCksIGlkKSk7Ci19Ci12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29u
c3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ3VzdG9tRmlsdGVy
UHJvZ3JhbSwgbV9zY2VuZS5nZXQoKSwgaWQsIHByb2dyYW1JbmZvKSk7Ci19Ci0jZW5kaWYKLQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3Qg
SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25zKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiBvcGVyYXRpb25z
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGNvdmVyZWRSZWN0KQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Zmx1c2hMYXllckNoYW5nZXMsIG1fc2NlbmUuZ2V0KCkpKTsKKyAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLCBtX3NjZW5lLmdldCgpLCBvcGVyYXRpb25zKSk7
CiAgICAgdXBkYXRlVmlld3BvcnQoKTsKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAg
ICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+ZGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXpl
LCBjb3ZlcmVkUmVjdCk7CkBAIC0xNDAsMjQgKzY2LDkgQEAgdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXpl
LAogI2VuZGlmCiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVJbWFn
ZUJhY2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhh
bmRsZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnVwZGF0ZUltYWdlQmFja2luZywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCwgV2ViQ29vcmRp
bmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMsIG1fc2NlbmUuZ2V0
KCksIGltYWdlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9v
bCBsb2NrZWQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpyZW1vdmVJbWFnZUJhY2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQpKTsKKyAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldEFuaW1h
dGlvbnNMb2NrZWQsIG1fc2NlbmUuZ2V0KCksIGxvY2tlZCkpOwogfQogCiB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBj
b250ZW50c1NpemUpCkBAIC0xNjUsMTUgKzc2LDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXoK
ICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldENv
bnRlbnRzU2l6ZSwgbV9zY2VuZS5nZXQoKSwgY29udGVudHNTaXplKSk7CiB9CiAKLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRl
ZExheWVySUQgaWQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQot
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0
TGF5ZXJBbmltYXRpb25zLCBtX3NjZW5lLmdldCgpLCBpZCwgYW5pbWF0aW9ucykpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKGJv
b2wgbG9ja2VkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0QW5pbWF0aW9uc0xvY2tlZCwgbV9zY2VuZS5nZXQoKSwgbG9ja2VkKSk7Ci19
CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5
VmVjdG9yKQogewpAQCAtMTk0LDU1ICs5NiwxNiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpyZW5kZXJOZXh0RnJhbWUoKQogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnJlcXVlc3RBbmltYXRpb25GcmFtZSwgbV9zY2VuZS5nZXQoKSkpOwot
ICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQogewogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+
cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6QW5pbWF0aW9uRnJhbWVSZWFkeSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFn
ZUlEKCkpOwogfQogI2VuZGlmCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQotewot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlkQ2hh
bmdlU2Nyb2xsUG9zaXRpb24sIG1fc2NlbmUuZ2V0KCksIHBvc2l0aW9uKSk7Ci19Ci0KLSNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZh
c1NpemUsIGNvbnN0IEdyYXBoaWNzU3VyZmFjZVRva2VuJiB0b2tlbikKLXsKLSAgICBHcmFwaGlj
c1N1cmZhY2U6OkZsYWdzIHN1cmZhY2VGbGFncyA9IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNU
ZXh0dXJlVGFyZ2V0IHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVDYW52YXMs
IG1fc2NlbmUuZ2V0KCksIGlkLCBjYW52YXNTaXplLCBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShj
YW52YXNTaXplLCBzdXJmYWNlRmxhZ3MsIHRva2VuKSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWlu
dDMyX3QgZnJvbnRCdWZmZXIpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpzeW5jQ2FudmFzLCBtX3NjZW5lLmdldCgpLCBpZCwgZnJvbnRCdWZm
ZXIpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUNh
bnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZXN0cm95Q2FudmFzLCBtX3NjZW5lLmdldCgpLCBp
ZCkpOwotfQotI2VuZGlmCi0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNl
dExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IHZhbHVlKQotewot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5
ZXJSZXBhaW50Q291bnQsIG1fc2NlbmUuZ2V0KCksIGlkLCB2YWx1ZSkpOwotfQotCiB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogewogICAg
IG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2luZ0Fy
ZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRCYWNr
Z3JvdW5kQ29sb3IsIG1fc2NlbmUuZ2V0KCksIGNvbG9yKSk7Ci19Ci0KIH0KICNlbmRpZiAvLyBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkuaAppbmRleCAyNGIzNDc3MGFjMDgzYzM1YTU1NDAzMDRlMDkw
YTA1MjU4ZWY1N2FkLi5jMzg4MjM1ZDA0MDU0MGRjOTkzZDA2OGViZDliZjJiOGQyYTAzMTQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgK
QEAgLTI1LDIzICsyNSwxMyBAQAogI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUg
IkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIkRyYXdpbmdB
cmVhUHJveHkuaCIKLSNpbmNsdWRlICJSZWdpb24uaCIKLSNpbmNsdWRlICJXZWJDb29yZGluYXRl
ZFN1cmZhY2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0
aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2VUb2tlbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNp
bmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb29yZGlu
YXRlZExheWVySW5mbzsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOwogY2xh
c3MgU3VyZmFjZVVwZGF0ZUluZm87CiB9CiAKQEAgLTUzLDQ1ICs0MywxMiBAQCBjbGFzcyBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmVDbAogcHVibGljOgogICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eSgpOwotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
ckluZm8mKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVy
SUQ+Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdM
YXllckZpbHRlcnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAg
dm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgV2ViQ29yZTo6Q3Vz
dG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW0oaW50IGlkKTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIGRlbGV0
ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVy
SUQ+Jik7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQpOworICAgIHZvaWQgY29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bnMoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNv
dmVyZWRSZWN0KTsKKyAgICB2b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAgICAgdm9p
ZCBzZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAgdm9pZCBz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpOwotICAgIHZvaWQgZGlkUmVuZGVy
RnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQg
dXBkYXRlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVw
ZGF0ZUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7Ci0gICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxh
cyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYp
OwotICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0gICAgdm9p
ZCBjcmVhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7
Ci0gICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2b2lk
IGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCk7Ci0gICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVj
b2RlciYpOwotICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgcG9zaXRpb24pOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZv
aWQgY3JlYXRlQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJik7Ci0gICAg
dm9pZCBzeW5jQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJv
bnRCdWZmZXIpOwotICAgIHZvaWQgZGVzdHJveUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExh
eWVySUQpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQsIGludCB2YWx1ZSk7CiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKSBjb25zdCB7IHJldHVybiBt
X3NjZW5lLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYp
OwotICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKLSNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCi0gICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKLSNl
bmRpZgotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7
CiAKICAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQgTWV0aG9kcy4KICNpZiBF
TkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDIx
ZGMyNjM0NTAzY2NkZTg3OTA2MmQ3OTMyM2M2YmJhYmU0ZjcyZWMuLjZlMjc5MjNiYmMwMzhhMWQ4
ZTY2NDMzMWEzMjAwYWY1ZjlhMWM5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xOSw0NCAr
MTksNyBAQAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogbWVzc2FnZXMgLT4gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgTGVnYWN5UmVjZWl2ZXIgewotICAgIFNldENvbXBv
c2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBpZCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklu
Zm8gbGF5ZXJJbmZvKQotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbih1aW50MzJfdCBp
ZCwgVmVjdG9yPHVpbnQzMl90PiBjaGlsZHJlbikKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0g
ICAgU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnModWludDMyX3QgaWQsIFdlYkNvcmU6OkZpbHRl
ck9wZXJhdGlvbnMgZmlsdGVycykKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAg
ICBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgV2ViQ29yZTo6Q3VzdG9tRmlsdGVy
UHJvZ3JhbUluZm8gcHJvZ3JhbUluZm8pCi0gICAgUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShp
bnQgaWQpCi0jZW5kaWYKLSAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkK
LSAgICBDcmVhdGVDb21wb3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlkcykKLSAgICBE
ZWxldGVDb21wb3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlkcykKLSAgICBDcmVhdGVU
aWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJ
bnRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQot
ICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvIHVw
ZGF0ZUluZm8pCi0gICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCkKLSAgICBDcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBXZWJL
aXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKLSAgICBSZW1vdmVVcGRh
dGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQotICAgIENyZWF0ZUltYWdlQmFja2luZyh1aW50NjRf
dCBpbWFnZUlEKQotICAgIFVwZGF0ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlELCBXZWJL
aXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKLSAgICBDbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzKHVpbnQ2NF90IGltYWdlSUQpCi0gICAgUmVtb3ZlSW1hZ2VCYWNraW5n
KHVpbnQ2NF90IGltYWdlSUQpCi0gICAgRGlkUmVuZGVyRnJhbWUoV2ViQ29yZTo6SW50U2l6ZSBj
b250ZW50c1NpemUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCi0gICAgRGlkQ2hhbmdl
U2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBwb3NpdGlvbikKLSAgICBTZXRMYXll
ckFuaW1hdGlvbnModWludDMyX3QgaWQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25z
IGFuaW1hdGlvbnMpCisgICAgQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMgb3BlcmF0aW9ucywgV2ViQ29yZTo6
SW50U2l6ZSBjb250ZW50c1NpemUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCiAgICAg
U2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKLQotI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKLSAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQotI2VuZGlmCi0KLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBDcmVhdGVDYW52YXModWludDMyX3QgaWQsIFdl
YkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4g
dG9rZW4pCi0gICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIp
Ci0gICAgRGVzdHJveUNhbnZhcyh1aW50MzJfdCBpZCkKLSNlbmRpZgotCi0gICAgU2V0TGF5ZXJS
ZXBhaW50Q291bnQodWludDMyX3QgbGF5ZXJJRCwgaW50IHZhbHVlKQotCi0gICAgU2V0QmFja2dy
b3VuZENvbG9yKFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRl
eCA2ZTVmYjU3MjMxYzliODk1ZjJmMDZlYTQxNTEzMDE2OTg4MTBhNDVjLi5kNTlmMjc0YmRlNmVh
YmYyNjE1Y2FiMDEzYjQ1MGJmOTQzNjA2ZTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM4LDkgKzM4LDkg
QEAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdl
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzU3VyZmFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2lu
Zy5oPgpAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VV
cGRhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAogI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKQEAgLTg2LDcgKzg1LDYgQEAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSogd2ViUGFnZSkKICAgICAsIG1fd2FpdGluZ0Zv
clVJUHJvY2Vzcyh0cnVlKQogICAgICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKICAgICAsIG1fc2hv
dWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNGcmFt
ZShmYWxzZSkKICAgICAsIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKGZhbHNl
KQogICAgICwgbV9sYXllckZsdXNoVGltZXIodGhpcywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCiAgICAgLCBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNU
aW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXJGaXJlZCkKQEAgLTI4NywxNCArMjg1LDE0IEBAIGJvb2wgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQogCiAgICAgZGVsZXRlQ29tcG9z
aXRpbmdMYXllcnMoKTsKIAotICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgeworICAgIGlmICgh
bV9vcGVyYXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBkaWRTeW5jID0gdHJ1ZTsKIAogICAg
ICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2l6ZSgpKTsKICAgICAgICAgSW50UmVjdCBjb3ZlcmVkUmVjdCA9IHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQo
KSktPmNvdmVyUmVjdCgpOwotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNv
dmVyZWRSZWN0KSk7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25z
KG1fb3BlcmF0aW9ucywgY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCkpOworICAgICAgICBtX29w
ZXJhdGlvbnMuY2xlYXIoKTsKICAgICAgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsK
LSAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKICAgICB9IGVsc2UKICAgICAgICAg
dW5sb2NrQW5pbWF0aW9ucygpOwogCkBAIC0zMjAsOSArMzE4LDggQEAgdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKCkKICAgICAgICAgfQogICAg
IH0KIAotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OkNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKG1fbGF5ZXJzVG9DcmVhdGUpKTsKKyAg
ICBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZShtX2xheWVyc1RvQ3JlYXRlKSk7CiAgICAg
bV9sYXllcnNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
IH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5
ZXJzKCkKQEAgLTMzNSw5ICszMzIsOCBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
ZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
RGVsZXRlQ29tcG9zaXRpbmdMYXllcnMobV9sYXllcnNUb0RlbGV0ZSkpOworICAgIGVucXVldWVD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkRlbGV0ZUxheWVyczo6Y3JlYXRlKG1fbGF5ZXJzVG9EZWxldGUpKTsKICAgICBtX2xheWVyc1Rv
RGVsZXRlLmNsZWFyKCk7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVy
SWZOZWVkZWQoKQpAQCAtMzQ1LDcwICszNDEsMTAgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCkKICAgICBpZiAo
bV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1f
cm9vdExheWVyLmdldCgpKS0+aWQoKSkpOworICAgIGVucXVldWVDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllcjo6Y3Jl
YXRlKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkp
OwogICAgIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKLSAgICBt
X3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5h
dGVkTGF5ZXJJbmZvJiBpbmZvKQotewotICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlv
blVwZGF0ZSkgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250
ZW50c1JlY3QubG9jYXRpb24oKSkpOwotICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlv
blVwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoaWQsIGluZm8pKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRy
ZW4oaWQsIGNoaWxkcmVuKSk7Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxheWVyKQotewotICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbiA9IGNhbnZh
c1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgSW50U2l6ZSBjYW52
YXNTaXplID0gY2FudmFzUGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKTsKLSAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpD
cmVhdGVDYW52YXMoaWQsIGNhbnZhc1NpemUsIHRva2VuKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZv
cm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7Ci0gICAgdWludDMyX3QgZnJvbnRCdWZmZXIgPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5j
b3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTeW5jQ2FudmFzKGlkLCBmcm9udEJ1ZmZlcikp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveUNhbnZhcyhDb29y
ZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveUNhbnZhcyhp
ZCkpOwotfQotI2VuZGlmCi0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRMYXll
clJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpT
ZXRMYXllclJlcGFpbnRDb3VudChpZCwgdmFsdWUpKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJGaWx0ZXJzKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsK
LSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQot
ICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoZmlsdGVycyk7Ci0jZW5kaWYKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhpZCwgZmlsdGVycykpOwotfQotI2VuZGlmCi0K
ICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKQogewpAQCAtNDM2LDcgKzM3Miw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRlck9wZXJhCiAK
ICAgICAgICAgaWYgKCFjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpKSB7CiAgICAg
ICAgICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPnNldENsaWVudCh0aGlzKTsKLSAgICAg
ICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJv
Z3JhbUluZm8oKSkpOworICAgICAgICAgICAgZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJv
Z3JhbTo6Y3JlYXRlKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSwgY3VzdG9tT3BlcmF0
aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlkYXRlZFByb2dyYW1JbmZvKCkpKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBjbGllbnQgd2FzIG5vdCBkaXNjb25u
ZWN0ZWQgdGhlbiB0aGlzIGNvb3JkaW5hdG9yIG11c3QgYmUgdGhlIGNsaWVudCBmb3IgaXQuCiAg
ICAgICAgICAgICBBU1NFUlQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5jbGllbnQoKSA9PSB0
aGlzKTsKQEAgLTQ0OSw3ICszODUsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclBybwogICAgIC8v
IEF0IHRoaXMgdGltZSB0aGUgc2hhZGVyIGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgc28gd2UgcmVt
b3ZlIGl0IGZyb20gb3VyIHNldCBhbmQKICAgICAvLyBzZW5kIGEgbWVzc2FnZSB0byB0aGUgb3Ro
ZXIgcHJvY2VzcyB0byBkZWxldGUgaXQuCiAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5yZW1v
dmUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9n
cmFtKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSkpOworICAgIGVucXVldWVDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlk
KCkpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpc2Nvbm5lY3RDdXN0
b21GaWx0ZXJQcm9ncmFtcygpCkBAIC02MTMsNDAgKzU0OSw2IEBAIFBhc3NSZWZQdHI8Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VC
YWNraW5nCiAgICAgcmV0dXJuIGltYWdlQmFja2luZzsKIH0KIAotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUlt
YWdlQmFja2luZyhpbWFnZUlEKSk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Ojp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQotewotICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2UqIHdl
YkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFjZSo+
KGNvb3JkaW5hdGVkU3VyZmFjZS5nZXQoKSk7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpI
YW5kbGUgaGFuZGxlOwotICAgIGlmICghd2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5k
bGUoaGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZUltYWdlQmFja2lu
ZyhpbWFnZUlELCBoYW5kbGUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlSUQpKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShp
bWFnZUlEKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpSZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkpOwotfQotCiB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygp
CiB7CiAgICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3Mu
ZW5kKCk7CkBAIC03MDksNDEgKzYxMSw1MSBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRp
bGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHRpbGVSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVj
dCwgdXBkYXRlSW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVt
b3ZlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQordm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9u
PiBvcGVyYXRpb24pCiB7CiAgICAgaWYgKG1faXNQdXJnaW5nKQogICAgICAgICByZXR1cm47Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXll
cklELCB0aWxlSUQpKTsKLX0KIAotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJm
YWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCi17Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3
ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2Uq
Pihjb29yZGluYXRlZFN1cmZhY2UuZ2V0KCkpOwotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6
SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFu
ZGxlKGhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVVcGRhdGVBdGxh
cyhhdGxhc0lELCBoYW5kbGUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICBzd2l0Y2ggKG9w
ZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlwZToKKyAgICAgICAgaWYgKG1fc2hvdWxkU2Vu
ZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7CisgICAgICAgICAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VT
Y3JvbGxQb3NpdGlvbjo6Y3JlYXRlKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7
CisgICAgICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nVHlwZToKKyAgICAgICAgQVNTRVJUKG1faW1hZ2VC
YWNraW5ncy5jb250YWlucyhzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24uZ2V0KCkpLT5pbWFnZUJhY2tp
bmdJRCkpOworICAgICAgICBtX2ltYWdlQmFja2luZ3MucmVtb3ZlKHN0YXRpY19jYXN0PGNvbnN0
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZyo+KG9wZXJh
dGlvbi5nZXQoKSktPmltYWdlQmFja2luZ0lEKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnNUeXBlOiB7Cisj
aWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5p
bWF0aW9ucyYgYW5pbWF0aW9ucyA9IHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyQW5pbWF0aW9ucyo+KG9wZXJhdGlvbi5nZXQoKSktPmFuaW1hdGlvbnM7
CisgICAgICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmlt
YXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5p
bWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOworICAgICAgICAgICAgaWYgKGtleWZyYW1lcy5w
cm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1l
cy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZh
bHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVl
Kj4oa2V5ZnJhbWVzLmF0KGkpKTsKKyAgICAgICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclBy
b2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0TGF5ZXJBbmltYXRpb25zKj4ob3BlcmF0aW9uLmdldCgpKS0+YW5pbWF0aW9ucyA9IGFjdGl2
ZUFuaW1hdGlvbnM7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExh
eWVyRmlsdGVyc1R5cGU6CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBjaGVja0N1
c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldExheWVyRmlsdGVycyo+KG9wZXJhdGlvbi5nZXQoKSktPmZpbHRlcnMpOwor
I2VuZGlmCisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlVXBkYXRl
QXRsYXModWludDMyX3QgYXRsYXNJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpSZW1vdmVVcGRhdGVBdGxhcyhhdGxhc0lEKSk7CisgICAgbV9vcGVyYXRp
b25zLmFwcGVuZChvcGVyYXRpb24pOwogfQogCiBXZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKQEAgLTc1MiwyNCAr
NjY0LDYgQEAgV2ViQ29yZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dmlz
aWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0CiB9CiAKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29u
c3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1h
dGlvbnMgPSBhbmltYXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKLSNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFu
aW1hdGlvbnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYga2V5ZnJhbWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7
Ci0gICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Vi
a2l0RmlsdGVyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBGaWx0
ZXJBbmltYXRpb25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJB
bmltYXRpb25WYWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7Ci0gICAgICAgICAgICBjaGVja0N1c3Rv
bUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0jZW5kaWYKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYWN0aXZlQW5p
bWF0aW9ucykpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRy
YWplY3RvcnlWZWN0b3IpCiB7CiAgICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5kaWNh
dGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4KQEAg
LTgxMiw3ICs3MDYsNyBAQCBHcmFwaGljc0xheWVyRmFjdG9yeSogQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0
aW9uKCkKIHsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAgZW5xdWV1ZUNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVx
dWVzdEFuaW1hdGlvbkZyYW1lOjpjcmVhdGUoKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjphbmltYXRpb25GcmFtZVJlYWR5KCkKQEAgLTg5NSw3ICs3ODksNyBAQCB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmly
ZWQoVGltZXI8Q29vcmRpbmF0ZQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0
QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKIHsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRC
YWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6
OmNyZWF0ZShjb2xvcikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5kZXgg
NzI5N2VlZDgxZTA1YTJlZTBmMDA1ZWVhM2RmODE4ODVmZWMzZjJiNS4uYjk5MTVhNWQwZTA5YjNk
ZjRlYmJjYjM5Y2NhN2YyYzZjOTQ1YjE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgpAQCAtNDYsOCAr
NDcsNiBAQCBjbGFzcyBXZWJQYWdlOwogCiBjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qg
OiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAogICAg
ICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAotICAgICwg
cHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgotICAg
ICwgcHVibGljIFdlYkNvcmU6OlVwZGF0ZUF0bGFzQ2xpZW50CiAgICAgLCBwdWJsaWMgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckZhY3RvcnkKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgLCBX
ZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHlDbGllbnQKQEAgLTc5LDQwICs3OCwxNCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5k
ZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV2
aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tp
bmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCBib29s
IGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1
c2hpbmdMYXllckNoYW5nZXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3Vy
ZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRpbGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVj
dCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5l
eHRGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisKICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBPVkVSUklERTsKIAotICAg
IHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lk
IHN5bmNMYXllckNoaWxkcmVuKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
TGF5ZXJBbmltYXRpb25zKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0g
ICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwg
V2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0
cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7Ci0jZW5kaWYK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBpbnQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0ZpeGVkTGF5ZXJzKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdl
YkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJD
b3JlOjpJbnRQb2ludCYpOwotCi0gICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKLSAgICB2aXJ0dWFs
IGJvb2wgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgT1ZF
UlJJREU7CiAjZW5kaWYKQEAgLTEzMSwxNCArMTA0LDE3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwg
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICAvLyBDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1h
Z2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJD
b3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
IE9WRVJSSURFOwotCiAgICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7
CiAKKyAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJv
b2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNG
bHVzaGluZ0xheWVyQ2hhbmdlczsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZp
c2libGVDb250ZW50c1JlY3QoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lm
TmVlZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRldGFj
aExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3Ms
IHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihQYXNzUmVmUHRy
PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbj4pIE9WRVJS
SURFOworCiAgICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CiAKQEAgLTE4MSw2ICsxNTcsOCBAQCBwcml2
YXRlOgogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVy
ZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV9wYWdlT3ZlcmxheUxheWVyOwogCisgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnMgbV9vcGVyYXRpb25zOworCiAgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0NyZWF0ZTsKICAgICBWZWN0b3I8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwpAQCAtMjA0LDcgKzE4Miw2
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsK
IAogICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9z
aG91bGRTeW5jRnJhbWU7CiAgICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllcjsKICAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fbGF5
ZXJGbHVzaFRpbWVyOwogICAgIFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dD4gbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186006</attachid>
            <date>2013-02-01 04:25:50 -0800</date>
            <delta_ts>2013-02-01 05:01:19 -0800</delta_ts>
            <desc>WIP: use Data to remove switch statement in encoding.</desc>
            <filename>0001-ing.patch</filename>
            <type>text/plain</type>
            <size>6202</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">RnJvbSBlYmVkNzA1ZWM3NDY1MjljNDdiZjNiZjk5MzU5Nzc1M2YwZTlhNmE5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IEZyaSwgMSBGZWIgMjAxMyAyMToxNDo0MiArMDkwMApTdWJqZWN0OiBbUEFUQ0hd
IGluZwoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDIgKy0KIC4uLi9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uLmggICAgIHwgICAxOCArKysrKysrKysrKysrKystLS0KIC4uLi9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiAuLi4vQ29vcmRp
bmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcCAgICAgICAgICB8ICAgIDggKysrKy0tLS0K
IDUgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGZlMmI0NTYuLjRjMzdlZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNiArMSw2IEBACiAy
MDEzLTAyLTAxICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCi0g
ICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFr
ZXMgVGV4dHVyZU1hcHBlclNjZW5lIHJ1biB2aWEgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bi4KKyAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcGVyZm9ybSB2aWEgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbi4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODI5NAogCiAgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
LmgKaW5kZXggZWViNDBkNS4uZDVhZmQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oCkBAIC04Niw2ICs4Niw5IEBA
IHB1YmxpYzoKICAgICBjbGFzcyBPcGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxPcGVyYXRp
b24+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgPSAwOworICAg
ICAgICB2aXJ0dWFsIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAg
ICAgIHZpcnR1YWwgdW5zaWduZWQgZGF0YVNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAg
ICAgIHZpcnR1YWwgdW5zaWduZWQgZGF0YUFsaWduKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAg
IH07CiAKICAgICBjbGFzcyBDcmVhdGVMYXllcnMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKQEAgLTk1
LDEyICs5OCwyMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENy
ZWF0ZUxheWVycyhsYXllcklEcykpOwogICAgICAgICB9CiAgICAgICAgIGV4cGxpY2l0IENyZWF0
ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQotICAgICAgICA6
IGxheWVySURzKGlkcykKLSAgICAgICAgeyB9CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZGF0
YS5sYXllcklEcyA9IGlkczsKKyAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRl
TGF5ZXJzVHlwZTsgfQogCi0gICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGxheWVy
SURzOworICAgICAgICBzdHJ1Y3QgRGF0YSB7CisgICAgICAgICAgICBWZWN0b3I8Q29vcmRpbmF0
ZWRMYXllcklEPiBsYXllcklEczsKKyAgICAgICAgfTsKKyAgICAgICAgdmlydHVhbCBjb25zdCB2
b2lkKiBkYXRhKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gJm1fZGF0YTsgfQorICAgICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGRhdGFTaXplKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gc2l6ZW9m
KERhdGEpOyB9CisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgZGF0YUFsaWduKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gX19hbGlnbm9mKERhdGEpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBEYXRhIG1fZGF0YTsKICAgICB9OwogCiAgICAgY2xhc3MgRGVsZXRlTGF5ZXJzIDogcHVibGlj
IE9wZXJhdGlvbiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuY3BwCmluZGV4IGY4NTAwOTUuLjk2YmIwMjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCkBAIC01
NzUsNyArNTc1LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmV4ZWN1dGVDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKGNvbnN0IENvb3JkaW4KIHsKICAgICBzd2l0Y2ggKG9w
ZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CiAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnNUeXBlOgotICAgICAgICBjcmVhdGVMYXllcnMoc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJz
Kj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHMpOworICAgICAgICBjcmVhdGVMYXllcnMoc3RhdGljX2Nh
c3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpEYXRh
Kj4ob3BlcmF0aW9uLT5kYXRhKCkpLT5sYXllcklEcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzVHlwZToKICAgICAg
ICAgZGVsZXRlTGF5ZXJzKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkRlbGV0ZUxheWVycyo+KG9wZXJhdGlvbiktPmxheWVySURzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCBhNzBhMTE2Li5kZGMxYWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDYgKzEsNiBAQAogMjAxMy0wMi0w
MSAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAotICAgICAgICBD
b29yZGluYXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIFRleHR1
cmVNYXBwZXJTY2VuZSBydW4gdmlhIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uCisgICAg
ICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIHBlcmZvcm0gdmlhIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb24uCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDgyOTQKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4
IDRiYTgzNTAuLjAwZTg0NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApAQCAtODQ0LDcgKzg0NCw3IEBAIHZvaWQgQXJndW1l
bnRDb2RlcjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucz46OmVuY29kZShBcmd1bWVudEVu
Y29kZXImIGVuY29kCiAKICAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5
cGUoKSkgewogICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0
ZUxheWVyc1R5cGU6Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVycyo+KG9wZXJhdGlvbiktPmxh
eWVySURzOworICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ob3BlcmF0aW9uLT5kYXRhKCkpLCBvcGVyYXRpb24t
PmRhdGFTaXplKCksIG9wZXJhdGlvbi0+ZGF0YUFsaWduKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJz
VHlwZToKICAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHM7
CkBAIC05NzMsMTAgKzk3MywxMCBAQCBib29sIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbnM+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZAogCiAgICAgICAg
IHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUxheWVyc1R5cGU6IHsKLSAgICAgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+IGlkczsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGlkcykpCisgICAg
ICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OkRhdGEg
ZGF0YTsKKyAgICAgICAgICAgIGlmICghU2ltcGxlQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OkRhdGE+OjpkZWNvZGUoZGVjb2RlciwgZGF0
YSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgb3BlcmF0aW9u
cy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpjcmVh
dGUoaWRzKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZShkYXRhLmxheWVySURzKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkRlbGV0ZUxheWVyc1R5cGU6IHsKLS0gCjEuNy45LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186014</attachid>
            <date>2013-02-01 05:01:22 -0800</date>
            <delta_ts>2013-02-01 05:07:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108294-20130201215758.patch</filename>
            <type>text/plain</type>
            <size>128276</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGVkNmY1OGM0MjQ0NzFj
OGRlMDEzOTk3YTMzNTg3YzBjMWYzY2RhYy4uYTczMmM0NmJiMGY5OTYzNWM5NTRiMTY4MzVkZTg1
NjIyZTI4ZmYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAorMjAxMy0wMi0wMSAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkgaGFzIHNvIG1hbnkgSVBDIG1lc3NhZ2VzIChlLmcuIFN5bmND
YW52YXMgYW5kCisgICAgICAgIENyZWF0ZVRpbGUpLCBhbmQgdGhlcmUgaXMgYSBsb25nIGZ1bmN0
aW9uIGNoYWluIGZyb20gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIHRvCisgICAgICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSAoNCBjbGFzc2VzKS4KKyAgICAgICAgSWYgd2Ugd2FudCB0byBh
ZGQgYSBuZXcgbWVzc2FnZSwgd2UgbmVlZCB0byBhZGQgYm9pbGVycGxhdGUgY29kZSBpbnRvIDQg
Y2xhc3Nlcy4KKworICAgICAgICBOb3cgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGhhcyBvbmx5
IG9uZSBJUEMgbWVzc2FnZTogQ29tbWl0Q29vcmlkbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuCisg
ICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUgcnVuIGFzIGZvbGxvd3M6CisgICAgICAgIDEuIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciBtYWtlcyBhIENvb3JpZG5hdGVkR3JhcGhpY3NPcGVyYXRpb24gKGUuZy4gQ3JlYXRlVGlsZSku
CisgICAgICAgIDIuIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBzdG9yZXMgYWxsIG9wZXJhdGlv
bnMuCisgICAgICAgIDMuIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBzZW5kcyBhbGwgb3BlcmF0
aW9ucyB0byBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eQorICAgICAgICBhdCB0aGUgbW9t
ZW50IG9mIGZsdXNoaW5nIHZpYSBDb21taXRDb29yaWRuYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyBt
ZXNzYWdlLgorICAgICAgICA0LiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgZXhlY3V0ZXMgYWxs
IG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlcmUgaXMgb25lIGJpZyBiZWhhdmlvciBjaGFuZ2Uu
IEFsbCBvcGVyYXRpb25zIChlLmcuIENyZWF0ZUxheWVycyBhbmQKKyAgICAgICAgU3luY0NhbnZh
cykgYXJlIHBlcmZvcm1lZCBhdCB0aGUgc2FtZSB0aW1lLCB3aGVuCisgICAgICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0Q29vcmlkbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMgaXMg
Y2FsbGVkLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgY29tcG9zaXRpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJv
eUNhbnZhc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmg6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKToKKyAgICAgICAgKE9wZXJhdGlvbik6CisgICAg
ICAgIChDcmVhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpDcmVhdGVMYXllcnMpOgor
ICAgICAgICAoRGVsZXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6RGVsZXRlTGF5ZXJz
KToKKyAgICAgICAgKFNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OlNldFJvb3RM
YXllcik6CisgICAgICAgIChTZXRMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlOjpT
ZXRMYXllclN0YXRlKToKKyAgICAgICAgKFNldExheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyQ2hpbGRyZW46OlNldExheWVyQ2hpbGRyZW4pOgorICAgICAgICAoQ3JlYXRlVGlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVU
aWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6Q3JlYXRlVGlsZTo6Q3JlYXRlVGlsZSk6CisgICAgICAgIChVcGRhdGVUaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpVcGRhdGVUaWxlOjpVcGRhdGVUaWxlKToKKyAgICAgICAgKFJlbW92ZVRpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZVRpbGU6OlJlbW92ZVRpbGUpOgorICAgICAgICAoQ3JlYXRlVXBkYXRlQXRsYXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRl
QXRsYXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Q3JlYXRlVXBkYXRlQXRsYXMpOgorICAgICAgICAo
UmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhczo6UmVtb3Zl
VXBkYXRlQXRsYXMpOgorICAgICAgICAoQ3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZUltYWdlQmFja2luZzo6Q3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFVwZGF0
ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmc6OlVwZGF0ZUlt
YWdlQmFja2luZyk6CisgICAgICAgIChDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNr
aW5nQ29udGVudHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzOjpDbGVhckltYWdlQmFja2lu
Z0NvbnRlbnRzKToKKyAgICAgICAgKFJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmc6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVJbWFnZUJhY2tpbmc6OlJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChTZXRMYXll
ckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpTZXRMYXllckFu
aW1hdGlvbnMpOgorICAgICAgICAoUmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFt
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAg
ICAgKENyZWF0ZUNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OkNyZWF0ZUNhbnZhcyk6Cisg
ICAgICAgIChTeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlN5bmNDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpTeW5jQ2FudmFzKToKKyAgICAg
ICAgKERlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OkRlc3Ryb3lDYW52YXMp
OgorICAgICAgICAoU2V0TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyczo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyczo6
U2V0TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OkNyZWF0ZUN1c3Rv
bUZpbHRlclByb2dyYW0pOgorICAgICAgICAoUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6UmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChTZXRMYXllclJlcGFpbnRDb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRD
b3VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyUmVwYWludENvdW50OjpTZXRMYXllclJlcGFpbnRDb3VudCk6CisgICAg
ICAgIChTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9y
OjpTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hh
bmdlU2Nyb2xsUG9zaXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbjo6RGlkQ2hhbmdlU2Ny
b2xsUG9zaXRpb24pOgorICAgICAgICAoUXVldWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bnM6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uczo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbnM6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnM6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnM6OmF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAgICAgUmVtb3ZlIG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiBiZWNh
dXNlCisgICAgICAgICAgICBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbigpIGlzIGNhbGxlZCBhdCB0
aGUgbW9tZW50IG9mIGZsdXNoaW5nLgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmV4ZWN1dGVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0RHJhd3NCYWNr
Z3JvdW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZElt
YWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSk6CisgICAgICAgICAgICBXZSBkb24ndCBk
ZWFsIHdpdGggdGhlIGNhc2Ugd2hlbiBzZW5kaW5nIGFuIFVwZGF0ZUltYWdlQmFja2luZyBvcGVy
YXRpb24gZmFpbHMuCisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6
Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOgorICAgICAgICAoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMpOgorICAgICAgICAgICAgV2UgZG9uJ3QgZGVh
bCB3aXRoIHRoZSBjYXNlIHdoZW4gc2VuZGluZyBhIENyZWF0ZVVwZGF0ZUF0bGFzIG9wZXJhdGlv
biBmYWlscy4KKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMpOgor
ICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1Vw
ZGF0ZUF0bGFzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFVwZGF0ZUF0bGFzKToK
KwogMjAxMy0wMi0wMSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS11bR1N0cmVhbWVyXSBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyR3RrIGlt
cGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzUzMjY3NzhhODM5NDQ0OTMyZTcwYjg4MGNiODlj
ZmZiMDk4NDJlOS4uNGM5MjY5YTVhYmY2OWI3ODAzZjU3OTA2ZTEyODk4MDkwMzEyNjZmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTAyLTAxICBIdWFuZyBEb25nc3VuZyAgPGx1
eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIHBl
cmZvcm0gdmlhIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgyOTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eSBoYXMgc28gbWFueSBJUEMgbWVzc2FnZXMgKGUuZy4gU3luY0NhbnZhcyBhbmQKKyAgICAg
ICAgQ3JlYXRlVGlsZSksIGFuZCB0aGVyZSBpcyBhIGxvbmcgZnVuY3Rpb24gY2hhaW4gZnJvbSBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgdG8KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lICg0IGNsYXNzZXMpLgorICAgICAgICBJZiB3ZSB3YW50IHRvIGFkZCBhIG5ldyBtZXNzYWdl
LCB3ZSBuZWVkIHRvIGFkZCBib2lsZXJwbGF0ZSBjb2RlIGludG8gNCBjbGFzc2VzLgorCisgICAg
ICAgIE5vdyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgaGFzIG9ubHkgb25lIElQQyBtZXNzYWdl
OiBDb21taXRDb29yaWRuYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy4KKyAgICAgICAgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBydW4gYXMgZm9s
bG93czoKKyAgICAgICAgMS4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIGEgQ29vcmlk
bmF0ZWRHcmFwaGljc09wZXJhdGlvbiAoZS5nLiBDcmVhdGVUaWxlKS4KKyAgICAgICAgMi4gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IHN0b3JlcyBhbGwgb3BlcmF0aW9ucy4KKyAgICAgICAgMy4g
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHNlbmRzIGFsbCBvcGVyYXRpb25zIHRvIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5CisgICAgICAgIGF0IHRoZSBtb21lbnQgb2YgZmx1c2hpbmcg
dmlhIENvbW1pdENvb3JpZG5hdGVkR3JhcGhpY3NPcGVyYXRpb25zIG1lc3NhZ2UuCisgICAgICAg
IDQuIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBleGVjdXRlcyBhbGwgb3BlcmF0aW9ucy4KKwor
ICAgICAgICBUaGVyZSBpcyBvbmUgYmlnIGJlaGF2aW9yIGNoYW5nZS4gQWxsIG9wZXJhdGlvbnMg
KGUuZy4gQ3JlYXRlTGF5ZXJzIGFuZAorICAgICAgICBTeW5jQ2FudmFzKSBhcmUgcGVyZm9ybWVk
IGF0IHRoZSBzYW1lIHRpbWUsIHdoZW4KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Ojpjb21taXRDb29yaWRuYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyBpcyBjYWxsZWQuCisKKyAgICAg
ICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1l
bnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOgorICAgICAgICAgICAg
RW5jb2RpbmcgVXBkYXRlSW1hZ2VCYWNraW5nIGFuZCBDcmVhdGVVcGRhdGVBdGxhcyBjYW4gZmFp
bCBiZWNhdXNlCisgICAgICAgICAgICBlbmNvZGluZyBXZWJDb29yZGluYXRlZFN1cmZhY2U6Okhh
bmRsZSBjYW4gZmFpbCwgYnV0IHdlIGRvbid0CisgICAgICAgICAgICByZWNvdmVyIGluIHRoZSBj
YXNlLgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6Cisg
ICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJz
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZWxldGVDb21w
b3NpdGluZ0xheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3hpZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24pOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzY2hlZHVsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAg
ICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisKIDIwMTMtMDItMDEgIEd3YW5nIFlvb24g
SHdhbmcgIDxyeXVtaWVsQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFtFRkxdW1dLMl0gTWlu
aUJyb3dzZXIgc2VnZmF1bHRzIG9uIGxvYWRpbmcgZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXgg
ZmE4OTNhODBiZDAwZjI0Y2VhYTk4Y2YxNzE4Yjk4YjVmMjM5OWIxZi4uNWU0MjdjMWM5MDRkYWEx
ZTNlZDk1N2ViZGM1YjFhYTc5NTczODBlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0yMjQ0LDYgKzIyNDQs
OCBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQXJlYUFsbG9jYXRvci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbi5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJ
bmZvLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmNwcAppbmRleCAzNzM2ZjI2MDRjMGMxMDQzOTk5NTdiOThhMjUyNWVlN2RiY2Rk
OWJiLi5lZTY5NzQwY2Q4YmYxMTU2MzIyMTk3NDgwZmI2NmYzYjcxYzI1NjcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApA
QCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hp
bGRyZW4oKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsr
aSkKICAgICAgICAgY2hpbGRJRHMuYXBwZW5kKHRvQ29vcmRpbmF0ZWRMYXllcklEKGNoaWxkcmVu
KClbaV0pKTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllckNoaWxkcmVuKG1faWQsIGNo
aWxkSURzKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOjpj
cmVhdGUobV9pZCwgY2hpbGRJRHMpKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAg
LTUwOSw3ICs1MDksNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRl
cnMoKQogICAgIGlmICghbV9zaG91bGRTeW5jRmlsdGVycykKICAgICAgICAgcmV0dXJuOwogICAg
IG1fc2hvdWxkU3luY0ZpbHRlcnMgPSBmYWxzZTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5
ZXJGaWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0TGF5ZXJGaWx0ZXJzOjpjcmVhdGUobV9pZCwgZmlsdGVycygpKSk7CiB9CiAjZW5kaWYKIApA
QCAtNTcwLDcgKzU3MCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5
ZXJTdGF0ZSgpCiAgICAgICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwogICAgIG1fbGF5ZXJJ
bmZvLnNob3dSZXBhaW50Q291bnRlciA9IGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCk7CiAKLSAg
ICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5mbyk7CisgICAg
bV9jb29yZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6Y3JlYXRlKG1faWQsIG1fbGF5
ZXJJbmZvKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREZWJ1Z0Jv
cmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoKQpAQCAtNTg3LDcgKzU4Nyw3IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCiAKICAgICBt
X3Nob3VsZFN5bmNBbmltYXRpb25zID0gZmFsc2U7CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5zZXRM
YXllckFuaW1hdGlvbnMobV9pZCwgbV9hbmltYXRpb25zKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5l
bnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnM6OmNyZWF0ZShtX2lkLCBtX2FuaW1hdGlvbnMpKTsK
IH0KIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQpAQCAtNjA0LDcgKzYwNCw5IEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKCkKICAgICBpZiAoIW1faXNWYWxp
ZENhbnZhcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb29yZGluYXRvci0+c3luY0NhbnZh
cyhtX2lkLCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOworICAgIEFTU0VSVChtX2NhbnZhc1BsYXRm
b3JtTGF5ZXIpOworICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gbV9jYW52YXNQbGF0Zm9ybUxh
eWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVl
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTeW5jQ2FudmFzOjpjcmVhdGUobV9pZCwgZnJvbnRCdWZmZXIpKTsKIH0KIAogdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZCgpCkBAIC02MTMsNyAr
NjE1LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5l
ZWRlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2lzVmFsaWRDYW52YXMpIHsKLSAg
ICAgICAgbV9jb29yZGluYXRvci0+ZGVzdHJveUNhbnZhcyhtX2lkKTsKKyAgICAgICAgbV9jb29y
ZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6Y3JlYXRlKG1faWQpKTsKICAgICAgICAg
bV9pc1ZhbGlkQ2FudmFzID0gZmFsc2U7CiAgICAgfQogCkBAIC02MjcsNyArNjI5LDkgQEAgdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUNhbnZhc0lmTmVlZGVkKCkKIAogICAg
IEFTU0VSVChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOwogICAgIGlmICghbV9pc1ZhbGlkQ2FudmFz
KSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZUNhbnZhcyhtX2lkLCBtX2NhbnZhc1Bs
YXRmb3JtTGF5ZXIpOworICAgICAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBtX2NhbnZhc1BsYXRm
b3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7CisgICAgICAgIEdyYXBoaWNzU3VyZmFjZVRv
a2VuIHRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigp
OworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OmNyZWF0ZSht
X2lkLCBjYW52YXNTaXplLCB0b2tlbikpOwogICAgICAgICBtX2lzVmFsaWRDYW52YXMgPSB0cnVl
OwogICAgIH0KIApAQCAtNzM2LDcgKzc0MCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNv
bnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQogewogICAgIGlmIChpc1Nob3dpbmdS
ZXBhaW50Q291bnRlcigpICYmICF1cGRhdGVkUmVjdHMuaXNFbXB0eSgpKQotICAgICAgICBtX2Nv
b3JkaW5hdG9yLT5zZXRMYXllclJlcGFpbnRDb3VudChpZCgpLCBpbmNyZW1lbnRSZXBhaW50Q291
bnQoKSk7CisgICAgICAgIG1fY29vcmRpbmF0b3ItPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENv
dW50OjpjcmVhdGUoaWQoKSwgaW5jcmVtZW50UmVwYWludENvdW50KCkpKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVD
cmVhdGlvbigpCkBAIC03OTUsMjEgKzc5OSwyMSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6Y3JlYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbgog
ewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+
aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVUaWxl
KGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3QpOworICAgIG1fY29vcmRpbmF0b3It
PmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZVRpbGU6OmNyZWF0ZShpZCgpLCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRh
dGVJbmZvKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxl
KHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNv
bnN0IEludFJlY3QmIHRpbGVSZWN0KQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAg
ICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICBt
X2Nvb3JkaW5hdG9yLT51cGRhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJl
Y3QpOworICAgIG1fY29vcmRpbmF0b3ItPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OmNyZWF0ZShpZCgp
LCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCkKIHsKICAgICBBU1NFUlQo
bV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXll
ckNoYW5nZXMoKSB8fCBtX2lzUHVyZ2luZyk7Ci0gICAgbV9jb29yZGluYXRvci0+cmVtb3ZlVGls
ZShpZCgpLCB0aWxlSUQpOworICAgIG1fY29vcmRpbmF0b3ItPmVucXVldWVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGU6
OmNyZWF0ZShpZCgpLCB0aWxlSUQpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAppbmRleCBhNTUxZDM1MTFhZGE2NDRlYmY3MzJi
ZWY2MmU4NmFkOWQ4N2YxYTIwLi4zNzg5YmRmNDY5NDYzYjE0ZGY4MmI5MTk2NDJkNTVlYjcwMGFj
MTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcl9oCiAjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCiAKKyNpbmNsdWRlICJD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgogI2luY2x1ZGUg
IkNvb3JkaW5hdGVkVGlsZS5oIgpAQCAtNDMsMzQgKzQ0LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjsKLWNsYXNzIEdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zOwogCi1jbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgewor
Y2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IDogcHVibGljIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNG
bHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0ID0gMDsKLQotICAgIC8vIENvb3JkaW5hdGVkVGls
ZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3Qm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVp
bnQzMl90IHRpbGVJRCkgPSAwOwotCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZUNvbnRl
bnRzUmVjdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENv
b3JkaW5hdGVkTGF5ZXJJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGls
ZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+
JikgPSAwOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xh
eWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSA9
IDA7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgUGxhdGZvcm1MYXllciopID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFBsYXRmb3JtTGF5
ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklEKSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlcGFpbnRDb3Vu
dChDb29yZGluYXRlZExheWVySUQsIGludCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExh
eWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmlt
YXRpb25zJikgPSAwOwotCiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkg
PSAwOwogICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVu
dFVwZGF0ZShjb25zdCBJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMy
X3QmIGF0bGFzSUQsIEludFBvaW50JikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWViNDBk
NWQ2ZGYxM2FkNDBjYzhlNTllOWI3MWMwOTVhY2ZkMGFhYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgKQEAgLTAsMCArMSw1MTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKyNkZWZpbmUgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbl9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkU3VyZmFjZS5oIgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDdXN0
b21GaWx0ZXJQcm9ncmFtSW5mby5oIgorI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQor
I2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKKyNlbmRpZgorI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2VUb2tlbi5oIgorI2lu
Y2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24geworcHVibGljOgorICAgIGVudW0gT3Bl
cmF0aW9uVHlwZSB7CisgICAgICAgIENyZWF0ZUxheWVyc1R5cGUsCisgICAgICAgIERlbGV0ZUxh
eWVyc1R5cGUsCisgICAgICAgIFNldFJvb3RMYXllclR5cGUsCisgICAgICAgIFNldExheWVyU3Rh
dGVUeXBlLAorICAgICAgICBTZXRMYXllckNoaWxkcmVuVHlwZSwKKyAgICAgICAgQ3JlYXRlVGls
ZVR5cGUsCisgICAgICAgIFVwZGF0ZVRpbGVUeXBlLAorICAgICAgICBSZW1vdmVUaWxlVHlwZSwK
KyAgICAgICAgQ3JlYXRlVXBkYXRlQXRsYXNUeXBlLAorICAgICAgICBSZW1vdmVVcGRhdGVBdGxh
c1R5cGUsCisgICAgICAgIENyZWF0ZUltYWdlQmFja2luZ1R5cGUsCisgICAgICAgIFVwZGF0ZUlt
YWdlQmFja2luZ1R5cGUsCisgICAgICAgIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHNUeXBlLAor
ICAgICAgICBSZW1vdmVJbWFnZUJhY2tpbmdUeXBlLAorICAgICAgICBTZXRMYXllckFuaW1hdGlv
bnNUeXBlLAorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICAgICAgUmVx
dWVzdEFuaW1hdGlvbkZyYW1lVHlwZSwKKyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQorICAgICAgICBDcmVhdGVDYW52YXNUeXBlLAorICAgICAgICBTeW5jQ2FudmFzVHlwZSwKKyAg
ICAgICAgRGVzdHJveUNhbnZhc1R5cGUsCisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CisgICAgICAgIFNldExheWVyRmlsdGVyc1R5cGUsCisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCisgICAgICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlLAorICAgICAgICBS
ZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSwKKyNlbmRpZgorICAgICAgICBTZXRMYXllclJl
cGFpbnRDb3VudFR5cGUsCisgICAgICAgIFNldEJhY2tncm91bmRDb2xvclR5cGUsCisgICAgICAg
IERpZENoYW5nZVNjcm9sbFBvc2l0aW9uVHlwZSwKKyAgICAgICAgTm9uZVR5cGUKKyAgICB9Owor
CisgICAgY2xhc3MgT3BlcmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8T3BlcmF0aW9uPiB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0ID0gMDsKKyAgICB9OworCisg
ICAgY2xhc3MgQ3JlYXRlTGF5ZXJzIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVMYXllcnM+IGNyZWF0ZShjb25zdCBWZWN0
b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgbGF5ZXJJRHMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlTGF5ZXJzKGxheWVySURzKSk7CisgICAgICAgIH0K
KyAgICAgICAgZXhwbGljaXQgQ3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+JiBpZHMpCisgICAgICAgIDogbGF5ZXJJRHMoaWRzKQorICAgICAgICB7IH0KKworICAg
ICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
Z2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVyc1R5cGU7IH0KKworICAgICAgICBWZWN0b3I8Q29v
cmRpbmF0ZWRMYXllcklEPiBsYXllcklEczsKKyAgICB9OworCisgICAgY2xhc3MgRGVsZXRlTGF5
ZXJzIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEZWxldGVMYXllcnM+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYgbGF5ZXJJRHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRGVsZXRlTGF5ZXJzKGxheWVySURzKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQg
RGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCisgICAg
ICAgIDogbGF5ZXJJRHMoaWRzKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRl
bGV0ZUxheWVyc1R5cGU7IH0KKworICAgICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBs
YXllcklEczsKKyAgICB9OworCisgICAgY2xhc3MgU2V0Um9vdExheWVyIDogcHVibGljIE9wZXJh
dGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRSb290TGF5
ZXI+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRSb290TGF5ZXIobGF5ZXJJRCkpOworICAgICAg
ICB9CisgICAgICAgIGV4cGxpY2l0IFNldFJvb3RMYXllcihDb29yZGluYXRlZExheWVySUQgaWQp
CisgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5
cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRSb290TGF5ZXJUeXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVy
SUQ7CisgICAgfTsKKworICAgIGNsYXNzIFNldExheWVyU3RhdGUgOiBwdWJsaWMgT3BlcmF0aW9u
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldExheWVyU3RhdGU+
IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXll
ckluZm8mIGxheWVySW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTZXRMYXllclN0YXRlKGxheWVySUQsIGxheWVySW5mbykpOworICAgICAgICB9CisgICAg
ICAgIFNldExheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRl
ZExheWVySW5mbyYgaW5mbykKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAsIGxheWVy
SW5mbyhpbmZvKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3Rh
dGVUeXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAg
IENvb3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVySW5mbzsKKyAgICB9OworCisKKyAgICBjbGFzcyBT
ZXRMYXllckNoaWxkcmVuIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRMYXllckNoaWxkcmVuPiBjcmVhdGUoQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJl
bikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllckNo
aWxkcmVuKGxheWVySUQsIGNoaWxkcmVuKSk7CisgICAgICAgIH0KKyAgICAgICAgU2V0TGF5ZXJD
aGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+JiBjaGlsZHJlblZlY3RvcikKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAs
IGNoaWxkcmVuKGNoaWxkcmVuVmVjdG9yKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFs
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9u
VHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlNldExheWVyQ2hpbGRyZW5UeXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQ7CisgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGNoaWxkcmVuOwor
ICAgIH07CisKKyAgICBjbGFzcyBDcmVhdGVUaWxlIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVUaWxlPiBjcmVhdGUoQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZVRpbGUobGF5ZXJJRCwgdGls
ZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworICAgICAgICB9CisgICAgICAgIENyZWF0ZVRp
bGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCB0aWxlLCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgaW5mbykKKyAgICAgICAgOiBsYXllcklEKGlk
KQorICAgICAgICAsIHRpbGVJRCh0aWxlKQorICAgICAgICAsIHRpbGVSZWN0KHJlY3QpCisgICAg
ICAgICwgdXBkYXRlSW5mbyhpbmZvKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlw
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZVRpbGVUeXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7
CisgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAg
ICAgICAgU3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICB9OworCisgICAgY2xhc3Mg
VXBkYXRlVGlsZSA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VXBkYXRlVGlsZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBVcGRhdGVUaWxlKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0
ZUluZm8pKTsKKyAgICAgICAgfQorICAgICAgICBVcGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgdWludDMyX3QgdGlsZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mIGluZm8pCisgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgLCB0aWxlSUQo
dGlsZSkKKyAgICAgICAgLCB0aWxlUmVjdChyZWN0KQorICAgICAgICAsIHVwZGF0ZUluZm8oaW5m
bykKKyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlVHlwZTsgfQor
CisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICB1aW50MzJfdCB0
aWxlSUQ7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3Q7CisgICAgICAgIFN1cmZhY2VVcGRhdGVJ
bmZvIHVwZGF0ZUluZm87CisgICAgfTsKKworICAgIGNsYXNzIFJlbW92ZVRpbGUgOiBwdWJsaWMg
T3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92
ZVRpbGU+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZVRpbGUo
bGF5ZXJJRCwgdGlsZUlEKSk7CisgICAgICAgIH0KKyAgICAgICAgUmVtb3ZlVGlsZShDb29yZGlu
YXRlZExheWVySUQgaWQsIHVpbnQzMl90IHRpbGUpCisgICAgICAgIDogbGF5ZXJJRChpZCkKKyAg
ICAgICAgLCB0aWxlSUQodGlsZSkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVUaWxlVHlwZTsgfQorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOwor
ICAgICAgICB1aW50MzJfdCB0aWxlSUQ7CisgICAgfTsKKworICAgIGNsYXNzIENyZWF0ZVVwZGF0
ZUF0bGFzIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDcmVhdGVVcGRhdGVBdGxhcz4gY3JlYXRlKHVpbnQzMl90IGF0bGFzSUQsIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIHN1cmZh
Y2UpKTsKKyAgICAgICAgfQorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBpZCwg
UGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKKyAgICAg
ICAgOiBhdGxhc0lEKGlkKQorICAgICAgICAsIHN1cmZhY2UoY29vcmRpbmF0ZWRTdXJmYWNlKQor
ICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzVHlwZTsg
fQorCisgICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7CisgICAgICAgIFJlZlB0cjxDb29yZGluYXRl
ZFN1cmZhY2U+IHN1cmZhY2U7CisgICAgfTsKKworICAgIGNsYXNzIFJlbW92ZVVwZGF0ZUF0bGFz
IDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSZW1vdmVVcGRhdGVBdGxhcz4gY3JlYXRlKHVpbnQzMl90IGF0bGFzSUQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3ZlVXBkYXRlQXRsYXMoYXRs
YXNJRCkpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0IFJlbW92ZVVwZGF0ZUF0bGFzKHVp
bnQzMl90IGlkKQorICAgICAgICA6IGF0bGFzSUQoaWQpCisgICAgICAgIHsgfQorCisgICAgICAg
IHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRP
cGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXNUeXBlOyB9CisKKyAgICAgICAgdWludDMyX3Qg
YXRsYXNJRDsKKyAgICB9OworCisgICAgY2xhc3MgQ3JlYXRlSW1hZ2VCYWNraW5nIDogcHVibGlj
IE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVh
dGVJbWFnZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFj
a2luZ0lEKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0
ZUltYWdlQmFja2luZyhpbWFnZUJhY2tpbmdJRCkpOworICAgICAgICB9CisgICAgICAgIGV4cGxp
Y2l0IENyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkKQorICAg
ICAgICA6IGltYWdlQmFja2luZ0lEKGlkKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFs
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9u
VHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUltYWdlQmFja2luZ1R5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIGltYWdlQmFja2luZ0lEOworICAgIH07CisKKyAgICBjbGFzcyBVcGRhdGVJbWFn
ZUJhY2tpbmcgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFVwZGF0ZUltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBz
dXJmYWNlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVwZGF0
ZUltYWdlQmFja2luZyhpbWFnZUJhY2tpbmdJRCwgc3VyZmFjZSkpOworICAgICAgICB9CisgICAg
ICAgIFVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkLCBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQorICAgICAgICA6
IGltYWdlQmFja2luZ0lEKGlkKQorICAgICAgICAsIHN1cmZhY2UoY29vcmRpbmF0ZWRTdXJmYWNl
KQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZ1R5
cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lE
OworICAgICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlOworICAgIH07CisK
KyAgICBjbGFzcyBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzIDogcHVibGljIE9wZXJhdGlvbiB7
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGVhckltYWdlQmFja2lu
Z0NvbnRlbnRzPiBjcmVhdGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJ
RCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzKGltYWdlQmFja2luZ0lEKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhw
bGljaXQgQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGlkKQorICAgICAgICA6IGltYWdlQmFja2luZ0lEKGlkKQorICAgICAgICB7IH0KKworICAgICAg
ICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0
T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHNUeXBlOyB9CisKKyAgICAgICAg
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRDsKKyAgICB9OworCisgICAg
Y2xhc3MgUmVtb3ZlSW1hZ2VCYWNraW5nIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVJbWFnZUJhY2tpbmc+IGNyZWF0ZShD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lEKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZUltYWdlQmFja2luZyhpbWFnZUJhY2tp
bmdJRCkpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0IFJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkKQorICAgICAgICA6IGltYWdlQmFja2luZ0lEKGlk
KQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZ1R5
cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lE
OworICAgIH07CisKKyAgICBjbGFzcyBTZXRMYXllckFuaW1hdGlvbnMgOiBwdWJsaWMgT3BlcmF0
aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldExheWVyQW5p
bWF0aW9ucz4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFwaGlj
c0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYW5pbWF0aW9ucykp
OworICAgICAgICB9CisgICAgICAgIFNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVy
SUQgaWQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBsYXllckFuaW1hdGlvbnMpCisg
ICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgLCBhbmltYXRpb25zKGxheWVyQW5pbWF0aW9u
cykKKyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnNU
eXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnM7CisgICAgfTsKKworI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUg
OiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZT4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKKyAgICAgICAgeyB9CisKKyAgICAg
ICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdl
dE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUeXBlOyB9CisgICAgfTsKKyNlbmRp
ZgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgY2xhc3MgQ3JlYXRlQ2FudmFzIDog
cHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDcmVhdGVDYW52YXM+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3Qg
SW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUNhbnZhcyhs
YXllcklELCBjYW52YXNTaXplLCB0b2tlbikpOworICAgICAgICB9CisgICAgICAgIENyZWF0ZUNh
bnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzU3VyZmFjZVRva2VuJiBzdXJmYWNlVG9rZW4pCisgICAgICAgIDogbGF5ZXJJRChpZCkK
KyAgICAgICAgLCBjYW52YXNTaXplKHNpemUpCisgICAgICAgICwgdG9rZW4oc3VyZmFjZVRva2Vu
KQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhc1R5cGU7IH0K
KworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgSW50U2l6ZSBj
YW52YXNTaXplOworICAgICAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbjsKKyAgICB9Owor
CisgICAgY2xhc3MgU3luY0NhbnZhcyA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3luY0NhbnZhcz4gY3JlYXRlKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTeW5jQ2FudmFzKGxheWVySUQsIGZyb250QnVmZmVy
KSk7CisgICAgICAgIH0KKyAgICAgICAgU3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQs
IHVpbnQzMl90IGZyb250QnVmZmVySGFuZGxlKQorICAgICAgICA6IGxheWVySUQoaWQpCisgICAg
ICAgICwgZnJvbnRCdWZmZXIoZnJvbnRCdWZmZXJIYW5kbGUpCisgICAgICAgIHsgfQorCisgICAg
ICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBn
ZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6U3luY0NhbnZhc1R5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZExh
eWVySUQgbGF5ZXJJRDsKKyAgICAgICAgdWludDMyX3QgZnJvbnRCdWZmZXI7CisgICAgfTsKKwor
ICAgIGNsYXNzIERlc3Ryb3lDYW52YXMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlc3Ryb3lDYW52YXM+IGNyZWF0ZShDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBEZXN0cm95Q2FudmFzKGxheWVySUQpKTsKKyAgICAgICAgfQorICAgICAgICBleHBs
aWNpdCBEZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKKyAgICAgICAgOiBsYXll
cklEKGlkKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXNU
eXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgfTsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGNsYXNzIFNldExheWVyRmlsdGVy
cyA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2V0TGF5ZXJGaWx0ZXJzPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQs
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJGaWx0ZXJzKGxheWVySUQsIGZpbHRlcnMpKTsK
KyAgICAgICAgfQorICAgICAgICBTZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJPcGVyYXRpb25zKQorICAgICAgICA6IGxh
eWVySUQoaWQpCisgICAgICAgICwgZmlsdGVycyhmaWx0ZXJPcGVyYXRpb25zKQorICAgICAgICB7
IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyc1R5cGU7IH0KKworICAgICAg
ICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBm
aWx0ZXJzOworICAgIH07CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgY2xhc3MgQ3Jl
YXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gY3Jl
YXRlKGludCBjdXN0b21GaWx0ZXJQcm9ncmFtSUQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1J
bmZvJiBwcm9ncmFtSW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1JRCwgcHJv
Z3JhbUluZm8pKTsKKyAgICAgICAgfQorICAgICAgICBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFt
KGludCBwcm9ncmFtSUQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBpbmZvKQorICAg
ICAgICA6IGN1c3RvbUZpbHRlclByb2dyYW1JRChwcm9ncmFtSUQpCisgICAgICAgICwgcHJvZ3Jh
bUluZm8oaW5mbykKKyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0
b21GaWx0ZXJQcm9ncmFtVHlwZTsgfQorCisgICAgICAgIGludCBjdXN0b21GaWx0ZXJQcm9ncmFt
SUQ7CisgICAgICAgIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvIHByb2dyYW1JbmZvOworICAgIH07
CisKKyAgICBjbGFzcyBSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtIDogcHVibGljIE9wZXJhdGlv
biB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVDdXN0b21GaWx0ZXJQcm9n
cmFtKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0
IFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IHByb2dyYW1JRCkKKyAgICAgICAgOiBjdXN0
b21GaWx0ZXJQcm9ncmFtSUQocHJvZ3JhbUlEKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0
dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0
aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlOyB9CisKKyAgICAgICAgaW50IGN1
c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICB9OworI2VuZGlmCisjZW5kaWYKKworICAgIGNsYXNz
IFNldExheWVyUmVwYWludENvdW50IDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRMYXllclJlcGFpbnRDb3VudD4gY3JlYXRlKENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBpbnQgcmVwYWludENvdW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldExheWVyUmVwYWludENvdW50KGxheWVy
SUQsIHJlcGFpbnRDb3VudCkpOworICAgICAgICB9CisgICAgICAgIFNldExheWVyUmVwYWludENv
dW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IGNvdW50KQorICAgICAgICA6IGxheWVySUQo
aWQpCisgICAgICAgICwgcmVwYWludENvdW50KGNvdW50KQorICAgICAgICB7IH0KKworICAgICAg
ICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0
T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50VHlwZTsgfQorCisgICAgICAgIENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICBpbnQgcmVwYWludENvdW50OworICAgIH07
CisKKyAgICBjbGFzcyBTZXRCYWNrZ3JvdW5kQ29sb3IgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldEJhY2tncm91bmRDb2xvcj4g
Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKKyAgICAgICAgfQorICAg
ICAgICBleHBsaWNpdCBTZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikKKyAgICAgICAgOiBjb2xvcihiYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgIHsgfQorCisg
ICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yVHlwZTsgfQorCisgICAgICAgIENv
bG9yIGNvbG9yOworICAgIH07CisKKyAgICBjbGFzcyBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiA6
IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaWRDaGFu
Z2VTY3JvbGxQb3NpdGlvbihwb3NpdGlvbikpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0
IERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9u
KQorICAgICAgICA6IHBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKQorICAgICAgICB7IH0KKworICAg
ICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
Z2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uVHlwZTsgfQorCisgICAgICAg
IEZsb2F0UG9pbnQgcG9zaXRpb247CisgICAgfTsKKworICAgIGNsYXNzIFF1ZXVlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbihQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlv
bj4pID0gMDsKKyAgICB9OworCit9OyAvLyBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZgorCisjZW5kaWYgLy8gQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGRmNzdm
MDRmNjNjYjA2ZGNhODY0MDVkZDFlZDk4M2YzNzM3OWY5NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uc19oCisjZGVmaW5lIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbnMgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6T3BlcmF0aW9uPiBvcGVyYXRpb24pIHsgbV9vcGVyYXRpb25zLmFwcGVuZChvcGVy
YXRpb24pOyB9CisgICAgdm9pZCBjbGVhcigpIHsgbV9vcGVyYXRpb25zLmNsZWFyKCk7IH0KKwor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7
IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5zaXplKCk7
IH0KKyAgICBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb24qIGF0
KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPCBtX29wZXJhdGlvbnMuc2l6ZSgp
ID8gbV9vcGVyYXRpb25zLmF0KGluZGV4KS5nZXQoKSA6IDA7IH0KKworcHJpdmF0ZToKKyAgICBW
ZWN0b3I8UmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbj4gPiBt
X29wZXJhdGlvbnM7Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25zX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCBkMjE1ZmIzNjEzYjkwN2I2YjFkOWY1ZTg5
MTE5ZGJiMjY0NGY0NTk0Li5mODUwMDk1YTY5OTU0OGM5Nzk2Mzk0ZjliZTkwMzhiMWJmYzJlZWM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5oIgogCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKQEAgLTIxNSw3ICsyMTYsNyBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygp
CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIHsKLSAgICBtX3BlbmRpbmdSZW5kZXJlZENv
bnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBtX3JlbmRlcmVkQ29udGVudHNT
Y3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CkBAIC01NTQsOSArNTU1LDEwIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21t
aXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpCiAgICAgbV9iYWNraW5nU3RvcmVzV2l0
aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpmbHVzaExheWVyQ2hhbmdlcygpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoY29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCiB7Ci0gICAgbV9yZW5kZXJlZENvbnRlbnRzU2Ny
b2xsUG9zaXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRpb25zLnNpemUoKTsgaSsrKQorICAgICAg
ICBleGVjdXRlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihvcGVyYXRpb25zLmF0KGkpKTsK
IAogICAgIC8vIFNpbmNlIHRoZSBmcmFtZSBoYXMgbm93IGJlZW4gcmVuZGVyZWQsIHdlIGNhbiBz
YWZlbHkgdW5sb2NrIHRoZSBhbmltYXRpb25zIHVudGlsIHRoZSBuZXh0IGxheW91dC4KICAgICBz
ZXRBbmltYXRpb25zTG9ja2VkKGZhbHNlKTsKQEAgLTU2OSw2ICs1NzEsMTE5IEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpmbHVzaExheWVyQ2hhbmdlcygpCiAgICAgZGlzcGF0Y2hP
bk1haW5UaHJlYWQoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW5kZXJOZXh0RnJh
bWUsIHRoaXMpKTsKIH0KIAordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmV4ZWN1dGVD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246Ok9wZXJhdGlvbiogb3BlcmF0aW9uKQoreworICAgIHN3aXRjaCAob3BlcmF0aW9uLT5n
ZXRPcGVyYXRpb25UeXBlKCkpIHsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUxheWVyc1R5cGU6CisgICAgICAgIGNyZWF0ZUxheWVycyhzdGF0aWNfY2FzdDxj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnMqPihvcGVyYXRp
b24pLT5sYXllcklEcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzVHlwZToKKyAgICAgICAgZGVsZXRlTGF5ZXJzKHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVy
cyo+KG9wZXJhdGlvbiktPmxheWVySURzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXJUeXBlOgorICAgICAgICBzZXRS
b290TGF5ZXJJRChzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRSb290TGF5ZXIqPihvcGVyYXRpb24pLT5sYXllcklEKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlwZToK
KyAgICAgICAgc2V0TGF5ZXJTdGF0ZShzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRCwKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyU3RhdGUqPihvcGVyYXRpb24pLT5sYXllckluZm8pOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW5UeXBl
OgorICAgICAgICBzZXRMYXllckNoaWxkcmVuKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW4qPihvcGVyYXRpb24pLT5sYXllcklE
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJDaGlsZHJlbio+KG9wZXJhdGlvbiktPmNoaWxkcmVuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxl
VHlwZTogeworICAgICAgICBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVUaWxlKiBjcmVhdGVUaWxlT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbik7CisgICAgICAgIGNy
ZWF0ZVRpbGUoY3JlYXRlVGlsZU9wZXJhdGlvbi0+bGF5ZXJJRCwgY3JlYXRlVGlsZU9wZXJhdGlv
bi0+dGlsZUlELCBjcmVhdGVUaWxlT3BlcmF0aW9uLT51cGRhdGVJbmZvLnNjYWxlRmFjdG9yKTsK
KyAgICAgICAgdXBkYXRlVGlsZShjcmVhdGVUaWxlT3BlcmF0aW9uLT5sYXllcklELCBjcmVhdGVU
aWxlT3BlcmF0aW9uLT50aWxlSUQsCisgICAgICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OlRpbGVVcGRhdGUoY3JlYXRlVGlsZU9wZXJhdGlvbi0+dXBkYXRlSW5mby51cGRhdGVSZWN0
LCBjcmVhdGVUaWxlT3BlcmF0aW9uLT50aWxlUmVjdCwgY3JlYXRlVGlsZU9wZXJhdGlvbi0+dXBk
YXRlSW5mby5hdGxhc0lELCBjcmVhdGVUaWxlT3BlcmF0aW9uLT51cGRhdGVJbmZvLnN1cmZhY2VP
ZmZzZXQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZVR5cGU6IHsKKyAgICAgICAgY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSogdXBkYXRlVGlsZU9wZXJhdGlvbiA9IHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGUq
PihvcGVyYXRpb24pOworICAgICAgICB1cGRhdGVUaWxlKHVwZGF0ZVRpbGVPcGVyYXRpb24tPmxh
eWVySUQsIHVwZGF0ZVRpbGVPcGVyYXRpb24tPnRpbGVJRCwKKyAgICAgICAgICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6VGlsZVVwZGF0ZSh1cGRhdGVUaWxlT3BlcmF0aW9uLT51cGRhdGVJ
bmZvLnVwZGF0ZVJlY3QsIHVwZGF0ZVRpbGVPcGVyYXRpb24tPnRpbGVSZWN0LCB1cGRhdGVUaWxl
T3BlcmF0aW9uLT51cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZVRpbGVPcGVyYXRpb24tPnVwZGF0
ZUluZm8uc3VyZmFjZU9mZnNldCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlVHlwZToKKyAgICAgICAgcmVt
b3ZlVGlsZShzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVUaWxlKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGUqPihvcGVyYXRp
b24pLT50aWxlSUQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzVHlwZToKKyAgICAgICAgY3JlYXRlVXBkYXRl
QXRsYXMoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlVXBkYXRlQXRsYXMqPihvcGVyYXRpb24pLT5hdGxhc0lELAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRs
YXMqPihvcGVyYXRpb24pLT5zdXJmYWNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhc1R5cGU6CisgICAgICAg
IHJlbW92ZVVwZGF0ZUF0bGFzKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzKj4ob3BlcmF0aW9uKS0+YXRsYXNJRCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRl
SW1hZ2VCYWNraW5nVHlwZToKKyAgICAgICAgY3JlYXRlSW1hZ2VCYWNraW5nKHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZyo+
KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmdUeXBlOgorICAg
ICAgICB1cGRhdGVJbWFnZUJhY2tpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNr
aW5nSUQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5zdXJmYWNlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzVHlwZToKKyAgICAgICAgY2xlYXJJbWFnZUJhY2tpbmdDb250
ZW50cyhzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNraW5nSUQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92
ZUltYWdlQmFja2luZ1R5cGU6CisgICAgICAgIHJlbW92ZUltYWdlQmFja2luZyhzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmcq
PihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zVHlwZToKKyAg
ICAgICAgc2V0TGF5ZXJBbmltYXRpb25zKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9ucyo+KG9wZXJhdGlvbiktPmxheWVySUQs
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpTZXRMYXllckFuaW1hdGlvbnMqPihvcGVyYXRpb24pLT5hbmltYXRpb25zKTsKKyAgICAg
ICAgYnJlYWs7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIGNhc2Ug
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lVHlwZToK
KyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlm
CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVDYW52YXNUeXBlOiB7CisgICAgICAgIEdyYXBoaWNzU3VyZmFjZTo6
RmxhZ3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJn
ZXQgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKKyAgICAgICAgY29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzKiBjcmVhdGVDYW52YXNPcGVy
YXRvaW4gPSBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpD
cmVhdGVDYW52YXMqPihvcGVyYXRpb24pOworICAgICAgICBjcmVhdGVDYW52YXMoY3JlYXRlQ2Fu
dmFzT3BlcmF0b2luLT5sYXllcklELCBjcmVhdGVDYW52YXNPcGVyYXRvaW4tPmNhbnZhc1NpemUs
CisgICAgICAgICAgICBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjcmVhdGVDYW52YXNPcGVyYXRv
aW4tPmNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgY3JlYXRlQ2FudmFzT3BlcmF0b2luLT50b2tl
bikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTeW5jQ2FudmFzVHlwZToKKyAgICAgICAgc3luY0NhbnZhcyhzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzKj4ob3BlcmF0
aW9uKS0+bGF5ZXJJRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXMqPihvcGVyYXRpb24pLT5mcm9udEJ1ZmZlcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
RGVzdHJveUNhbnZhc1R5cGU6CisgICAgICAgIGRlc3Ryb3lDYW52YXMoc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhcyo+KG9wZXJhdGlv
biktPmxheWVySUQpOworICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmls
dGVyc1R5cGU6CisgICAgICAgIHNldExheWVyRmlsdGVycyhzdGF0aWNfY2FzdDxjb25zdCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnMqPihvcGVyYXRpb24pLT5s
YXllcklELAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzKj4ob3BlcmF0aW9uKS0+ZmlsdGVycyk7CisgICAg
ICAgIGJyZWFrOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGNhc2UgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGU6
CisgICAgICAgIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSo+KG9w
ZXJhdGlvbiktPmN1c3RvbUZpbHRlclByb2dyYW1JRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclBy
b2dyYW0qPihvcGVyYXRpb24pLT5wcm9ncmFtSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVR5cGU6CisgICAgICAgIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bSo+KG9wZXJhdGlvbiktPmN1c3RvbUZpbHRlclByb2dyYW1JRCk7CisgICAgICAgIGJyZWFrOwor
I2VuZGlmCisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJl
cGFpbnRDb3VudFR5cGU6CisgICAgICAgIHNldExheWVyUmVwYWludENvdW50KHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50
Kj4ob3BlcmF0aW9uKS0+bGF5ZXJJRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50Kj4ob3BlcmF0
aW9uKS0+cmVwYWludENvdW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3JUeXBlOgorICAgICAgICBzZXRC
YWNrZ3JvdW5kQ29sb3Ioc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0QmFja2dyb3VuZENvbG9yKj4ob3BlcmF0aW9uKS0+Y29sb3IpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNj
cm9sbFBvc2l0aW9uVHlwZToKKyAgICAgICAgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xs
UG9zaXRpb24qPihvcGVyYXRpb24pLT5wb3NpdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Tm9uZVR5cGU6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpyZW5kZXJOZXh0RnJhbWUoKQogewogICAgIGlmIChtX2NsaWVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuaAppbmRleCBjZmFiMTY2MmQxYWM1YzQyM2ZkNTAxMGIwMWNkN2U0MDYzNjkzMzgzLi4wNjlk
OThlYWQyMzdhNTU4OWYxM2UzZDg4ZTFjYWI2MjZmNjA5YjZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCkBAIC0yMSw2ICsyMSw3
IEBACiAjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZV9oCiAKICNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5o
IgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC00Miw2ICs0Myw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU7
CiBjbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25zOwogY2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbTsKIGNsYXNzIEN1c3RvbUZpbHRl
clByb2dyYW1JbmZvOwogY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyOwpAQCAtODIsMTMgKzg0LDYg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRT
aXplJik7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OwotICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9z
aXRpb24pOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZvaWQgY3JlYXRlQ2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NT
dXJmYWNlPik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMy
X3QgZnJvbnRCdWZmZXIpOwotICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVy
SUQpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExh
eWVySUQsIGludCB2YWx1ZSk7CiAKICAgICB2b2lkIGRldGFjaCgpOwogICAgIHZvaWQgYXBwZW5k
VXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKQEAgLTk4LDM4ICs5MywxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9v
bCk7CiAKLSAgICB2b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYpOwotICAgIHZvaWQgZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOwot
ICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
Ci0gICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKLSAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclBy
b2dyYW0oaW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwotICAgIHZvaWQg
cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwotI2VuZGlmCi0KLSAgICB2b2lkIGNy
ZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxl
KTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxl
SUQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYpOwotICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKLSAgICB2b2lk
IHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1c2hMYXll
ckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOwotICAgIHZvaWQgY2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2
b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2
b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zJik7CisgICAgdm9pZCBjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9ucyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYpOwogICAgIHZvaWQg
c2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKLSAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihj
b25zdCBDb2xvciYpOwotICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7
IG1fc2V0RHJhd3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9CiAKLSNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCi0gICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKLSNlbmRp
ZgorICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7IG1fc2V0RHJhd3NC
YWNrZ3JvdW5kID0gZW5hYmxlOyB9CiAKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NMYXllciogbGF5
ZXJCeUlEKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKQEAgLTE2MCw2ICsxMjcsNDMgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNyZWF0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7CiAgICAgdm9pZCBk
ZWxldGVMYXllcihDb29yZGluYXRlZExheWVySUQpOwogCisgICAgLy8gQmVnaW4gb3BlcmF0aW9u
IGV4ZWN1dGlvbnMuCisgICAgdm9pZCBleGVjdXRlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bihjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb24qKTsKKyAgICB2
b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAg
IHZvaWQgZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Cisg
ICAgdm9pZCBzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOworICAgIHZvaWQgc2V0
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZv
Jik7CisgICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
VmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHVw
ZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFRpbGVV
cGRhdGUmKTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJf
dCB0aWxlSUQpOworICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwg
UGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKKyAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQpOworICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPik7Cisg
ICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpOworICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpOworICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCisgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKKyNlbmRpZgorI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPik7Cisg
ICAgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZm
ZXIpOworICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpOworI2VuZGlm
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQorICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQg
aWQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7CisgICAgdm9pZCByZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7CisjZW5kaWYKKyAgICB2b2lkIHNldExheWVyUmVwYWlu
dENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKKyAgICB2b2lkIHNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pOworICAgIC8vIEVuZCBvcGVyYXRpb24gZXhl
Y3V0aW9ucy4KKwogICAgIHZvaWQgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihHcmFwaGljc0xh
eWVyKiwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCByZW1vdmVSZWxlYXNl
ZEltYWdlQmFja2luZ3NJZk5lZWRlZCgpOwogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CkBA
IC0xNzAsNiArMTc0LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVCYWNraW5nU3RvcmVJ
Zk5lZWRlZChHcmFwaGljc0xheWVyKik7CiAgICAgdm9pZCByZXNldEJhY2tpbmdTdG9yZVNpemVU
b0xheWVyU2l6ZShHcmFwaGljc0xheWVyKik7CiAKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisg
ICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKKyNlbmRpZgorCiAgICAgRmxvYXRTaXplIG1fY29udGVu
dHNTaXplOwogICAgIEZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CiAKQEAgLTIwOCw3
ICsyMTYsNiBAQCBwcml2YXRlOgogICAgIExheWVyUmF3UHRyTWFwIG1fZml4ZWRMYXllcnM7CiAg
ICAgQ29vcmRpbmF0ZWRMYXllcklEIG1fcm9vdExheWVySUQ7CiAgICAgRmxvYXRQb2ludCBtX3Jl
bmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50IG1fcGVuZGluZ1Jl
bmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tl
ZDsKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgYm9vbCBtX2FuaW1h
dGlvbkZyYW1lUmVxdWVzdGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEltYWdlQmFja2luZy5jcHAKaW5kZXggZjY5MjQ4Mjg3NWQ1Y2ZjMjFkYjZiYjBkNmYy
MDBlMWQ5OWM1YjIwZi4uYTk5MjQ2ZTNkM2RmY2I1ZTM5ODhmZTY4Mzg0Y2NiNWQ4ZmMyNGZiYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCiAKKyNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDEzICszOSwxMyBAQCBDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQ+KGltYWdlKTsKIH0KIAotUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4g
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZShDb29yZGluYXRvciogY2xpZW50LCBQYXNz
UmVmUHRyPEltYWdlPiBpbWFnZSkKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6UXVldWUqIHF1ZXVlLCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKGNsaWVudCwgaW1hZ2UpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKHF1ZXVlLCBp
bWFnZSkpOwogfQogCi1Db29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCi0gICAg
OiBtX2Nvb3JkaW5hdG9yKGNsaWVudCkKK0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZyhDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogcXVl
dWUsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQorICAgIDogbV9vcGVyYXRpb25RdWV1ZShxdWV1
ZSkKICAgICAsIG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX2lkKGdldENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQobV9pbWFnZS5nZXQoKSkpCiAgICAgLCBtX2NsZWFyQ29udGVudHNUaW1lcih0aGlz
LCAmQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNsZWFyQ29udGVudHNUaW1lckZpcmVkKQpAQCAt
NTQsNyArNTUsNyBAQCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cgogICAgIC8vIEZJWE1FOiBXZSB3
b3VsZCBuZWVkIHRvIGRlY29kZSBhIHNtYWxsIGltYWdlIGRpcmVjdGx5IGludG8gYSBHcmFwaGlj
c1N1cmZhY2UuCiAgICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi8xMDE0MjYKIAotICAgIG1fY29v
cmRpbmF0b3ItPmNyZWF0ZUltYWdlQmFja2luZyhpZCgpKTsKKyAgICBtX29wZXJhdGlvblF1ZXVl
LT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmc6OmNyZWF0ZShpZCgpKSk7CiB9CiAKIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjp+Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoKQpAQCAtNzQsNyAr
NzUsNyBAQCB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZW1vdmVIb3N0KEhvc3QqIGhv
c3QpCiAgICAgbV9ob3N0cy5yZW1vdmUocG9zaXRpb24pOwogCiAgICAgaWYgKG1faG9zdHMuaXNF
bXB0eSgpKQotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5yZW1vdmVJbWFnZUJhY2tpbmcoaWQoKSk7
CisgICAgICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6
Y3JlYXRlKGlkKCkpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6bWFya0Rp
cnR5KCkKQEAgLTExMyw5ICsxMTQsOCBAQCB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1
cGRhdGUoKQogCiAgICAgbV9uYXRpdmVJbWFnZVB0ciA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7CiAKLSAgICAvLyBJZiBzZW5kaW5nIHRoZSBtZXNzYWdlIGZhaWxzLCB0
cnkgYWdhaW4gaW4gdGhlIG5leHQgdXBkYXRlLgotICAgIGJvb2wgc3VjY2VzcyA9IG1fY29vcmRp
bmF0b3ItPnVwZGF0ZUltYWdlQmFja2luZyhpZCgpLCBtX3N1cmZhY2UpOwotICAgIG1faXNEaXJ0
eSA9ICFzdWNjZXNzOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdl
QmFja2luZzo6Y3JlYXRlKGlkKCksIG1fc3VyZmFjZSkpOworICAgIG1faXNEaXJ0eSA9IGZhbHNl
OwogfQogCiB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZWxlYXNlU3VyZmFjZUlmTmVl
ZGVkKCkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1
cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoYm9vbCYgY2hhbmdlZFRvVmlzaWJsZSkKIAogdm9pZCBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQoVGltZXI8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc+KikKIHsKLSAgICBtX2Nvb3JkaW5hdG9yLT5jbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzKGlkKCkpOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWVDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHM6OmNyZWF0ZShpZCgpKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nLmgKaW5kZXggNWI1YjU3YTZlY2IxMDFlZjc1YjI5MTkxYjU3NTA3YmVkZGEyZjc2
NS4uOGJmNGRiNjU3OTFiZGI1ZWIwYjBlNGVlM2IwNTQ2NDkyODgxNWQwZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKQEAgLTI4LDYg
KzI4LDcgQEAKICNkZWZpbmUgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfaAogCiAjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b24uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgogI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC0zOSwyMCArNDAsMTIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGluYXRlZEltYWdlQmFja2luZyA6IHB1
YmxpYyBSZWZDb3VudGVkPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiB7CiBwdWJsaWM6Ci0gICAg
Y2xhc3MgQ29vcmRpbmF0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
ID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgfTsKLQogICAgIGNsYXNzIEhvc3QgewogICAgIHB1
YmxpYzoKICAgICAgICAgdmlydHVhbCBib29sIGltYWdlQmFja2luZ1Zpc2libGUoKSA9IDA7CiAg
ICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBj
cmVhdGUoQ29vcmRpbmF0b3IqLCBQYXNzUmVmUHRyPEltYWdlPik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpRdWV1ZSosIFBhc3NSZWZQdHI8SW1hZ2U+KTsKICAgICB2aXJ0dWFsIH5Db29y
ZGluYXRlZEltYWdlQmFja2luZygpOwogCiAgICAgc3RhdGljIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgZ2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChJbWFnZSopOwpAQCAtNjgsMTMgKzYx
LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZSgpOwogCiBwcml2YXRlOgotICAgIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9yKiwgUGFzc1JlZlB0cjxJbWFnZT4pOworICAg
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1
ZXVlKiwgUGFzc1JlZlB0cjxJbWFnZT4pOwogCiAgICAgdm9pZCByZWxlYXNlU3VyZmFjZUlmTmVl
ZGVkKCk7CiAgICAgdm9pZCB1cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoYm9vbCYgY2hhbmdlZFRv
VmlzaWJsZSk7CiAgICAgdm9pZCBjbGVhckNvbnRlbnRzVGltZXJGaXJlZChUaW1lcjxDb29yZGlu
YXRlZEltYWdlQmFja2luZz4qKTsKIAotICAgIENvb3JkaW5hdG9yKiBtX2Nvb3JkaW5hdG9yOwor
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiBtX29wZXJhdGlvblF1ZXVl
OwogICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICBOYXRpdmVJbWFnZVB0ciBtX25hdGl2
ZUltYWdlUHRyOwogICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgbV9pZDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9T
dXJmYWNlVXBkYXRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKaW5kZXggNmFiMzg0YTExZWFhNWVh
MjU0MDgxM2M3MDI1ZTVmYzhjMTdkMzkxMC4uZWE4YjI1ZmVmNmU5NzcyOTJmMGUzODhkNDg2NDJm
YTIyOWI1MDk2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZv
LmgKQEAgLTIzLDEzICsyMywxMCBAQAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAog
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbyB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU3VyZmFjZVVwZGF0ZUluZm8pOwotCiBwdWJsaWM6CiAgICAgU3VyZmFj
ZVVwZGF0ZUluZm8oKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAK
aW5kZXggMzY0ZjA2ODcxMDgyYjU4ZmNiZDgzYTBlZjMxNDUwYmU0ODAwODQ4Yi4uN2ZjYWJmNjk2
ZGYxOGE4ZGE1ZDk0OWJmNDdiNzAwM2RhMTQzOWM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
VXBkYXRlQXRsYXMuY3BwCkBAIC0yMywxNCArMjMsMTUgQEAKIAogI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1VcGRhdGVB
dGxhczo6VXBkYXRlQXRsYXMoVXBkYXRlQXRsYXNDbGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lv
biwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncykKLSAgICA6IG1fY2xpZW50KGNsaWVu
dCkKK1VwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpRdWV1ZSogcXVldWUsIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3Mg
ZmxhZ3MpCisgICAgOiBtX29wZXJhdGlvblF1ZXVlKHF1ZXVlKQogICAgICwgbV9pbmFjdGl2aXR5
SW5TZWNvbmRzKDApCiB7CiAgICAgc3RhdGljIHVpbnQzMl90IG5leHRJRCA9IDA7CkBAIC0zOCwx
NSArMzksMTIgQEAgVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiBj
bGllbnQsIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVkU3UKICAgICBJbnRTaXplIHNpemUgPSBu
ZXh0UG93ZXJPZlR3byhJbnRTaXplKGRpbWVuc2lvbiwgZGltZW5zaW9uKSk7CiAgICAgbV9zdXJm
YWNlID0gQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoc2l6ZSwgZmxhZ3MpOwogCi0gICAgLy8g
RklYTUU6IEN1cnJlbnRseSwgaWYgc2VuZGluZyB0aGUgbWVzc2FnZSBmYWlscywgVXBkYXRlQXRs
YXMgZ2l2ZXMgdXAgZHJhd2luZyBhbnl0aGluZyBpbXBsaWNpdGx5LgotICAgIGlmICghbV9jbGll
bnQtPmNyZWF0ZVVwZGF0ZUF0bGFzKG1fSUQsIG1fc3VyZmFjZSkpCi0gICAgICAgIG1fc3VyZmFj
ZS5jbGVhcigpOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWVDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0
bGFzOjpjcmVhdGUobV9JRCwgbV9zdXJmYWNlKSk7CiB9CiAKIFVwZGF0ZUF0bGFzOjp+VXBkYXRl
QXRsYXMoKQogewotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1fY2xpZW50LT5yZW1vdmVV
cGRhdGVBdGxhcyhtX0lEKTsKKyAgICBtX29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVlQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVV
cGRhdGVBdGxhczo6Y3JlYXRlKG1fSUQpKTsKIH0KIAogdm9pZCBVcGRhdGVBdGxhczo6YnVpbGRM
YXlvdXRJZk5lZWRlZCgpCkBAIC03Miw5ICs3MCw2IEBAIFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKHVpbnQzMl90
CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFw
aGljc0NvbnRleHQ+KCk7CiAKLSAgICBpZiAoIW1fc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIFBh
c3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PigpOwotCiAgICAgYXRsYXNJRCA9IG1fSUQ7CiAKICAg
ICAvLyBGSVhNRTogVXNlIHRyaS1zdGF0ZSBidWZmZXJzLCB0byBhbGxvdyBmYXN0ZXIgdXBkYXRl
cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKaW5kZXggNDhhNmJmODQ0YTQ5MGY3
ZmQyYzM5YTA0MjRlMzMwZmRkYjE2ZDc4Yi4uMTYzMTM4ZjE3YzI1NjQwNzNkOWI1Njg2YjBhNDM4
ODI5YWNmNGQzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKQEAgLTIyLDYg
KzIyLDcgQEAKICNkZWZpbmUgVXBkYXRlQXRsYXNfaAogCiAjaW5jbHVkZSAiQXJlYUFsbG9jYXRv
ci5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKICNpbmNsdWRl
ICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAKQEAgLTMxLDE2
ICszMiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBj
bGFzcyBJbnRQb2ludDsKIAotY2xhc3MgVXBkYXRlQXRsYXNDbGllbnQgewotcHVibGljOgotICAg
IHZpcnR1YWwgYm9vbCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgPSAwOwotfTsKLQogY2xhc3MgVXBkYXRlQXRsYXMg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKIHB1YmxpYzoKLSAgICBV
cGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCosIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVk
U3VyZmFjZTo6RmxhZ3MpOworICAgIFVwZGF0ZUF0bGFzKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlF1ZXVlKiwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7
CiAgICAgflVwZGF0ZUF0bGFzKCk7CiAKICAgICBpbmxpbmUgSW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zdXJmYWNlLT5zaXplKCk7IH0KQEAgLTY2LDcgKzYxLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKIAogcHJpdmF0ZToKLSAgICBVcGRhdGVB
dGxhc0NsaWVudCogbV9jbGllbnQ7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
UXVldWUqIG1fb3BlcmF0aW9uUXVldWU7CiAgICAgT3duUHRyPEdlbmVyYWxBcmVhQWxsb2NhdG9y
PiBtX2FyZWFBbGxvY2F0b3I7CiAgICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gbV9zdXJm
YWNlOwogICAgIGRvdWJsZSBtX2luYWN0aXZpdHlJblNlY29uZHM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
QXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAppbmRleCBjMzM3MWQy
YzA4NGUwNTJkZWRjZjY0ZWZmNGJkMTQ3NTAwZTliNTRiLi40YmE4MzUwZDg2MmY3YTFhNWM2MzE0
ZGM4YzBjYjNmYjQyN2Y5N2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTI5LDkgKzI5LDExIEBACiAjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRM
YXllckluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQzRC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgpAQCAtNzMsOSArNzUsNyBAQAogI2Vu
ZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0jZW5kaWYKIAogbmFtZXNwYWNlIENvcmVJUEMgewog
CkBAIC04MzUsNiArODM1LDM4NCBAQCBib29sIEFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUlu
Zm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBTdXJmYWNlVQogICAgIHJldHVy
biBTaW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVjb2RlKGRlY29kZXIs
IHN1cmZhY2VVcGRhdGVJbmZvKTsKIH0KIAordm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25zPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCit7CisgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ob3BlcmF0aW9ucy5zaXplKCkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb24qIG9wZXJhdGlvbiA9
IG9wZXJhdGlvbnMuYXQoaSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShvcGVyYXRpb24t
PmdldE9wZXJhdGlvblR5cGUoKSk7CisKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9w
ZXJhdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUxheWVyc1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVycyo+KG9wZXJh
dGlvbiktPmxheWVySURzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzVHlwZToKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
RGVsZXRlTGF5ZXJzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHM7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXJU
eXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXIqPihvcGVyYXRpb24pLT5sYXllcklEOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJTdGF0ZVR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGUqPihv
cGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlKj4ob3BlcmF0
aW9uKS0+bGF5ZXJJbmZvOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlblR5cGU6CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlNldExheWVyQ2hpbGRyZW4qPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRMYXllckNoaWxkcmVuKj4ob3BlcmF0aW9uKS0+Y2hpbGRyZW47CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVU
aWxlVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7
CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlUmVjdDsKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbiktPnVwZGF0ZUluZm87CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlVHlw
ZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlVwZGF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlVwZGF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlUmVjdDsKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRl
VGlsZSo+KG9wZXJhdGlvbiktPnVwZGF0ZUluZm87CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlVHlwZToKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlVGlsZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVB
dGxhc1R5cGU6IHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXMqPihvcGVyYXRpb24p
LT5hdGxhc0lEOworICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGlu
YXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxh
cyo+KG9wZXJhdGlvbiktPnN1cmZhY2UuZ2V0KCkpOworICAgICAgICAgICAgV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQg
dG8gZGVhbCB3aXRoIHRoZSBjYXNlIHRoYXQgaGFuZGxlIGNyZWF0aW9uIGlzIGZhaWxlZC4KKyAg
ICAgICAgICAgIHdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7Cisg
ICAgICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBk
YXRlQXRsYXNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhcyo+KG9wZXJhdGlv
biktPmF0bGFzSUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmdUeXBlOgorICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpDcmVhdGVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlVwZGF0ZUltYWdlQmFja2luZ1R5cGU6IHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNr
aW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNraW5nSUQ7CisgICAgICAgICAgICBXZWJDb29yZGlu
YXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3Jk
aW5hdGVkU3VyZmFjZSo+KHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlVwZGF0ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbiktPnN1cmZhY2UuZ2V0KCkpOwor
ICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHRoYXQgaGFuZGxl
IGNyZWF0aW9uIGlzIGZhaWxlZC4KKyAgICAgICAgICAgIHdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGU6CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJ
RDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZ1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUlt
YWdlQmFja2luZyo+KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJB
bmltYXRpb25zVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zKj4ob3BlcmF0
aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zKj4ob3BlcmF0
aW9uKS0+YW5pbWF0aW9uczsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUeXBlOgorICAgICAgICAgICAgYnJlYWs7CisjZW5k
aWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVD
YW52YXMqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXMq
PihvcGVyYXRpb24pLT5jYW52YXNTaXplOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXMqPihv
cGVyYXRpb24pLT50b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXNUeXBlOgorICAgICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
eW5jQ2FudmFzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZh
cyo+KG9wZXJhdGlvbiktPmZyb250QnVmZmVyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhc1R5cGU6Cisg
ICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXMqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAg
ICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzVHlwZToKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzKj4ob3BlcmF0aW9uKS0+ZmlsdGVyczsKKyAgICAgICAg
ICAgIGJyZWFrOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBjYXNl
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1U
eXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKj4ob3BlcmF0aW9u
KS0+Y3VzdG9tRmlsdGVyUHJvZ3JhbUlEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0
ZXJQcm9ncmFtKj4ob3BlcmF0aW9uKS0+cHJvZ3JhbUluZm87CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bSo+KG9wZXJhdGlvbiktPmN1c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICAgICAgICAgIGJyZWFr
OworI2VuZGlmCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJSZXBhaW50Q291bnRUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3Vu
dCo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENv
dW50Kj4ob3BlcmF0aW9uKS0+cmVwYWludENvdW50OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9y
VHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yKj4ob3BlcmF0aW9uKS0+Y29s
b3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvblR5cGU6CisgICAgICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRp
ZENoYW5nZVNjcm9sbFBvc2l0aW9uKj4ob3BlcmF0aW9uKS0+cG9zaXRpb247CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpOb25l
VHlwZToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9ucz46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiBvcGVyYXRpb25zKQoreworICAgIHVuc2lnbmVk
IG9wZXJhdGlvbnNTaXplOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKG9wZXJhdGlvbnNTaXpl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
cGVyYXRpb25zU2l6ZTsgKytpKSB7CisgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgdHlwZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVt
KHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxh
eWVyc1R5cGU6IHsKKyAgICAgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGlkczsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGlkcykpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpjcmVhdGUoaWRzKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkRlbGV0ZUxheWVyc1R5cGU6IHsKKyAgICAgICAgICAgIFZlY3RvcjxDb29yZGluYXRl
ZExheWVySUQ+IGlkczsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGlkcykpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBl
bmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzOjpjcmVhdGUoaWRz
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllclR5cGU6IHsKKyAgICAgICAgICAgIENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
b3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExh
eWVyOjpjcmVhdGUobGF5ZXJJRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlw
ZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySW5mbyBsYXllckluZm87CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllckluZm8pKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGU6OmNyZWF0ZShsYXllcklELCBsYXllcklu
Zm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlblR5cGU6IHsKKyAgICAgICAg
ICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gY2hpbGRyZW47CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShjaGlsZHJlbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjo6Y3JlYXRlKGxheWVySUQsIGNoaWxkcmVuKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGVUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVy
SUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90
IHRpbGVJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHRpbGVJRCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHRpbGVSZWN0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJ
bmZvOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodXBkYXRlSW5mbykpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZTo6Y3JlYXRlKGxheWVySUQs
IHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRl
VGlsZVR5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUodGlsZUlEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0OworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUodGlsZVJlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87CisgICAgICAgICAgICBpZiAo
IWRlY29kZXItPmRlY29kZSh1cGRhdGVJbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpVcGRhdGVUaWxlOjpjcmVhdGUobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBk
YXRlSW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlVHlwZTogeworICAgICAgICAg
ICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB1aW50MzJfdCB0aWxlSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0
aWxlSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGU6OmNy
ZWF0ZShsYXllcklELCB0aWxlSUQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRs
YXNUeXBlOiB7CisgICAgICAgICAgICB1aW50MzJfdCBhdGxhc0lEOworICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUoYXRsYXNJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKGF0bGFzSUQsIFdlYkNv
b3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlVXBkYXRlQXRsYXNUeXBlOiB7CisgICAgICAgICAgICB1aW50MzJfdCBhdGxhc0lEOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoYXRsYXNJRCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OmNyZWF0ZShhdGxhc0lEKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZ1R5cGU6IHsKKyAgICAgICAgICAgIENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShpZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VC
YWNraW5nOjpjcmVhdGUoaWQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5n
VHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZDsKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGlkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlkLCBXZWJD
b29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHNUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaWQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVu
dHM6OmNyZWF0ZShpZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmdUeXBl
OiB7CisgICAgICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkOworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlkKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlNldExheWVyQW5pbWF0aW9uc1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGlkKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBh
bmltYXRpb25zOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoYW5pbWF0aW9ucykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5h
cHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpj
cmVhdGUoaWQsIGFuaW1hdGlvbnMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisj
aWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICAgICBjYXNlIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZVR5cGU6CisgICAgICAg
ICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1
ZXN0QW5pbWF0aW9uRnJhbWU6OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlm
CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXll
cklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBJbnRTaXpl
IGNhbnZhc1NpemU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShjYW52YXNTaXpl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBHcmFwaGljc1N1
cmZhY2VUb2tlbiB0b2tlbjsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHRva2Vu
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25z
LmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OmNyZWF0
ZShsYXllcklELCBjYW52YXNTaXplLCB0b2tlbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2Fu
dmFzVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB1aW50MzJfdCBmcm9udEJ1ZmZlcjsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZyb250QnVmZmVyKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpjcmVhdGUobGF5ZXJJRCwgZnJvbnRCdWZmZXIp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhc1R5cGU6IHsKKyAgICAgICAgICAgIENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
b3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNh
bnZhczo6Y3JlYXRlKGxheWVySUQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisj
ZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzVHlwZTogeworICAgICAgICAgICAgQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShmaWx0ZXJzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllckZpbHRlcnM6OmNyZWF0ZShsYXllcklELCBmaWx0ZXJzKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclBy
b2dyYW1UeXBlOiB7CisgICAgICAgICAgICBpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlEOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXZWJDb3JlOjpDdXN0b21G
aWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbzsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKHByb2dyYW1JbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpD
cmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlELCBw
cm9ncmFtSW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
VHlwZTogeworICAgICAgICAgICAgaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3Jl
YXRlKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyNlbmRpZgorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyUmVwYWludENvdW50VHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVy
SUQgcmVwYWludENvdW50OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocmVwYWlu
dENvdW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVy
YXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFp
bnRDb3VudDo6Y3JlYXRlKGxheWVySUQsIHJlcGFpbnRDb3VudCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRCYWNrZ3JvdW5kQ29sb3JUeXBlOiB7CisgICAgICAgICAgICBDb2xvciBjb2xvcjsKKyAg
ICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNvbG9yKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6OmNyZWF0ZShjb2xvcikpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvblR5cGU6IHsKKyAgICAgICAgICAg
IEZsb2F0UG9pbnQgcG9zaXRpb247CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShw
b3NpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Ny
b2xsUG9zaXRpb246OmNyZWF0ZShwb3NpdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpOb25lVHlw
ZToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5h
bWVzcGFjZSBDb3JlSVBDCiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCmlu
ZGV4IDJhZWZjNjU3NGZmM2VhNDExMTNmYzFlNDJjMDE5MThmNDI0MWJmNjcuLmMwOWI4ZmRiOTM3
ZTY4Mjc3NzFiYjE0N2JhNjZiMWYwMTdlYjFmMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENv
ZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCkBAIC0zMiwxMCArMzIsMTEgQEAKICNp
bmNsdWRlICJBcmd1bWVudENvZGVycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBT
dXJmYWNlVXBkYXRlSW5mbzsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOwog
Y2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbjsKIGNsYXNz
IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87CiBjbGFz
cyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7CiBzdHJ1
Y3QgQ29vcmRpbmF0ZWRMYXllckluZm87CkBAIC0xMTcsNiArMTE4LDExIEBAIHRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8+IHsKICAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0
ZUluZm8mKTsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbnMmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmKTsKK307CisKIH0gLy8gbmFtZXNwYWNl
IENvcmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAppbmRleCA5
ODY0OTNjMzJmZjg0NjI4YTNlMGIwZWJiM2EwNTFiNzQxNTkzNzU4Li45NTVmZGI5MzhhMzM2N2Jl
MDAwNDhiZjUzMDQ0NjQ0OGU1Y2UwZjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC0yMywxNiArMjMsMTEgQEAKICNpbmNs
dWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogCiAjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBk
YXRlSW5mby5oPgotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotI2luY2x1ZGUgIkN1c3RvbUZp
bHRlclByb2dyYW1JbmZvLmgiCi0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTksNzggKzU0LDkgQEAgdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3QKICAgICBtX3NjZW5lLT5hcHBlbmRVcGRhdGUoZnVuY3Rpb24pOwogfQogCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRp
bmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVGlsZSwgbV9z
Y2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKSk7Ci0g
ICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUlu
Zm8pOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxl
Rm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
dXBkYXRlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0aWxlUmVjdCwg
dXBkYXRlSW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihDb29y
ZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZSwgbV9zY2Vu
ZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdl
YkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVVcGRhdGVBdGxhcywgbV9z
Y2VuZS5nZXQoKSwgYXRsYXNJRCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxl
KSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVVcGRh
dGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVXBkYXRlQXRsYXMsIG1fc2NlbmUuZ2V0KCks
IGF0bGFzSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3Jl
YXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlk
cykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OmNyZWF0ZUxheWVycywgbV9zY2VuZS5nZXQoKSwgaWRzKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcnMsIG1fc2NlbmUuZ2V0KCksIGlk
cykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29t
cG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRSb290TGF5ZXJJRCwgbV9zY2Vu
ZS5nZXQoKSwgaWQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
c2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29v
cmRpbmF0ZWRMYXllckluZm8mIGluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRlLCBtX3NjZW5lLmdldCgpLCBpZCwg
aW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21w
b3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8
Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxkcmVuLCBtX3NjZW5lLmdl
dCgpLCBpZCwgY2hpbGRyZW4pKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNl
dExheWVyRmlsdGVycywgbV9zY2VuZS5nZXQoKSwgaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCi17Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVDdXN0b21GaWx0ZXJQ
cm9ncmFtLCBtX3NjZW5lLmdldCgpLCBpZCkpOwotfQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0s
IG1fc2NlbmUuZ2V0KCksIGlkLCBwcm9ncmFtSW5mbykpOwotfQotI2VuZGlmCi0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IEludFNpemUm
IGNvbnRlbnRzU2l6ZSwgY29uc3QgSW50UmVjdCYgY292ZXJlZFJlY3QpCit2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
cyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
b3ZlcmVkUmVjdCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3NjZW5lLmdldCgpKSk7CisgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9ucywgbV9zY2VuZS5nZXQoKSwgb3BlcmF0aW9ucykpOwogICAgIHVw
ZGF0ZVZpZXdwb3J0KCk7CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPmRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJl
ZFJlY3QpOwpAQCAtMTQwLDI0ICs2Niw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwKICNlbmRp
ZgogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlSW1hZ2VCYWNraW5n
LCBtX3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRh
dGVJbWFnZUJhY2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQsIFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWdlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzLCBtX3NjZW5lLmdldCgpLCBpbWFn
ZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2Vk
KQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
cmVtb3ZlSW1hZ2VCYWNraW5nLCBtX3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7CisgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBbmltYXRpb25zTG9j
a2VkLCBtX3NjZW5lLmdldCgpLCBsb2NrZWQpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNT
aXplKQpAQCAtMTY1LDE1ICs3Niw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6CiAgICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRDb250ZW50c1Np
emUsIG1fc2NlbmUuZ2V0KCksIGNvbnRlbnRzU2l6ZSkpOwogfQogCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQW5p
bWF0aW9ucywgbV9zY2VuZS5nZXQoKSwgaWQsIGFuaW1hdGlvbnMpKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tl
ZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnNldEFuaW1hdGlvbnNMb2NrZWQsIG1fc2NlbmUuZ2V0KCksIGxvY2tlZCkpOwotfQogCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikK
IHsKQEAgLTE5NCw1NSArOTYsMTYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6cmVuZGVyTmV4dEZyYW1lKCkKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlcXVlc3RBbmltYXRp
b25GcmFtZSgpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIG1fc2NlbmUuZ2V0KCkpKTsKLSAgICB1cGRh
dGVWaWV3cG9ydCgpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojph
bmltYXRpb25GcmFtZVJlYWR5KCkKIHsKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkFuaW1h
dGlvbkZyYW1lUmVhZHkoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsK
IH0KICNlbmRpZgogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRDaGFu
Z2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpZENoYW5nZVNjcm9s
bFBvc2l0aW9uLCBtX3NjZW5lLmdldCgpLCBwb3NpdGlvbikpOwotfQotCi0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVD
YW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBj
b25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4pCi17Ci0gICAgR3JhcGhpY3NTdXJmYWNl
OjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRh
cmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzLCBtX3NjZW5l
LmdldCgpLCBpZCwgY2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFzU2l6
ZSwgc3VyZmFjZUZsYWdzLCB0b2tlbikpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZy
b250QnVmZmVyKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c3luY0NhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGZyb250QnVmZmVyKSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6ZGVzdHJveUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQpKTsKLX0K
LSNlbmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllclJl
cGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUmVwYWlu
dENvdW50LCBtX3NjZW5lLmdldCgpLCBpZCwgdmFsdWUpKTsKLX0KLQogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBtX2RyYXdp
bmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cGFnZUlEKCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QmFja2dyb3VuZENv
bG9yLCBtX3NjZW5lLmdldCgpLCBjb2xvcikpOwotfQotCiB9CiAjZW5kaWYgLy8gVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5LmgKaW5kZXggMjRiMzQ3NzBhYzA4M2MzNWE1NTQwMzA0ZTA5MGEwNTI1OGVm
NTdhZC4uYzM4ODIzNWQwNDA1NDBkYzk5M2QwNjhlYmQ5YmYyYjhkMmEwMzE0OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0yNSwy
MyArMjUsMTMgQEAKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5
LmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29vcmRpbmF0ZWRMYXll
ckluZm87CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczsKIGNsYXNzIFN1cmZh
Y2VVcGRhdGVJbmZvOwogfQogCkBAIC01Myw0NSArNDMsMTIgQEAgY2xhc3MgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lQ2wKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eShEcmF3aW5nQXJlYVByb3h5Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkoKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7
Ci0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0
ZXJzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9ucyYpOwotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIHZvaWQgY3Jl
YXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRl
clByb2dyYW1JbmZvJik7Ci0gICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBp
ZCk7Ci0jZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVDb21wb3Np
dGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwot
ICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklEKTsKKyAgICB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKGNvbnN0
IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVj
dCk7CisgICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwogICAgIHZvaWQgc2V0Q29u
dGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY292ZXJlZFJlY3QpOwotICAgIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHVwZGF0ZVRp
bGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZv
Jik7Ci0gICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklELCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMy
X3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2
b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgY3JlYXRl
SW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZv
aWQgdXBkYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQs
IGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7Ci0gICAgdm9pZCBjbGVhcklt
YWdlQmFja2luZ0NvbnRlbnRzKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwot
ICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpOwogICAgIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsK
LSAgICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIHBvc2l0aW9uKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0
ZUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYpOwotICAgIHZvaWQgc3lu
Y0NhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVy
KTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsK
LSNlbmRpZgotICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBpbnQgdmFsdWUpOwogICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkgY29uc3QgeyByZXR1cm4gbV9zY2VuZS5n
ZXQoKTsgfQotICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKLSAgICB2
b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQotICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7Ci0jZW5kaWYKLSAg
ICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogCiAgICAg
Ly8gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50IE1ldGhvZHMuCiAjaWYgRU5BQkxFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgppbmRleCAyMWRjMjYzNDUw
M2NjZGU4NzkwNjJkNzkzMjNjNmJiYWJlNGY3MmVjLi42ZTI3OTIzYmJjMDM4YTFkOGU2NjQzMzFh
MzIwMGFmNWY5YTFjOTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpAQCAtMTksNDQgKzE5LDcgQEAK
IAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIG1lc3NhZ2VzIC0+IENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5IExlZ2FjeVJlY2VpdmVyIHsKLSAgICBTZXRDb21wb3NpdGluZ0xh
eWVyU3RhdGUodWludDMyX3QgaWQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVy
SW5mbykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWludDMyX3QgaWQsIFZlY3Rv
cjx1aW50MzJfdD4gY2hpbGRyZW4pCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIFNldENv
bXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zIGZpbHRlcnMpCi0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgQ3JlYXRl
Q3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1J
bmZvIHByb2dyYW1JbmZvKQotICAgIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQot
I2VuZGlmCi0gICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCi0gICAgQ3Jl
YXRlQ29tcG9zaXRpbmdMYXllcnMoVmVjdG9yPHVpbnQzMl90PiBpZHMpCi0gICAgRGVsZXRlQ29t
cG9zaXRpbmdMYXllcnMoVmVjdG9yPHVpbnQzMl90PiBpZHMpCi0gICAgQ3JlYXRlVGlsZUZvckxh
eWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0
aWxlUmVjdCwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBVcGRh
dGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3Jl
OjpJbnRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZv
KQotICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQpCi0gICAgQ3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgV2ViS2l0OjpXZWJD
b29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGUpCi0gICAgUmVtb3ZlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCkKLSAgICBDcmVhdGVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJ
RCkKLSAgICBVcGRhdGVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCwgV2ViS2l0OjpXZWJD
b29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGUpCi0gICAgQ2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50cyh1aW50NjRfdCBpbWFnZUlEKQotICAgIFJlbW92ZUltYWdlQmFja2luZyh1aW50NjRf
dCBpbWFnZUlEKQotICAgIERpZFJlbmRlckZyYW1lKFdlYkNvcmU6OkludFNpemUgY29udGVudHNT
aXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQotICAgIERpZENoYW5nZVNjcm9sbFBv
c2l0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zaXRpb24pCi0gICAgU2V0TGF5ZXJBbmltYXRp
b25zKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRp
b25zKQorICAgIENvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zIG9wZXJhdGlvbnMsIFdlYkNvcmU6OkludFNpemUg
Y29udGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQogICAgIFNldEFuaW1h
dGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCi0KLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCi0gICAgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKLSNlbmRpZgotCi0jaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCi0gICAgQ3JlYXRlQ2FudmFzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpJ
bnRTaXplIGNhbnZhc1NpemUsIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuKQot
ICAgIFN5bmNDYW52YXModWludDMyX3QgaWQsIHVpbnQzMl90IGZyb250QnVmZmVyKQotICAgIERl
c3Ryb3lDYW52YXModWludDMyX3QgaWQpCi0jZW5kaWYKLQotICAgIFNldExheWVyUmVwYWludENv
dW50KHVpbnQzMl90IGxheWVySUQsIGludCB2YWx1ZSkKLQotICAgIFNldEJhY2tncm91bmRDb2xv
cihXZWJDb3JlOjpDb2xvciBjb2xvcikKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNmU1ZmI1
NzIzMWM5Yjg5NWYyZjA2ZWE0MTUxMzAxNjk4ODEwYTQ1Yy4uZDU5ZjI3NGJkZTZlYWJmMjYxNWNh
YjAxM2I0NTBiZjk0MzYwNmUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCkBAIC0zOCw5ICszOCw5IEBACiAjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1
cmZhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlckxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KQEAg
LTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5m
by5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KICNp
bmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
CkBAIC04Niw3ICs4NSw2IEBAIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0KFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nl
c3ModHJ1ZSkKICAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZFNlbmRT
Y3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2Up
CiAgICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcihmYWxzZSkKICAgICAs
IG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVy
Rmx1c2hUaW1lckZpcmVkKQogICAgICwgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIodGhp
cywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
RmlyZWQpCkBAIC0yODcsMTQgKzI4NSwxNCBAQCBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKIAogICAgIGRlbGV0ZUNvbXBvc2l0aW5nTGF5
ZXJzKCk7CiAKLSAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUpIHsKKyAgICBpZiAoIW1fb3BlcmF0
aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgZGlkU3luYyA9IHRydWU7CiAKICAgICAgICAgSW50
U2l6ZSBjb250ZW50c1NpemUgPSByb3VuZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNpemUoKSk7CiAgICAgICAgIEludFJlY3QgY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3Zl
clJlY3QoKTsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6RGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVj
dCkpOworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpDb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhtX29wZXJh
dGlvbnMsIGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAgICAgICAgbV9vcGVyYXRpb25z
LmNsZWFyKCk7CiAgICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7Ci0gICAgICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CiAgICAgfSBlbHNlCiAgICAgICAgIHVubG9ja0Fu
aW1hdGlvbnMoKTsKIApAQCAtMzIwLDkgKzMxOCw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjcmVhdGVDb21wb3NpdGluZ0xheWVycygpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpDcmVhdGVDb21wb3NpdGluZ0xheWVycyhtX2xheWVyc1RvQ3JlYXRlKSk7CisgICAgZW5xdWV1
ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6Q3JlYXRlTGF5ZXJzOjpjcmVhdGUobV9sYXllcnNUb0NyZWF0ZSkpOwogICAgIG1fbGF5ZXJz
VG9DcmVhdGUuY2xlYXIoKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CiB9CiAKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZWxldGVDb21wb3NpdGluZ0xheWVycygpCkBA
IC0zMzUsOSArMzMyLDggQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXJzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXJzKG1fbGF5ZXJzVG9EZWxldGUpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVM
YXllcnM6OmNyZWF0ZShtX2xheWVyc1RvRGVsZXRlKSk7CiAgICAgbV9sYXllcnNUb0RlbGV0ZS5j
bGVhcigpOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVk
KCkKQEAgLTM0NSw3MCArMzQxLDEwIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpp
bml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCiAgICAgaWYgKG1fZGlkSW5p
dGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRS
b290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXll
ci5nZXQoKSktPmlkKCkpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OmNyZWF0ZSh0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKICAgICBt
X2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllciA9IHRydWU7Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3lu
Y0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVy
SW5mbyYgaW5mbykKLXsKLSAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUp
IHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0
LmxvY2F0aW9uKCkpKTsKLSAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUg
PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0
Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKLXsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBj
aGlsZHJlbikpOwotfQotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxh
dGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBjYW52YXNQbGF0Zm9y
bUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIEludFNpemUgY2FudmFzU2l6ZSA9
IGNhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ2Fu
dmFzKGlkLCBjYW52YXNTaXplLCB0b2tlbikpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIq
IGNhbnZhc1BsYXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3Jh
cGhpY3NTdXJmYWNlKCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6U3luY0NhbnZhcyhpZCwgZnJvbnRCdWZmZXIpKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlc3Ryb3lDYW52YXMoaWQpKTsKLX0K
LSNlbmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJSZXBhaW50
Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0TGF5ZXJS
ZXBhaW50Q291bnQoaWQsIHZhbHVlKSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyRmlsdGVycyhDb29yZGluYXRl
ZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBjaGVj
a0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGZpbHRlcnMpOwotI2VuZGlmCi0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29t
cG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCiAjaWYgRU5B
QkxFKENTU19TSEFERVJTKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykK
IHsKQEAgLTQzNiw3ICszNzIsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hl
Y2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVyYQogCiAgICAgICAg
IGlmICghY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5jbGllbnQoKSkgewogICAgICAgICAgICAg
Y3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5zZXRDbGllbnQodGhpcyk7Ci0gICAgICAgICAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpD
cmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSwg
Y3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlkYXRlZFByb2dyYW1JbmZv
KCkpKTsKKyAgICAgICAgICAgIGVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OmNy
ZWF0ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+dmFs
aWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2xpZW50IHdhcyBub3QgZGlzY29ubmVjdGVkIHRo
ZW4gdGhpcyBjb29yZGluYXRvciBtdXN0IGJlIHRoZSBjbGllbnQgZm9yIGl0LgogICAgICAgICAg
ICAgQVNTRVJUKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkgPT0gdGhpcyk7CkBA
IC00NDksNyArMzg1LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eShXZWJDdXN0b21GaWx0ZXJQcm8KICAgICAvLyBBdCB0aGlz
IHRpbWUgdGhlIHNoYWRlciBpcyBub3QgbmVlZGVkIGFueW1vcmUsIHNvIHdlIHJlbW92ZSBpdCBm
cm9tIG91ciBzZXQgYW5kCiAgICAgLy8gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIG90aGVyIHByb2Nl
c3MgdG8gZGVsZXRlIGl0LgogICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMucmVtb3ZlKGN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eSk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0
b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCkpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKSk7CiB9
CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVy
UHJvZ3JhbXMoKQpAQCAtNjEzLDQwICs1NDksNiBAQCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZwog
ICAgIHJldHVybiBpbWFnZUJhY2tpbmc7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlE
KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVJbWFnZUJhY2tp
bmcoaW1hZ2VJRCkpOwotfQotCi1ib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRl
SW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0
cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKLXsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGlu
YXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihjb29yZGlu
YXRlZFN1cmZhY2UuZ2V0KCkpOwotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhh
bmRsZTsKLSAgICBpZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRs
ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJ
RCwgaGFuZGxlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7Ci0gICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKLX0KLQogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQogewogICAg
IEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOwpA
QCAtNzA5LDQxICs2MTEsNTEgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRp
bGVSZWN0LCB1cGRhdGVJbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Ojp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0
ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVRpbGUo
Q29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKK3ZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjplbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbj4gb3BlcmF0
aW9uKQogewogICAgIGlmIChtX2lzUHVyZ2luZykKICAgICAgICAgcmV0dXJuOwotICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGls
ZUlEKSk7Ci19CiAKLWJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29v
cmRpbmF0ZWRTdXJmYWNlKQotewotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZSogd2ViQ29vcmRp
bmF0ZWRTdXJmYWNlID0gc3RhdGljX2Nhc3Q8V2ViQ29vcmRpbmF0ZWRTdXJmYWNlKj4oY29vcmRp
bmF0ZWRTdXJmYWNlLmdldCgpKTsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBo
YW5kbGU7Ci0gICAgaWYgKCF3ZWJDb29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRsZShoYW5k
bGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVXBkYXRlQXRsYXMoYXRsYXNJ
RCwgaGFuZGxlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgc3dpdGNoIChvcGVyYXRpb24t
PmdldE9wZXJhdGlvblR5cGUoKSkgeworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJTdGF0ZVR5cGU6CisgICAgICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQ
b3NpdGlvblVwZGF0ZSkgeworICAgICAgICAgICAgZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9z
aXRpb246OmNyZWF0ZShtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKSkpOworICAgICAg
ICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlJlbW92ZUltYWdlQmFja2luZ1R5cGU6CisgICAgICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3Mu
Y29udGFpbnMoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
UmVtb3ZlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uLmdldCgpKS0+aW1hZ2VCYWNraW5nSUQpKTsK
KyAgICAgICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShzdGF0aWNfY2FzdDxjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24uZ2V0
KCkpLT5pbWFnZUJhY2tpbmdJRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zVHlwZTogeworI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMm
IGFuaW1hdGlvbnMgPSBzdGF0aWNfY2FzdDxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllckFuaW1hdGlvbnMqPihvcGVyYXRpb24uZ2V0KCkpLT5hbmltYXRpb25zOworICAgICAg
ICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25zID0gYW5pbWF0aW9ucy5n
ZXRBY3RpdmVBbmltYXRpb25zKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0
aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMo
KS5hdChpKS5rZXlmcmFtZXMoKTsKKyAgICAgICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHko
KSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgp
OyArK2opIHsKKyAgICAgICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSogZmls
dGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+KGtleWZy
YW1lcy5hdChpKSk7CisgICAgICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJv
eGllcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
QW5pbWF0aW9ucyo+KG9wZXJhdGlvbi5nZXQoKSktPmFuaW1hdGlvbnMgPSBhY3RpdmVBbmltYXRp
b25zOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0KKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRl
cnNUeXBlOgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgY2hlY2tDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveGllcyhzdGF0aWNfY2FzdDxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRMYXllckZpbHRlcnMqPihvcGVyYXRpb24uZ2V0KCkpLT5maWx0ZXJzKTsKKyNlbmRpZgor
ICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVVwZGF0ZUF0bGFzKHVp
bnQzMl90IGF0bGFzSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6UmVtb3ZlVXBkYXRlQXRsYXMoYXRsYXNJRCkpOworICAgIG1fb3BlcmF0aW9ucy5hcHBl
bmQob3BlcmF0aW9uKTsKIH0KIAogV2ViQ29yZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0CkBAIC03NTIsMjQgKzY2NCw2IEBA
IFdlYkNvcmU6OkZsb2F0UmVjdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnZpc2libGVDb250
ZW50c1JlY3QoKSBjb25zdAogfQogCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
ZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25zID0g
YW5pbWF0aW9ucy5nZXRBY3RpdmVBbmltYXRpb25zKCk7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJT
KQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25z
KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZy
YW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOwotICAgICAg
ICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRl
cikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IGtleWZyYW1lcy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0
aW9uVmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9u
VmFsdWUqPihrZXlmcmFtZXMuYXQoaSkpOwotICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveGllcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQot
I2VuZGlmCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6U2V0TGF5ZXJBbmltYXRpb25zKGxheWVySUQsIGFjdGl2ZUFuaW1hdGlvbnMp
KTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5
VmVjdG9yKQogewogICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVjdG9yIGluZGljYXRlcyB0aGF0
IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1ZXN0ZWQuCkBAIC04MTIsNyAr
NzA2LDcgQEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Z3JhcGhpY3NMYXllckZhY3RvcnkoKQogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7
Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkpOworICAgIGVucXVldWVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmlt
YXRpb25GcmFtZTo6Y3JlYXRlKCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6YW5pbWF0aW9uRnJhbWVSZWFkeSgpCkBAIC04OTUsNyArNzg5LDcgQEAgdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVy
PENvb3JkaW5hdGUKIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91
bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiB7Ci0gICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QmFja2dyb3Vu
ZENvbG9yKGNvbG9yKSk7CisgICAgZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24o
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpjcmVhdGUo
Y29sb3IpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDcyOTdlZWQ4
MWUwNWEyZWUwZjAwNWVlYTNkZjgxODg1ZmVjM2YyYjUuLmI5OTE1YTVkMGUwOWIzZGY0ZWJiY2Iz
OWNjYTdmMmM2Yzk0NWIxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
TGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdl
QmFja2luZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KQEAgLTQ2LDggKzQ3LDYgQEAg
Y2xhc3MgV2ViUGFnZTsKIAogY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IDogcHVibGlj
IExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBX
ZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IKLSAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpVcGRhdGVBdGxhc0NsaWVudAogICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJGYWN0b3J5CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgICwgV2ViQ3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50CkBAIC03OSw0MCArNzgsMTQgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFs
c2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFn
ZVNjYWxlRmFjdG9yQ2hhbmdlZCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVk
ZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNo
aW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0ZsdXNoaW5nTGF5
ZXJDaGFuZ2VzOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRh
dGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25z
dCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IHRpbGVJRCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJs
ZUNvbnRlbnRzUmVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVD
b29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgc3luY0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5
ZXJDaGlsZHJlbihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5p
bWF0aW9ucyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zJik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6
OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZh
cyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQpIE9WRVJSSURFOwotI2VuZGlmCi0gICAgdmly
dHVhbCB2b2lkIHNldExheWVyUmVwYWludENvdW50KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RCwgaW50KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExh
eWVycygpOwotCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpD
b29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50
UG9pbnQmKTsKLQotICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50Ci0gICAgdmlydHVhbCBib29sIGNy
ZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIE9WRVJSSURFOwog
I2VuZGlmCkBAIC0xMzEsMTQgKzEwNCwxNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGZsb2F0IHBh
Z2VTY2FsZUZhY3RvcigpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgLy8gQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OkNvb3JkaW5hdG9yCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2lu
ZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklE
RTsKLQogICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwogCisgICAg
Ly8gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCBib29sIGlzRmx1
c2hpbmdMYXllckNoYW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdM
YXllckNoYW5nZXM7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29u
dGVudHNSZWN0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChX
ZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJf
dCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oUGFzc1JlZlB0cjxXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb24+KSBPVkVSUklERTsKKwog
ICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudCopIE9WRVJSSURFOwogCkBAIC0xODEsNiArMTU3LDggQEAgcHJpdmF0ZToKICAg
ICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBw
YWdlIG92ZXJsYXkuCiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92
ZXJsYXlMYXllcjsKIAorICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25z
IG1fb3BlcmF0aW9uczsKKwogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwogICAgIFZlY3RvcjxXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQ+IG1fbGF5ZXJzVG9DcmVhdGU7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKQEAgLTIwNCw3ICsxODIsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7CiAKICAgICBM
YXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3lu
Y0ZyYW1lOwogICAgIGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXI7CiAg
ICAgV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBtX2xheWVyRmx1c2hU
aW1lcjsKICAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fcmVs
ZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186016</attachid>
            <date>2013-02-01 05:07:48 -0800</date>
            <delta_ts>2013-02-04 00:29:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108294-20130201220423.patch</filename>
            <type>text/plain</type>
            <size>128152</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWE5ZjQxYTFmYjRhYWVm
NDk3NWUxNGQ0YTYzNTc3NDUwMmJhNWU2Ni4uNjI0YTM3ODk0MmVkYjcwYTUwMDMyMTU3NzkzN2Y1
YTZkYjAzMWI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAorMjAxMy0wMi0wMSAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkgaGFzIHNvIG1hbnkgSVBDIG1lc3NhZ2VzIChlLmcuIFN5bmND
YW52YXMgYW5kCisgICAgICAgIENyZWF0ZVRpbGUpLCBhbmQgdGhlcmUgaXMgYSBsb25nIGZ1bmN0
aW9uIGNoYWluIGZyb20gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIHRvCisgICAgICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSAoNCBjbGFzc2VzKS4KKyAgICAgICAgSWYgd2Ugd2FudCB0byBh
ZGQgYSBuZXcgbWVzc2FnZSwgd2UgbmVlZCB0byBhZGQgYm9pbGVycGxhdGUgY29kZSBpbnRvIDQg
Y2xhc3Nlcy4KKworICAgICAgICBOb3cgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGhhcyBvbmx5
IG9uZSBJUEMgbWVzc2FnZTogQ29tbWl0Q29vcmlkbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuCisg
ICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUgcnVuIGFzIGZvbGxvd3M6CisgICAgICAgIDEuIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciBtYWtlcyBhIENvb3JpZG5hdGVkR3JhcGhpY3NPcGVyYXRpb24gKGUuZy4gQ3JlYXRlVGlsZSku
CisgICAgICAgIDIuIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBzdG9yZXMgYWxsIG9wZXJhdGlv
bnMuCisgICAgICAgIDMuIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBzZW5kcyBhbGwgb3BlcmF0
aW9ucyB0byBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eQorICAgICAgICBhdCB0aGUgbW9t
ZW50IG9mIGZsdXNoaW5nIHZpYSBDb21taXRDb29yaWRuYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyBt
ZXNzYWdlLgorICAgICAgICA0LiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgZXhlY3V0ZXMgYWxs
IG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlcmUgaXMgb25lIGJpZyBiZWhhdmlvciBjaGFuZ2Uu
IEFsbCBvcGVyYXRpb25zIChlLmcuIENyZWF0ZUxheWVycyBhbmQKKyAgICAgICAgU3luY0NhbnZh
cykgYXJlIHBlcmZvcm1lZCBhdCB0aGUgc2FtZSB0aW1lLCB3aGVuCisgICAgICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0Q29vcmlkbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMgaXMg
Y2FsbGVkLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgY29tcG9zaXRpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJv
eUNhbnZhc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmg6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKToKKyAgICAgICAgKE9wZXJhdGlvbik6CisgICAg
ICAgIChDcmVhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpDcmVhdGVMYXllcnMpOgor
ICAgICAgICAoRGVsZXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6RGVsZXRlTGF5ZXJz
KToKKyAgICAgICAgKFNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OlNldFJvb3RM
YXllcik6CisgICAgICAgIChTZXRMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlOjpT
ZXRMYXllclN0YXRlKToKKyAgICAgICAgKFNldExheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyQ2hpbGRyZW46OlNldExheWVyQ2hpbGRyZW4pOgorICAgICAgICAoQ3JlYXRlVGlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVU
aWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6Q3JlYXRlVGlsZTo6Q3JlYXRlVGlsZSk6CisgICAgICAgIChVcGRhdGVUaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpVcGRhdGVUaWxlOjpVcGRhdGVUaWxlKToKKyAgICAgICAgKFJlbW92ZVRpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZVRpbGU6OlJlbW92ZVRpbGUpOgorICAgICAgICAoQ3JlYXRlVXBkYXRlQXRsYXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRl
QXRsYXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Q3JlYXRlVXBkYXRlQXRsYXMpOgorICAgICAgICAo
UmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhczo6UmVtb3Zl
VXBkYXRlQXRsYXMpOgorICAgICAgICAoQ3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZUltYWdlQmFja2luZzo6Q3JlYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFVwZGF0
ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmc6OlVwZGF0ZUlt
YWdlQmFja2luZyk6CisgICAgICAgIChDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNr
aW5nQ29udGVudHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzOjpDbGVhckltYWdlQmFja2lu
Z0NvbnRlbnRzKToKKyAgICAgICAgKFJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmc6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVJbWFnZUJhY2tpbmc6OlJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChTZXRMYXll
ckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpTZXRMYXllckFu
aW1hdGlvbnMpOgorICAgICAgICAoUmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFt
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAg
ICAgKENyZWF0ZUNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OkNyZWF0ZUNhbnZhcyk6Cisg
ICAgICAgIChTeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlN5bmNDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpTeW5jQ2FudmFzKToKKyAgICAg
ICAgKERlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OkRlc3Ryb3lDYW52YXMp
OgorICAgICAgICAoU2V0TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyczo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyczo6
U2V0TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OkNyZWF0ZUN1c3Rv
bUZpbHRlclByb2dyYW0pOgorICAgICAgICAoUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6UmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChTZXRMYXllclJlcGFpbnRDb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRD
b3VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyUmVwYWludENvdW50OjpTZXRMYXllclJlcGFpbnRDb3VudCk6CisgICAg
ICAgIChTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9y
OjpTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hh
bmdlU2Nyb2xsUG9zaXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbjo6RGlkQ2hhbmdlU2Ny
b2xsUG9zaXRpb24pOgorICAgICAgICAoUXVldWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bnM6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uczo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbnM6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnM6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnM6OmF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAgICAgUmVtb3ZlIG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiBiZWNh
dXNlCisgICAgICAgICAgICBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbigpIGlzIGNhbGxlZCBhdCB0
aGUgbW9tZW50IG9mIGZsdXNoaW5nLgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmV4ZWN1dGVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0RHJhd3NCYWNr
Z3JvdW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZElt
YWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSk6CisgICAgICAgICAgICBXZSBkb24ndCBk
ZWFsIHdpdGggdGhlIGNhc2Ugd2hlbiBzZW5kaW5nIGFuIFVwZGF0ZUltYWdlQmFja2luZyBvcGVy
YXRpb24gZmFpbHMuCisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6
Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOgorICAgICAgICAoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMpOgorICAgICAgICAgICAgV2UgZG9uJ3QgZGVh
bCB3aXRoIHRoZSBjYXNlIHdoZW4gc2VuZGluZyBhIENyZWF0ZVVwZGF0ZUF0bGFzIG9wZXJhdGlv
biBmYWlscy4KKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMpOgor
ICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1Vw
ZGF0ZUF0bGFzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFVwZGF0ZUF0bGFzKToK
KwogMjAxMy0wMi0wMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBGb2xsb3cgdXAgdG8gcjE0MTI2MDogZml4aW5nIHJlbmFt
ZWQgc3R5bGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggODQyYTM4YWNhMjc0ZWQ1MjIzYTgzZDAxOTI5MWY0OTJl
ZTNlYzUxMC4uMDUzNDY5ZTEyYmJhYzgxNTEzYTQwYjQyYzFjODc2ZmI4MzRjMjI1MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTAyLTAxICBIdWFuZyBEb25nc3VuZyAgPGx1eHRl
bGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIHBlcmZv
cm0gdmlhIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgyOTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eSBoYXMgc28gbWFueSBJUEMgbWVzc2FnZXMgKGUuZy4gU3luY0NhbnZhcyBhbmQKKyAgICAgICAg
Q3JlYXRlVGlsZSksIGFuZCB0aGVyZSBpcyBhIGxvbmcgZnVuY3Rpb24gY2hhaW4gZnJvbSBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIgdG8KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
ICg0IGNsYXNzZXMpLgorICAgICAgICBJZiB3ZSB3YW50IHRvIGFkZCBhIG5ldyBtZXNzYWdlLCB3
ZSBuZWVkIHRvIGFkZCBib2lsZXJwbGF0ZSBjb2RlIGludG8gNCBjbGFzc2VzLgorCisgICAgICAg
IE5vdyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgaGFzIG9ubHkgb25lIElQQyBtZXNzYWdlOiBD
b21taXRDb29yaWRuYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy4KKyAgICAgICAgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBydW4gYXMgZm9sbG93
czoKKyAgICAgICAgMS4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIGEgQ29vcmlkbmF0
ZWRHcmFwaGljc09wZXJhdGlvbiAoZS5nLiBDcmVhdGVUaWxlKS4KKyAgICAgICAgMi4gQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0IHN0b3JlcyBhbGwgb3BlcmF0aW9ucy4KKyAgICAgICAgMy4gQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IHNlbmRzIGFsbCBvcGVyYXRpb25zIHRvIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5CisgICAgICAgIGF0IHRoZSBtb21lbnQgb2YgZmx1c2hpbmcgdmlh
IENvbW1pdENvb3JpZG5hdGVkR3JhcGhpY3NPcGVyYXRpb25zIG1lc3NhZ2UuCisgICAgICAgIDQu
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBleGVjdXRlcyBhbGwgb3BlcmF0aW9ucy4KKworICAg
ICAgICBUaGVyZSBpcyBvbmUgYmlnIGJlaGF2aW9yIGNoYW5nZS4gQWxsIG9wZXJhdGlvbnMgKGUu
Zy4gQ3JlYXRlTGF5ZXJzIGFuZAorICAgICAgICBTeW5jQ2FudmFzKSBhcmUgcGVyZm9ybWVkIGF0
IHRoZSBzYW1lIHRpbWUsIHdoZW4KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpj
b21taXRDb29yaWRuYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyBpcyBjYWxsZWQuCisKKyAgICAgICAg
KiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRD
b2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOgorICAgICAgICAgICAgRW5j
b2RpbmcgVXBkYXRlSW1hZ2VCYWNraW5nIGFuZCBDcmVhdGVVcGRhdGVBdGxhcyBjYW4gZmFpbCBi
ZWNhdXNlCisgICAgICAgICAgICBlbmNvZGluZyBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRs
ZSBjYW4gZmFpbCwgYnV0IHdlIGRvbid0CisgICAgICAgICAgICByZWNvdmVyIGluIHRoZSBjYXNl
LgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAg
ICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3Vt
ZW50Q29kZXJzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKToKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZWxldGVDb21wb3Np
dGluZ0xheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hp
ZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24pOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
Y2hlZHVsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAg
KENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisKIDIwMTMtMDItMDEgIENocmlzdG9waGUgRHVt
ZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIFVz
ZSBDIEFQSSBpbnNpZGUgZXdrX2F1dGhfcmVxdWVzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggOTBlZmM0MGYz
NzYyZDBmMjI0ODYyNzQ1MjIzODQxNDdiM2MxNGQ2Ny4uOTkxZjA1ODUyMDRiODk2YWU4YjA0ODQy
MDM2OWJmNWVlNmVlMWJjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0yMjQ2LDYgKzIyNDYsOCBAQCBIRUFE
RVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZElt
YWdlQmFja2luZy5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRMYXllckluZm8uaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDM3MzZmMjYwNGMwYzEwNDM5OTk1
N2I5OGEyNTI1ZWU3ZGJjZGQ5YmIuLmVlNjk3NDBjZDhiZjExNTYzMjIxOTc0ODBmYjY2ZjNiNzFj
MjU2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuY3BwCkBAIC01MDAsNyArNTAwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnN5bmNDaGlsZHJlbigpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGls
ZHJlbigpLnNpemUoKTsgKytpKQogICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9Db29yZGluYXRl
ZExheWVySUQoY2hpbGRyZW4oKVtpXSkpOwogCi0gICAgbV9jb29yZGluYXRvci0+c3luY0xheWVy
Q2hpbGRyZW4obV9pZCwgY2hpbGRJRHMpOworICAgIG1fY29vcmRpbmF0b3ItPmVucXVldWVDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyQ2hpbGRyZW46OmNyZWF0ZShtX2lkLCBjaGlsZElEcykpOwogfQogCiAjaWYgRU5BQkxF
KENTU19GSUxURVJTKQpAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jRmlsdGVycygpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQogICAg
ICAgICByZXR1cm47CiAgICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOwotICAgIG1fY29v
cmRpbmF0b3ItPnN5bmNMYXllckZpbHRlcnMobV9pZCwgZmlsdGVycygpKTsKKyAgICBtX2Nvb3Jk
aW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnM6OmNyZWF0ZShtX2lkLCBmaWx0ZXJzKCkp
KTsKIH0KICNlbmRpZgogCkBAIC01NzAsNyArNTcwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKCkKICAgICAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3Jz
KCk7CiAgICAgbV9sYXllckluZm8uc2hvd1JlcGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWlu
dENvdW50ZXIoKTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1f
bGF5ZXJJbmZvKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlOjpj
cmVhdGUobV9pZCwgbV9sYXllckluZm8pKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgpCkBA
IC01ODcsNyArNTg3LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNBbmlt
YXRpb25zKCkKIAogICAgIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMgPSBmYWxzZTsKIAotICAgIG1f
Y29vcmRpbmF0b3ItPnNldExheWVyQW5pbWF0aW9ucyhtX2lkLCBtX2FuaW1hdGlvbnMpOworICAg
IG1fY29vcmRpbmF0b3ItPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczo6Y3JlYXRlKG1faWQs
IG1fYW5pbWF0aW9ucykpOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBAIC02MDQs
NyArNjA0LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQog
ICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Nvb3Jk
aW5hdG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgQVNT
RVJUKG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgdWludDMyX3QgZnJvbnRCdWZmZXIgPSBt
X2NhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOworICAgIG1fY29v
cmRpbmF0b3ItPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6OmNyZWF0ZShtX2lkLCBmcm9udEJ1ZmZlcikp
OwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNhbnZhc0lmTmVl
ZGVkKCkKQEAgLTYxMyw3ICs2MTUsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
ZGVzdHJveUNhbnZhc0lmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1faXNW
YWxpZENhbnZhcykgewotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5kZXN0cm95Q2FudmFzKG1faWQp
OworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpjcmVhdGUo
bV9pZCkpOwogICAgICAgICBtX2lzVmFsaWRDYW52YXMgPSBmYWxzZTsKICAgICB9CiAKQEAgLTYy
Nyw3ICs2MjksOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFz
SWZOZWVkZWQoKQogCiAgICAgQVNTRVJUKG1fY2FudmFzUGxhdGZvcm1MYXllcik7CiAgICAgaWYg
KCFtX2lzVmFsaWRDYW52YXMpIHsKLSAgICAgICAgbV9jb29yZGluYXRvci0+Y3JlYXRlQ2FudmFz
KG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgICAgIEludFNpemUgY2FudmFzU2l6
ZSA9IG1fY2FudmFzUGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKTsKKyAgICAgICAg
R3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBo
aWNzU3VyZmFjZVRva2VuKCk7CisgICAgICAgIG1fY29vcmRpbmF0b3ItPmVucXVldWVDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0
ZUNhbnZhczo6Y3JlYXRlKG1faWQsIGNhbnZhc1NpemUsIHRva2VuKSk7CiAgICAgICAgIG1faXNW
YWxpZENhbnZhcyA9IHRydWU7CiAgICAgfQogCkBAIC03MzYsNyArNzQwLDcgQEAgdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCiB7CiAg
ICAgaWYgKGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgJiYgIXVwZGF0ZWRSZWN0cy5pc0VtcHR5
KCkpCi0gICAgICAgIG1fY29vcmRpbmF0b3ItPnNldExheWVyUmVwYWludENvdW50KGlkKCksIGlu
Y3JlbWVudFJlcGFpbnRDb3VudCgpKTsKKyAgICAgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0TGF5ZXJSZXBhaW50Q291bnQ6OmNyZWF0ZShpZCgpLCBpbmNyZW1lbnRSZXBhaW50Q291bnQo
KSkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3Rv
cmVIYXNQZW5kaW5nVGlsZUNyZWF0aW9uKCkKQEAgLTc5NSwyMSArNzk5LDIxIEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluCiB7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwogICAgIEFTU0VS
VChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAgIG1fY29vcmRp
bmF0b3ItPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVjdCk7Cisg
ICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZTo6Y3JlYXRlKGlkKCksIHRpbGVJ
RCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnVwZGF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCiB7CiAgICAgQVNTRVJUKG1f
Y29vcmRpbmF0b3IpOwogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJD
aGFuZ2VzKCkpOwotICAgIG1fY29vcmRpbmF0b3ItPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1
cGRhdGVJbmZvLCB0aWxlUmVjdCk7CisgICAgbV9jb29yZGluYXRvci0+ZW5xdWV1ZUNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRl
VGlsZTo6Y3JlYXRlKGlkKCksIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAog
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlE
KQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRv
ci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIHx8IG1faXNQdXJnaW5nKTsKLSAgICBtX2Nvb3Jk
aW5hdG9yLT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7CisgICAgbV9jb29yZGluYXRvci0+ZW5x
dWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6UmVtb3ZlVGlsZTo6Y3JlYXRlKGlkKCksIHRpbGVJRCkpOwogfQogCiB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IGE1NTFk
MzUxMWFkYTY0NGViZjczMmJlZjYyZTg2YWQ5ZDg3ZjFhMjAuLjM3ODliZGY0Njk0NjNiMTRkZjgy
YjkxOTY0MmQ1NWViNzAwYWMxMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
X2gKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKICNpbmNsdWRl
ICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJ
bmZvLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCkBAIC00MywzNCArNDQsMTIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOwot
Y2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7CiAKLWNsYXNzIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllckNsaWVudCB7CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgOiBw
dWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUgewogcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgPSAwOwotCi0gICAg
Ly8gQ29vcmRpbmF0ZWRUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiwgY29uc3QgSW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29y
ZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
LCBjb25zdCBJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKSA9IDA7Ci0KICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQo
SW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENv
b3JkaW5hdGVkTGF5ZXJJRD4mKSA9IDA7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZp
cnR1YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYpID0gMDsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQot
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9y
bUxheWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5
ZXJJRCwgUGxhdGZvcm1MYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZh
cyhDb29yZGluYXRlZExheWVySUQpID0gMDsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNl
dExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50KSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
TGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
eW5jRml4ZWRMYXllcnMoKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmLCBDb29yZGluYXRlZFN1cmZh
Y2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmKSA9IDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lZWI0MGQ1ZDZkZjEzYWQ0MGNjOGU1OWU5YjcxYzA5NWFjZmQwYWFhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaApAQCAtMCwwICsxLDUxOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25faAorI2RlZmluZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKworI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgi
CisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCisjaWYgRU5BQkxFKENTU19TSEFERVJT
KQorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmgiCisjZW5kaWYKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgorI2VuZGlmCisj
aW5jbHVkZSAiR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3Vy
ZmFjZVRva2VuLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbiB7CitwdWJs
aWM6CisgICAgZW51bSBPcGVyYXRpb25UeXBlIHsKKyAgICAgICAgQ3JlYXRlTGF5ZXJzVHlwZSwK
KyAgICAgICAgRGVsZXRlTGF5ZXJzVHlwZSwKKyAgICAgICAgU2V0Um9vdExheWVyVHlwZSwKKyAg
ICAgICAgU2V0TGF5ZXJTdGF0ZVR5cGUsCisgICAgICAgIFNldExheWVyQ2hpbGRyZW5UeXBlLAor
ICAgICAgICBDcmVhdGVUaWxlVHlwZSwKKyAgICAgICAgVXBkYXRlVGlsZVR5cGUsCisgICAgICAg
IFJlbW92ZVRpbGVUeXBlLAorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhc1R5cGUsCisgICAgICAg
IFJlbW92ZVVwZGF0ZUF0bGFzVHlwZSwKKyAgICAgICAgQ3JlYXRlSW1hZ2VCYWNraW5nVHlwZSwK
KyAgICAgICAgVXBkYXRlSW1hZ2VCYWNraW5nVHlwZSwKKyAgICAgICAgQ2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50c1R5cGUsCisgICAgICAgIFJlbW92ZUltYWdlQmFja2luZ1R5cGUsCisgICAgICAg
IFNldExheWVyQW5pbWF0aW9uc1R5cGUsCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQorICAgICAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUeXBlLAorI2VuZGlmCisjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgIENyZWF0ZUNhbnZhc1R5cGUsCisgICAgICAgIFN5
bmNDYW52YXNUeXBlLAorICAgICAgICBEZXN0cm95Q2FudmFzVHlwZSwKKyNlbmRpZgorI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKKyAgICAgICAgU2V0TGF5ZXJGaWx0ZXJzVHlwZSwKKyNlbmRpZgor
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVR5cGUsCisgICAgICAgIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlLAorI2VuZGlmCisg
ICAgICAgIFNldExheWVyUmVwYWludENvdW50VHlwZSwKKyAgICAgICAgU2V0QmFja2dyb3VuZENv
bG9yVHlwZSwKKyAgICAgICAgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb25UeXBlLAorICAgICAgICBO
b25lVHlwZQorICAgIH07CisKKyAgICBjbGFzcyBPcGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRl
ZDxPcGVyYXRpb24+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3Qg
PSAwOworICAgIH07CisKKyAgICBjbGFzcyBDcmVhdGVMYXllcnMgOiBwdWJsaWMgT3BlcmF0aW9u
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZUxheWVycz4g
Y3JlYXRlKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBsYXllcklEcykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVMYXllcnMobGF5ZXJJ
RHMpKTsKKyAgICAgICAgfQorICAgICAgICBleHBsaWNpdCBDcmVhdGVMYXllcnMoY29uc3QgVmVj
dG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlkcykKKyAgICAgICAgOiBsYXllcklEcyhpZHMpCisg
ICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzVHlwZTsgfQorCisg
ICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGxheWVySURzOworICAgIH07CisKKyAg
ICBjbGFzcyBEZWxldGVMYXllcnMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlbGV0ZUxheWVycz4gY3JlYXRlKGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+JiBsYXllcklEcykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxldGVMYXllcnMobGF5ZXJJRHMpKTsKKyAgICAgICAgfQor
ICAgICAgICBleHBsaWNpdCBEZWxldGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5
ZXJJRD4mIGlkcykKKyAgICAgICAgOiBsYXllcklEcyhpZHMpCisgICAgICAgIHsgfQorCisgICAg
ICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBn
ZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzVHlwZTsgfQorCisgICAgICAgIFZlY3RvcjxDb29y
ZGluYXRlZExheWVySUQ+IGxheWVySURzOworICAgIH07CisKKyAgICBjbGFzcyBTZXRSb290TGF5
ZXIgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNldFJvb3RMYXllcj4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldFJvb3RMYXllcihs
YXllcklEKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgU2V0Um9vdExheWVyKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCkKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICB7IH0KKwor
ICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5
cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllclR5cGU7IH0KKworICAgICAgICBDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICB9OworCisgICAgY2xhc3MgU2V0TGF5ZXJTdGF0ZSA6
IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2V0TGF5ZXJTdGF0ZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25z
dCBDb29yZGluYXRlZExheWVySW5mbyYgbGF5ZXJJbmZvKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNldExheWVyU3RhdGUobGF5ZXJJRCwgbGF5ZXJJbmZvKSk7
CisgICAgICAgIH0KKyAgICAgICAgU2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQs
IGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQorICAgICAgICA6IGxheWVySUQoaWQp
CisgICAgICAgICwgbGF5ZXJJbmZvKGluZm8pCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1
YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRp
b25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJTdGF0ZVR5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRDsKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvOworICAgIH07
CisKKworICAgIGNsYXNzIFNldExheWVyQ2hpbGRyZW4gOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldExheWVyQ2hpbGRyZW4+IGNy
ZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mIGNoaWxkcmVuKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNldExheWVyQ2hpbGRyZW4obGF5ZXJJRCwgY2hpbGRyZW4pKTsKKyAgICAgICAgfQor
ICAgICAgICBTZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVj
dG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuVmVjdG9yKQorICAgICAgICA6IGxheWVy
SUQoaWQpCisgICAgICAgICwgY2hpbGRyZW4oY2hpbGRyZW5WZWN0b3IpCisgICAgICAgIHsgfQor
CisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlblR5cGU7IH0KKworICAgICAgICBD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5
ZXJJRD4gY2hpbGRyZW47CisgICAgfTsKKworICAgIGNsYXNzIENyZWF0ZVRpbGUgOiBwdWJsaWMg
T3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0
ZVRpbGU+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRl
VGlsZShsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CisgICAgICAgIH0K
KyAgICAgICAgQ3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IHRpbGUs
IGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiBpbmZvKQorICAg
ICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICwgdGlsZUlEKHRpbGUpCisgICAgICAgICwgdGls
ZVJlY3QocmVjdCkKKyAgICAgICAgLCB1cGRhdGVJbmZvKGluZm8pCisgICAgICAgIHsgfQorCisg
ICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZVR5cGU7IH0KKworICAgICAgICBDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICBJbnRS
ZWN0IHRpbGVSZWN0OworICAgICAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAg
IH07CisKKyAgICBjbGFzcyBVcGRhdGVUaWxlIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVi
bGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxVcGRhdGVUaWxlPiBjcmVhdGUoQ29vcmRp
bmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFVwZGF0ZVRpbGUobGF5ZXJJRCwgdGlsZUlE
LCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworICAgICAgICB9CisgICAgICAgIFVwZGF0ZVRpbGUo
Q29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCB0aWxlLCBjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgaW5mbykKKyAgICAgICAgOiBsYXllcklEKGlkKQor
ICAgICAgICAsIHRpbGVJRCh0aWxlKQorICAgICAgICAsIHRpbGVSZWN0KHJlY3QpCisgICAgICAg
ICwgdXBkYXRlSW5mbyhpbmZvKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVw
ZGF0ZVRpbGVUeXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7Cisg
ICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAgICAg
ICAgU3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICB9OworCisgICAgY2xhc3MgUmVt
b3ZlVGlsZSA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UmVtb3ZlVGlsZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklE
LCB1aW50MzJfdCB0aWxlSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUmVtb3ZlVGlsZShsYXllcklELCB0aWxlSUQpKTsKKyAgICAgICAgfQorICAgICAgICBS
ZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgdGlsZSkKKyAgICAgICAg
OiBsYXllcklEKGlkKQorICAgICAgICAsIHRpbGVJRCh0aWxlKQorICAgICAgICB7IH0KKworICAg
ICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUg
Z2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGVUeXBlOyB9CisKKyAgICAgICAgQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQ7CisgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICB9OworCisgICAg
Y2xhc3MgQ3JlYXRlVXBkYXRlQXRsYXMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZVVwZGF0ZUF0bGFzPiBjcmVhdGUodWlu
dDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlVXBkYXRlQXRs
YXMoYXRsYXNJRCwgc3VyZmFjZSkpOworICAgICAgICB9CisgICAgICAgIENyZWF0ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGlkLCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0
ZWRTdXJmYWNlKQorICAgICAgICA6IGF0bGFzSUQoaWQpCisgICAgICAgICwgc3VyZmFjZShjb29y
ZGluYXRlZFN1cmZhY2UpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRl
VXBkYXRlQXRsYXNUeXBlOyB9CisKKyAgICAgICAgdWludDMyX3QgYXRsYXNJRDsKKyAgICAgICAg
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZTsKKyAgICB9OworCisgICAgY2xhc3Mg
UmVtb3ZlVXBkYXRlQXRsYXMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZVVwZGF0ZUF0bGFzPiBjcmVhdGUodWludDMyX3Qg
YXRsYXNJRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1v
dmVVcGRhdGVBdGxhcyhhdGxhc0lEKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgUmVt
b3ZlVXBkYXRlQXRsYXModWludDMyX3QgaWQpCisgICAgICAgIDogYXRsYXNJRChpZCkKKyAgICAg
ICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpP
cGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhc1R5cGU7IH0KKwor
ICAgICAgICB1aW50MzJfdCBhdGxhc0lEOworICAgIH07CisKKyAgICBjbGFzcyBDcmVhdGVJbWFn
ZUJhY2tpbmcgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENyZWF0ZUltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaW1hZ2VCYWNraW5nSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlQmFja2luZ0lEKSk7CisgICAgICAg
IH0KKyAgICAgICAgZXhwbGljaXQgQ3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaWQpCisgICAgICAgIDogaW1hZ2VCYWNraW5nSUQoaWQpCisgICAgICAgIHsgfQor
CisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9u
VHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nVHlwZTsgfQorCisgICAgICAg
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNraW5nSUQ7CisgICAgfTsKKworICAg
IGNsYXNzIFVwZGF0ZUltYWdlQmFja2luZyA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VXBkYXRlSW1hZ2VCYWNraW5nPiBjcmVhdGUo
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlQmFja2luZ0lELCBzdXJmYWNlKSk7
CisgICAgICAgIH0KKyAgICAgICAgVXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaWQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1
cmZhY2UpCisgICAgICAgIDogaW1hZ2VCYWNraW5nSUQoaWQpCisgICAgICAgICwgc3VyZmFjZShj
b29yZGluYXRlZFN1cmZhY2UpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBk
YXRlSW1hZ2VCYWNraW5nVHlwZTsgfQorCisgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VCYWNraW5nSUQ7CisgICAgICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1
cmZhY2U7CisgICAgfTsKKworICAgIGNsYXNzIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMgOiBw
dWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENsZWFySW1hZ2VCYWNraW5nQ29udGVudHM+IGNyZWF0ZShDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWdlQmFja2luZ0lEKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaW1hZ2VCYWNraW5nSUQpKTsKKyAgICAg
ICAgfQorICAgICAgICBleHBsaWNpdCBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgaWQpCisgICAgICAgIDogaW1hZ2VCYWNraW5nSUQoaWQpCisgICAg
ICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5
cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lE
OworICAgIH07CisKKyAgICBjbGFzcyBSZW1vdmVJbWFnZUJhY2tpbmcgOiBwdWJsaWMgT3BlcmF0
aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZUltYWdl
QmFja2luZz4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNraW5nSUQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3ZlSW1hZ2VC
YWNraW5nKGltYWdlQmFja2luZ0lEKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgUmVt
b3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQpCisgICAgICAgIDog
aW1hZ2VCYWNraW5nSUQoaWQpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlSW1hZ2VCYWNraW5nVHlwZTsgfQorCisgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VCYWNraW5nSUQ7CisgICAgfTsKKworICAgIGNsYXNzIFNldExheWVyQW5pbWF0aW9u
cyA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2V0TGF5ZXJBbmltYXRpb25zPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVy
SUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldExheWVyQW5pbWF0aW9ucyhsYXll
cklELCBhbmltYXRpb25zKSk7CisgICAgICAgIH0KKyAgICAgICAgU2V0TGF5ZXJBbmltYXRpb25z
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGxh
eWVyQW5pbWF0aW9ucykKKyAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAsIGFuaW1hdGlv
bnMobGF5ZXJBbmltYXRpb25zKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyQW5pbWF0aW9uc1R5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5
ZXJJRDsKKyAgICAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYW5pbWF0aW9uczsKKyAgICB9
OworCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIGNsYXNzIFJlcXVl
c3RBbmltYXRpb25GcmFtZSA6IHB1YmxpYyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UmVxdWVzdEFuaW1hdGlvbkZyYW1lPiBjcmVhdGUoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlcXVlc3RBbmltYXRpb25G
cmFtZSgpKTsKKyAgICAgICAgfQorICAgICAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQorICAg
ICAgICB7IH0KKworICAgICAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZVR5cGU7
IH0KKyAgICB9OworI2VuZGlmCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBjbGFz
cyBDcmVhdGVDYW52YXMgOiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZUNhbnZhcz4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJ
RCBsYXllcklELCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBjb25zdCBHcmFwaGljc1N1cmZh
Y2VUb2tlbiYgdG9rZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ3JlYXRlQ2FudmFzKGxheWVySUQsIGNhbnZhc1NpemUsIHRva2VuKSk7CisgICAgICAgIH0K
KyAgICAgICAgQ3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHN1cmZhY2VUb2tlbikKKyAgICAg
ICAgOiBsYXllcklEKGlkKQorICAgICAgICAsIGNhbnZhc1NpemUoc2l6ZSkKKyAgICAgICAgLCB0
b2tlbihzdXJmYWNlVG9rZW4pCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlQ2FudmFzVHlwZTsgfQorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOwor
ICAgICAgICBJbnRTaXplIGNhbnZhc1NpemU7CisgICAgICAgIEdyYXBoaWNzU3VyZmFjZVRva2Vu
IHRva2VuOworICAgIH07CisKKyAgICBjbGFzcyBTeW5jQ2FudmFzIDogcHVibGljIE9wZXJhdGlv
biB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTeW5jQ2FudmFzPiBj
cmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN5bmNDYW52YXMobGF5
ZXJJRCwgZnJvbnRCdWZmZXIpKTsKKyAgICAgICAgfQorICAgICAgICBTeW5jQ2FudmFzKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXJIYW5kbGUpCisgICAgICAgIDog
bGF5ZXJJRChpZCkKKyAgICAgICAgLCBmcm9udEJ1ZmZlcihmcm9udEJ1ZmZlckhhbmRsZSkKKyAg
ICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzVHlwZTsgfQorCisgICAg
ICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICB1aW50MzJfdCBmcm9udEJ1
ZmZlcjsKKyAgICB9OworCisgICAgY2xhc3MgRGVzdHJveUNhbnZhcyA6IHB1YmxpYyBPcGVyYXRp
b24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVzdHJveUNhbnZh
cz4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlc3Ryb3lDYW52YXMobGF5ZXJJRCkpOworICAgICAg
ICB9CisgICAgICAgIGV4cGxpY2l0IERlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlk
KQorICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25U
eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6RGVzdHJveUNhbnZhc1R5cGU7IH0KKworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5
ZXJJRDsKKyAgICB9OworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgY2xh
c3MgU2V0TGF5ZXJGaWx0ZXJzIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRMYXllckZpbHRlcnM+IGNyZWF0ZShDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllckZpbHRlcnMobGF5
ZXJJRCwgZmlsdGVycykpOworICAgICAgICB9CisgICAgICAgIFNldExheWVyRmlsdGVycyhDb29y
ZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlck9wZXJhdGlv
bnMpCisgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgLCBmaWx0ZXJzKGZpbHRlck9wZXJh
dGlvbnMpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJz
VHlwZTsgfQorCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICBG
aWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgfTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKKyAgICBjbGFzcyBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtIDogcHVibGljIE9wZXJhdGlv
biB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRCwgY29uc3QgQ3Vz
dG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmls
dGVyUHJvZ3JhbUlELCBwcm9ncmFtSW5mbykpOworICAgICAgICB9CisgICAgICAgIENyZWF0ZUN1
c3RvbUZpbHRlclByb2dyYW0oaW50IHByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8mIGluZm8pCisgICAgICAgIDogY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKHByb2dyYW1JRCkK
KyAgICAgICAgLCBwcm9ncmFtSW5mbyhpbmZvKQorICAgICAgICB7IH0KKworICAgICAgICB2aXJ0
dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0
aW9uVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlOyB9CisKKyAgICAgICAgaW50IGN1
c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICAgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gcHJv
Z3JhbUluZm87CisgICAgfTsKKworICAgIGNsYXNzIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0g
OiBwdWJsaWMgT3BlcmF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0+IGNyZWF0ZShpbnQgY3VzdG9tRmlsdGVyUHJv
Z3JhbUlEKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSk7CisgICAgICAgIH0K
KyAgICAgICAgZXhwbGljaXQgUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgcHJvZ3JhbUlE
KQorICAgICAgICA6IGN1c3RvbUZpbHRlclByb2dyYW1JRChwcm9ncmFtSUQpCisgICAgICAgIHsg
fQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGU7IH0K
KworICAgICAgICBpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlEOworICAgIH07CisjZW5kaWYKKyNl
bmRpZgorCisgICAgY2xhc3MgU2V0TGF5ZXJSZXBhaW50Q291bnQgOiBwdWJsaWMgT3BlcmF0aW9u
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldExheWVyUmVwYWlu
dENvdW50PiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGludCByZXBhaW50Q291
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJS
ZXBhaW50Q291bnQobGF5ZXJJRCwgcmVwYWludENvdW50KSk7CisgICAgICAgIH0KKyAgICAgICAg
U2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgY291bnQpCisg
ICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgLCByZXBhaW50Q291bnQoY291bnQpCisgICAg
ICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnRUeXBlOyB9
CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgIGludCByZXBh
aW50Q291bnQ7CisgICAgfTsKKworICAgIGNsYXNzIFNldEJhY2tncm91bmRDb2xvciA6IHB1Ymxp
YyBPcGVyYXRpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2V0
QmFja2dyb3VuZENvbG9yPiBjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldEJhY2tncm91bmRDb2xvcihjb2xvcikp
OworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0IFNldEJhY2tncm91bmRDb2xvcihjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKQorICAgICAgICA6IGNvbG9yKGJhY2tncm91bmRDb2xvcikK
KyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3JUeXBl
OyB9CisKKyAgICAgICAgQ29sb3IgY29sb3I7CisgICAgfTsKKworICAgIGNsYXNzIERpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uIDogcHVibGljIE9wZXJhdGlvbiB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbj4gY3JlYXRlKGNvbnN0
IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uKSk7CisgICAgICAgIH0K
KyAgICAgICAgZXhwbGljaXQgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24pCisgICAgICAgIDogcG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pCisg
ICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb25U
eXBlOyB9CisKKyAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbjsKKyAgICB9OworCisgICAgY2xh
c3MgUXVldWUgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIGVucXVldWVDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6T3BlcmF0aW9uPikgPSAwOworICAgIH07CisKK307IC8vIGNsYXNzIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb24KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmCisK
KyNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wZGY3N2YwNGY2M2NiMDZkY2E4NjQwNWRkMWVkOTgzZjM3Mzc5Zjk2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmgKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25zX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnNfaAorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb24+IG9wZXJhdGlvbikgeyBtX29wZXJh
dGlvbnMuYXBwZW5kKG9wZXJhdGlvbik7IH0KKyAgICB2b2lkIGNsZWFyKCkgeyBtX29wZXJhdGlv
bnMuY2xlYXIoKTsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGVy
YXRpb25zLmlzRW1wdHkoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9v
cGVyYXRpb25zLnNpemUoKTsgfQorICAgIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246Ok9wZXJhdGlvbiogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA8IG1f
b3BlcmF0aW9ucy5zaXplKCkgPyBtX29wZXJhdGlvbnMuYXQoaW5kZXgpLmdldCgpIDogMDsgfQor
Citwcml2YXRlOgorICAgIFZlY3RvcjxSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6T3BlcmF0aW9uPiA+IG1fb3BlcmF0aW9uczsKK307CisKK30KKyNlbmRpZgorCisjZW5kaWYg
Ly8gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCmluZGV4IGQyMTVmYjM2
MTNiOTA3YjZiMWQ5ZjVlODkxMTlkYmIyNjQ0ZjQ1OTQuLmY4NTAwOTVhNjk5NTQ4Yzk3OTYzOTRm
OWJlOTAzOGIxYmZjMmVlYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgiCiAKICNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tp
bmdTdG9yZS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgpAQCAtMjE1
LDcgKzIxNiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphZGp1c3RQb3NpdGlv
bkZvckZpeGVkTGF5ZXJzKCkKIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpZENo
YW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQogewotICAgIG1f
cGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIG1f
cmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gcG9zaXRpb247CiB9CiAKICNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKQEAgLTU1NCw5ICs1NTUsMTAgQEAgdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCkKICAgICBt
X2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKIH0KIAotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKIHsKLSAgICBtX3Jl
bmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNT
Y3JvbGxQb3NpdGlvbjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnMuc2l6
ZSgpOyBpKyspCisgICAgICAgIGV4ZWN1dGVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKG9w
ZXJhdGlvbnMuYXQoaSkpOwogCiAgICAgLy8gU2luY2UgdGhlIGZyYW1lIGhhcyBub3cgYmVlbiBy
ZW5kZXJlZCwgd2UgY2FuIHNhZmVseSB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgdW50aWwgdGhlIG5l
eHQgbGF5b3V0LgogICAgIHNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpOwpAQCAtNTY5LDYgKzU3
MSwxMTkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZsdXNoTGF5ZXJDaGFuZ2Vz
KCkKICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnJlbmRlck5leHRGcmFtZSwgdGhpcykpOwogfQogCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6ZXhlY3V0ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uKiBvcGVyYXRpb24pCit7CisgICAgc3dp
dGNoIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkgeworICAgIGNhc2UgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzVHlwZToKKyAgICAgICAgY3JlYXRlTGF5
ZXJzKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0
ZUxheWVycyo+KG9wZXJhdGlvbiktPmxheWVySURzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnNUeXBlOgorICAgICAg
ICBkZWxldGVMYXllcnMoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6RGVsZXRlTGF5ZXJzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllclR5
cGU6CisgICAgICAgIHNldFJvb3RMYXllcklEKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllcio+KG9wZXJhdGlvbiktPmxheWVySUQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyU3RhdGVUeXBlOgorICAgICAgICBzZXRMYXllclN0YXRlKHN0YXRpY19jYXN0PGNvbnN0
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGUqPihvcGVyYXRpb24p
LT5sYXllcklELAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZSo+KG9wZXJhdGlvbiktPmxheWVySW5mbyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJDaGlsZHJlblR5cGU6CisgICAgICAgIHNldExheWVyQ2hpbGRyZW4oc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbio+KG9w
ZXJhdGlvbiktPmxheWVySUQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuKj4ob3BlcmF0aW9uKS0+Y2hp
bGRyZW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZVRpbGVUeXBlOiB7CisgICAgICAgIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZVRpbGUqIGNyZWF0ZVRpbGVPcGVyYXRpb24gPSBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlKj4ob3BlcmF0
aW9uKTsKKyAgICAgICAgY3JlYXRlVGlsZShjcmVhdGVUaWxlT3BlcmF0aW9uLT5sYXllcklELCBj
cmVhdGVUaWxlT3BlcmF0aW9uLT50aWxlSUQsIGNyZWF0ZVRpbGVPcGVyYXRpb24tPnVwZGF0ZUlu
Zm8uc2NhbGVGYWN0b3IpOworICAgICAgICB1cGRhdGVUaWxlKGNyZWF0ZVRpbGVPcGVyYXRpb24t
PmxheWVySUQsIGNyZWF0ZVRpbGVPcGVyYXRpb24tPnRpbGVJRCwKKyAgICAgICAgICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6VGlsZVVwZGF0ZShjcmVhdGVUaWxlT3BlcmF0aW9uLT51cGRh
dGVJbmZvLnVwZGF0ZVJlY3QsIGNyZWF0ZVRpbGVPcGVyYXRpb24tPnRpbGVSZWN0LCBjcmVhdGVU
aWxlT3BlcmF0aW9uLT51cGRhdGVJbmZvLmF0bGFzSUQsIGNyZWF0ZVRpbGVPcGVyYXRpb24tPnVw
ZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlVHlwZTogeworICAgICAg
ICBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlKiB1cGRhdGVU
aWxlT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbik7CisgICAgICAgIHVwZGF0ZVRpbGUodXBkYXRl
VGlsZU9wZXJhdGlvbi0+bGF5ZXJJRCwgdXBkYXRlVGlsZU9wZXJhdGlvbi0+dGlsZUlELAorICAg
ICAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpUaWxlVXBkYXRlKHVwZGF0ZVRpbGVP
cGVyYXRpb24tPnVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdXBkYXRlVGlsZU9wZXJhdGlvbi0+dGls
ZVJlY3QsIHVwZGF0ZVRpbGVPcGVyYXRpb24tPnVwZGF0ZUluZm8uYXRsYXNJRCwgdXBkYXRlVGls
ZU9wZXJhdGlvbi0+dXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGVU
eXBlOgorICAgICAgICByZW1vdmVUaWxlKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGUqPihvcGVyYXRpb24pLT5sYXllcklELAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlVGlsZSo+KG9wZXJhdGlvbiktPnRpbGVJRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXNUeXBlOgorICAg
ICAgICBjcmVhdGVVcGRhdGVBdGxhcyhzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhcyo+KG9wZXJhdGlvbiktPmF0bGFzSUQsCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpDcmVhdGVVcGRhdGVBdGxhcyo+KG9wZXJhdGlvbiktPnN1cmZhY2UpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0
bGFzVHlwZToKKyAgICAgICAgcmVtb3ZlVXBkYXRlQXRsYXMoc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXMqPihvcGVyYXRpb24p
LT5hdGxhc0lEKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmdUeXBlOgorICAgICAgICBjcmVhdGVJbWFnZUJh
Y2tpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNraW5nSUQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdl
QmFja2luZ1R5cGU6CisgICAgICAgIHVwZGF0ZUltYWdlQmFja2luZyhzdGF0aWNfY2FzdDxjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmcqPihvcGVy
YXRpb24pLT5pbWFnZUJhY2tpbmdJRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZyo+KG9wZXJhdGlv
biktPnN1cmZhY2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHNUeXBlOgorICAgICAgICBjbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMqPihvcGVyYXRpb24pLT5pbWFn
ZUJhY2tpbmdJRCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nVHlwZToKKyAgICAgICAgcmVtb3ZlSW1hZ2VC
YWNraW5nKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFu
aW1hdGlvbnNUeXBlOgorICAgICAgICBzZXRMYXllckFuaW1hdGlvbnMoc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zKj4ob3Bl
cmF0aW9uKS0+bGF5ZXJJRCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9ucyo+KG9wZXJhdGlvbiktPmFu
aW1hdGlvbnMpOworICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5p
bWF0aW9uRnJhbWVUeXBlOgorICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKKyAgICAg
ICAgYnJlYWs7CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBjYXNlIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhc1R5cGU6IHsKKyAgICAgICAg
R3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1
cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwor
ICAgICAgICBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXMq
IGNyZWF0ZUNhbnZhc09wZXJhdG9pbiA9IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhcyo+KG9wZXJhdGlvbik7CisgICAgICAgIGNyZWF0
ZUNhbnZhcyhjcmVhdGVDYW52YXNPcGVyYXRvaW4tPmxheWVySUQsIGNyZWF0ZUNhbnZhc09wZXJh
dG9pbi0+Y2FudmFzU2l6ZSwKKyAgICAgICAgICAgIEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNy
ZWF0ZUNhbnZhc09wZXJhdG9pbi0+Y2FudmFzU2l6ZSwgc3VyZmFjZUZsYWdzLCBjcmVhdGVDYW52
YXNPcGVyYXRvaW4tPnRva2VuKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXNUeXBlOgorICAgICAgICBzeW5j
Q2FudmFzKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5
bmNDYW52YXMqPihvcGVyYXRpb24pLT5sYXllcklELAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhcyo+KG9wZXJhdGlv
biktPmZyb250QnVmZmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzVHlwZToKKyAgICAgICAgZGVzdHJveUNhbnZh
cyhzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95
Q2FudmFzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisj
aWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJGaWx0ZXJzVHlwZToKKyAgICAgICAgc2V0TGF5ZXJGaWx0ZXJzKHN0YXRp
Y19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVy
cyo+KG9wZXJhdGlvbiktPmxheWVySUQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnMqPihvcGVyYXRpb24p
LT5maWx0ZXJzKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtVHlwZToKKyAgICAgICAgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShzdGF0
aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtKj4ob3BlcmF0aW9uKS0+Y3VzdG9tRmlsdGVyUHJvZ3JhbUlELAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSo+KG9wZXJhdGlvbiktPnByb2dyYW1JbmZvKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVD
dXN0b21GaWx0ZXJQcm9ncmFtVHlwZToKKyAgICAgICAgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bShzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVD
dXN0b21GaWx0ZXJQcm9ncmFtKj4ob3BlcmF0aW9uKS0+Y3VzdG9tRmlsdGVyUHJvZ3JhbUlEKTsK
KyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyUmVwYWludENvdW50VHlwZToKKyAgICAgICAgc2V0TGF5ZXJSZXBhaW50
Q291bnQoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJSZXBhaW50Q291bnQqPihvcGVyYXRpb24pLT5sYXllcklELAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBh
aW50Q291bnQqPihvcGVyYXRpb24pLT5yZXBhaW50Q291bnQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldEJhY2tncm91bmRDb2xvclR5
cGU6CisgICAgICAgIHNldEJhY2tncm91bmRDb2xvcihzdGF0aWNfY2FzdDxjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3IqPihvcGVyYXRpb24pLT5j
b2xvcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb25UeXBlOgorICAgICAgICBkaWRDaGFuZ2VTY3Jv
bGxQb3NpdGlvbihzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbio+KG9wZXJhdGlvbiktPnBvc2l0aW9uKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpOb25lVHlw
ZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbmRlck5leHRGcmFtZSgpCiB7
CiAgICAgaWYgKG1fY2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4IGNmYWIxNjYyZDFhYzVjNDIzZmQ1MDEwYjAxY2Q3
ZTQwNjM2OTMzODMuLjA2OWQ5OGVhZDIzN2E1NTg5ZjEzZTNkODhlMWNhYjYyNmY2MDliNmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
LmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lX2gK
IAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNp
bmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKQEAgLTQyLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZTsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOworY2xhc3MgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM7CiBjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtOwog
Y2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm87CiBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7
CkBAIC04MiwxMyArODQsNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2b2lkIHNldENvbnRlbnRz
U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50JiBwb3NpdGlvbik7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAg
dm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBJbnRTaXplJiwgUGFz
c1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KTsKLSAgICB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0
ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95Q2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExheWVyUmVwYWludENv
dW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKIAogICAgIHZvaWQgZGV0YWNoKCk7
CiAgICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwpAQCAtOTgs
MzggKzkzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKICAgICB2
b2lkIHNldEFjdGl2ZShib29sKTsKIAotICAgIHZvaWQgY3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVMYXllcnMoY29uc3QgVmVj
dG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIHNldFJvb3RMYXllcklEKENvb3Jk
aW5hdGVkTGF5ZXJJRCk7Ci0gICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5
ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIHNldExh
eWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYp
OwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldExheWVyRmlsdGVycyhDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKLSNlbmRpZgotI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKLSAgICB2b2lkIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dy
YW1zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0OwotICAgIHZvaWQgY3Jl
YXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1J
bmZvJik7Ci0gICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7Ci0jZW5k
aWYKLQotICAgIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgZmxvYXQgc2NhbGUpOwotICAgIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCk7Ci0gICAgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5
ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJik7Ci0gICAgdm9pZCBjcmVh
dGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3Vy
ZmFjZT4pOwotICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0g
ICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOwotICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
Pik7Ci0gICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpOwotICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpOwotICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKKyAgICB2b2lkIGNvbW1pdENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25zJik7CiAgICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwotICAgIHZvaWQgc2V0
QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBzZXREcmF3c0JhY2tncm91
bmQoYm9vbCBlbmFibGUpIHsgbV9zZXREcmF3c0JhY2tncm91bmQgPSBlbmFibGU7IH0KIAotI2lm
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIHJlcXVlc3RBbmltYXRp
b25GcmFtZSgpOwotI2VuZGlmCisgICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCBlbmFi
bGUpIHsgbV9zZXREcmF3c0JhY2tncm91bmQgPSBlbmFibGU7IH0KIAogcHJpdmF0ZToKICAgICBH
cmFwaGljc0xheWVyKiBsYXllckJ5SUQoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQpAQCAtMTYwLDYg
KzEyNyw0MyBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXll
cklEKTsKICAgICB2b2lkIGRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7CiAKKyAgICAv
LyBCZWdpbiBvcGVyYXRpb24gZXhlY3V0aW9ucy4KKyAgICB2b2lkIGV4ZWN1dGVDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9w
ZXJhdGlvbiopOworICAgIHZvaWQgY3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRl
ZExheWVySUQ+Jik7CisgICAgdm9pZCBkZWxldGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5h
dGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIHNldFJvb3RMYXllcklEKENvb3JkaW5hdGVkTGF5ZXJJ
RCk7CisgICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29v
cmRpbmF0ZWRMYXllckluZm8mKTsKKyAgICB2b2lkIHNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQg
Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgZmxvYXQgc2Nh
bGUpOworICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYpOworICAgIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRl
ZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7CisgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1
aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOworICAgIHZv
aWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7CisgICAgdm9pZCBjcmVhdGVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCB1cGRhdGVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZFN1cmZhY2U+KTsKKyAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRp
bmF0ZWRMYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworI2lmIEVOQUJM
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFt
ZSgpOworI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdm9pZCBjcmVhdGVD
YW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxHcmFw
aGljc1N1cmZhY2U+KTsKKyAgICB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCBmcm9udEJ1ZmZlcik7CisgICAgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVk
TGF5ZXJJRCk7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzZXRM
YXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7
CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgdm9pZCBjcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKKyAg
ICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKKyNlbmRpZgorICAgIHZv
aWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklELCBpbnQgdmFsdWUpOwor
ICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBkaWRD
aGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbik7CisgICAgLy8g
RW5kIG9wZXJhdGlvbiBleGVjdXRpb25zLgorCiAgICAgdm9pZCBhc3NpZ25JbWFnZUJhY2tpbmdU
b0xheWVyKEdyYXBoaWNzTGF5ZXIqLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2
b2lkIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7CiAgICAgdm9pZCBlbnN1
cmVSb290TGF5ZXIoKTsKQEAgLTE3MCw2ICsxNzQsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJl
bW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2b2lkIHJlc2V0
QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKEdyYXBoaWNzTGF5ZXIqKTsKIAorI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICB2b2lkIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1z
KGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0OworI2VuZGlmCisKICAgICBG
bG9hdFNpemUgbV9jb250ZW50c1NpemU7CiAgICAgRmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRz
UmVjdDsKIApAQCAtMjA4LDcgKzIxNiw2IEBAIHByaXZhdGU6CiAgICAgTGF5ZXJSYXdQdHJNYXAg
bV9maXhlZExheWVyczsKICAgICBDb29yZGluYXRlZExheWVySUQgbV9yb290TGF5ZXJJRDsKICAg
ICBGbG9hdFBvaW50IG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwotICAgIEZsb2F0
UG9pbnQgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwogICAgIGJvb2wg
bV9hbmltYXRpb25zTG9ja2VkOwogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkK
ICAgICBib29sIG1fYW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAppbmRleCBmNjkyNDgyODc1
ZDVjZmMyMWRiNmJiMGQ2ZjIwMGUxZDk5YzViMjBmLi5hOTkyNDZlM2QzZGZjYjVlMzk4OGZlNjgz
ODRjY2I1ZDhmYzI0ZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEltYWdlQmFja2luZy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCIKIAor
I2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTMgKzM5LDEzIEBA
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4oaW1hZ2UpOwogfQogCi1QYXNzUmVmUHRyPENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKENvb3JkaW5h
dG9yKiBjbGllbnQsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQorUGFzc1JlZlB0cjxDb29yZGlu
YXRlZEltYWdlQmFja2luZz4gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZShDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogcXVldWUsIFBhc3NSZWZQdHI8SW1hZ2U+IGlt
YWdlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmco
Y2xpZW50LCBpbWFnZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcocXVldWUsIGltYWdlKSk7CiB9CiAKLUNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpD
b29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciogY2xpZW50LCBQYXNzUmVmUHRyPElt
YWdlPiBpbWFnZSkKLSAgICA6IG1fY29vcmRpbmF0b3IoY2xpZW50KQorQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlF1ZXVlKiBxdWV1ZSwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCisgICAgOiBtX29w
ZXJhdGlvblF1ZXVlKHF1ZXVlKQogICAgICwgbV9pbWFnZShpbWFnZSkKICAgICAsIG1faWQoZ2V0
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChtX2ltYWdlLmdldCgpKSkKICAgICAsIG1fY2xlYXJD
b250ZW50c1RpbWVyKHRoaXMsICZDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50
c1RpbWVyRmlyZWQpCkBAIC01NCw3ICs1NSw3IEBAIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpD
b29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciogY2xpZW50LCBQYXNzUmVmUHRyCiAg
ICAgLy8gRklYTUU6IFdlIHdvdWxkIG5lZWQgdG8gZGVjb2RlIGEgc21hbGwgaW1hZ2UgZGlyZWN0
bHkgaW50byBhIEdyYXBoaWNzU3VyZmFjZS4KICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzEw
MTQyNgogCi0gICAgbV9jb29yZGluYXRvci0+Y3JlYXRlSW1hZ2VCYWNraW5nKGlkKCkpOworICAg
IG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlk
KCkpKTsKIH0KIAogQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6On5Db29yZGluYXRlZEltYWdlQmFj
a2luZygpCkBAIC03NCw3ICs3NSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJl
bW92ZUhvc3QoSG9zdCogaG9zdCkKICAgICBtX2hvc3RzLnJlbW92ZShwb3NpdGlvbik7CiAKICAg
ICBpZiAobV9ob3N0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fY29vcmRpbmF0b3ItPnJlbW92ZUlt
YWdlQmFja2luZyhpZCgpKTsKKyAgICAgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5xdWV1ZUNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQoKSkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nOjptYXJrRGlydHkoKQpAQCAtMTEzLDkgKzExNCw4IEBAIHZvaWQgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSgpCiAKICAgICBtX25hdGl2ZUltYWdlUHRyID0gbV9pbWFn
ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIAotICAgIC8vIElmIHNlbmRpbmcgdGhl
IG1lc3NhZ2UgZmFpbHMsIHRyeSBhZ2FpbiBpbiB0aGUgbmV4dCB1cGRhdGUuCi0gICAgYm9vbCBz
dWNjZXNzID0gbV9jb29yZGluYXRvci0+dXBkYXRlSW1hZ2VCYWNraW5nKGlkKCksIG1fc3VyZmFj
ZSk7Ci0gICAgbV9pc0RpcnR5ID0gIXN1Y2Nlc3M7CisgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5x
dWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQoKSwgbV9zdXJmYWNlKSk7CisgICAg
bV9pc0RpcnR5ID0gZmFsc2U7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJl
bGVhc2VTdXJmYWNlSWZOZWVkZWQoKQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZVZpc2liaWxpdHlJZk5lZWRlZChib29sJiBjaGFuZ2VkVG9W
aXNpYmxlKQogCiB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNvbnRlbnRzVGlt
ZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZEltYWdlQmFja2luZz4qKQogewotICAgIG1fY29vcmRp
bmF0b3ItPmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaWQoKSk7CisgICAgbV9vcGVyYXRpb25R
dWV1ZS0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6Y3JlYXRlKGlkKCkpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAppbmRleCA1YjViNTdhNmVjYjEwMWVmNzViMjkx
OTFiNTc1MDdiZWRkYTJmNzY1Li44YmY0ZGI2NTc5MWJkYjVlYjBiMGU0ZWUzYjA1NDY0OTI4ODE1
ZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBDb29yZGluYXRlZEltYWdlQmFja2lu
Z19oCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgi
CiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAg
LTM5LDIwICs0MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nIDogcHVibGljIFJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+
IHsKIHB1YmxpYzoKLSAgICBjbGFzcyBDb29yZGluYXRvciB7Ci0gICAgcHVibGljOgotICAgICAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKLSAgICB9OwotCiAgICAgY2xh
c3MgSG9zdCB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5n
VmlzaWJsZSgpID0gMDsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRvciosIFBhc3NSZWZQdHI8SW1hZ2U+KTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiwgUGFzc1JlZlB0cjxJbWFnZT4pOwog
ICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCk7CiAKICAgICBzdGF0aWMgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKEltYWdl
Kik7CkBAIC02OCwxMyArNjEsMTMgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlKCk7CiAKIHBy
aXZhdGU6Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0b3IqLCBQYXNzUmVm
UHRyPEltYWdlPik7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UXVldWUqLCBQYXNzUmVmUHRyPEltYWdlPik7CiAKICAgICB2b2lkIHJl
bGVhc2VTdXJmYWNlSWZOZWVkZWQoKTsKICAgICB2b2lkIHVwZGF0ZVZpc2liaWxpdHlJZk5lZWRl
ZChib29sJiBjaGFuZ2VkVG9WaXNpYmxlKTsKICAgICB2b2lkIGNsZWFyQ29udGVudHNUaW1lckZp
cmVkKFRpbWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiopOwogCi0gICAgQ29vcmRpbmF0b3Iq
IG1fY29vcmRpbmF0b3I7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUq
IG1fb3BlcmF0aW9uUXVldWU7CiAgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIE5hdGl2
ZUltYWdlUHRyIG1fbmF0aXZlSW1hZ2VQdHI7CiAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBtX2lkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAppbmRl
eCA2YWIzODRhMTFlYWE1ZWEyNTQwODEzYzcwMjVlNWZjOGMxN2QzOTEwLi5lYThiMjVmZWY2ZTk3
NzI5MmYwZTM4OGQ0ODY0MmZhMjI5YjUwOTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
U3VyZmFjZVVwZGF0ZUluZm8uaApAQCAtMjMsMTMgKzIzLDEwIEBACiAjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN1cmZhY2VVcGRhdGVJ
bmZvIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdXJmYWNlVXBkYXRlSW5mbyk7Ci0KIHB1
YmxpYzoKICAgICBTdXJmYWNlVXBkYXRlSW5mbygpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L1VwZGF0ZUF0bGFzLmNwcAppbmRleCAzNjRmMDY4NzEwODJiNThmY2JkODNhMGVmMzE0NTBiZTQ4
MDA4NDhiLi43ZmNhYmY2OTZkZjE4YThkYTVkOTQ5YmY0N2I3MDAzZGExNDM5YzUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
VXBkYXRlQXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKQEAgLTIzLDE0ICsyMywxNSBAQAogCiAj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCogY2xp
ZW50LCBpbnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQotICAg
IDogbV9jbGllbnQoY2xpZW50KQorVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiBxdWV1ZSwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0
ZWRTdXJmYWNlOjpGbGFncyBmbGFncykKKyAgICA6IG1fb3BlcmF0aW9uUXVldWUocXVldWUpCiAg
ICAgLCBtX2luYWN0aXZpdHlJblNlY29uZHMoMCkKIHsKICAgICBzdGF0aWMgdWludDMyX3QgbmV4
dElEID0gMDsKQEAgLTM4LDE1ICszOSwxMiBAQCBVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoVXBk
YXRlQXRsYXNDbGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdQogICAg
IEludFNpemUgc2l6ZSA9IG5leHRQb3dlck9mVHdvKEludFNpemUoZGltZW5zaW9uLCBkaW1lbnNp
b24pKTsKICAgICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShzaXplLCBm
bGFncyk7CiAKLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBpZiBzZW5kaW5nIHRoZSBtZXNzYWdl
IGZhaWxzLCBVcGRhdGVBdGxhcyBnaXZlcyB1cCBkcmF3aW5nIGFueXRoaW5nIGltcGxpY2l0bHku
Ci0gICAgaWYgKCFtX2NsaWVudC0+Y3JlYXRlVXBkYXRlQXRsYXMobV9JRCwgbV9zdXJmYWNlKSkK
LSAgICAgICAgbV9zdXJmYWNlLmNsZWFyKCk7CisgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5xdWV1
ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6Q3JlYXRlVXBkYXRlQXRsYXM6OmNyZWF0ZShtX0lELCBtX3N1cmZhY2UpKTsKIH0KIAogVXBk
YXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCiB7Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAg
bV9jbGllbnQtPnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOworICAgIG1fb3BlcmF0aW9uUXVldWUt
PmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzOjpjcmVhdGUobV9JRCkpOwogfQogCiB2b2lkIFVw
ZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKQEAgLTcyLDkgKzcwLDYgQEAgUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFi
bGVCdWZmZXIodWludDMyX3QKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKIAotICAgIGlmICghbV9zdXJmYWNlKQot
ICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7Ci0KICAgICBhdGxh
c0lEID0gbV9JRDsKIAogICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1ZmZlcnMsIHRvIGFs
bG93IGZhc3RlciB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaAppbmRl
eCA0OGE2YmY4NDRhNDkwZjdmZDJjMzlhMDQyNGUzMzBmZGRiMTZkNzhiLi4xNjMxMzhmMTdjMjU2
NDA3M2Q5YjU2ODZiMGE0Mzg4MjlhY2Y0ZDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRl
QXRsYXMuaApAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBVcGRhdGVBdGxhc19oCiAKICNpbmNs
dWRlICJBcmVhQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbi5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKIApAQCAtMzEsMTYgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKIGNsYXNzIEludFBvaW50OwogCi1jbGFzcyBVcGRhdGVBdGxhc0NsaWVu
dCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90
IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSA9IDA7Ci19OwotCiBj
bGFzcyBVcGRhdGVBdGxhcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRlQXRsYXMp
OwogcHVibGljOgotICAgIFVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiwgaW50IGRpbWVu
c2lvbiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7CisgICAgVXBkYXRlQXRsYXMoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqLCBpbnQgZGltZW5zaW9uLCBDb29yZGluYXRl
ZFN1cmZhY2U6OkZsYWdzKTsKICAgICB+VXBkYXRlQXRsYXMoKTsKIAogICAgIGlubGluZSBJbnRT
aXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnNpemUoKTsgfQpAQCAtNjYsNyAr
NjEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwogCiBwcml2
YXRlOgotICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKKyAgICBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogbV9vcGVyYXRpb25RdWV1ZTsKICAgICBPd25QdHI8R2Vu
ZXJhbEFyZWFBbGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKICAgICBSZWZQdHI8Q29vcmRpbmF0
ZWRTdXJmYWNlPiBtX3N1cmZhY2U7CiAgICAgZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
Y3BwCmluZGV4IGMzMzcxZDJjMDg0ZTA1MmRlZGNmNjRlZmY0YmQxNDc1MDBlOWI1NGIuLjRiYTgz
NTBkODYyZjdhMWE1YzYzMTRkYzhjMGNiM2ZiNDI3Zjk3YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1
bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApAQCAtMjksOSArMjks
MTEgQEAKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKIAog
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1
cmZhY2UuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0FuaW1hdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Db29yZGluYXRlZExheWVySW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2lu
dDNELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+CkBAIC03
Myw5ICs3NSw3IEBACiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0jaWYgRU5B
QkxFKENTU19TSEFERVJTKQogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLSNlbmRpZgogCiBuYW1l
c3BhY2UgQ29yZUlQQyB7CiAKQEAgLTgzNSw2ICs4MzUsMzg0IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxTdXJmYWNlVXBkYXRlSW5mbz46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFN1
cmZhY2VVCiAgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+
OjpkZWNvZGUoZGVjb2Rlciwgc3VyZmFjZVVwZGF0ZUluZm8pOwogfQogCit2b2lkIEFyZ3VtZW50
Q29kZXI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM+OjplbmNvZGUoQXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYgb3BlcmF0
aW9ucykKK3sKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihvcGVyYXRpb25z
LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRpb25zLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJh
dGlvbiogb3BlcmF0aW9uID0gb3BlcmF0aW9ucy5hdChpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsKKworICAgICAgICBzd2l0Y2gg
KG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzVHlwZToKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlTGF5ZXJzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHM7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnNUeXBl
OgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnMqPihvcGVyYXRpb24pLT5sYXllcklEczsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlNldFJvb3RMYXllclR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllcio+KG9wZXJh
dGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlwZToKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0TGF5ZXJTdGF0ZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExh
eWVyU3RhdGUqPihvcGVyYXRpb24pLT5sYXllckluZm87CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVu
VHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbio+KG9wZXJhdGlvbiktPmxheWVy
SUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW4qPihvcGVyYXRpb24pLT5jaGlsZHJl
bjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZVRpbGVUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlKj4ob3Bl
cmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbikt
PnRpbGVJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbiktPnRpbGVSZWN0
OworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlKj4ob3BlcmF0aW9uKS0+dXBkYXRlSW5mbzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlVwZGF0ZVRpbGVUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlKj4ob3BlcmF0aW9u
KS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJhdGlvbiktPnRpbGVJ
RDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJhdGlvbiktPnRpbGVSZWN0OworICAg
ICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpVcGRhdGVUaWxlKj4ob3BlcmF0aW9uKS0+dXBkYXRlSW5mbzsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZVRpbGVUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlKj4ob3BlcmF0aW9uKS0+bGF5
ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZSo+KG9wZXJhdGlvbiktPnRpbGVJRDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZVVwZGF0ZUF0bGFzVHlwZTogeworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVB
dGxhcyo+KG9wZXJhdGlvbiktPmF0bGFzSUQ7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1
cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVk
U3VyZmFjZSo+KHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZVVwZGF0ZUF0bGFzKj4ob3BlcmF0aW9uKS0+c3VyZmFjZS5nZXQoKSk7CisgICAgICAg
ICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7CisgICAgICAgICAgICAv
LyBGSVhNRTogV2UgbmVlZCB0byBkZWFsIHdpdGggdGhlIGNhc2UgdGhhdCBoYW5kbGUgY3JlYXRp
b24gaXMgZmFpbGVkLgorICAgICAgICAgICAgd2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVI
YW5kbGUoaGFuZGxlKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgaGFuZGxlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhc1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0
ZUF0bGFzKj4ob3BlcmF0aW9uKS0+YXRsYXNJRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZ1R5
cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbiktPmltYWdl
QmFja2luZ0lEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nVHlwZTogeworICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpVcGRhdGVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRDsKKyAgICAg
ICAgICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZSogd2ViQ29vcmRpbmF0ZWRTdXJmYWNlID0gc3Rh
dGljX2Nhc3Q8V2ViQ29vcmRpbmF0ZWRTdXJmYWNlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+
c3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRs
ZSBoYW5kbGU7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkZWFsIHdpdGggdGhl
IGNhc2UgdGhhdCBoYW5kbGUgY3JlYXRpb24gaXMgZmFpbGVkLgorICAgICAgICAgICAgd2ViQ29v
cmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgaGFuZGxlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRz
VHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyo+KG9wZXJhdGlv
biktPmltYWdlQmFja2luZ0lEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nVHlwZToKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNraW5nSUQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFu
aW1hdGlvbnMqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFu
aW1hdGlvbnMqPihvcGVyYXRpb24pLT5hbmltYXRpb25zOworICAgICAgICAgICAgYnJlYWs7Cisj
aWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICAgICBjYXNlIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZVR5cGU6CisgICAgICAg
ICAgICBicmVhazsKKyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICBj
YXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhc1R5cGU6CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZUNhbnZhcyo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUNhbnZhcyo+KG9wZXJhdGlvbiktPmNhbnZhc1NpemU7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZUNhbnZhcyo+KG9wZXJhdGlvbiktPnRva2VuOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhc1R5cGU6
CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXMqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTeW5jQ2FudmFzKj4ob3BlcmF0aW9uKS0+ZnJvbnRCdWZmZXI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0
cm95Q2FudmFzVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhcyo+KG9wZXJhdGlvbikt
PmxheWVySUQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXll
ckZpbHRlcnNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnMqPihvcGVyYXRpb24p
LT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnMqPihvcGVyYXRpb24pLT5m
aWx0ZXJzOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclBy
b2dyYW0qPihvcGVyYXRpb24pLT5jdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0qPihvcGVyYXRpb24pLT5wcm9ncmFtSW5mbzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVD
dXN0b21GaWx0ZXJQcm9ncmFtKj4ob3BlcmF0aW9uKS0+Y3VzdG9tRmlsdGVyUHJvZ3JhbUlEOwor
ICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3VudFR5cGU6CisgICAgICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyUmVwYWludENvdW50Kj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0TGF5ZXJSZXBhaW50Q291bnQqPihvcGVyYXRpb24pLT5yZXBhaW50Q291bnQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRCYWNrZ3JvdW5kQ29sb3JUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3Iq
PihvcGVyYXRpb24pLT5jb2xvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uVHlwZToK
KyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24qPihvcGVyYXRpb24pLT5wb3Np
dGlvbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246Ok5vbmVUeXBlOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBBcmd1bWVu
dENvZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zPjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmIG9wZXJhdGlvbnMp
Cit7CisgICAgdW5zaWduZWQgb3BlcmF0aW9uc1NpemU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUob3BlcmF0aW9uc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnNTaXplOyArK2kpIHsKKyAgICAgICAgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlOworICAgICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZUVudW0odHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzVHlwZTogeworICAgICAgICAgICAgVmVjdG9yPENvb3JkaW5h
dGVkTGF5ZXJJRD4gaWRzOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaWRzKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFw
cGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZShp
ZHMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzVHlwZTogeworICAgICAgICAgICAg
VmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gaWRzOworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoaWRzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVM
YXllcnM6OmNyZWF0ZShpZHMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyVHlwZTog
eworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRSb290TGF5ZXI6OmNyZWF0ZShsYXllcklEKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlNldExheWVyU3RhdGVUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5
ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJbmZv
IGxheWVySW5mbzsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySW5mbykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5h
cHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6Y3JlYXRl
KGxheWVySUQsIGxheWVySW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVu
VHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBjaGlsZHJl
bjsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNoaWxkcmVuKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOjpjcmVhdGUobGF5ZXJJ
RCwgY2hpbGRyZW4pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZVR5cGU6IHsKKyAgICAg
ICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUodGlsZUlEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBJ
bnRSZWN0IHRpbGVSZWN0OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodGlsZVJl
Y3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFN1cmZhY2VV
cGRhdGVJbmZvIHVwZGF0ZUluZm87CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh1
cGRhdGVJbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBv
cGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxl
OjpjcmVhdGUobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpVcGRhdGVUaWxlVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXll
cklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB1aW50MzJfdCB0aWxl
SUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0aWxlSUQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3Q7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0aWxlUmVjdCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgU3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHVwZGF0ZUluZm8pKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OmNyZWF0ZShsYXllcklELCB0aWxl
SUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGVU
eXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKHRpbGVJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6UmVtb3ZlVGlsZTo6Y3JlYXRlKGxheWVySUQsIHRpbGVJRCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpDcmVhdGVVcGRhdGVBdGxhc1R5cGU6IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShhdGxhc0lEKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6Okhh
bmRsZSBoYW5kbGU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYW5kbGUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzOjpjcmVh
dGUoYXRsYXNJRCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhc1R5cGU6IHsKKyAgICAgICAgICAgIHVpbnQz
Ml90IGF0bGFzSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShhdGxhc0lEKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFw
cGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhczo6Y3Jl
YXRlKGF0bGFzSUQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nVHlwZTog
eworICAgICAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZDsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKGlkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmc6OmNyZWF0ZShpZCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpV
cGRhdGVJbWFnZUJhY2tpbmdUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaWQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhbmRs
ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9u
cy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5n
OjpjcmVhdGUoaWQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGU6IHsKKyAgICAgICAg
ICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQ7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShpZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJ
bWFnZUJhY2tpbmdDb250ZW50czo6Y3JlYXRlKGlkKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92
ZUltYWdlQmFja2luZ1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaWQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShpZCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zVHlwZTogeworICAgICAgICAgICAg
Q29vcmRpbmF0ZWRMYXllcklEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
aWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnM7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShhbmltYXRpb25zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRM
YXllckFuaW1hdGlvbnM6OmNyZWF0ZShpZCwgYW5pbWF0aW9ucykpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAg
ICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZy
YW1lVHlwZToKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6Y3JlYXRlKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXNUeXBlOiB7CisgICAg
ICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIEludFNpemUgY2FudmFzU2l6ZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKGNhbnZhc1NpemUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuOworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUodG9rZW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNy
ZWF0ZUNhbnZhczo6Y3JlYXRlKGxheWVySUQsIGNhbnZhc1NpemUsIHRva2VuKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlN5bmNDYW52YXNUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90IGZyb250
QnVmZmVyOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZnJvbnRCdWZmZXIpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6OmNyZWF0ZShsYXll
cklELCBmcm9udEJ1ZmZlcikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzVHlwZTog
eworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpEZXN0cm95Q2FudmFzOjpjcmVhdGUobGF5ZXJJRCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAgICAg
Y2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnNUeXBlOiB7
CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZpbHRlcnMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyczo6Y3JlYXRlKGxheWVySUQsIGZpbHRlcnMp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGU6IHsKKyAgICAgICAgICAgIGludCBjdXN0b21GaWx0
ZXJQcm9ncmFtSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShjdXN0b21GaWx0
ZXJQcm9ncmFtSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvIHByb2dyYW1JbmZvOworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocHJvZ3JhbUluZm8pKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZShjdXN0b21G
aWx0ZXJQcm9ncmFtSUQsIHByb2dyYW1JbmZvKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW1UeXBlOiB7CisgICAgICAgICAgICBpbnQgY3VzdG9tRmlsdGVyUHJv
Z3JhbUlEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY3VzdG9tRmlsdGVyUHJv
Z3JhbUlEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVy
YXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnRUeXBlOiB7CisgICAgICAgICAgICBD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IENvb3JkaW5hdGVkTGF5ZXJJRCByZXBhaW50Q291bnQ7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShyZXBhaW50Q291bnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlNldExheWVyUmVwYWludENvdW50OjpjcmVhdGUobGF5ZXJJRCwgcmVwYWludENvdW50KSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldEJhY2tncm91bmRDb2xvclR5cGU6IHsKKyAgICAgICAgICAg
IENvbG9yIGNvbG9yOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY29sb3IpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldEJhY2tncm91bmRDb2xvcjo6Y3Jl
YXRlKGNvbG9yKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uVHlw
ZTogeworICAgICAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbjsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKHBvc2l0aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbjo6Y3JlYXRlKHBvc2l0aW9uKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246Ok5vbmVUeXBlOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmgKaW5kZXggZDZlZmZmNTVlZWFjNTUxMzJhMzZlNDlhN2RmNjRlMzdmMzFj
YzkwOS4uYzA5YjhmZGI5MzdlNjgyNzc3MWJiMTQ3YmE2NmIxZjAxN2ViMWYxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczsKIGNsYXNzIEZsb2F0
UG9pbnQzRDsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb247CiBjbGFzcyBHcmFwaGljc0xh
eWVyQW5pbWF0aW9uczsKQEAgLTExNyw2ICsxMTgsMTEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbz4gewogICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwog
fTsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9ucz4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYpOwor
ICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYpOworfTsKKwogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwog
CiAjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCmluZGV4IDk4NjQ5M2MzMmZm
ODQ2MjhhM2UwYjBlYmIzYTA1MWI3NDE1OTM3NTguLjk1NWZkYjkzOGEzMzY3YmUwMDA0OGJmNTMw
NDQ2NDQ4ZTVjZTBmODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTIzLDE2ICsyMywxMSBAQAogI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVy
VHJlZUhvc3RNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRMYXllckluZm8uaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzU3VyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+
Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8uaCIKLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCkBAIC01OSw3OCArNTQsOSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdAog
ICAgIG1fc2NlbmUtPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxlLCBtX3NjZW5lLmdldCgp
LCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKLSAgICB1cGRhdGVU
aWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbyk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVUaWxl
LCBtX3NjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQsIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGVSZWN0LCB1cGRhdGVJbmZv
LmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5
ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlLCBtX3NjZW5lLmdldCgpLCBs
YXllcklELCB0aWxlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0bGFzLCBtX3NjZW5lLmdldCgp
LCBhdGxhc0lELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVVwZGF0ZUF0bGFzKHVp
bnQzMl90IGF0bGFzSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpyZW1vdmVVcGRhdGVBdGxhcywgbV9zY2VuZS5nZXQoKSwgYXRsYXNJRCkp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDb21wb3Np
dGluZ0xheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQotewotICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlTGF5
ZXJzLCBtX3NjZW5lLmdldCgpLCBpZHMpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5h
dGVkTGF5ZXJJRD4mIGlkcykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmRlbGV0ZUxheWVycywgbV9zY2VuZS5nZXQoKSwgaWRzKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xh
eWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldFJvb3RMYXllcklELCBtX3NjZW5lLmdldCgpLCBp
ZCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3Np
dGluZ0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExh
eWVySW5mbyYgaW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnNldExheWVyU3RhdGUsIG1fc2NlbmUuZ2V0KCksIGlkLCBpbmZvKSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5
ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRl
ZExheWVySUQ+JiBjaGlsZHJlbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRyZW4sIG1fc2NlbmUuZ2V0KCksIGlkLCBj
aGlsZHJlbikpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0
ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJGaWx0
ZXJzLCBtX3NjZW5lLmdldCgpLCBpZCwgZmlsdGVycykpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1v
dmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0sIG1f
c2NlbmUuZ2V0KCksIGlkKSk7Ci19Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJv
Z3JhbUluZm8mIHByb2dyYW1JbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9zY2VuZS5n
ZXQoKSwgaWQsIHByb2dyYW1JbmZvKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgSW50U2l6ZSYgY29udGVudHNT
aXplLCBjb25zdCBJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0
KQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Zmx1c2hMYXllckNoYW5nZXMsIG1fc2NlbmUuZ2V0KCkpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25zLCBtX3NjZW5lLmdldCgpLCBvcGVyYXRpb25zKSk7CiAgICAgdXBkYXRlVmlld3Bv
cnQoKTsKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICBtX2RyYXdpbmdBcmVhUHJv
eHktPnBhZ2UoKS0+ZGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7CkBA
IC0xNDAsMjQgKzY2LDkgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlk
UmVuZGVyRnJhbWUoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLAogI2VuZGlmCiB9CiAKLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVJbWFnZUJhY2tpbmcsIG1fc2NlbmUu
Z2V0KCksIGltYWdlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwg
Y29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZUltYWdlQmFj
a2luZywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVh
dGUoaGFuZGxlKSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpj
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJ
RCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQpKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCiB7Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVJbWFn
ZUJhY2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldEFuaW1hdGlvbnNMb2NrZWQsIG1fc2Nl
bmUuZ2V0KCksIGxvY2tlZCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUpCkBAIC0x
NjUsMTUgKzc2LDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29u
dGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXoKICAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldENvbnRlbnRzU2l6ZSwgbV9zY2Vu
ZS5nZXQoKSwgY29udGVudHNTaXplKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0
IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zLCBt
X3NjZW5lLmdldCgpLCBpZCwgYW5pbWF0aW9ucykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQotewotICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QW5pbWF0
aW9uc0xvY2tlZCwgbV9zY2VuZS5nZXQoKSwgbG9ja2VkKSk7Ci19CiAKIHZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewpAQCAtMTk0
LDU1ICs5NiwxNiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW5kZXJO
ZXh0RnJhbWUoKQogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJl
cXVlc3RBbmltYXRpb25GcmFtZSwgbV9zY2VuZS5nZXQoKSkpOwotICAgIHVwZGF0ZVZpZXdwb3J0
KCk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmFuaW1hdGlvbkZy
YW1lUmVhZHkoKQogewogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCkt
PnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6QW5pbWF0aW9uRnJhbWVS
ZWFkeSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwogfQogI2VuZGlm
CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZENoYW5nZVNjcm9sbFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQotewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24s
IG1fc2NlbmUuZ2V0KCksIHBvc2l0aW9uKSk7Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUNhbnZhcyhDb29y
ZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIGNvbnN0IEdyYXBo
aWNzU3VyZmFjZVRva2VuJiB0b2tlbikKLXsKLSAgICBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIHN1
cmZhY2VGbGFncyA9IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNUZXh0dXJlVGFyZ2V0IHwgR3Jh
cGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVDYW52YXMsIG1fc2NlbmUuZ2V0KCksIGlk
LCBjYW52YXNTaXplLCBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjYW52YXNTaXplLCBzdXJmYWNl
RmxhZ3MsIHRva2VuKSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIp
Ci17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpz
eW5jQ2FudmFzLCBtX3NjZW5lLmdldCgpLCBpZCwgZnJvbnRCdWZmZXIpKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExh
eWVySUQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpkZXN0cm95Q2FudmFzLCBtX3NjZW5lLmdldCgpLCBpZCkpOwotfQotI2VuZGlmCi0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVyUmVwYWludENvdW50
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IHZhbHVlKQotewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJSZXBhaW50Q291bnQsIG1f
c2NlbmUuZ2V0KCksIGlkLCB2YWx1ZSkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogewogICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5w
YWdlSUQoKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEJh
Y2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRCYWNrZ3JvdW5kQ29sb3IsIG1fc2Nl
bmUuZ2V0KCksIGNvbG9yKSk7Ci19Ci0KIH0KICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkuaAppbmRleCAyNGIzNDc3MGFjMDgzYzM1YTU1NDAzMDRlMDkwYTA1MjU4ZWY1N2FkLi5jMzg4
MjM1ZDA0MDU0MGRjOTkzZDA2OGViZDliZjJiOGQyYTAzMTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTI1LDIzICsyNSwxMyBA
QAogI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNs
dWRlICJSZWdpb24uaCIKLSNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc1N1cmZhY2VUb2tlbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVj
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUnVu
TG9vcC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKK2Ns
YXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOwogY2xhc3MgU3VyZmFjZVVwZGF0ZUlu
Zm87CiB9CiAKQEAgLTUzLDQ1ICs0MywxMiBAQCBjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbAogcHVi
bGljOgogICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdB
cmVhUHJveHkqKTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgp
OwotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICB2b2lk
IHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0jaWYgRU5BQkxF
KENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBjcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUlu
Zm8mKTsKLSAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKLSNlbmRp
ZgotICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJz
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBz
ZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQpOworICAg
IHZvaWQgY29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoY29uc3QgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBj
b250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsKKyAgICB2
b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRDb250ZW50c1NpemUo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IHRyYWplY3RvcnlWZWN0b3IpOwotICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVk
UmVjdCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRM
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVy
KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2
b2lkIHJlbW92ZVRpbGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCk7Ci0gICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lE
LCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOwotICAgIHZvaWQgcmVtb3Zl
VXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tp
bmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCB1cGRhdGVJ
bWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5n
Q29udGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCBy
ZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwotICAgIHZvaWQg
ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRp
b24pOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZvaWQgY3JlYXRlQ2FudmFzKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZmZXIpOwotICAgIHZv
aWQgZGVzdHJveUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQpOwotI2VuZGlmCi0g
ICAgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQs
IGludCB2YWx1ZSk7CiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUoKSBjb25zdCB7IHJldHVybiBtX3NjZW5lLmdldCgpOyB9Ci0g
ICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwotICAgIHZvaWQgc2V0QW5p
bWF0aW9uc0xvY2tlZChib29sKTsKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
Ci0gICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKLSNlbmRpZgotICAgIHZvaWQgc2V0
QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAKICAgICAvLyBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmVDbGllbnQgTWV0aG9kcy4KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDIxZGMyNjM0NTAzY2NkZTg3OTA2
MmQ3OTMyM2M2YmJhYmU0ZjcyZWMuLjZlMjc5MjNiYmMwMzhhMWQ4ZTY2NDMzMWEzMjAwYWY1Zjlh
MWM5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xOSw0NCArMTksNyBAQAogCiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkgTGVnYWN5UmVjZWl2ZXIgewotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1
aW50MzJfdCBpZCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvKQotICAg
IFNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbih1aW50MzJfdCBpZCwgVmVjdG9yPHVpbnQzMl90
PiBjaGlsZHJlbikKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgU2V0Q29tcG9zaXRpbmdM
YXllckZpbHRlcnModWludDMyX3QgaWQsIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVy
cykKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBDcmVhdGVDdXN0b21GaWx0
ZXJQcm9ncmFtKGludCBpZCwgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gcHJvZ3Jh
bUluZm8pCi0gICAgUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCi0jZW5kaWYKLSAg
ICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKLSAgICBDcmVhdGVDb21wb3Np
dGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlkcykKLSAgICBEZWxldGVDb21wb3NpdGluZ0xh
eWVycyhWZWN0b3I8dWludDMyX3Q+IGlkcykKLSAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMy
X3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0LCBX
ZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JM
YXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3Qg
dGlsZVJlY3QsIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgUmVt
b3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKLSAgICBD
cmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVk
U3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKLSAgICBSZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lEKQotICAgIENyZWF0ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlEKQotICAgIFVw
ZGF0ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVk
U3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKLSAgICBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKHVp
bnQ2NF90IGltYWdlSUQpCi0gICAgUmVtb3ZlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQp
Ci0gICAgRGlkUmVuZGVyRnJhbWUoV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUsIFdlYkNv
cmU6OkludFJlY3QgY292ZXJlZFJlY3QpCi0gICAgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oV2Vi
Q29yZTo6RmxvYXRQb2ludCBwb3NpdGlvbikKLSAgICBTZXRMYXllckFuaW1hdGlvbnModWludDMy
X3QgaWQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnMpCisgICAg
Q29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbnMgb3BlcmF0aW9ucywgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1Np
emUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCiAgICAgU2V0QW5pbWF0aW9uc0xvY2tl
ZChib29sIGxvY2tlZCkKLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAg
ICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQotI2VuZGlmCi0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKLSAgICBDcmVhdGVDYW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6OkludFNpemUgY2Fu
dmFzU2l6ZSwgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4pCi0gICAgU3luY0Nh
bnZhcyh1aW50MzJfdCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCi0gICAgRGVzdHJveUNhbnZh
cyh1aW50MzJfdCBpZCkKLSNlbmRpZgotCi0gICAgU2V0TGF5ZXJSZXBhaW50Q291bnQodWludDMy
X3QgbGF5ZXJJRCwgaW50IHZhbHVlKQotCi0gICAgU2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6
OkNvbG9yIGNvbG9yKQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCA2ZTVmYjU3MjMxYzliODk1
ZjJmMDZlYTQxNTEzMDE2OTg4MTBhNDVjLi5kNTlmMjc0YmRlNmVhYmYyNjE1Y2FiMDEzYjQ1MGJm
OTQzNjA2ZTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM4LDkgKzM4LDkgQEAKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgpAQCAtNDgsNyArNDgs
NiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
U2V0dGluZ3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgogI2luY2x1ZGUgPHd0
Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKQEAgLTg2LDcg
Kzg1LDYgQEAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3QoV2ViUGFnZSogd2ViUGFnZSkKICAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2Vzcyh0cnVlKQog
ICAgICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKICAgICAsIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0
aW9uVXBkYXRlKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKICAgICAsIG1f
ZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQogICAgICwgbV9sYXllckZs
dXNoVGltZXIodGhpcywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQpCiAgICAgLCBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcih0aGlzLCAmQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZCkKQEAg
LTI4NywxNCArMjg1LDE0IEBAIGJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMoKQogCiAgICAgZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoKTsKIAot
ICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgeworICAgIGlmICghbV9vcGVyYXRpb25zLmlzRW1w
dHkoKSkgewogICAgICAgICBkaWRTeW5jID0gdHJ1ZTsKIAogICAgICAgICBJbnRTaXplIGNvbnRl
bnRzU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6
ZSgpKTsKICAgICAgICAgSW50UmVjdCBjb3ZlcmVkUmVjdCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPmNvdmVyUmVjdCgpOwot
ICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpEaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KSk7CisgICAg
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKG1fb3BlcmF0aW9ucywgY29u
dGVudHNTaXplLCBjb3ZlcmVkUmVjdCkpOworICAgICAgICBtX29wZXJhdGlvbnMuY2xlYXIoKTsK
ICAgICAgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAgbV9zaG91bGRT
eW5jRnJhbWUgPSBmYWxzZTsKICAgICB9IGVsc2UKICAgICAgICAgdW5sb2NrQW5pbWF0aW9ucygp
OwogCkBAIC0zMjAsOSArMzE4LDggQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNy
ZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUNv
bXBvc2l0aW5nTGF5ZXJzKG1fbGF5ZXJzVG9DcmVhdGUpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVM
YXllcnM6OmNyZWF0ZShtX2xheWVyc1RvQ3JlYXRlKSk7CiAgICAgbV9sYXllcnNUb0NyZWF0ZS5j
bGVhcigpOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKCkKQEAgLTMzNSw5ICsz
MzIsOCBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29tcG9zaXRpbmdM
YXllcnMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdM
YXllcnMobV9sYXllcnNUb0RlbGV0ZSkpOworICAgIGVucXVldWVDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6Y3Jl
YXRlKG1fbGF5ZXJzVG9EZWxldGUpKTsKICAgICBtX2xheWVyc1RvRGVsZXRlLmNsZWFyKCk7Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQpAQCAtMzQ1
LDcwICszNDEsMTAgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVS
b290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCkKICAgICBpZiAobV9kaWRJbml0aWFsaXplUm9v
dENvbXBvc2l0aW5nTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3Np
dGluZ0xheWVyKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
aWQoKSkpOworICAgIGVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllcjo6Y3JlYXRlKHRvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOwogICAgIG1fZGlkSW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0
ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZv
KQotewotICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSkgewotICAgICAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24o
KSkpOwotICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IGZhbHNlOwot
ICAgIH0KLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGlu
Z0xheWVyU3RhdGUoaWQsIGluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9y
PENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQsIGNoaWxkcmVuKSk7
Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVy
KiBjYW52YXNQbGF0Zm9ybUxheWVyKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbiA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPmdy
YXBoaWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgSW50U2l6ZSBjYW52YXNTaXplID0gY2FudmFzUGxh
dGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVDYW52YXMoaWQsIGNh
bnZhc1NpemUsIHRva2VuKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
eW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxh
dGZvcm1MYXllcikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgdWludDMy
X3QgZnJvbnRCdWZmZXIgPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZh
Y2UoKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpTeW5jQ2FudmFzKGlkLCBmcm9udEJ1ZmZlcikpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQp
Ci17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveUNhbnZhcyhpZCkpOwotfQotI2VuZGlmCi0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRMYXllclJlcGFpbnRDb3VudChDb29y
ZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRMYXllclJlcGFpbnRDb3Vu
dChpZCwgdmFsdWUpKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGNoZWNrQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3hpZXMoZmlsdGVycyk7Ci0jZW5kaWYKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xh
eWVyRmlsdGVycyhpZCwgZmlsdGVycykpOwotfQotI2VuZGlmCi0KICNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQogewpAQCAtNDM2
LDcgKzM3Miw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjaGVja0N1c3RvbUZp
bHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRlck9wZXJhCiAKICAgICAgICAgaWYgKCFjdXN0
b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpKSB7CiAgICAgICAgICAgICBjdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHktPnNldENsaWVudCh0aGlzKTsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUN1c3Rv
bUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVy
YXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOworICAg
ICAgICAgICAgZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKGN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSwgY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9n
cmFtKCktPnZhbGlkYXRlZFByb2dyYW1JbmZvKCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIElmIHRoZSBjbGllbnQgd2FzIG5vdCBkaXNjb25uZWN0ZWQgdGhlbiB0aGlzIGNv
b3JkaW5hdG9yIG11c3QgYmUgdGhlIGNsaWVudCBmb3IgaXQuCiAgICAgICAgICAgICBBU1NFUlQo
Y3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5jbGllbnQoKSA9PSB0aGlzKTsKQEAgLTQ0OSw3ICsz
ODUsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclBybwogICAgIC8vIEF0IHRoaXMgdGltZSB0aGUg
c2hhZGVyIGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgc28gd2UgcmVtb3ZlIGl0IGZyb20gb3VyIHNl
dCBhbmQKICAgICAvLyBzZW5kIGEgbWVzc2FnZSB0byB0aGUgb3RoZXIgcHJvY2VzcyB0byBkZWxl
dGUgaXQuCiAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5yZW1vdmUoY3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5KTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclBy
b2dyYW1Qcm94eS0+aWQoKSkpOworICAgIGVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW06OmNyZWF0ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCkpKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygp
CkBAIC02MTMsNDAgKzU0OSw2IEBAIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VCYWNraW5nCiAgICAgcmV0dXJu
IGltYWdlQmFja2luZzsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUltYWdlQmFja2luZyhpbWFnZUlE
KSk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFj
ZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFjZSo+KGNvb3JkaW5hdGVkU3VyZmFj
ZS5nZXQoKSk7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOwotICAg
IGlmICghd2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZUltYWdlQmFja2luZyhpbWFnZUlELCBoYW5kbGUp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFn
ZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDbGVhckltYWdlQmFj
a2luZ0NvbnRlbnRzKGltYWdlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQp
Ci17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
bV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1v
dmVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpCiB7CiAgICAgSW1hZ2VCYWNr
aW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3MuZW5kKCk7CkBAIC03MDksNDEg
KzYxMSw1MSBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVw
ZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZVRp
bGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2Vi
Q29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHRpbGVSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRh
dGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlVGlsZShDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQordm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uPiBvcGVyYXRpb24pCiB7CiAg
ICAgaWYgKG1faXNQdXJnaW5nKQogICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKLX0K
IAotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQz
Ml90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1
cmZhY2UpCi17Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZh
Y2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihjb29yZGluYXRlZFN1cmZh
Y2UuZ2V0KCkpOwotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKLSAg
ICBpZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBoYW5kbGUp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+Z2V0T3BlcmF0
aW9uVHlwZSgpKSB7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRM
YXllclN0YXRlVHlwZToKKyAgICAgICAgaWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBk
YXRlKSB7CisgICAgICAgICAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbjo6Y3Jl
YXRlKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7CisgICAgICAgICAgICBtX3No
b3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1h
Z2VCYWNraW5nVHlwZToKKyAgICAgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhz
dGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFn
ZUJhY2tpbmcqPihvcGVyYXRpb24uZ2V0KCkpLT5pbWFnZUJhY2tpbmdJRCkpOworICAgICAgICBt
X2ltYWdlQmFja2luZ3MucmVtb3ZlKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbi5nZXQoKSktPmltYWdl
QmFja2luZ0lEKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnNUeXBlOiB7CisjaWYgRU5BQkxFKENTU19TSEFE
RVJTKQorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9u
cyA9IHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5p
bWF0aW9ucyo+KG9wZXJhdGlvbi5nZXQoKSktPmFuaW1hdGlvbnM7CisgICAgICAgIEdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRpb25zLmdldEFjdGl2ZUFu
aW1hdGlvbnMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRp
b25zLmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtl
eWZyYW1lcygpOworICAgICAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1h
dGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9
IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkp
KTsKKyAgICAgICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0
ZXJWYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25z
Kj4ob3BlcmF0aW9uLmdldCgpKS0+YW5pbWF0aW9ucyA9IGFjdGl2ZUFuaW1hdGlvbnM7CisjZW5k
aWYKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBj
YXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyc1R5cGU6Cisj
aWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Q
cm94aWVzKHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
RmlsdGVycyo+KG9wZXJhdGlvbi5nZXQoKSktPmZpbHRlcnMpOworI2VuZGlmCisgICAgICAgIGJy
ZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRs
YXNJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1v
dmVVcGRhdGVBdGxhcyhhdGxhc0lEKSk7CisgICAgbV9vcGVyYXRpb25zLmFwcGVuZChvcGVyYXRp
b24pOwogfQogCiBXZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp2
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKQEAgLTc1MiwyNCArNjY0LDYgQEAgV2ViQ29yZTo6
RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgp
IGNvbnN0CiB9CiAKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyQW5p
bWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFu
aW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRpb25z
LmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7
ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYW5p
bWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7Ci0gICAgICAgIGlmIChrZXlm
cmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVz
LnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSog
ZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+KGtl
eWZyYW1lcy5hdChpKSk7Ci0gICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94
aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYWN0aXZlQW5pbWF0aW9ucykpOwotfQotCiB2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7
CiAgICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMgYWxs
IGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4KQEAgLTgxMiw3ICs3MDYsNyBAQCBH
cmFwaGljc0xheWVyRmFjdG9yeSogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpncmFwaGljc0xh
eWVyRmFjdG9yeSgpCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIHsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZXF1
ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAgZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1l
OjpjcmVhdGUoKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjphbmltYXRp
b25GcmFtZVJlYWR5KCkKQEAgLTg5NSw3ICs3ODksNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0
ZQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKIHsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRCYWNrZ3JvdW5kQ29sb3IoY29s
b3IpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6OmNyZWF0ZShjb2xvcikpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggNzI5N2VlZDgxZTA1YTJlZTBm
MDA1ZWVhM2RmODE4ODVmZWMzZjJiNS4uYjk5MTVhNWQwZTA5YjNkZjRlYmJjYjM5Y2NhN2YyYzZj
OTQ1YjE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJMYXllclRyZWVI
b3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgpAQCAtNDYsOCArNDcsNiBAQCBjbGFzcyBXZWJQ
YWdlOwogCiBjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVl
SG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAogICAgICwgcHVibGljIFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAotICAgICwgcHVibGljIFdlYkNvcmU6OkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgotICAgICwgcHVibGljIFdlYkNvcmU6
OlVwZGF0ZUF0bGFzQ2xpZW50CiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZh
Y3RvcnkKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgLCBXZWJDdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHlDbGllbnQKQEAgLTc5LDQwICs3OCwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1
YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1
bGVMYXllckZsdXNoKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3Jl
OjpJbWFnZSopIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNo
YW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6
OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlEKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNS
ZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAgIHZp
cnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50Jik7CisKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3Nh
Z2VEZWNvZGVyJik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSog
Z3JhcGhpY3NMYXllckZhY3RvcnkoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBzeW5j
TGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVu
KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFu
aW1hdGlvbnMmKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5
bmNMYXllckZpbHRlcnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
LSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBz
eW5jQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1M
YXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TGF5ZXJSZXBhaW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBpbnQpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCk7Ci0K
LSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNv
bnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVk
U3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpOwot
Ci0gICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlVXBkYXRl
QXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1
cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCk7Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgT1ZFUlJJREU7CiAjZW5kaWYKQEAg
LTEzMSwxNCArMTA0LDE3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvcigpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxlRmFj
dG9yKCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6
Q29vcmRpbmF0b3IKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6
OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCB1
cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNr
aW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotCiAgICAg
dm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CiAKKyAgICAvLyBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVy
Q2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdl
czsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6Oklt
YWdlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzeW5j
Rml4ZWRMYXllcnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lE
LCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVl
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbj4pIE9WRVJSSURFOworCiAgICAgLy8gR3Jh
cGhpY3NMYXllckZhY3RvcnkKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50
KikgT1ZFUlJJREU7CiAKQEAgLTE4MSw2ICsxNTcsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBw
YWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3Zlcmxh
eS4KICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVy
OwogCisgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMgbV9vcGVyYXRp
b25zOworCiAgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBt
X3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RD4gbV9sYXllcnNUb0NyZWF0ZTsKICAgICBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklEPiBtX2xheWVyc1RvRGVsZXRlOwpAQCAtMjA0LDcgKzE4Miw2IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKIAogICAgIExheWVyVHJlZUNv
bnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7CiAg
ICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKICAgICBXZWJDb3Jl
OjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOwogICAg
IFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9yZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186317</attachid>
            <date>2013-02-04 00:29:37 -0800</date>
            <delta_ts>2013-02-04 01:16:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108294-20130204172601.patch</filename>
            <type>text/plain</type>
            <size>131941</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDMyZDI0NTBkNDY3MTJm
MjYwMjI5ZDAxYTE4NWZmYmM5YjhkMzZlNi4uOWQ4NTA2OTA4ODFlOTBjNmEyNjgzZmNhYWRhNWQ3
YTg5NmQ4Zjc4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMiBAQAorMjAxMy0wMi0wMyAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkgaGFzIHNvIG1hbnkgSVBDIG1lc3NhZ2VzIChlLmcuIFN5bmND
YW52YXMgYW5kCisgICAgICAgIENyZWF0ZVRpbGUpLCBhbmQgdGhlcmUgaXMgYSBsb25nIGZ1bmN0
aW9uIGNoYWluIGZyb20gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIHRvCisgICAgICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSAoNCBjbGFzc2VzKS4KKyAgICAgICAgSWYgd2Ugd2FudCB0byBh
ZGQgYSBuZXcgbWVzc2FnZSwgd2UgbmVlZCB0byBhZGQgc2ltaWxhciBmdW5jdGlvbnMgaW50byA0
IGNsYXNzZXMuCisKKyAgICAgICAgTm93IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBoYXMgb25s
eSBvbmUgSVBDIG1lc3NhZ2U6IENvbW1pdENvb3JpZG5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLgor
ICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lIHJ1biBhcyBmb2xsb3dzOgorICAgICAgICAxLiBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIgbWFrZXMgYSBDb29yaWRuYXRlZEdyYXBoaWNzT3BlcmF0aW9uIChlLmcuIENyZWF0ZVRpbGUp
LgorICAgICAgICAyLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgc3RvcmVzIGFsbCBvcGVyYXRp
b25zLgorICAgICAgICAzLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgc2VuZHMgYWxsIG9wZXJh
dGlvbnMgdG8gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkKKyAgICAgICAgYXQgdGhlIG1v
bWVudCBvZiBmbHVzaGluZyB2aWEgQ29tbWl0Q29vcmlkbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMg
bWVzc2FnZS4KKyAgICAgICAgNC4gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIGV4ZWN1dGVzIGFs
bCBvcGVyYXRpb25zLgorCisgICAgICAgIFRoZXJlIGlzIG9uZSBiaWcgYmVoYXZpb3IgY2hhbmdl
LiBBbGwgb3BlcmF0aW9ucyAoZS5nLiBDcmVhdGVMYXllcnMgYW5kCisgICAgICAgIFN5bmNDYW52
YXMpIGFyZSBwZXJmb3JtZWQgYXQgdGhlIHNhbWUgdGltZSwgd2hlbgorICAgICAgICBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JpZG5hdGVkR3JhcGhpY3NPcGVyYXRpb25zIGlz
IGNhbGxlZC4KKworICAgICAgICBJZiB5b3Ugd2FudCB0byBhZGQgYSBuZXcgb3BlcmF0aW9uLCBh
ZGQgY29kZSBhcyBmb2xsb3dzOgorICAgICAgICAxLiBDcmVhdGUgYSBuZXcgb3BlcmF0aW9uIHN1
YmNsYXNzIGluIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaAorICAgICAgICAyLiBPdmVy
cmlkZSBPcGVyYXRpb25CYXNlOjpleGVjdXRlKCkgdG8gZXhlY3V0ZSB3aGF0IHRoZSBvcGVyYXRp
b24gc2hvdWxkIGRvLgorICAgICAgICAzLiBJbXBsZW1lbnQgZW5jb2RlL2RlY29kZSBpbiBDb29y
ZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlz
dGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFz
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpj
cmVhdGVDYW52YXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpleGVjdXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxh
eWVyczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRSb290TGF5ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVu
OjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZVRpbGU6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpleGVjdXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0
ZUF0bGFzOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6ZXhlY3V0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRh
dGVJbWFnZUJhY2tpbmc6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6ZXhlY3V0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFn
ZUJhY2tpbmc6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6
ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpDcmVhdGVDYW52YXM6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpleGVjdXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
RmlsdGVyczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpleGVjdXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRl
clByb2dyYW06OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OmV4ZWN1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpl
eGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uOjpleGVjdXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbik6CisgICAgICAgIChPcGVyYXRpb25CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2U6On5PcGVyYXRpb25C
YXNlKToKKyAgICAgICAgKE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb246On5PcGVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uOjpnZXRPcGVyYXRp
b25UeXBlKToKKyAgICAgICAgKENyZWF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OkNy
ZWF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVMYXllcnM6On5DcmVhdGVMYXllcnMpOgorICAgICAgICAoRGVsZXRlTGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0
ZUxheWVyczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkRlbGV0ZUxheWVyczo6RGVsZXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6fkRlbGV0ZUxheWVy
cyk6CisgICAgICAgIChTZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyOjpTZXRSb290
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0Um9vdExheWVyOjp+U2V0Um9vdExheWVyKToKKyAgICAgICAgKFNldExheWVyU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJT
dGF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyU3RhdGU6OlNldExheWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6flNldExheWVyU3Rh
dGUpOgorICAgICAgICAoU2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGls
ZHJlbjo6U2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOjp+U2V0TGF5ZXJDaGlsZHJlbik6Cisg
ICAgICAgIChDcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZVRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlOjpDcmVhdGVUaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGU6On5D
cmVhdGVUaWxlKToKKyAgICAgICAgKFVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OlVwZGF0
ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
VXBkYXRlVGlsZTo6flVwZGF0ZVRpbGUpOgorICAgICAgICAoUmVtb3ZlVGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlVGlsZTo6UmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjp+UmVtb3ZlVGlsZSk6CisgICAgICAgIChDcmVhdGVV
cGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzOjpDcmVhdGVVcGRhdGVB
dGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpD
cmVhdGVVcGRhdGVBdGxhczo6fkNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFJlbW92ZVVw
ZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZVVwZGF0ZUF0bGFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OlJlbW92ZVVwZGF0ZUF0
bGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZVVwZGF0ZUF0bGFzOjp+UmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoQ3JlYXRlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6Q3JlYXRlSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZUltYWdlQmFja2luZzo6fkNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChVcGRh
dGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpVcGRhdGVJ
bWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjp+VXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAg
KENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1h
Z2VCYWNraW5nQ29udGVudHM6OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50czo6fkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAoUmVtb3ZlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZUltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6UmVtb3ZlSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlJlbW92ZUltYWdlQmFja2luZzo6flJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChTZXRM
YXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpTZXRMYXll
ckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjp+U2V0TGF5ZXJBbmltYXRpb25zKToKKyAgICAgICAg
KFJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9u
RnJhbWU6OlJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6On5SZXF1ZXN0QW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAoQ3JlYXRlQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZh
czo6Q3JlYXRlQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZUNhbnZhczo6fkNyZWF0ZUNhbnZhcyk6CisgICAgICAgIChTeW5jQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5
bmNDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpTeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6On5TeW5jQ2FudmFzKToKKyAg
ICAgICAgKERlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OkRlc3Ryb3lDYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVz
dHJveUNhbnZhczo6fkRlc3Ryb3lDYW52YXMpOgorICAgICAgICAoU2V0TGF5ZXJGaWx0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
RmlsdGVyczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldExheWVyRmlsdGVyczo6U2V0TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyczo6flNl
dExheWVyRmlsdGVycyk6CisgICAgICAgIChDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3Rv
bUZpbHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpDcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06On5DcmVhdGVDdXN0b21GaWx0ZXJQcm9n
cmFtKToKKyAgICAgICAgKFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW06OlJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6flJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAg
ICAgICAoU2V0TGF5ZXJSZXBhaW50Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFp
bnRDb3VudDo6U2V0TGF5ZXJSZXBhaW50Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6On5TZXRMYXllclJl
cGFpbnRDb3VudCk6CisgICAgICAgIChTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0QmFja2dyb3VuZENvbG9yOjpTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjp+U2V0
QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNj
cm9sbFBvc2l0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb246OkRpZENoYW5nZVNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uOjp+RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAg
ICAgICAoUXVldWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmlzRW1wdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OnNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmF0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAgICAgUmVtb3ZlIG1fcGVu
ZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiBiZWNhdXNlCisgICAgICAgICAgICBk
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvbigpIGlzIGNhbGxlZCBhdCB0aGUgbW9tZW50IG9mIGZsdXNo
aW5nLgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXREcmF3c0JhY2tncm91bmQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEltYWdlQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6cmVtb3ZlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6dXBkYXRlKToKKyAgICAgICAgICAgIFdlIGRvbid0IGRlYWwgd2l0
aCB0aGUgY2FzZSB3aGVuIHNlbmRpbmcgYW4gVXBkYXRlSW1hZ2VCYWNraW5nIG9wZXJhdGlvbiBm
YWlscy4KKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNv
bnRlbnRzVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg6CisgICAgICAgIChDb29yZGluYXRl
ZEltYWdlQmFja2luZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVw
ZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisgICAgICAgICAgICBXZSBkb24ndCBkZWFsIHdpdGgg
dGhlIGNhc2Ugd2hlbiBzZW5kaW5nIGEgQ3JlYXRlVXBkYXRlQXRsYXMgb3BlcmF0aW9uIGZhaWxz
LgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcyk6CisgICAgICAg
IChXZWJDb3JlOjpVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRs
YXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVXBkYXRlQXRsYXMpOgorCiAyMDEz
LTAyLTAzICBKb2FubWFyaWUgRGlnZ3MgIDxqZGlnZ3NAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXSBNYWtlIGRpc3RjaGVjayBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGY3OGJmYWNkMjUwYzY5YWQ4
Yjc4NjU4MmQ5YTc2NTc4YWQ0MDA3MGIuLjFmNTgyNDE4YjRhMzM1ODJjMzI0MDFhMDYxMjE3NDI2
NjU3MmNkM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMy0wMi0wMyAgSHVhbmcg
RG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGluYXRl
ZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHR3
byBjaGFuZ2VzIGluIFdLMi4KKyAgICAgICAgMS4gQ2hhbmdlIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5IHRvIHVzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgorICAgICAgICAy
LiBBZGQgZW5jb2RlL2RlY29kZSBvZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uIGluCisg
ICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy4KKworICAgICAgICAqIFNo
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVy
cy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgICAgICBFbmNvZGlu
ZyBVcGRhdGVJbWFnZUJhY2tpbmcgYW5kIENyZWF0ZVVwZGF0ZUF0bGFzIGNhbiBmYWlsIHdoZW4K
KyAgICAgICAgICAgIGVuY29kaW5nIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGZhaWxz
LCBidXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIHJlY292ZXIgaW4gdGhlIGNhc2UuCisgICAgICAg
IChDb3JlSVBDKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRpbmdMYXllcnMpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJz
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXpl
Um9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjplbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6d2lsbEVucXVldWVDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Lmg6CisgICAgICAgIChDb29yZGluYXRlZExheWVyVHJlZUhvc3QpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om9wZXJhdGlvblF1ZXVlKToKKwogMjAx
My0wMi0wMyAgSm9hbm1hcmllIERpZ2dzICA8amRpZ2dzQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0dUS10gTWFrZSBkaXN0Y2hlY2sgZmFpbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMGQ3MmNh
MGZkZGJjN2ZlZTUwOGFkOTZhMmUxMGNkY2JmZTRkNDkxNy4uN2FjOGM1ODg5MDE0NWIzYmFiZTFm
OTQwNDQzZjI5MDA3ZThiNDQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE5OTMsNiArMTk5
Myw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKaW5kZXggOTBlZmM0MGYzNzYyZDBmMjI0ODYyNzQ1MjIzODQxNDdiM2MxNGQ2Ny4uMTJi
ZjczNmFjYTUwZDMxODNhNDFiMTA5YzdjMDU5MjY1OWEwMDI5OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0y
MjQ2LDYgKzIyNDYsOCBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmls
dGVyUHJvZ3JhbS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmggXAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9ucy5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8uaCBcCkBAIC0yODkxLDYg
KzI4OTMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
IFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbi5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNl
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuY3BwCmluZGV4IDM3MzZmMjYwNGMwYzEwNDM5OTk1N2I5OGEyNTI1ZWU3ZGJjZGQ5
YmIuLjUzNzIxY2Q5ZDVhMTlmYmZmYTk3NDE2M2UyYzYyNWE2ZGIwYzE2YjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBA
IC01MDAsNyArNTAwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGls
ZHJlbigpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytp
KQogICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9Db29yZGluYXRlZExheWVySUQoY2hpbGRyZW4o
KVtpXSkpOwogCi0gICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hp
bGRJRHMpOworICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWVDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyQ2hpbGRyZW46OmNyZWF0ZShtX2lkLCBjaGlsZElEcykpOwogfQogCiAjaWYgRU5BQkxF
KENTU19GSUxURVJTKQpAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jRmlsdGVycygpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQogICAg
ICAgICByZXR1cm47CiAgICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOwotICAgIG1fY29v
cmRpbmF0b3ItPnN5bmNMYXllckZpbHRlcnMobV9pZCwgZmlsdGVycygpKTsKKyAgICBtX2Nvb3Jk
aW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnM6OmNyZWF0
ZShtX2lkLCBmaWx0ZXJzKCkpKTsKIH0KICNlbmRpZgogCkBAIC01NzAsNyArNTcwLDcgQEAgdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKCkKICAgICAgICAgdXBk
YXRlRGVidWdJbmRpY2F0b3JzKCk7CiAgICAgbV9sYXllckluZm8uc2hvd1JlcGFpbnRDb3VudGVy
ID0gaXNTaG93aW5nUmVwYWludENvdW50ZXIoKTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNM
YXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRp
b25RdWV1ZSgpLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlOjpjcmVhdGUobV9pZCwgbV9sYXllcklu
Zm8pKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9yZGVy
KGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgpCkBAIC01ODcsNyArNTg3LDcgQEAgdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNBbmltYXRpb25zKCkKIAogICAgIG1fc2hv
dWxkU3luY0FuaW1hdGlvbnMgPSBmYWxzZTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnNldExheWVy
QW5pbWF0aW9ucyhtX2lkLCBtX2FuaW1hdGlvbnMpOworICAgIG1fY29vcmRpbmF0b3ItPm9wZXJh
dGlvblF1ZXVlKCktPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczo6Y3JlYXRlKG1faWQsIG1f
YW5pbWF0aW9ucykpOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBAIC02MDQsNyAr
NjA0LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQogICAg
IGlmICghbV9pc1ZhbGlkQ2FudmFzKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Nvb3JkaW5h
dG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgQVNTRVJU
KG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgdWludDMyX3QgZnJvbnRCdWZmZXIgPSBtX2Nh
bnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOworICAgIG1fY29vcmRp
bmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6OmNyZWF0ZShtX2lk
LCBmcm9udEJ1ZmZlcikpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVz
dHJveUNhbnZhc0lmTmVlZGVkKCkKQEAgLTYxMyw3ICs2MTUsNyBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6ZGVzdHJveUNhbnZhc0lmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKG1faXNWYWxpZENhbnZhcykgewotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5kZXN0
cm95Q2FudmFzKG1faWQpOworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgp
LT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpjcmVhdGUobV9pZCkpOwogICAgICAgICBtX2lzVmFs
aWRDYW52YXMgPSBmYWxzZTsKICAgICB9CiAKQEAgLTYyNyw3ICs2MjksOSBAQCB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQoKQogCiAgICAgQVNTRVJU
KG1fY2FudmFzUGxhdGZvcm1MYXllcik7CiAgICAgaWYgKCFtX2lzVmFsaWRDYW52YXMpIHsKLSAg
ICAgICAgbV9jb29yZGluYXRvci0+Y3JlYXRlQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1M
YXllcik7CisgICAgICAgIEludFNpemUgY2FudmFzU2l6ZSA9IG1fY2FudmFzUGxhdGZvcm1MYXll
ci0+cGxhdGZvcm1MYXllclNpemUoKTsKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9r
ZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAg
ICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWVDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZh
czo6Y3JlYXRlKG1faWQsIGNhbnZhc1NpemUsIHRva2VuKSk7CiAgICAgICAgIG1faXNWYWxpZENh
bnZhcyA9IHRydWU7CiAgICAgfQogCkBAIC03MzYsNyArNzQwLDcgQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3Jl
UGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCiB7CiAgICAgaWYg
KGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgJiYgIXVwZGF0ZWRSZWN0cy5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fY29vcmRpbmF0b3ItPnNldExheWVyUmVwYWludENvdW50KGlkKCksIGluY3JlbWVu
dFJlcGFpbnRDb3VudCgpKTsKKyAgICAgICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUo
KS0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OmNyZWF0ZShpZCgpLCBpbmNyZW1lbnRS
ZXBhaW50Q291bnQoKSkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGls
ZWRCYWNraW5nU3RvcmVIYXNQZW5kaW5nVGlsZUNyZWF0aW9uKCkKQEAgLTc5NSwyMSArNzk5LDIx
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluCiB7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3Ip
OwogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwot
ICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0
aWxlUmVjdCk7CisgICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUoKS0+ZW5xdWV1ZUNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q3JlYXRlVGlsZTo6Y3JlYXRlKGlkKCksIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsK
IH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUodWludDMyX3Qg
dGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVj
dCYgdGlsZVJlY3QpCiB7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwogICAgIEFTU0VSVCht
X2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAgIG1fY29vcmRpbmF0
b3ItPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVjdCk7CisgICAg
bV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUoKS0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6Y3Jl
YXRlKGlkKCksIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAogdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKQogewogICAg
IEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVz
aGluZ0xheWVyQ2hhbmdlcygpIHx8IG1faXNQdXJnaW5nKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5y
ZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7CisgICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVl
dWUoKS0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZTo6Y3JlYXRlKGlkKCksIHRpbGVJRCkpOwogfQogCiB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmlu
ZGV4IGE1NTFkMzUxMWFkYTY0NGViZjczMmJlZjYyZTg2YWQ5ZDg3ZjFhMjAuLjUxNGY0NjI5ZGYw
NDc0NDM5MmMxZWY4MzIwMDg0OTQyM2U4ZTgxZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNp
Zm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyX2gKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIK
ICNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkNvb3JkaW5h
dGVkTGF5ZXJJbmZvLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCkBAIC00MywzNyAr
NDQsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOwotY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7CiAKIGNsYXNzIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRmx1
c2hpbmdMYXllckNoYW5nZXMoKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBDb29yZGluYXRlZFRpbGVD
bGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVp
bnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCB0aWxlSUQpID0gMDsKLQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHZpc2libGVDb250ZW50
c1JlY3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSopID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29y
ZGluYXRlZExheWVySW5mbyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRy
ZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYp
ID0gMDsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXll
ckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgPSAw
OwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFBsYXRmb3JtTGF5ZXIqKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxheWVy
KikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCkgPSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQo
Q29vcmRpbmF0ZWRMYXllcklELCBpbnQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXll
ckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0
aW9ucyYpID0gMDsKLQogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpID0g
MDsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRV
cGRhdGUoY29uc3QgSW50U2l6ZSYsIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90
JiBhdGxhc0lELCBJbnRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlF1ZXVlKiBvcGVyYXRpb25RdWV1ZSgpID0gMDsKIH07CiAKIGNsYXNzIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllciA6IHB1YmxpYyBHcmFwaGljc0xheWVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTRiYTE4MzE0MDc1Nzc5MWZjODI4NTFiM2MwZWNmZDFmOGFhNzAyYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmNwcApAQCAtMCwwICsx
LDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgorCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpleGVjdXRlKENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPmNyZWF0ZUxheWVycyhsYXll
cklEcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5
ZXJzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2Nl
bmUtPmRlbGV0ZUxheWVycyhsYXllcklEcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0Um9vdExheWVyOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnNldFJvb3RMYXllcklEKGxheWVySUQpOworfQorCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGU6OmV4ZWN1dGUo
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+c2V0TGF5ZXJT
dGF0ZShsYXllcklELCBsYXllckluZm8pOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldExheWVyQ2hpbGRyZW46OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+c2V0TGF5ZXJDaGlsZHJlbihsYXllcklELCBjaGls
ZHJlbik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGls
ZTo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5l
LT5jcmVhdGVUaWxlKGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZhY3Rvcik7Cisg
ICAgc2NlbmUtPnVwZGF0ZVRpbGUobGF5ZXJJRCwgdGlsZUlELCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0aWxlUmVjdCwgdXBkYXRl
SW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlOjpleGVjdXRlKENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnVwZGF0ZVRpbGUobGF5ZXJJRCwg
dGlsZUlELCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51
cGRhdGVSZWN0LCB0aWxlUmVjdCwgdXBkYXRlSW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1cmZh
Y2VPZmZzZXQpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1v
dmVUaWxlOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAg
c2NlbmUtPnJlbW92ZVRpbGUobGF5ZXJJRCwgdGlsZUlEKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6ZXhlY3V0ZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5jcmVhdGVVcGRhdGVBdGxhcyhh
dGxhc0lELCBzdXJmYWNlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpSZW1vdmVVcGRhdGVBdGxhczo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNj
ZW5lKQoreworICAgIHNjZW5lLT5yZW1vdmVVcGRhdGVBdGxhcyhhdGxhc0lEKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmc6OmV4ZWN1
dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+Y3JlYXRl
SW1hZ2VCYWNraW5nKGltYWdlQmFja2luZ0lEKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmc6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+dXBkYXRlSW1hZ2VCYWNraW5nKGltYWdl
QmFja2luZ0lELCBzdXJmYWNlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMo
aW1hZ2VCYWNraW5nSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlJlbW92ZUltYWdlQmFja2luZzo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNj
ZW5lKQoreworICAgIHNjZW5lLT5yZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2VCYWNraW5nSUQpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9u
czo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5l
LT5zZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYW5pbWF0aW9ucyk7Cit9CisKKyNpZiBFTkFC
TEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKK30K
KyNlbmRpZgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUqIHNjZW5lKQoreworICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdz
ID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQgfCBHcmFwaGljc1N1cmZh
Y2U6OlN1cHBvcnRzU2hhcmluZzsKKyAgICBzY2VuZS0+Y3JlYXRlQ2FudmFzKGxheWVySUQsIGNh
bnZhc1NpemUsIEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNhbnZhc1NpemUsIHN1cmZhY2VGbGFn
cywgdG9rZW4pKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5j
Q2FudmFzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAg
c2NlbmUtPnN5bmNDYW52YXMobGF5ZXJJRCwgZnJvbnRCdWZmZXIpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OmV4ZWN1dGUoQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+ZGVzdHJveUNhbnZhcyhsYXll
cklEKTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnM6OmV4ZWN1dGUoQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+c2V0TGF5ZXJGaWx0ZXJzKGxh
eWVySUQsIGZpbHRlcnMpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dy
YW06OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2Vu
ZS0+Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtSUQsIHByb2dy
YW1JbmZvKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVD
dXN0b21GaWx0ZXJQcm9ncmFtOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2Nl
bmUpCit7CisgICAgc2NlbmUtPnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVy
UHJvZ3JhbUlEKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlNldExheWVyUmVwYWludENvdW50OjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnNldExheWVyUmVwYWludENvdW50KGxheWVySUQsIHJl
cGFpbnRDb3VudCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
QmFja2dyb3VuZENvbG9yOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUp
Cit7CisgICAgc2NlbmUtPnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb246OmV4ZWN1
dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+ZGlkQ2hh
bmdlU2Nyb2xsUG9zaXRpb24ocG9zaXRpb24pOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJlNTM1YzQ3MmQwM2I5OWEwYTQxMmZhYjJkMDgwNDhlODc2YzhmMGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oCkBAIC0wLDAgKzEsNTI3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bl9oCisjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25faAorCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIK
KyNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
CisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCIKKyNlbmRpZgorI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCisjZW5kaWYKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJm
YWNlVG9rZW4uaCIKKyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTsKKwor
Y2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBP
cGVyYXRpb25UeXBlIHsKKyAgICAgICAgQ3JlYXRlTGF5ZXJzVHlwZSwKKyAgICAgICAgRGVsZXRl
TGF5ZXJzVHlwZSwKKyAgICAgICAgU2V0Um9vdExheWVyVHlwZSwKKyAgICAgICAgU2V0TGF5ZXJT
dGF0ZVR5cGUsCisgICAgICAgIFNldExheWVyQ2hpbGRyZW5UeXBlLAorICAgICAgICBDcmVhdGVU
aWxlVHlwZSwKKyAgICAgICAgVXBkYXRlVGlsZVR5cGUsCisgICAgICAgIFJlbW92ZVRpbGVUeXBl
LAorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhc1R5cGUsCisgICAgICAgIFJlbW92ZVVwZGF0ZUF0
bGFzVHlwZSwKKyAgICAgICAgQ3JlYXRlSW1hZ2VCYWNraW5nVHlwZSwKKyAgICAgICAgVXBkYXRl
SW1hZ2VCYWNraW5nVHlwZSwKKyAgICAgICAgQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGUs
CisgICAgICAgIFJlbW92ZUltYWdlQmFja2luZ1R5cGUsCisgICAgICAgIFNldExheWVyQW5pbWF0
aW9uc1R5cGUsCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICAgICBS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVUeXBlLAorI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCisgICAgICAgIENyZWF0ZUNhbnZhc1R5cGUsCisgICAgICAgIFN5bmNDYW52YXNUeXBlLAor
ICAgICAgICBEZXN0cm95Q2FudmFzVHlwZSwKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKKyAgICAgICAgU2V0TGF5ZXJGaWx0ZXJzVHlwZSwKKyNlbmRpZgorI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKKyAgICAgICAgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUsCisgICAgICAg
IFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlLAorI2VuZGlmCisgICAgICAgIFNldExheWVy
UmVwYWludENvdW50VHlwZSwKKyAgICAgICAgU2V0QmFja2dyb3VuZENvbG9yVHlwZSwKKyAgICAg
ICAgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb25UeXBlLAorICAgIH07CisKKyAgICBjbGFzcyBPcGVy
YXRpb25CYXNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE9wZXJhdGlvbkJhc2U+IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk9wZXJhdGlvbkJhc2UoKSB7IH0KKyAgICAg
ICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdl
dE9wZXJhdGlvblR5cGUoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
KENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopID0gMDsKKyAgICB9OworCisgICAgdGVtcGxhdGU8
T3BlcmF0aW9uVHlwZSBUeXBlPiBjbGFzcyBPcGVyYXRpb24gOiBwdWJsaWMgT3BlcmF0aW9uQmFz
ZSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5PcGVyYXRpb24oKSB7IH0KKyAgICAg
ICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdl
dE9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBUeXBlOyB9CisgICAgfTsKKworICAgIGNs
YXNzIENyZWF0ZUxheWVycyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q3JlYXRlTGF5ZXJzPiBjcmVhdGUoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mIGxheWVySURzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENyZWF0ZUxheWVycyhsYXllcklEcykpOworICAgICAgICB9CisgICAgICAgIGV4cGxp
Y2l0IENyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQor
ICAgICAgICAgICAgOiBsYXllcklEcyhpZHMpCisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFs
IH5DcmVhdGVMYXllcnMoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgVmVjdG9yPENvb3JkaW5h
dGVkTGF5ZXJJRD4gbGF5ZXJJRHM7CisgICAgfTsKKworICAgIGNsYXNzIERlbGV0ZUxheWVycyA6
IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5
ZXJzVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVsZXRl
TGF5ZXJzPiBjcmVhdGUoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGxheWVySURz
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZUxheWVy
cyhsYXllcklEcykpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0IERlbGV0ZUxheWVycyhj
b25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQorICAgICAgICAgICAgOiBsYXll
cklEcyhpZHMpCisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5EZWxldGVMYXllcnMoKSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KikgT1ZFUlJJREU7CisKKyAgICAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbGF5ZXJJ
RHM7CisgICAgfTsKKworICAgIGNsYXNzIFNldFJvb3RMYXllciA6IHB1YmxpYyBPcGVyYXRpb248
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyVHlwZT4geworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2V0Um9vdExheWVyPiBjcmVhdGUoQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2V0Um9vdExheWVyKGxheWVySUQpKTsKKyAgICAgICAgfQorICAgICAgICBl
eHBsaWNpdCBTZXRSb290TGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQorICAgICAgICAgICAg
OiBsYXllcklEKGlkKQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVhbCB+U2V0Um9vdExheWVy
KCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOwor
ICAgIH07CisKKyAgICBjbGFzcyBTZXRMYXllclN0YXRlIDogcHVibGljIE9wZXJhdGlvbjxDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlwZT4geworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2V0TGF5ZXJTdGF0ZT4gY3JlYXRlKENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgbGF5ZXJJ
bmZvKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldExheWVy
U3RhdGUobGF5ZXJJRCwgbGF5ZXJJbmZvKSk7CisgICAgICAgIH0KKyAgICAgICAgU2V0TGF5ZXJT
dGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBp
bmZvKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAgICAgLCBsYXllckluZm8o
aW5mbykKKyAgICAgICAgeyB9CisgICAgICAgIHZpcnR1YWwgflNldExheWVyU3RhdGUoKSB7IH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikg
T1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAg
IENvb3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVySW5mbzsKKyAgICB9OworCisKKyAgICBjbGFzcyBT
ZXRMYXllckNoaWxkcmVuIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRMYXllckNoaWxkcmVuVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2V0TGF5ZXJDaGlsZHJlbj4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJ
RCBsYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJDaGlsZHJl
bihsYXllcklELCBjaGlsZHJlbikpOworICAgICAgICB9CisgICAgICAgIFNldExheWVyQ2hpbGRy
ZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklE
PiYgY2hpbGRyZW5WZWN0b3IpCisgICAgICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICAg
ICAsIGNoaWxkcmVuKGNoaWxkcmVuVmVjdG9yKQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVh
bCB+U2V0TGF5ZXJDaGlsZHJlbigpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gY2hp
bGRyZW47CisgICAgfTsKKworICAgIGNsYXNzIENyZWF0ZVRpbGUgOiBwdWJsaWMgT3BlcmF0aW9u
PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGVUeXBlPiB7CisgICAgcHVi
bGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVUaWxlPiBjcmVhdGUoQ29vcmRp
bmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZVRpbGUobGF5ZXJJRCwgdGlsZUlE
LCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworICAgICAgICB9CisgICAgICAgIENyZWF0ZVRpbGUo
Q29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCB0aWxlLCBjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgaW5mbykKKyAgICAgICAgICAgIDogbGF5ZXJJRChp
ZCkKKyAgICAgICAgICAgICwgdGlsZUlEKHRpbGUpCisgICAgICAgICAgICAsIHRpbGVSZWN0KHJl
Y3QpCisgICAgICAgICAgICAsIHVwZGF0ZUluZm8oaW5mbykKKyAgICAgICAgeyB9CisgICAgICAg
IHZpcnR1YWwgfkNyZWF0ZVRpbGUoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUo
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgSW50
UmVjdCB0aWxlUmVjdDsKKyAgICAgICAgU3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAg
ICB9OworCisgICAgY2xhc3MgVXBkYXRlVGlsZSA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZVR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVwZGF0ZVRpbGU+IGNyZWF0ZShDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVXBkYXRlVGlsZShsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0
LCB1cGRhdGVJbmZvKSk7CisgICAgICAgIH0KKyAgICAgICAgVXBkYXRlVGlsZShDb29yZGluYXRl
ZExheWVySUQgaWQsIHVpbnQzMl90IHRpbGUsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFN1
cmZhY2VVcGRhdGVJbmZvJiBpbmZvKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAg
ICAgICAgLCB0aWxlSUQodGlsZSkKKyAgICAgICAgICAgICwgdGlsZVJlY3QocmVjdCkKKyAgICAg
ICAgICAgICwgdXBkYXRlSW5mbyhpbmZvKQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVhbCB+
VXBkYXRlVGlsZSgpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRDsKKyAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICBJbnRSZWN0IHRpbGVS
ZWN0OworICAgICAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgIH07CisKKyAg
ICBjbGFzcyBSZW1vdmVUaWxlIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpSZW1vdmVUaWxlVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UmVtb3ZlVGlsZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklE
LCB1aW50MzJfdCB0aWxlSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUmVtb3ZlVGlsZShsYXllcklELCB0aWxlSUQpKTsKKyAgICAgICAgfQorICAgICAgICBS
ZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgdGlsZSkKKyAgICAgICAg
ICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgICAgICwgdGlsZUlEKHRpbGUpCisgICAgICAgIHsg
fQorICAgICAgICB2aXJ0dWFsIH5SZW1vdmVUaWxlKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAg
IENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICB1aW50MzJfdCB0aWxlSUQ7Cisg
ICAgfTsKKworICAgIGNsYXNzIENyZWF0ZVVwZGF0ZUF0bGFzIDogcHVibGljIE9wZXJhdGlvbjxD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhc1R5cGU+IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZVVwZGF0ZUF0bGFzPiBj
cmVhdGUodWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1
cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRl
VXBkYXRlQXRsYXMoYXRsYXNJRCwgc3VyZmFjZSkpOworICAgICAgICB9CisgICAgICAgIENyZWF0
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGlkLCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4g
Y29vcmRpbmF0ZWRTdXJmYWNlKQorICAgICAgICAgICAgOiBhdGxhc0lEKGlkKQorICAgICAgICAg
ICAgLCBzdXJmYWNlKGNvb3JkaW5hdGVkU3VyZmFjZSkKKyAgICAgICAgeyB9CisgICAgICAgIHZp
cnR1YWwgfkNyZWF0ZVVwZGF0ZUF0bGFzKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIHVpbnQz
Ml90IGF0bGFzSUQ7CisgICAgICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2U7
CisgICAgfTsKKworICAgIGNsYXNzIFJlbW92ZVVwZGF0ZUF0bGFzIDogcHVibGljIE9wZXJhdGlv
bjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhc1R5cGU+IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZVVwZGF0ZUF0bGFz
PiBjcmVhdGUodWludDMyX3QgYXRsYXNJRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBSZW1vdmVVcGRhdGVBdGxhcyhhdGxhc0lEKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZXhwbGljaXQgUmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgaWQpCisgICAgICAgICAg
ICA6IGF0bGFzSUQoaWQpCisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5SZW1vdmVVcGRh
dGVBdGxhcygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICB1aW50MzJfdCBhdGxhc0lEOworICAg
IH07CisKKyAgICBjbGFzcyBDcmVhdGVJbWFnZUJhY2tpbmcgOiBwdWJsaWMgT3BlcmF0aW9uPENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZ1R5cGU+IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZUltYWdlQmFja2luZz4g
Y3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNraW5nSUQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlSW1hZ2VCYWNraW5nKGlt
YWdlQmFja2luZ0lEKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgQ3JlYXRlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQpCisgICAgICAgICAgICA6IGltYWdl
QmFja2luZ0lEKGlkKQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVhbCB+Q3JlYXRlSW1hZ2VC
YWNraW5nKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VCYWNraW5nSUQ7CisgICAgfTsKKworICAgIGNsYXNzIFVwZGF0ZUltYWdlQmFja2lu
ZyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRl
SW1hZ2VCYWNraW5nVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8VXBkYXRlSW1hZ2VCYWNraW5nPiBjcmVhdGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVXBkYXRlSW1hZ2VCYWNr
aW5nKGltYWdlQmFja2luZ0lELCBzdXJmYWNlKSk7CisgICAgICAgIH0KKyAgICAgICAgVXBkYXRl
SW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCisgICAgICAgICAgICA6IGltYWdl
QmFja2luZ0lEKGlkKQorICAgICAgICAgICAgLCBzdXJmYWNlKGNvb3JkaW5hdGVkU3VyZmFjZSkK
KyAgICAgICAgeyB9CisgICAgICAgIHZpcnR1YWwgflVwZGF0ZUltYWdlQmFja2luZygpIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBP
VkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2lu
Z0lEOworICAgICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlOworICAgIH07
CisKKyAgICBjbGFzcyBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzIDogcHVibGljIE9wZXJhdGlv
bjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRz
VHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xlYXJJbWFn
ZUJhY2tpbmdDb250ZW50cz4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VC
YWNraW5nSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUJhY2tpbmdJRCkpOworICAgICAgICB9CisgICAg
ICAgIGV4cGxpY2l0IENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCBpZCkKKyAgICAgICAgICAgIDogaW1hZ2VCYWNraW5nSUQoaWQpCisgICAgICAgIHsg
fQorICAgICAgICB2aXJ0dWFsIH5DbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKCkgeyB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJS
SURFOworCisgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNraW5nSUQ7
CisgICAgfTsKKworICAgIGNsYXNzIFJlbW92ZUltYWdlQmFja2luZyA6IHB1YmxpYyBPcGVyYXRp
b248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nVHlwZT4g
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVtb3ZlSW1hZ2VCYWNr
aW5nPiBjcmVhdGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVJbWFnZUJhY2tp
bmcoaW1hZ2VCYWNraW5nSUQpKTsKKyAgICAgICAgfQorICAgICAgICBleHBsaWNpdCBSZW1vdmVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCkKKyAgICAgICAgICAgIDog
aW1hZ2VCYWNraW5nSUQoaWQpCisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5SZW1vdmVJ
bWFnZUJhY2tpbmcoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCBpbWFnZUJhY2tpbmdJRDsKKyAgICB9OworCisgICAgY2xhc3MgU2V0TGF5ZXJBbmlt
YXRpb25zIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllckFuaW1hdGlvbnNUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTZXRMYXllckFuaW1hdGlvbnM+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5
ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJBbmltYXRpb25zKGxh
eWVySUQsIGFuaW1hdGlvbnMpKTsKKyAgICAgICAgfQorICAgICAgICBTZXRMYXllckFuaW1hdGlv
bnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYg
bGF5ZXJBbmltYXRpb25zKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAgICAg
LCBhbmltYXRpb25zKGxheWVyQW5pbWF0aW9ucykKKyAgICAgICAgeyB9CisgICAgICAgIHZpcnR1
YWwgflNldExheWVyQW5pbWF0aW9ucygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYW5p
bWF0aW9uczsKKyAgICB9OworCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQor
ICAgIGNsYXNzIFJlcXVlc3RBbmltYXRpb25GcmFtZSA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lVHlwZT4geworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVxdWVzdEFuaW1hdGlvbkZyYW1l
PiBjcmVhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJl
cXVlc3RBbmltYXRpb25GcmFtZSgpKTsKKyAgICAgICAgfQorICAgICAgICBSZXF1ZXN0QW5pbWF0
aW9uRnJhbWUoKQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVhbCB+UmVxdWVzdEFuaW1hdGlv
bkZyYW1lKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSopIE9WRVJSSURFOworICAgIH07CisjZW5kaWYKKworI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorICAgIGNsYXNzIENyZWF0ZUNhbnZhcyA6IHB1YmxpYyBPcGVyYXRpb248Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzVHlwZT4geworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3JlYXRlQ2FudmFzPiBjcmVhdGUoQ29vcmRp
bmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIGNvbnN0IEdy
YXBoaWNzU3VyZmFjZVRva2VuJiB0b2tlbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDcmVhdGVDYW52YXMobGF5ZXJJRCwgY2FudmFzU2l6ZSwgdG9rZW4pKTsK
KyAgICAgICAgfQorICAgICAgICBDcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBj
b25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYgc3VyZmFjZVRv
a2VuKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAgICAgLCBjYW52YXNTaXpl
KHNpemUpCisgICAgICAgICAgICAsIHRva2VuKHN1cmZhY2VUb2tlbikKKyAgICAgICAgeyB9Cisg
ICAgICAgIHZpcnR1YWwgfkNyZWF0ZUNhbnZhcygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgSW50U2l6ZSBjYW52YXNTaXplOwor
ICAgICAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbjsKKyAgICB9OworCisgICAgY2xhc3Mg
U3luY0NhbnZhcyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6U3luY0NhbnZhc1R5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN5bmNDYW52YXM+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMy
X3QgZnJvbnRCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU3luY0NhbnZhcyhsYXllcklELCBmcm9udEJ1ZmZlcikpOworICAgICAgICB9CisgICAgICAg
IFN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlckhh
bmRsZSkKKyAgICAgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgICAgICwgZnJvbnRCdWZm
ZXIoZnJvbnRCdWZmZXJIYW5kbGUpCisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5TeW5j
Q2FudmFzKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklEOworICAgICAgICB1aW50MzJfdCBmcm9udEJ1ZmZlcjsKKyAgICB9OworCisgICAgY2xhc3Mg
RGVzdHJveUNhbnZhcyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6RGVzdHJveUNhbnZhc1R5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPERlc3Ryb3lDYW52YXM+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJ
RCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZXN0cm95Q2Fu
dmFzKGxheWVySUQpKTsKKyAgICAgICAgfQorICAgICAgICBleHBsaWNpdCBEZXN0cm95Q2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKKyAgICAgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAg
ICAgeyB9CisgICAgICAgIHZpcnR1YWwgfkRlc3Ryb3lDYW52YXMoKSB7IH0KKyAgICAgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisK
KyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgfTsKKyNlbmRpZgorCisj
aWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGNsYXNzIFNldExheWVyRmlsdGVycyA6IHB1Ymxp
YyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJz
VHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2V0TGF5ZXJG
aWx0ZXJzPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2V0TGF5ZXJGaWx0ZXJzKGxheWVySUQsIGZpbHRlcnMpKTsKKyAgICAgICAgfQorICAg
ICAgICBTZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJPcGVyYXRpb25zKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQor
ICAgICAgICAgICAgLCBmaWx0ZXJzKGZpbHRlck9wZXJhdGlvbnMpCisgICAgICAgIHsgfQorICAg
ICAgICB2aXJ0dWFsIH5TZXRMYXllckZpbHRlcnMoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAg
Q29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmls
dGVyczsKKyAgICB9OworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGNsYXNzIENyZWF0
ZUN1c3RvbUZpbHRlclByb2dyYW0gOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlPiB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBj
cmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8mIHByb2dyYW1JbmZvKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbUlELCBw
cm9ncmFtSW5mbykpOworICAgICAgICB9CisgICAgICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dy
YW0oaW50IHByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIGluZm8pCisg
ICAgICAgICAgICA6IGN1c3RvbUZpbHRlclByb2dyYW1JRChwcm9ncmFtSUQpCisgICAgICAgICAg
ICAsIHByb2dyYW1JbmZvKGluZm8pCisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5DcmVh
dGVDdXN0b21GaWx0ZXJQcm9ncmFtKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
KENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIGludCBjdXN0
b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAgICAgIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvIHByb2dy
YW1JbmZvOworICAgIH07CisKKyAgICBjbGFzcyBSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtIDog
cHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gY3JlYXRlKGludCBjdXN0b21GaWx0ZXJQ
cm9ncmFtSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVt
b3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtSUQpKTsKKyAgICAgICAg
fQorICAgICAgICBleHBsaWNpdCBSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBwcm9ncmFt
SUQpCisgICAgICAgICAgICA6IGN1c3RvbUZpbHRlclByb2dyYW1JRChwcm9ncmFtSUQpCisgICAg
ICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5SZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKCkgeyB9
CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSop
IE9WRVJSSURFOworCisgICAgICAgIGludCBjdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAgfTsK
KyNlbmRpZgorI2VuZGlmCisKKyAgICBjbGFzcyBTZXRMYXllclJlcGFpbnRDb3VudCA6IHB1Ymxp
YyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50
Q291bnRUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRM
YXllclJlcGFpbnRDb3VudD4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBpbnQg
cmVwYWludENvdW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNldExheWVyUmVwYWludENvdW50KGxheWVySUQsIHJlcGFpbnRDb3VudCkpOworICAgICAgICB9
CisgICAgICAgIFNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50
IGNvdW50KQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAgICAgLCByZXBhaW50
Q291bnQoY291bnQpCisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5TZXRMYXllclJlcGFp
bnRDb3VudCgpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5
ZXJJRDsKKyAgICAgICAgaW50IHJlcGFpbnRDb3VudDsKKyAgICB9OworCisgICAgY2xhc3MgU2V0
QmFja2dyb3VuZENvbG9yIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3JUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTZXRCYWNrZ3JvdW5kQ29sb3I+IGNyZWF0ZShjb25zdCBDb2xvciYg
Y29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2V0QmFj
a2dyb3VuZENvbG9yKGNvbG9yKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgU2V0QmFj
a2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgICAgICA6
IGNvbG9yKGJhY2tncm91bmRDb2xvcikKKyAgICAgICAgeyB9CisgICAgICAgIHZpcnR1YWwgflNl
dEJhY2tncm91bmRDb2xvcigpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb2xvciBjb2xvcjsK
KyAgICB9OworCisgICAgY2xhc3MgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24gOiBwdWJsaWMgT3Bl
cmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0
aW9uVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGlkQ2hh
bmdlU2Nyb2xsUG9zaXRpb24+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaWRDaGFuZ2VTY3JvbGxQ
b3NpdGlvbihwb3NpdGlvbikpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0IERpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQorICAgICAg
ICAgICAgOiBwb3NpdGlvbihzY3JvbGxQb3NpdGlvbikKKyAgICAgICAgeyB9CisgICAgICAgIHZp
cnR1YWwgfkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAg
IEZsb2F0UG9pbnQgcG9zaXRpb247CisgICAgfTsKKworICAgIGNsYXNzIFF1ZXVlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbihQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlv
bkJhc2U+KSA9IDA7CisgICAgfTsKKworfTsgLy8gY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYKKworI2VuZGlmIC8vIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25faAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4
MDYxYzRkM2VmNTU0NmE5YjI3ZDYyYjFlMDcxMWZmMjNlMDg1OWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnNfaAorI2RlZmlu
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uc19oCisKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgiCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2U+IG9wZXJhdGlvbikgeyBtX29wZXJhdGlvbnMuYXBw
ZW5kKG9wZXJhdGlvbik7IH0KKyAgICB2b2lkIGNsZWFyKCkgeyBtX29wZXJhdGlvbnMuY2xlYXIo
KTsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpb25zLmlz
RW1wdHkoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpb25z
LnNpemUoKTsgfQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJh
c2UqIGF0KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8
IG1fb3BlcmF0aW9ucy5zaXplKCkpOworICAgICAgICByZXR1cm4gbV9vcGVyYXRpb25zLmF0KGlu
ZGV4KS5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFJlZlB0cjxDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25CYXNlPiA+IG1fb3BlcmF0aW9uczsKK307
CisKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnNf
aAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
U2NlbmUuY3BwCmluZGV4IGQyMTVmYjM2MTNiOTA3YjZiMWQ5ZjVlODkxMTlkYmIyNjQ0ZjQ1OTQu
LmQ3ZGIyMzU4ZGRlYmQzNDczNWQ5ZjZmOGEzZGEyZWUxNWUyOTQ3NGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCkBAIC0y
NSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgiCiAKICNp
bmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckJhY2tpbmdTdG9yZS5oIgpAQCAtMjE1LDcgKzIxNiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCkKIAogdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uKQogewotICAgIG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3Np
dGlvbiA9IHBvc2l0aW9uOworICAgIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0g
cG9zaXRpb247CiB9CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKQEAgLTU1NCw5ICs1NTUs
MTAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFBlbmRpbmdCYWNraW5n
U3RvcmVPcGVyYXRpb25zKCkKICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMu
Y2xlYXIoKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZsdXNoTGF5ZXJD
aGFuZ2VzKCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9ucyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYg
b3BlcmF0aW9ucykKIHsKLSAgICBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IG1f
cGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG9wZXJhdGlvbnMuc2l6ZSgpOyBpKyspCisgICAgICAgIG9wZXJhdGlvbnMuYXQo
aSktPmV4ZWN1dGUodGhpcyk7CiAKICAgICAvLyBTaW5jZSB0aGUgZnJhbWUgaGFzIG5vdyBiZWVu
IHJlbmRlcmVkLCB3ZSBjYW4gc2FmZWx5IHVubG9jayB0aGUgYW5pbWF0aW9ucyB1bnRpbCB0aGUg
bmV4dCBsYXlvdXQuCiAgICAgc2V0QW5pbWF0aW9uc0xvY2tlZChmYWxzZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKaW5kZXggY2Zh
YjE2NjJkMWFjNWM0MjNmZDUwMTBiMDFjZDdlNDA2MzY5MzM4My4uZjA0YTkzZmQ0ZjNiYWUwOThh
MjI4NGQ0YzM4YmY0NzVhZmIzODUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmVfaAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKICNpbmNsdWRlICJD
b29yZGluYXRlZExheWVySW5mby5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtNDIsNiArNDMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOwogY2xhc3MgQ29vcmRp
bmF0ZWRMYXllckluZm87CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczsKIGNs
YXNzIEN1c3RvbUZpbHRlclByb2dyYW07CiBjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbzsK
IGNsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKQEAgLTgyLDEzICs4NCw2IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwogICAgIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGRp
ZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKTsKLSNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExh
eWVySUQsIGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4pOwotICAg
IHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVy
KTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSNlbmRpZgot
ICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklELCBpbnQgdmFs
dWUpOwogCiAgICAgdm9pZCBkZXRhY2goKTsKICAgICB2b2lkIGFwcGVuZFVwZGF0ZShjb25zdCBG
dW5jdGlvbjx2b2lkKCk+Jik7CkBAIC05OCwzOCArOTMsNDYgQEAgcHVibGljOgogICAgIHZvaWQg
cHVyZ2VHTFJlc291cmNlcygpOwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOwogCisgICAgdm9p
ZCBjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9ucyYpOworICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsK
KworICAgIC8vIEJlZ2luIG9wZXJhdGlvbiBleGVjdXRpb25zLgogICAgIHZvaWQgY3JlYXRlTGF5
ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7CiAgICAgdm9pZCBkZWxldGVM
YXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKICAgICB2b2lkIHNldFJv
b3RMYXllcklEKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAgdm9pZCBzZXRMYXllckNoaWxkcmVu
KENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsK
ICAgICB2b2lkIHNldExheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGlu
YXRlZExheWVySW5mbyYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldExh
eWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsK
LSNlbmRpZgotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICB2b2lkIGluamVjdENhY2hlZEN1
c3RvbUZpbHRlclByb2dyYW1zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0
OwotICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvJik7Ci0gICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
KGludCBpZCk7Ci0jZW5kaWYKLQorICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7CiAgICAgdm9pZCBj
cmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBmbG9hdCBzY2Fs
ZSk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlEKTsKICAgICB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0
aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0
ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKICAgICB2
b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1c2hM
YXllckNoYW5nZXMoKTsKICAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKICAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOwogICAgIHZvaWQg
Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAg
ICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAg
ICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zJik7Ci0gICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wp
OwotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBz
ZXREcmF3c0JhY2tncm91bmQoYm9vbCBlbmFibGUpIHsgbV9zZXREcmF3c0JhY2tncm91bmQgPSBl
bmFibGU7IH0KLQogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2b2lk
IHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOwogI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCisgICAgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBJbnRT
aXplJiwgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KTsKKyAgICB2b2lkIHN5bmNDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7CisgICAgdm9pZCBkZXN0
cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCisgICAgdm9pZCBzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisg
ICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgQ3VzdG9tRmls
dGVyUHJvZ3JhbUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50
IGlkKTsKKyNlbmRpZgorICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRM
YXllcklELCBpbnQgdmFsdWUpOworICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENv
bG9yJik7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50
JiBwb3NpdGlvbik7CisgICAgLy8gRW5kIG9wZXJhdGlvbiBleGVjdXRpb25zLgorCisgICAgdm9p
ZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCBlbmFibGUpIHsgbV9zZXREcmF3c0JhY2tncm91bmQg
PSBlbmFibGU7IH0KIAogcHJpdmF0ZToKICAgICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoQ29v
cmRpbmF0ZWRMYXllcklEIGlkKQpAQCAtMTcwLDYgKzE3MywxMCBAQCBwcml2YXRlOgogICAgIHZv
aWQgcmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoR3JhcGhpY3NMYXllciopOwogICAgIHZvaWQg
cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUoR3JhcGhpY3NMYXllciopOwogCisjaWYg
RU5BQkxFKENTU19TSEFERVJTKQorICAgIHZvaWQgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJv
Z3JhbXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgY29uc3Q7CisjZW5kaWYKKwog
ICAgIEZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKICAgICBGbG9hdFJlY3QgbV92aXNpYmxlQ29u
dGVudHNSZWN0OwogCkBAIC0yMDgsNyArMjE1LDYgQEAgcHJpdmF0ZToKICAgICBMYXllclJhd1B0
ck1hcCBtX2ZpeGVkTGF5ZXJzOwogICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtX3Jvb3RMYXllcklE
OwogICAgIEZsb2F0UG9pbnQgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247Ci0gICAg
RmxvYXRQb2ludCBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247CiAgICAg
Ym9vbCBtX2FuaW1hdGlvbnNMb2NrZWQ7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQogICAgIGJvb2wgbV9hbmltYXRpb25GcmFtZVJlcXVlc3RlZDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEltYWdlQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCmluZGV4IDEyOGJh
YmUyOThmNjZjYmMyNzY5Y2Y2ZmY4ZWE5ODIyOWQ1MTU1NzcuLjhiNGYyNDU1ZDM2ZGE1MWYzZDA4
MDYxODVlMzhkOGYzM2RmM2M0MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5o
IgogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMyArMzks
MTMgQEAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6
Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCgKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lEPihpbWFnZSk7CiB9CiAKLVBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc+IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUoQ29v
cmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCitQYXNzUmVmUHRyPENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiBxdWV1ZSwgUGFzc1JlZlB0cjxJbWFn
ZT4gaW1hZ2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZEltYWdlQmFj
a2luZyhjbGllbnQsIGltYWdlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRl
ZEltYWdlQmFja2luZyhxdWV1ZSwgaW1hZ2UpKTsKIH0KIAotQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9yKiBjbGllbnQsIFBhc3NSZWZQ
dHI8SW1hZ2U+IGltYWdlKQotICAgIDogbV9jb29yZGluYXRvcihjbGllbnQpCitDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UXVldWUqIHF1ZXVlLCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKKyAgICA6
IG1fb3BlcmF0aW9uUXVldWUocXVldWUpCiAgICAgLCBtX2ltYWdlKGltYWdlKQogICAgICwgbV9p
ZChnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKG1faW1hZ2UuZ2V0KCkpKQogICAgICwgbV9j
bGVhckNvbnRlbnRzVGltZXIodGhpcywgJkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNv
bnRlbnRzVGltZXJGaXJlZCkKQEAgLTU0LDcgKzU1LDcgQEAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9yKiBjbGllbnQsIFBhc3NSZWZQ
dHIKICAgICAvLyBGSVhNRTogV2Ugd291bGQgbmVlZCB0byBkZWNvZGUgYSBzbWFsbCBpbWFnZSBk
aXJlY3RseSBpbnRvIGEgR3JhcGhpY3NTdXJmYWNlLgogICAgIC8vIGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTAxNDI2CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJhY2tpbmcoaWQoKSk7
CisgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nOjpjcmVh
dGUoaWQoKSkpOwogfQogCiBDb29yZGluYXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nKCkKQEAgLTc0LDcgKzc1LDcgQEAgdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6cmVtb3ZlSG9zdChIb3N0KiBob3N0KQogICAgIG1faG9zdHMucmVtb3ZlKHBvc2l0aW9uKTsK
IAogICAgIGlmIChtX2hvc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+cmVt
b3ZlSW1hZ2VCYWNraW5nKGlkKCkpOworICAgICAgICBtX29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVl
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpSZW1vdmVJbWFnZUJhY2tpbmc6OmNyZWF0ZShpZCgpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc6Om1hcmtEaXJ0eSgpCkBAIC0xMTMsOSArMTE0LDggQEAgdm9pZCBDb29y
ZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlKCkKIAogICAgIG1fbmF0aXZlSW1hZ2VQdHIgPSBt
X2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogCi0gICAgLy8gSWYgc2VuZGlu
ZyB0aGUgbWVzc2FnZSBmYWlscywgdHJ5IGFnYWluIGluIHRoZSBuZXh0IHVwZGF0ZS4KLSAgICBi
b29sIHN1Y2Nlc3MgPSBtX2Nvb3JkaW5hdG9yLT51cGRhdGVJbWFnZUJhY2tpbmcoaWQoKSwgbV9z
dXJmYWNlKTsKLSAgICBtX2lzRGlydHkgPSAhc3VjY2VzczsKKyAgICBtX29wZXJhdGlvblF1ZXVl
LT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmc6OmNyZWF0ZShpZCgpLCBtX3N1cmZhY2UpKTsK
KyAgICBtX2lzRGlydHkgPSBmYWxzZTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6cmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBDb29y
ZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlVmlzaWJpbGl0eUlmTmVlZGVkKGJvb2wmIGNoYW5n
ZWRUb1Zpc2libGUpCiAKIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNsZWFyQ29udGVu
dHNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiopCiB7Ci0gICAgbV9j
b29yZGluYXRvci0+Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpZCgpKTsKKyAgICBtX29wZXJh
dGlvblF1ZXVlLT5lbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzOjpjcmVhdGUoaWQo
KSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCmluZGV4IDViNWI1N2E2ZWNiMTAxZWY3
NWIyOTE5MWI1NzUwN2JlZGRhMmY3NjUuLjhiZjRkYjY1NzkxYmRiNWViMGIwZTRlZTNiMDU0NjQ5
Mjg4MTVkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZElt
YWdlQmFja2luZy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nX2gKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllcklu
Zm8uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJJbWFnZS5o
IgpAQCAtMzksMjAgKzQwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcgOiBwdWJsaWMgUmVmQ291bnRlZDxDb29yZGluYXRlZEltYWdlQmFj
a2luZz4gewogcHVibGljOgotICAgIGNsYXNzIENvb3JkaW5hdG9yIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikg
PSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwotICAgIH07Ci0KICAg
ICBjbGFzcyBIb3N0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpbWFnZUJh
Y2tpbmdWaXNpYmxlKCkgPSAwOwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdG9yKiwgUGFzc1JlZlB0cjxJbWFn
ZT4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVh
dGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqLCBQYXNzUmVmUHRyPEltYWdl
Pik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoKTsKIAogICAgIHN0YXRp
YyBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQo
SW1hZ2UqKTsKQEAgLTY4LDEzICs2MSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGUoKTsK
IAogcHJpdmF0ZToKLSAgICBDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciosIFBh
c3NSZWZQdHI8SW1hZ2U+KTsKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSosIFBhc3NSZWZQdHI8SW1hZ2U+KTsKIAogICAgIHZv
aWQgcmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgpOwogICAgIHZvaWQgdXBkYXRlVmlzaWJpbGl0eUlm
TmVlZGVkKGJvb2wmIGNoYW5nZWRUb1Zpc2libGUpOwogICAgIHZvaWQgY2xlYXJDb250ZW50c1Rp
bWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+Kik7CiAKLSAgICBDb29yZGlu
YXRvciogbV9jb29yZGluYXRvcjsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpR
dWV1ZSogbV9vcGVyYXRpb25RdWV1ZTsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAg
TmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZVB0cjsKICAgICBDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIG1faWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5o
CmluZGV4IDZhYjM4NGExMWVhYTVlYTI1NDA4MTNjNzAyNWU1ZmM4YzE3ZDM5MTAuLmVhOGIyNWZl
ZjZlOTc3MjkyZjBlMzg4ZDQ4NjQyZmEyMjliNTA5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5m
by5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oCkBAIC0yMywxMyArMjMsMTAgQEAKICNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU3VyZmFjZVVw
ZGF0ZUluZm8gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1cmZhY2VVcGRhdGVJbmZvKTsK
LQogcHVibGljOgogICAgIFN1cmZhY2VVcGRhdGVJbmZvKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVB
dGxhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvVXBkYXRlQXRsYXMuY3BwCmluZGV4IDM2NGYwNjg3MTA4MmI1OGZjYmQ4M2EwZWYzMTQ1
MGJlNDgwMDg0OGIuLjdmY2FiZjY5NmRmMThhOGRhNWQ5NDliZjQ3YjcwMDNkYTE0MzljNTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9VcGRhdGVBdGxhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcApAQCAtMjMsMTQgKzIzLDE1IEBA
CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50
KiBjbGllbnQsIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3Mp
Ci0gICAgOiBtX2NsaWVudChjbGllbnQpCitVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqIHF1ZXVlLCBpbnQgZGltZW5zaW9uLCBDb29y
ZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQorICAgIDogbV9vcGVyYXRpb25RdWV1ZShxdWV1
ZSkKICAgICAsIG1faW5hY3Rpdml0eUluU2Vjb25kcygwKQogewogICAgIHN0YXRpYyB1aW50MzJf
dCBuZXh0SUQgPSAwOwpAQCAtMzgsMTUgKzM5LDEyIEBAIFVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxh
cyhVcGRhdGVBdGxhc0NsaWVudCogY2xpZW50LCBpbnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1
CiAgICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2VyT2ZUd28oSW50U2l6ZShkaW1lbnNpb24sIGRp
bWVuc2lvbikpOwogICAgIG1fc3VyZmFjZSA9IENvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKHNp
emUsIGZsYWdzKTsKIAotICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIGlmIHNlbmRpbmcgdGhlIG1l
c3NhZ2UgZmFpbHMsIFVwZGF0ZUF0bGFzIGdpdmVzIHVwIGRyYXdpbmcgYW55dGhpbmcgaW1wbGlj
aXRseS4KLSAgICBpZiAoIW1fY2xpZW50LT5jcmVhdGVVcGRhdGVBdGxhcyhtX0lELCBtX3N1cmZh
Y2UpKQotICAgICAgICBtX3N1cmZhY2UuY2xlYXIoKTsKKyAgICBtX29wZXJhdGlvblF1ZXVlLT5l
bnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKG1fSUQsIG1fc3VyZmFjZSkpOwogfQog
CiBVcGRhdGVBdGxhczo6flVwZGF0ZUF0bGFzKCkKIHsKLSAgICBpZiAobV9zdXJmYWNlKQotICAg
ICAgICBtX2NsaWVudC0+cmVtb3ZlVXBkYXRlQXRsYXMobV9JRCk7CisgICAgbV9vcGVyYXRpb25R
dWV1ZS0+ZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OmNyZWF0ZShtX0lEKSk7CiB9CiAKIHZv
aWQgVXBkYXRlQXRsYXM6OmJ1aWxkTGF5b3V0SWZOZWVkZWQoKQpAQCAtNzIsOSArNzAsNiBAQCBQ
YXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gVXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2
YWlsYWJsZUJ1ZmZlcih1aW50MzJfdAogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PigpOwogCi0gICAgaWYgKCFtX3N1cmZh
Y2UpCi0gICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKLQogICAg
IGF0bGFzSUQgPSBtX0lEOwogCiAgICAgLy8gRklYTUU6IFVzZSB0cmktc3RhdGUgYnVmZmVycywg
dG8gYWxsb3cgZmFzdGVyIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5o
CmluZGV4IDQ4YTZiZjg0NGE0OTBmN2ZkMmMzOWEwNDI0ZTMzMGZkZGIxNmQ3OGIuLjE2MzEzOGYx
N2MyNTY0MDczZDliNTY4NmIwYTQzODgyOWFjZjRkMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9V
cGRhdGVBdGxhcy5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIFVwZGF0ZUF0bGFzX2gKIAog
I2luY2x1ZGUgIkFyZWFBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgogCkBAIC0zMSwxNiArMzIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW50UG9pbnQ7CiAKLWNsYXNzIFVwZGF0ZUF0bGFz
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpID0gMDsKLX07
Ci0KIGNsYXNzIFVwZGF0ZUF0bGFzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGVB
dGxhcyk7CiBwdWJsaWM6Ci0gICAgVXBkYXRlQXRsYXMoVXBkYXRlQXRsYXNDbGllbnQqLCBpbnQg
ZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzKTsKKyAgICBVcGRhdGVBdGxhcyhD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSosIGludCBkaW1lbnNpb24sIENvb3Jk
aW5hdGVkU3VyZmFjZTo6RmxhZ3MpOwogICAgIH5VcGRhdGVBdGxhcygpOwogCiAgICAgaW5saW5l
IEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgpOyB9CkBAIC02
Niw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBidWlsZExheW91dElmTmVlZGVkKCk7CiAK
IHByaXZhdGU6Ci0gICAgVXBkYXRlQXRsYXNDbGllbnQqIG1fY2xpZW50OworICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiBtX29wZXJhdGlvblF1ZXVlOwogICAgIE93blB0
cjxHZW5lcmFsQXJlYUFsbG9jYXRvcj4gbV9hcmVhQWxsb2NhdG9yOwogICAgIFJlZlB0cjxDb29y
ZGluYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKICAgICBkb3VibGUgbV9pbmFjdGl2aXR5SW5TZWNv
bmRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENv
ZGVycy5jcHAKaW5kZXggNWEwNmQxMTY4YzIyNzYwMmNhMjBjMWJjMjgwZDE3Njk3MjZhMDU4OC4u
OWFiNmMyMGFmYmZhNTA3YTBlMTBiMWZlMjk2NzcxODUwMzg1NzliYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0FyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0yOSw5
ICsyOSwxMSBAQAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5o
IgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIldlYkNvb3JkaW5h
dGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFBvaW50M0QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4K
QEAgLTczLDkgKzc1LDcgQEAKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLSNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotI2VuZGlmCiAK
IG5hbWVzcGFjZSBDb3JlSVBDIHsKIApAQCAtODM1LDYgKzgzNSwzODQgQEAgYm9vbCBBcmd1bWVu
dENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgU3VyZmFjZVUKICAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRl
SW5mbz46OmRlY29kZShkZWNvZGVyLCBzdXJmYWNlVXBkYXRlSW5mbyk7CiB9CiAKK3ZvaWQgQXJn
dW1lbnRDb2RlcjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucz46OmVuY29kZShBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiBv
cGVyYXRpb25zKQoreworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG9wZXJh
dGlvbnMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
T3BlcmF0aW9uQmFzZSogb3BlcmF0aW9uID0gb3BlcmF0aW9ucy5hdChpKTsKKyAgICAgICAgZW5j
b2Rlci5lbmNvZGVFbnVtKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsKKworICAgICAg
ICBzd2l0Y2ggKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzVHlwZToKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6Q3JlYXRlTGF5ZXJzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHM7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVM
YXllcnNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnMqPihvcGVyYXRpb24pLT5sYXll
cklEczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlNldFJvb3RMYXllclR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXll
cio+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlwZToKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlNldExheWVyU3RhdGUqPihvcGVyYXRpb24pLT5sYXllckluZm87CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXll
ckNoaWxkcmVuVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbio+KG9wZXJhdGlv
biktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW4qPihvcGVyYXRpb24p
LT5jaGlsZHJlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGVUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVU
aWxlKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9w
ZXJhdGlvbiktPnRpbGVJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbikt
PnRpbGVSZWN0OworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlKj4ob3BlcmF0aW9uKS0+dXBkYXRl
SW5mbzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlVwZGF0ZVRpbGVUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlKj4o
b3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJhdGlv
biktPnRpbGVJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJhdGlvbiktPnRpbGVS
ZWN0OworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlKj4ob3BlcmF0aW9uKS0+dXBkYXRlSW5mbzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlbW92ZVRpbGVUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlKj4ob3BlcmF0
aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZSo+KG9wZXJhdGlvbiktPnRp
bGVJRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzVHlwZTogeworICAgICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVVcGRhdGVBdGxhcyo+KG9wZXJhdGlvbiktPmF0bGFzSUQ7CisgICAgICAgICAgICBXZWJDb29y
ZGluYXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNv
b3JkaW5hdGVkU3VyZmFjZSo+KHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzKj4ob3BlcmF0aW9uKS0+c3VyZmFjZS5nZXQoKSk7
CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7CisgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkZWFsIHdpdGggdGhlIGNhc2UgdGhhdCBoYW5k
bGUgY3JlYXRpb24gaXMgZmFpbGVkLgorICAgICAgICAgICAgd2ViQ29vcmRpbmF0ZWRTdXJmYWNl
LT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgaGFuZGxlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhc1R5cGU6CisgICAgICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZVVwZGF0ZUF0bGFzKj4ob3BlcmF0aW9uKS0+YXRsYXNJRDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdl
QmFja2luZ1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZyo+KG9wZXJhdGlv
biktPmltYWdlQmFja2luZ0lEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nVHlwZTogeworICAg
ICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJ
RDsKKyAgICAgICAgICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZSogd2ViQ29vcmRpbmF0ZWRTdXJm
YWNlID0gc3RhdGljX2Nhc3Q8V2ViQ29vcmRpbmF0ZWRTdXJmYWNlKj4oc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nKj4ob3Bl
cmF0aW9uKS0+c3VyZmFjZS5nZXQoKSk7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZh
Y2U6OkhhbmRsZSBoYW5kbGU7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkZWFs
IHdpdGggdGhlIGNhc2UgdGhhdCBoYW5kbGUgY3JlYXRpb24gaXMgZmFpbGVkLgorICAgICAgICAg
ICAgd2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgaGFuZGxlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2lu
Z0NvbnRlbnRzVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyo+
KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nVHlw
ZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VC
YWNraW5nSUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnNUeXBlOgorICAgICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllckFuaW1hdGlvbnMqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllckFuaW1hdGlvbnMqPihvcGVyYXRpb24pLT5hbmltYXRpb25zOworICAgICAgICAgICAg
YnJlYWs7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICAgICBjYXNl
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZVR5cGU6
CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQor
ICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhc1R5
cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhcyo+KG9wZXJhdGlvbiktPmxheWVySUQ7Cisg
ICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhcyo+KG9wZXJhdGlvbiktPmNhbnZhc1NpemU7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZUNhbnZhcyo+KG9wZXJhdGlvbiktPnRva2VuOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0Nh
bnZhc1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXMqPihvcGVyYXRpb24pLT5sYXllcklE
OworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzKj4ob3BlcmF0aW9uKS0+ZnJvbnRCdWZmZXI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpEZXN0cm95Q2FudmFzVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhcyo+KG9w
ZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRMYXllckZpbHRlcnNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnMqPihv
cGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnMqPihvcGVy
YXRpb24pLT5maWx0ZXJzOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3Rv
bUZpbHRlclByb2dyYW0qPihvcGVyYXRpb24pLT5jdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0qPihvcGVyYXRpb24pLT5wcm9ncmFt
SW5mbzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlOgorICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKj4ob3BlcmF0aW9uKS0+Y3VzdG9tRmlsdGVyUHJv
Z3JhbUlEOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3VudFR5cGU6CisgICAgICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyUmVwYWludENvdW50Kj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQqPihvcGVyYXRpb24pLT5yZXBhaW50Q291bnQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3JUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3Jv
dW5kQ29sb3IqPihvcGVyYXRpb24pLT5jb2xvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0
aW9uVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24qPihvcGVyYXRp
b24pLT5wb3NpdGlvbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KK30KKworYm9vbCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25zPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCit7CisgICAgdW5zaWduZWQgb3BlcmF0aW9u
c1NpemU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShvcGVyYXRpb25zU2l6ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmF0aW9uc1Np
emU7ICsraSkgeworICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIHR5cGU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHR5cGUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVyc1R5cGU6IHsK
KyAgICAgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGlkczsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaWRzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZShpZHMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRl
TGF5ZXJzVHlwZTogeworICAgICAgICAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gaWRz
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpZHMpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6Y3JlYXRlKGlkcykpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRSb290TGF5ZXJUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGF5ZXJJRCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBl
bmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyOjpjcmVhdGUobGF5
ZXJJRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlwZTogeworICAgICAgICAg
ICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIENvb3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVySW5mbzsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUobGF5ZXJJbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRMYXllclN0YXRlOjpjcmVhdGUobGF5ZXJJRCwgbGF5ZXJJbmZvKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyQ2hpbGRyZW5UeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExh
eWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGF5ZXJJRCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4gY2hpbGRyZW47CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGNoaWxkcmVuKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBv
cGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNo
aWxkcmVuOjpjcmVhdGUobGF5ZXJJRCwgY2hpbGRyZW4pKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlVGlsZVR5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOwor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB1aW50MzJfdCB0aWxlSUQ7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbGVJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUodGlsZVJlY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87CisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHVwZGF0ZUluZm8pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZVRpbGU6OmNyZWF0ZShsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRh
dGVJbmZvKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGVUeXBlOiB7CisgICAgICAgICAg
ICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0aWxl
SUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEludFJlY3Qg
dGlsZVJlY3Q7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbGVSZWN0KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTdXJmYWNlVXBkYXRlSW5m
byB1cGRhdGVJbmZvOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh1cGRhdGVJbmZv
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25z
LmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlOjpjcmVhdGUo
bGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpSZW1vdmVUaWxlVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVy
SUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGlsZUlEKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpjcmVhdGUobGF5ZXJJRCwgdGlsZUlEKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzVHlwZTogeworICAgICAgICAgICAgdWludDMy
X3QgYXRsYXNJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXRsYXNJRCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSho
YW5kbGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0
bGFzOjpjcmVhdGUoYXRsYXNJRCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxl
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhc1R5cGU6IHsKKyAgICAgICAg
ICAgIHVpbnQzMl90IGF0bGFzSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGF0
bGFzSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0
bGFzOjpjcmVhdGUoYXRsYXNJRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tp
bmdUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpZCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCBpZDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaWQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdlYkNvb3JkaW5hdGVk
U3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
aGFuZGxlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVy
YXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJh
Y2tpbmc6OmNyZWF0ZShpZCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzVHlwZTogeworICAg
ICAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZDsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHM6OmNyZWF0ZShpZCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVJbWFnZUJhY2tpbmdUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpZCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zVHlwZTogeworICAgICAgICAg
ICAgQ29vcmRpbmF0ZWRMYXllcklEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShpZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgR3JhcGhp
Y3NMYXllckFuaW1hdGlvbnMgYW5pbWF0aW9uczsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoYW5pbWF0aW9ucykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJBbmltYXRpb25zOjpjcmVhdGUoaWQsIGFuaW1hdGlvbnMpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAg
ICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25G
cmFtZVR5cGU6CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6OmNyZWF0ZSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzVHlwZTogeworICAg
ICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIEludFNpemUgY2FudmFzU2l6ZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoY2FudmFzU2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW47CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRva2VuKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVDYW52YXM6OmNyZWF0ZShsYXllcklELCBjYW52YXNTaXplLCB0b2tlbikpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTeW5jQ2FudmFzVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90IGZyb250QnVm
ZmVyOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShmcm9udEJ1ZmZlcikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6Y3JlYXRlKGxheWVySUQs
IGZyb250QnVmZmVyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXNUeXBlOiB7Cisg
ICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6RGVzdHJveUNhbnZhczo6Y3JlYXRlKGxheWVySUQpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgIGNhc2Ug
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzVHlwZTogeworICAg
ICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoZmlsdGVycykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzOjpjcmVhdGUobGF5ZXJJRCwgZmlsdGVycykpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0
b21GaWx0ZXJQcm9ncmFtVHlwZTogeworICAgICAgICAgICAgaW50IGN1c3RvbUZpbHRlclByb2dy
YW1JRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY3VzdG9tRmlsdGVyUHJvZ3Jh
bUlEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXZWJDb3Jl
OjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbzsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocHJvZ3JhbUluZm8pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZShjdXN0b21GaWx0ZXJQcm9n
cmFtSUQsIHByb2dyYW1JbmZvKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRl
clByb2dyYW1UeXBlOiB7CisgICAgICAgICAgICBpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlEOwor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjdXN0b21GaWx0ZXJQcm9ncmFtSUQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW06OmNyZWF0ZShjdXN0b21GaWx0ZXJQcm9ncmFtSUQpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpTZXRMYXllclJlcGFpbnRDb3VudFR5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklE
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBDb29yZGluYXRl
ZExheWVySUQgcmVwYWludENvdW50OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXBhaW50Q291bnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
UmVwYWludENvdW50OjpjcmVhdGUobGF5ZXJJRCwgcmVwYWludENvdW50KSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldEJhY2tncm91bmRDb2xvclR5cGU6IHsKKyAgICAgICAgICAgIENvbG9yIGNvbG9y
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb2xvcikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpjcmVhdGUoY29sb3IpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb25UeXBlOiB7CisgICAgICAg
ICAgICBGbG9hdFBvaW50IHBvc2l0aW9uOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShwb3NpdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
b3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdl
U2Nyb2xsUG9zaXRpb246OmNyZWF0ZShwb3NpdGlvbikpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCiAKICNlbmRpZiAvLyBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVycy5oCmluZGV4IDhlN2RlZWZiM2ZlYTE3Zjk4NWU1ODNlNzMxMDNl
ZjhiYWMyOTUxMWUuLmNhZGM5OWZlMzViZGNlOTZiNDI1MTkyYjgxNzU1MzAwMWNlNzRmMGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5o
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM7CiBjbGFz
cyBGbG9hdFBvaW50M0Q7CiBjbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uOwogY2xhc3MgR3Jh
cGhpY3NMYXllckFuaW1hdGlvbnM7CkBAIC0xMTcsNiArMTE4LDExIEBAIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8+IHsKICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUlu
Zm8mKTsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bnMmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmKTsKK307CisKIH0gLy8gbmFtZXNwYWNlIENv
cmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAppbmRleCA5ODY0
OTNjMzJmZjg0NjI4YTNlMGIwZWJiM2EwNTFiNzQxNTkzNzU4Li45NTVmZGI5MzhhMzM2N2JlMDAw
NDhiZjUzMDQ0NjQ0OGU1Y2UwZjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC0yMywxNiArMjMsMTEgQEAKICNpbmNsdWRl
ICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJv
eHkuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRl
SW5mby5oPgotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotI2luY2x1ZGUgIkN1c3RvbUZpbHRl
clByb2dyYW1JbmZvLmgiCi0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNTksNzggKzU0LDkgQEAgdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3QKICAgICBtX3NjZW5lLT5hcHBlbmRVcGRhdGUoZnVuY3Rpb24pOwogfQogCi12b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVGlsZSwgbV9zY2Vu
ZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKSk7Ci0gICAg
dXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8p
OwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9y
TGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
SW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQot
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBk
YXRlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0aWxlUmVjdCwgdXBk
YXRlSW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotewotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZSwgbV9zY2VuZS5n
ZXQoKSwgbGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdlYkNv
b3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVVcGRhdGVBdGxhcywgbV9zY2Vu
ZS5nZXQoKSwgYXRsYXNJRCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVXBkYXRlQXRsYXMsIG1fc2NlbmUuZ2V0KCksIGF0
bGFzSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRl
Q29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlkcykK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNy
ZWF0ZUxheWVycywgbV9zY2VuZS5nZXQoKSwgaWRzKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxD
b29yZGluYXRlZExheWVySUQ+JiBpZHMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcnMsIG1fc2NlbmUuZ2V0KCksIGlkcykp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9z
aXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRSb290TGF5ZXJJRCwgbV9zY2VuZS5n
ZXQoKSwgaWQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0
Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRp
bmF0ZWRMYXllckluZm8mIGluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRlLCBtX3NjZW5lLmdldCgpLCBpZCwgaW5m
bykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3Np
dGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29v
cmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxkcmVuLCBtX3NjZW5lLmdldCgp
LCBpZCwgY2hpbGRyZW4pKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsK
LSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExh
eWVyRmlsdGVycywgbV9zY2VuZS5nZXQoKSwgaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCi0j
aWYgRU5BQkxFKENTU19TSEFERVJTKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9n
cmFtLCBtX3NjZW5lLmdldCgpLCBpZCkpOwotfQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3RvbUZp
bHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0sIG1f
c2NlbmUuZ2V0KCksIGlkLCBwcm9ncmFtSW5mbykpOwotfQotI2VuZGlmCi0KLXZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IEludFNpemUmIGNv
bnRlbnRzU2l6ZSwgY29uc3QgSW50UmVjdCYgY292ZXJlZFJlY3QpCit2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3Zl
cmVkUmVjdCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3NjZW5lLmdldCgpKSk7CisgICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9ucywgbV9zY2VuZS5nZXQoKSwgb3BlcmF0aW9ucykpOwogICAgIHVwZGF0
ZVZpZXdwb3J0KCk7CiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAgbV9kcmF3aW5n
QXJlYVByb3h5LT5wYWdlKCktPmRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJl
Y3QpOwpAQCAtMTQwLDI0ICs2Niw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwKICNlbmRpZgog
fQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlSW1hZ2VCYWNraW5nLCBt
X3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWdlSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVJ
bWFnZUJhY2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZTo6Y3JlYXRlKGhhbmRsZSkpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzLCBtX3NjZW5lLmdldCgpLCBpbWFnZUlE
KSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQog
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVt
b3ZlSW1hZ2VCYWNraW5nLCBtX3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7CisgICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBbmltYXRpb25zTG9ja2Vk
LCBtX3NjZW5lLmdldCgpLCBsb2NrZWQpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXpl
KQpAQCAtMTY1LDE1ICs3Niw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6CiAgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRDb250ZW50c1NpemUs
IG1fc2NlbmUuZ2V0KCksIGNvbnRlbnRzU2l6ZSkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQW5pbWF0
aW9ucywgbV9zY2VuZS5nZXQoKSwgaWQsIGFuaW1hdGlvbnMpKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNl
dEFuaW1hdGlvbnNMb2NrZWQsIG1fc2NlbmUuZ2V0KCksIGxvY2tlZCkpOwotfQogCiB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsK
QEAgLTE5NCw1NSArOTYsMTYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
cmVuZGVyTmV4dEZyYW1lKCkKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlcXVlc3RBbmltYXRpb25G
cmFtZSgpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIG1fc2NlbmUuZ2V0KCkpKTsKLSAgICB1cGRhdGVW
aWV3cG9ydCgpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojphbmlt
YXRpb25GcmFtZVJlYWR5KCkKIHsKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJv
Y2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkFuaW1hdGlv
bkZyYW1lUmVhZHkoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0K
ICNlbmRpZgogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRDaGFuZ2VT
Y3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKLXsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpZENoYW5nZVNjcm9sbFBv
c2l0aW9uLCBtX3NjZW5lLmdldCgpLCBwb3NpdGlvbikpOwotfQotCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBjb25z
dCBHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4pCi17Ci0gICAgR3JhcGhpY3NTdXJmYWNlOjpG
bGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdl
dCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzLCBtX3NjZW5lLmdl
dCgpLCBpZCwgY2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFzU2l6ZSwg
c3VyZmFjZUZsYWdzLCB0b2tlbikpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250
QnVmZmVyKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6c3luY0NhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGZyb250QnVmZmVyKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lDYW52YXMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6ZGVzdHJveUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQpKTsKLX0KLSNl
bmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllclJlcGFp
bnRDb3VudChDb29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUmVwYWludENv
dW50LCBtX3NjZW5lLmdldCgpLCBpZCwgdmFsdWUpKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBh
Z2UoKS0+cGFnZUlEKCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QmFja2dyb3VuZENvbG9y
LCBtX3NjZW5lLmdldCgpLCBjb2xvcikpOwotfQotCiB9CiAjZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5LmgKaW5kZXggMjRiMzQ3NzBhYzA4M2MzNWE1NTQwMzA0ZTA5MGEwNTI1OGVmNTdh
ZC4uYzM4ODIzNWQwNDA1NDBkYzk5M2QwNjhlYmQ5YmYyYjhkMmEwMzE0OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0yNSwyMyAr
MjUsMTMgQEAKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5Lmgi
Ci0jaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NM
YXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29vcmRpbmF0ZWRMYXllcklu
Zm87CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczsKIGNsYXNzIFN1cmZhY2VV
cGRhdGVJbmZvOwogfQogCkBAIC01Myw0NSArNDMsMTIgQEAgY2xhc3MgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Q2wKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShE
cmF3aW5nQXJlYVByb3h5Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkoKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0g
ICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRpbmF0ZWRM
YXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJz
KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0
aW9ucyYpOwotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIHZvaWQgY3JlYXRl
Q3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRlclBy
b2dyYW1JbmZvJik7Ci0gICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7
Ci0jZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVDb21wb3NpdGlu
Z0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAg
IHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklE
KTsKKyAgICB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKGNvbnN0IFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCk7
CisgICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwogICAgIHZvaWQgc2V0Q29udGVu
dHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
Y292ZXJlZFJlY3QpOwotICAgIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHVwZGF0ZVRpbGVG
b3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7
Ci0gICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3Qg
YXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2b2lk
IHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgY3JlYXRlSW1h
Z2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQg
dXBkYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNv
bnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7Ci0gICAgdm9pZCBjbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAg
IHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpOwogICAgIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKLSAg
ICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IHBvc2l0aW9uKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0ZUNh
bnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
LCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYpOwotICAgIHZvaWQgc3luY0Nh
bnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKTsK
LSAgICB2b2lkIGRlc3Ryb3lDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKLSNl
bmRpZgotICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRM
YXllcklELCBpbnQgdmFsdWUpOwogICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkgY29uc3QgeyByZXR1cm4gbV9zY2VuZS5nZXQo
KTsgfQotICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKLSAgICB2b2lk
IHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQotICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7Ci0jZW5kaWYKLSAgICB2
b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogCiAgICAgLy8g
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50IE1ldGhvZHMuCiAjaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgppbmRleCAyMWRjMjYzNDUwM2Nj
ZGU4NzkwNjJkNzkzMjNjNmJiYWJlNGY3MmVjLi42ZTI3OTIzYmJjMDM4YTFkOGU2NjQzMzFhMzIw
MGFmNWY5YTFjOTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpAQCAtMTksNDQgKzE5LDcgQEAKIAog
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIG1lc3NhZ2VzIC0+IENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5IExlZ2FjeVJlY2VpdmVyIHsKLSAgICBTZXRDb21wb3NpdGluZ0xheWVy
U3RhdGUodWludDMyX3QgaWQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVySW5m
bykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWludDMyX3QgaWQsIFZlY3Rvcjx1
aW50MzJfdD4gY2hpbGRyZW4pCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIFNldENvbXBv
c2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
IGZpbHRlcnMpCi0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgQ3JlYXRlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZv
IHByb2dyYW1JbmZvKQotICAgIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQotI2Vu
ZGlmCi0gICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCi0gICAgQ3JlYXRl
Q29tcG9zaXRpbmdMYXllcnMoVmVjdG9yPHVpbnQzMl90PiBpZHMpCi0gICAgRGVsZXRlQ29tcG9z
aXRpbmdMYXllcnMoVmVjdG9yPHVpbnQzMl90PiBpZHMpCi0gICAgQ3JlYXRlVGlsZUZvckxheWVy
KHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxl
UmVjdCwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBVcGRhdGVU
aWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJ
bnRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQot
ICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQp
Ci0gICAgQ3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgV2ViS2l0OjpXZWJDb29y
ZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGUpCi0gICAgUmVtb3ZlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCkKLSAgICBDcmVhdGVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCkK
LSAgICBVcGRhdGVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCwgV2ViS2l0OjpXZWJDb29y
ZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGUpCi0gICAgQ2xlYXJJbWFnZUJhY2tpbmdDb250
ZW50cyh1aW50NjRfdCBpbWFnZUlEKQotICAgIFJlbW92ZUltYWdlQmFja2luZyh1aW50NjRfdCBp
bWFnZUlEKQotICAgIERpZFJlbmRlckZyYW1lKFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXpl
LCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQotICAgIERpZENoYW5nZVNjcm9sbFBvc2l0
aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zaXRpb24pCi0gICAgU2V0TGF5ZXJBbmltYXRpb25z
KHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRpb25z
KQorICAgIENvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zIG9wZXJhdGlvbnMsIFdlYkNvcmU6OkludFNpemUgY29u
dGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQogICAgIFNldEFuaW1hdGlv
bnNMb2NrZWQoYm9vbCBsb2NrZWQpCi0KLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCi0gICAgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKLSNlbmRpZgotCi0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi0gICAgQ3JlYXRlQ2FudmFzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpJbnRT
aXplIGNhbnZhc1NpemUsIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuKQotICAg
IFN5bmNDYW52YXModWludDMyX3QgaWQsIHVpbnQzMl90IGZyb250QnVmZmVyKQotICAgIERlc3Ry
b3lDYW52YXModWludDMyX3QgaWQpCi0jZW5kaWYKLQotICAgIFNldExheWVyUmVwYWludENvdW50
KHVpbnQzMl90IGxheWVySUQsIGludCB2YWx1ZSkKLQotICAgIFNldEJhY2tncm91bmRDb2xvcihX
ZWJDb3JlOjpDb2xvciBjb2xvcikKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNmU1ZmI1NzIz
MWM5Yjg5NWYyZjA2ZWE0MTUxMzAxNjk4ODEwYTQ1Yy4uMjdkMmUzZDUwYjFlNTI3ZDYwNjg2ZWEz
ODI5MGQ3MWVhMDNiZGQ4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCkBAIC0zOCw5ICszOCw5IEBACiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1
ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZh
Y2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRl
ckxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckJhY2tpbmcuaD4KQEAgLTQ4
LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1NldHRpbmdzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5mby5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KICNpbmNs
dWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCkBA
IC04Niw3ICs4NSw2IEBAIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0KFdlYlBhZ2UqIHdlYlBhZ2UpCiAgICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3Mo
dHJ1ZSkKICAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCiAgICAgLCBtX3Nob3VsZFNlbmRTY3Jv
bGxQb3NpdGlvblVwZGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCiAg
ICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcihmYWxzZSkKICAgICAsIG1f
bGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyRmx1
c2hUaW1lckZpcmVkKQogICAgICwgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIodGhpcywg
JkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmly
ZWQpCkBAIC0yODcsMTQgKzI4NSwxNCBAQCBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKIAogICAgIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJz
KCk7CiAKLSAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUpIHsKKyAgICBpZiAoIW1fb3BlcmF0aW9u
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgZGlkU3luYyA9IHRydWU7CiAKICAgICAgICAgSW50U2l6
ZSBjb250ZW50c1NpemUgPSByb3VuZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXItPnNpemUoKSk7CiAgICAgICAgIEludFJlY3QgY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3ZlclJl
Y3QoKTsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6RGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCkp
OworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpDb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhtX29wZXJhdGlv
bnMsIGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAgICAgICAgbV9vcGVyYXRpb25zLmNs
ZWFyKCk7CiAgICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CiAgICAgfSBlbHNlCiAgICAgICAgIHVubG9ja0FuaW1h
dGlvbnMoKTsKIApAQCAtMzIwLDkgKzMxOCw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVDb21wb3NpdGluZ0xheWVycygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpD
cmVhdGVDb21wb3NpdGluZ0xheWVycyhtX2xheWVyc1RvQ3JlYXRlKSk7CisgICAgZW5xdWV1ZUNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q3JlYXRlTGF5ZXJzOjpjcmVhdGUobV9sYXllcnNUb0NyZWF0ZSkpOwogICAgIG1fbGF5ZXJzVG9D
cmVhdGUuY2xlYXIoKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CiB9CiAKIHZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZWxldGVDb21wb3NpdGluZ0xheWVycygpCkBAIC0z
MzUsOSArMzMyLDggQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbXBv
c2l0aW5nTGF5ZXJzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNvbXBv
c2l0aW5nTGF5ZXJzKG1fbGF5ZXJzVG9EZWxldGUpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXll
cnM6OmNyZWF0ZShtX2xheWVyc1RvRGVsZXRlKSk7CiAgICAgbV9sYXllcnNUb0RlbGV0ZS5jbGVh
cigpOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0KIAogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCkK
QEAgLTM0NSw3MCArMzQxLDEwIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0
aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCiAgICAgaWYgKG1fZGlkSW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRSb290
Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5n
ZXQoKSktPmlkKCkpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OmNyZWF0ZSh0b0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKICAgICBtX2Rp
ZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllciA9IHRydWU7Ci0gICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xh
eWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5m
byYgaW5mbykKLXsKLSAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUpIHsK
LSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0Lmxv
Y2F0aW9uKCkpKTsKLSAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29t
cG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0
IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKLXsKLSAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBjaGls
ZHJlbikpOwotfQotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZv
cm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBjYW52YXNQbGF0Zm9ybUxh
eWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIEludFNpemUgY2FudmFzU2l6ZSA9IGNh
bnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7Ci0gICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ2FudmFz
KGlkLCBjYW52YXNTaXplLCB0b2tlbikpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNh
bnZhc1BsYXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAg
IHVpbnQzMl90IGZyb250QnVmZmVyID0gY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhp
Y3NTdXJmYWNlKCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6U3luY0NhbnZhcyhpZCwgZnJvbnRCdWZmZXIpKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklEIGlkKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlc3Ryb3lDYW52YXMoaWQpKTsKLX0KLSNl
bmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJSZXBhaW50Q291
bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0TGF5ZXJSZXBh
aW50Q291bnQoaWQsIHZhbHVlKSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyRmlsdGVycyhDb29yZGluYXRlZExh
eWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBjaGVja0N1
c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGZpbHRlcnMpOwotI2VuZGlmCi0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9z
aXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCiAjaWYgRU5BQkxF
KENTU19TSEFERVJTKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKIHsK
QEAgLTQzNiw3ICszNzIsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tD
dXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVyYQogCiAgICAgICAgIGlm
ICghY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5jbGllbnQoKSkgewogICAgICAgICAgICAgY3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5zZXRDbGllbnQodGhpcyk7Ci0gICAgICAgICAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVh
dGVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSwgY3Vz
dG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlkYXRlZFByb2dyYW1JbmZvKCkp
KTsKKyAgICAgICAgICAgIGVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0
ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRh
dGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2xpZW50IHdhcyBub3QgZGlzY29ubmVjdGVkIHRoZW4g
dGhpcyBjb29yZGluYXRvciBtdXN0IGJlIHRoZSBjbGllbnQgZm9yIGl0LgogICAgICAgICAgICAg
QVNTRVJUKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkgPT0gdGhpcyk7CkBAIC00
NDksNyArMzg1LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eShXZWJDdXN0b21GaWx0ZXJQcm8KICAgICAvLyBBdCB0aGlzIHRp
bWUgdGhlIHNoYWRlciBpcyBub3QgbmVlZGVkIGFueW1vcmUsIHNvIHdlIHJlbW92ZSBpdCBmcm9t
IG91ciBzZXQgYW5kCiAgICAgLy8gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIG90aGVyIHByb2Nlc3Mg
dG8gZGVsZXRlIGl0LgogICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMucmVtb3ZlKGN1c3RvbUZp
bHRlclByb2dyYW1Qcm94eSk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHktPmlkKCkpKTsKKyAgICBlbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKSk7CiB9CiAK
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJv
Z3JhbXMoKQpAQCAtNjEzLDQwICs1NDksNiBAQCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZwogICAg
IHJldHVybiBpbWFnZUJhY2tpbmc7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQot
ewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVJbWFnZUJhY2tpbmco
aW1hZ2VJRCkpOwotfQotCi1ib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKLXsKLSAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRl
ZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihjb29yZGluYXRl
ZFN1cmZhY2UuZ2V0KCkpOwotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRs
ZTsKLSAgICBpZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCwg
aGFuZGxlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VJRCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q2xlYXJJ
bWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlEKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7Ci0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQogewogICAgIElt
YWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOwpAQCAt
NzA5LDQxICs2MTEsNTUgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVS
ZWN0LCB1cGRhdGVJbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1
cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNv
bnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUlu
Zm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVRpbGUoQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKK3ZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjplbnF1ZXVlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbihQYXNz
UmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2U+IG9wZXJh
dGlvbikKIHsKICAgICBpZiAobV9pc1B1cmdpbmcpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRp
bGVJRCkpOwotfQogCi1ib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVXBkYXRl
QXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNv
b3JkaW5hdGVkU3VyZmFjZSkKLXsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2UqIHdlYkNvb3Jk
aW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFjZSo+KGNvb3Jk
aW5hdGVkU3VyZmFjZS5nZXQoKSk7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUg
aGFuZGxlOwotICAgIGlmICghd2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFu
ZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFz
SUQsIGhhbmRsZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIHdpbGxFbnF1ZXVlQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbihvcGVyYXRpb24uZ2V0KCkpOworICAgIG1fb3BlcmF0aW9ucy5h
cHBlbmQob3BlcmF0aW9uKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJl
bW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6d2lsbEVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2UqIG9wZXJhdGlvbikKIHsKLSAgICBp
ZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVVcGRhdGVBdGxhcyhh
dGxhc0lEKSk7CisgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkgewor
ICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZVR5cGU6
CisgICAgICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSkgeworICAgICAg
ICAgICAgZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb246OmNyZWF0ZShtX3Zpc2libGVD
b250ZW50c1JlY3QubG9jYXRpb24oKSkpOworICAgICAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xs
UG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZ1R5cGU6
CisgICAgICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nKj4ob3Bl
cmF0aW9uKS0+aW1hZ2VCYWNraW5nSUQpKTsKKyAgICAgICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92
ZShzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJ
bWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRp
b25zVHlwZTogeworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMgPSBzdGF0aWNfY2FzdDxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnMqPihvcGVyYXRpb24pLT5hbmlt
YXRpb25zOworICAgICAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25z
ID0gYW5pbWF0aW9ucy5nZXRBY3RpdmVBbmltYXRpb25zKCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRp
b25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKKyAgICAgICAgICAgIGlmIChrZXlm
cmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBr
ZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmlt
YXRpb25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRp
b25WYWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7CisgICAgICAgICAgICAgICAgY2hlY2tDdXN0b21G
aWx0ZXJQcm9ncmFtUHJveGllcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyQW5pbWF0aW9ucyo+KG9wZXJhdGlvbiktPmFuaW1hdGlvbnMgPSBhY3Rp
dmVBbmltYXRpb25zOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIH0KKyNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRM
YXllckZpbHRlcnNUeXBlOgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgY2hlY2tD
dXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhzdGF0aWNfY2FzdDxDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnMqPihvcGVyYXRpb24pLT5maWx0ZXJzKTsKKyNlbmRp
ZgorICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KIH0KIAogV2ViQ29yZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0CkBAIC03NTIsMjQgKzY2OCw2IEBAIFdlYkNvcmU6
OkZsb2F0UmVjdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdAogfQogCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRMYXllckFu
aW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJB
bmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25zID0gYW5pbWF0aW9u
cy5nZXRBY3RpdmVBbmltYXRpb25zKCk7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFu
aW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOwotICAgICAgICBpZiAoa2V5
ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1l
cy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUq
IGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPihr
ZXlmcmFtZXMuYXQoaSkpOwotICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJv
eGllcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6U2V0TGF5ZXJBbmltYXRpb25zKGxheWVySUQsIGFjdGl2ZUFuaW1hdGlvbnMpKTsKLX0KLQog
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQog
ewogICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVjdG9yIGluZGljYXRlcyB0aGF0IHRpbGVzIGFs
bCBhcm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1ZXN0ZWQuCkBAIC04MTIsNyArNzEwLDcgQEAg
R3JhcGhpY3NMYXllckZhY3RvcnkqIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NM
YXllckZhY3RvcnkoKQogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7Ci0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVx
dWVzdEFuaW1hdGlvbkZyYW1lKCkpOworICAgIGVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFt
ZTo6Y3JlYXRlKCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6YW5pbWF0
aW9uRnJhbWVSZWFkeSgpCkBAIC04OTUsNyArNzkzLDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5h
dGUKIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xvcihj
b25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiB7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QmFja2dyb3VuZENvbG9yKGNv
bG9yKSk7CisgICAgZW5xdWV1ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24oQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpjcmVhdGUoY29sb3IpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDcyOTdlZWQ4MWUwNWEyZWUw
ZjAwNWVlYTNkZjgxODg1ZmVjM2YyYjUuLjFhYzc0OTY0YmQyNjRiYTUxMjdjYjg0NTlhMWYwYjA3
OWY5MWJlZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KQEAgLTQ2LDggKzQ3LDcgQEAgY2xhc3MgV2Vi
UGFnZTsKIAogY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IDogcHVibGljIExheWVyVHJl
ZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1YmxpYyBXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpD
b29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IKLSAgICAsIHB1YmxpYyBXZWJDb3Jl
OjpVcGRhdGVBdGxhc0NsaWVudAorICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlF1ZXVlCiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckZhY3RvcnkKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgLCBXZWJDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveHlDbGllbnQKQEAgLTc5LDQwICs3OSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2No
ZWR1bGVMYXllckZsdXNoKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6
OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJD
b3JlOjpJbWFnZSopIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXll
ckNoYW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5n
ZXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8m
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNv
cmU6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVu
dHNSZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAg
IHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50Jik7CisKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1l
c3NhZ2VEZWNvZGVyJik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9y
eSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxk
cmVuKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25z
KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMmKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lk
IHN5bmNMYXllckZpbHRlcnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJD
b3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBzeW5jQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZv
cm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBpbnQp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCk7
Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdp
bkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkNvb3JkaW5h
dGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYp
OwotCi0gICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRl
ZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCk7Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgT1ZFUlJJREU7CiAjZW5kaWYK
QEAgLTEzMSwxNCArMTA1LDIyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvcigpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxl
RmFjdG9yKCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Q29vcmRpbmF0b3IKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9v
bCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VC
YWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotCiAg
ICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CiAKKyAgICAvLyBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xh
eWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hh
bmdlczsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1Jl
Y3QoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6
OkltYWdlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
eW5jRml4ZWRMYXllcnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxh
c0lELCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqIG9wZXJhdGlvblF1ZXVlKCkgeyBy
ZXR1cm4gdGhpczsgfTsKKworICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1
ZXVlCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
KFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0
aW9uQmFzZT4pIE9WRVJSSURFOworCisgICAgdm9pZCB3aWxsRW5xdWV1ZUNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb24oV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3Bl
cmF0aW9uQmFzZSopOworCiAgICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CiAKQEAgLTE4MSw2ICsxNjMs
OCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVs
bCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwogCisgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbnMgbV9vcGVyYXRpb25zOworCiAgICAgSGFzaFNldDxXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgVmVjdG9y
PFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0NyZWF0ZTsKICAgICBWZWN0
b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwpAQCAtMjA0
LDcgKzE4OCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlv
blVwZGF0ZTsKIAogICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAg
IGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7CiAgICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29t
cG9zaXRpbmdMYXllcjsKICAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOwogICAgIFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdD4gbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186318</attachid>
            <date>2013-02-04 01:04:43 -0800</date>
            <delta_ts>2013-02-04 23:18:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108294-20130204180107.patch</filename>
            <type>text/plain</type>
            <size>131053</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDMyZDI0NTBkNDY3MTJm
MjYwMjI5ZDAxYTE4NWZmYmM5YjhkMzZlNi4uNTkyYTliOGNkN2ZmZjAwMjljYWY2M2YyNDdiNDc4
ZWYyMmMwNTk3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMiBAQAorMjAxMy0wMi0wNCAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkgaGFzIHNvIG1hbnkgSVBDIG1lc3NhZ2VzIChlLmcuIFN5bmND
YW52YXMgYW5kCisgICAgICAgIENyZWF0ZVRpbGUpLCBhbmQgdGhlcmUgaXMgYSBsb25nIGZ1bmN0
aW9uIGNoYWluIGZyb20gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIHRvCisgICAgICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSAoNCBjbGFzc2VzKS4KKyAgICAgICAgSWYgd2Ugd2FudCB0byBh
ZGQgYSBuZXcgbWVzc2FnZSwgd2UgbmVlZCB0byBhZGQgc2ltaWxhciBmdW5jdGlvbnMgaW50byA0
IGNsYXNzZXMuCisKKyAgICAgICAgTm93IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBoYXMgb25s
eSBvbmUgSVBDIG1lc3NhZ2U6IENvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLgor
ICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lIHJ1biBhcyBmb2xsb3dzOgorICAgICAgICAxLiBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIgbWFrZXMgYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uIChlLmcuIENyZWF0ZVRpbGUp
LgorICAgICAgICAyLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgc3RvcmVzIGFsbCBvcGVyYXRp
b25zLgorICAgICAgICAzLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgc2VuZHMgYWxsIG9wZXJh
dGlvbnMgdG8gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkKKyAgICAgICAgYXQgdGhlIG1v
bWVudCBvZiBmbHVzaGluZyB2aWEgQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMg
bWVzc2FnZS4KKyAgICAgICAgNC4gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIGV4ZWN1dGVzIGFs
bCBvcGVyYXRpb25zLgorCisgICAgICAgIFRoZXJlIGlzIG9uZSBiaWcgYmVoYXZpb3IgY2hhbmdl
LiBBbGwgb3BlcmF0aW9ucyAoZS5nLiBDcmVhdGVMYXllcnMgYW5kCisgICAgICAgIFN5bmNDYW52
YXMpIGFyZSBwZXJmb3JtZWQgYXQgdGhlIHNhbWUgdGltZSwgd2hlbgorICAgICAgICBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zIGlz
IGNhbGxlZC4KKworICAgICAgICBJZiB5b3Ugd2FudCB0byBhZGQgYSBuZXcgb3BlcmF0aW9uLCBh
ZGQgY29kZSBhcyBmb2xsb3dzOgorICAgICAgICAxLiBDcmVhdGUgYSBuZXcgb3BlcmF0aW9uIHN1
YmNsYXNzIGluIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaAorICAgICAgICAyLiBPdmVy
cmlkZSBPcGVyYXRpb25CYXNlOjpleGVjdXRlKCkgdG8gZXhlY3V0ZSB3aGF0IHRoZSBvcGVyYXRp
b24gc2hvdWxkIGRvLgorICAgICAgICAzLiBJbXBsZW1lbnQgZW5jb2RlL2RlY29kZSBpbiBDb29y
ZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlz
dGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFz
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpj
cmVhdGVDYW52YXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpleGVjdXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxh
eWVyczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRSb290TGF5ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVu
OjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZVRpbGU6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpleGVjdXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0
ZUF0bGFzOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6ZXhlY3V0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRh
dGVJbWFnZUJhY2tpbmc6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6ZXhlY3V0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFn
ZUJhY2tpbmc6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6
ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpDcmVhdGVDYW52YXM6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpleGVjdXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
RmlsdGVyczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpleGVjdXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRl
clByb2dyYW06OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OmV4ZWN1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpl
eGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uOjpleGVjdXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbik6CisgICAgICAgIChPcGVyYXRpb25CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2U6On5PcGVyYXRpb25C
YXNlKToKKyAgICAgICAgKE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb246On5PcGVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uOjpnZXRPcGVyYXRp
b25UeXBlKToKKyAgICAgICAgKENyZWF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OkNy
ZWF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVMYXllcnM6On5DcmVhdGVMYXllcnMpOgorICAgICAgICAoRGVsZXRlTGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0
ZUxheWVyczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkRlbGV0ZUxheWVyczo6RGVsZXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6fkRlbGV0ZUxheWVy
cyk6CisgICAgICAgIChTZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyOjpTZXRSb290
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0Um9vdExheWVyOjp+U2V0Um9vdExheWVyKToKKyAgICAgICAgKFNldExheWVyU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJT
dGF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyU3RhdGU6OlNldExheWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6flNldExheWVyU3Rh
dGUpOgorICAgICAgICAoU2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGls
ZHJlbjo6U2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOjp+U2V0TGF5ZXJDaGlsZHJlbik6Cisg
ICAgICAgIChDcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZVRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlOjpDcmVhdGVUaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGU6On5D
cmVhdGVUaWxlKToKKyAgICAgICAgKFVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OlVwZGF0
ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
VXBkYXRlVGlsZTo6flVwZGF0ZVRpbGUpOgorICAgICAgICAoUmVtb3ZlVGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlVGlsZTo6UmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjp+UmVtb3ZlVGlsZSk6CisgICAgICAgIChDcmVhdGVV
cGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzOjpDcmVhdGVVcGRhdGVB
dGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpD
cmVhdGVVcGRhdGVBdGxhczo6fkNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFJlbW92ZVVw
ZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZVVwZGF0ZUF0bGFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OlJlbW92ZVVwZGF0ZUF0
bGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZVVwZGF0ZUF0bGFzOjp+UmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoQ3JlYXRlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6Q3JlYXRlSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZUltYWdlQmFja2luZzo6fkNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChVcGRh
dGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpVcGRhdGVJ
bWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjp+VXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAg
KENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1h
Z2VCYWNraW5nQ29udGVudHM6OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50czo6fkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAoUmVtb3ZlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZUltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6UmVtb3ZlSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlJlbW92ZUltYWdlQmFja2luZzo6flJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChTZXRM
YXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpTZXRMYXll
ckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjp+U2V0TGF5ZXJBbmltYXRpb25zKToKKyAgICAgICAg
KFJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9u
RnJhbWU6OlJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6On5SZXF1ZXN0QW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAoQ3JlYXRlQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZh
czo6Q3JlYXRlQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZUNhbnZhczo6fkNyZWF0ZUNhbnZhcyk6CisgICAgICAgIChTeW5jQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5
bmNDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpTeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6On5TeW5jQ2FudmFzKToKKyAg
ICAgICAgKERlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OkRlc3Ryb3lDYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVz
dHJveUNhbnZhczo6fkRlc3Ryb3lDYW52YXMpOgorICAgICAgICAoU2V0TGF5ZXJGaWx0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
RmlsdGVyczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldExheWVyRmlsdGVyczo6U2V0TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyczo6flNl
dExheWVyRmlsdGVycyk6CisgICAgICAgIChDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3Rv
bUZpbHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpDcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06On5DcmVhdGVDdXN0b21GaWx0ZXJQcm9n
cmFtKToKKyAgICAgICAgKFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW06OlJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6flJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAg
ICAgICAoU2V0TGF5ZXJSZXBhaW50Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFp
bnRDb3VudDo6U2V0TGF5ZXJSZXBhaW50Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6On5TZXRMYXllclJl
cGFpbnRDb3VudCk6CisgICAgICAgIChTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0QmFja2dyb3VuZENvbG9yOjpTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjp+U2V0
QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNj
cm9sbFBvc2l0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb246OkRpZENoYW5nZVNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uOjp+RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAg
ICAgICAoUXVldWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmlzRW1wdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OnNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmF0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAgICAgUmVtb3ZlIG1fcGVu
ZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiBiZWNhdXNlCisgICAgICAgICAgICBk
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvbigpIGlzIGNhbGxlZCBhdCB0aGUgbW9tZW50IG9mIGZsdXNo
aW5nLgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXREcmF3c0JhY2tncm91bmQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEltYWdlQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6cmVtb3ZlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6dXBkYXRlKToKKyAgICAgICAgICAgIFdlIGRvbid0IGRlYWwgd2l0
aCB0aGUgY2FzZSB3aGVuIHNlbmRpbmcgYW4gVXBkYXRlSW1hZ2VCYWNraW5nIG9wZXJhdGlvbiBm
YWlscy4KKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNv
bnRlbnRzVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg6CisgICAgICAgIChDb29yZGluYXRl
ZEltYWdlQmFja2luZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVw
ZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisgICAgICAgICAgICBXZSBkb24ndCBkZWFsIHdpdGgg
dGhlIGNhc2Ugd2hlbiBzZW5kaW5nIGEgQ3JlYXRlVXBkYXRlQXRsYXMgb3BlcmF0aW9uIGZhaWxz
LgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcyk6CisgICAgICAg
IChXZWJDb3JlOjpVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRs
YXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVXBkYXRlQXRsYXMpOgorCiAyMDEz
LTAyLTAzICBKb2FubWFyaWUgRGlnZ3MgIDxqZGlnZ3NAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXSBNYWtlIGRpc3RjaGVjayBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGY3OGJmYWNkMjUwYzY5YWQ4
Yjc4NjU4MmQ5YTc2NTc4YWQ0MDA3MGIuLjg2N2UyODRhZDMyMjFlN2Y5Y2M1YjNlNWZjZWEyOTc4
YzdiYmNhMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMy0wMi0wNCAgSHVhbmcg
RG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGluYXRl
ZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHR3
byBjaGFuZ2VzIGluIFdLMi4KKyAgICAgICAgMS4gQ2hhbmdlIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5IHRvIHVzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgorICAgICAgICAy
LiBBZGQgZW5jb2RlL2RlY29kZSBvZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uIGluCisg
ICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy4KKworICAgICAgICAqIFNo
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVy
cy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgICAgICBFbmNvZGlu
ZyBVcGRhdGVJbWFnZUJhY2tpbmcgYW5kIENyZWF0ZVVwZGF0ZUF0bGFzIGNhbiBmYWlsIHdoZW4K
KyAgICAgICAgICAgIGVuY29kaW5nIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGZhaWxz
LCBidXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIHJlY292ZXIgaW4gdGhlIGNhc2UuCisgICAgICAg
IChDb3JlSVBDKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRpbmdMYXllcnMpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJz
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXpl
Um9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjplbnF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp3
aWxsRW5xdWV1ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpvcGVyYXRpb25RdWV1
ZSk6CisKIDIwMTMtMDItMDMgIEpvYW5tYXJpZSBEaWdncyAgPGpkaWdnc0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHVEtdIE1ha2UgZGlzdGNoZWNrIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDBkNzJjYTBmZGRiYzdmZWU1MDhhZDk2YTJlMTBjZGNiZmU0ZDQ5MTcuLjdhYzhjNTg4OTAx
NDViM2JhYmUxZjk0MDQ0M2YyOTAwN2U4YjQ0MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0x
OTkzLDYgKzE5OTMsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFj
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCmluZGV4IDkwZWZjNDBmMzc2MmQwZjIyNDg2Mjc0NTIyMzg0MTQ3YjNj
MTRkNjcuLjEyYmY3MzZhY2E1MGQzMTgzYTQxYjEwOWM3YzA1OTI2NTlhMDAyOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtMjI0Niw2ICsyMjQ2LDggQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEN1c3RvbUZpbHRlclByb2dyYW0uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIFwK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbnMuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggXApA
QCAtMjg5MSw2ICsyODkzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkU3VyZmFjZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCAzNzM2ZjI2MDRjMGMxMDQzOTk5NTdiOThhMjUy
NWVlN2RiY2RkOWJiLi5kZjA2ZTE1OTFjZmQ5Nzc0OGEzY2E1NGQzMGQ1NGFhNjBhNDYxNWFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcApAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzeW5jQ2hpbGRyZW4oKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5z
aXplKCk7ICsraSkKICAgICAgICAgY2hpbGRJRHMuYXBwZW5kKHRvQ29vcmRpbmF0ZWRMYXllcklE
KGNoaWxkcmVuKClbaV0pKTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllckNoaWxkcmVu
KG1faWQsIGNoaWxkSURzKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5l
bnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW46OmNy
ZWF0ZShtX2lkLCBjaGlsZElEcykpOwogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAt
NTA5LDcgKzUwOSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVy
cygpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQogICAgICAgICByZXR1cm47CiAgICAg
bV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOwotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXll
ckZpbHRlcnMobV9pZCwgZmlsdGVycygpKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25R
dWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmls
dGVyczo6Y3JlYXRlKG1faWQsIGZpbHRlcnMoKSkpOwogfQogI2VuZGlmCiAKQEAgLTU3MCw3ICs1
NzAsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQog
ICAgICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKICAgICBtX2xheWVySW5mby5zaG93UmVw
YWludENvdW50ZXIgPSBpc1Nob3dpbmdSZXBhaW50Q291bnRlcigpOwogCi0gICAgbV9jb29yZGlu
YXRvci0+c3luY0xheWVyU3RhdGUobV9pZCwgbV9sYXllckluZm8pOworICAgIG1fY29vcmRpbmF0
b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6U2V0TGF5ZXJTdGF0ZTo6Y3JlYXRlKG1faWQsIG1fbGF5ZXJJbmZvKSk7CiB9CiAKIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29s
b3IsIGZsb2F0IHdpZHRoKQpAQCAtNTg3LDcgKzU4Nyw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCiAKICAgICBtX3Nob3VsZFN5bmNBbmltYXRpb25z
ID0gZmFsc2U7CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5zZXRMYXllckFuaW1hdGlvbnMobV9pZCwg
bV9hbmltYXRpb25zKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1
ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczo6Y3Jl
YXRlKG1faWQsIG1fYW5pbWF0aW9ucykpOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CkBAIC02MDQsNyArNjA0LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmND
YW52YXMoKQogICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX2Nvb3JkaW5hdG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7
CisgICAgQVNTRVJUKG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgdWludDMyX3QgZnJvbnRC
dWZmZXIgPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwor
ICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6Y3JlYXRlKG1faWQsIGZyb250QnVmZmVyKSk7
CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZOZWVk
ZWQoKQpAQCAtNjEzLDcgKzYxNSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpk
ZXN0cm95Q2FudmFzSWZOZWVkZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pc1Zh
bGlkQ2FudmFzKSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3ItPmRlc3Ryb3lDYW52YXMobV9pZCk7
CisgICAgICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6Y3JlYXRlKG1faWQpKTsKICAg
ICAgICAgbV9pc1ZhbGlkQ2FudmFzID0gZmFsc2U7CiAgICAgfQogCkBAIC02MjcsNyArNjI5LDkg
QEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUNhbnZhc0lmTmVlZGVkKCkK
IAogICAgIEFTU0VSVChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOwogICAgIGlmICghbV9pc1ZhbGlk
Q2FudmFzKSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZUNhbnZhcyhtX2lkLCBtX2Nh
bnZhc1BsYXRmb3JtTGF5ZXIpOworICAgICAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBtX2NhbnZh
c1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7CisgICAgICAgIEdyYXBoaWNzU3Vy
ZmFjZVRva2VuIHRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VU
b2tlbigpOworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1ZXVl
KENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6Y3JlYXRlKG1faWQs
IGNhbnZhc1NpemUsIHRva2VuKSk7CiAgICAgICAgIG1faXNWYWxpZENhbnZhcyA9IHRydWU7CiAg
ICAgfQogCkBAIC03MzYsNyArNzQwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3Qg
VmVjdG9yPEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCiB7CiAgICAgaWYgKGlzU2hvd2luZ1JlcGFp
bnRDb3VudGVyKCkgJiYgIXVwZGF0ZWRSZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fY29vcmRp
bmF0b3ItPnNldExheWVyUmVwYWludENvdW50KGlkKCksIGluY3JlbWVudFJlcGFpbnRDb3VudCgp
KTsKKyAgICAgICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUoKS0+ZW5xdWV1ZShDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3VudDo6Y3JlYXRlKGlk
KCksIGluY3JlbWVudFJlcGFpbnRDb3VudCgpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUhhc1BlbmRpbmdUaWxlQ3JlYXRpb24oKQpAQCAt
Nzk1LDIxICs3OTksMjEgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRp
bGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW4KIHsKICAgICBBU1NFUlQo
bV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXll
ckNoYW5nZXMoKSk7Ci0gICAgbV9jb29yZGluYXRvci0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQs
IHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1
ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGU6OmNy
ZWF0ZShpZCgpLCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CiB9CiAKIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQog
ewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+
aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT51cGRhdGVUaWxl
KGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3QpOworICAgIG1fY29vcmRpbmF0b3It
Pm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
VXBkYXRlVGlsZTo6Y3JlYXRlKGlkKCksIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsK
IH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUodWludDMyX3Qg
dGlsZUlEKQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29y
ZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIHx8IG1faXNQdXJnaW5nKTsKLSAgICBt
X2Nvb3JkaW5hdG9yLT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7CisgICAgbV9jb29yZGluYXRv
ci0+b3BlcmF0aW9uUXVldWUoKS0+ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpSZW1vdmVUaWxlOjpjcmVhdGUoaWQoKSwgdGlsZUlEKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggYTU1MWQzNTEx
YWRhNjQ0ZWJmNzMyYmVmNjJlODZhZDlkODdmMWEyMC4uNTE0ZjQ2MjlkZjA0NzQ0MzkyYzFlZjgz
MjAwODQ5NDIzZThlODFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAtMjEsNiArMjEsNyBAQAogI2lmbmRlZiBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJfaAogI2RlZmluZSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAog
CisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8u
aCIKICNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKQEAgLTQzLDM3ICs0NCwxNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI7Ci1jbGFz
cyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsKIAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hh
bmdlcygpIGNvbnN0ID0gMDsKLQotICAgIC8vIENvb3JkaW5hdGVkVGlsZUNsaWVudAotICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCkg
PSAwOwotCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNy
ZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJ
bmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JikgPSAwOwotI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSA9IDA7Ci0jZW5kaWYKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENv
b3JkaW5hdGVkTGF5ZXJJRCwgUGxhdGZvcm1MYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFBsYXRmb3JtTGF5ZXIqKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7Ci0jZW5k
aWYKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExh
eWVySUQsIGludCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJikgPSAwOwot
CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciop
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkgPSAwOwogICAgIHZpcnR1
YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJ
bnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIElu
dFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
UXVldWUqIG9wZXJhdGlvblF1ZXVlKCkgPSAwOwogfTsKIAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NGJhMTgzMTQwNzU3NzkxZmM4Mjg1MWIzYzBlY2ZkMWY4YWE3MDJhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uY3BwCkBAIC0wLDAgKzEsMTcxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NT
dXJmYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+Y3JlYXRlTGF5ZXJzKGxheWVySURzKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnM6OmV4ZWN1dGUo
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+ZGVsZXRlTGF5
ZXJzKGxheWVySURzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRSb290TGF5ZXI6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sK
KyAgICBzY2VuZS0+c2V0Um9vdExheWVySUQobGF5ZXJJRCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6ZXhlY3V0ZShDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5zZXRMYXllclN0YXRlKGxheWVySUQs
IGxheWVySW5mbyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJDaGlsZHJlbjo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQor
eworICAgIHNjZW5lLT5zZXRMYXllckNoaWxkcmVuKGxheWVySUQsIGNoaWxkcmVuKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlOjpleGVjdXRlKENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPmNyZWF0ZVRpbGUo
bGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKTsKKyAgICBzY2VuZS0+dXBk
YXRlVGlsZShsYXllcklELCB0aWxlSUQsIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6VGlsZVVw
ZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGVSZWN0LCB1cGRhdGVJbmZvLmF0bGFzSUQs
IHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+dXBkYXRlVGlsZShsYXllcklELCB0aWxlSUQsIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRp
bGVSZWN0LCB1cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGU6OmV4ZWN1
dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+cmVtb3Zl
VGlsZShsYXllcklELCB0aWxlSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZSogc2NlbmUpCit7CisgICAgc2NlbmUtPmNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIHN1cmZh
Y2UpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0
ZUF0bGFzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAg
c2NlbmUtPnJlbW92ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6ZXhlY3V0ZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5jcmVhdGVJbWFnZUJhY2tpbmco
aW1hZ2VCYWNraW5nSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlVwZGF0ZUltYWdlQmFja2luZzo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNj
ZW5lKQoreworICAgIHNjZW5lLT51cGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VCYWNraW5nSUQsIHN1
cmZhY2UpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1h
Z2VCYWNraW5nQ29udGVudHM6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2Vu
ZSkKK3sKKyAgICBzY2VuZS0+Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUJhY2tpbmdJ
RCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VC
YWNraW5nOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAg
c2NlbmUtPnJlbW92ZUltYWdlQmFja2luZyhpbWFnZUJhY2tpbmdJRCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpleGVjdXRlKENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnNldExheWVyQW5p
bWF0aW9ucyhsYXllcklELCBhbmltYXRpb25zKTsKK30KKworI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVz
dEFuaW1hdGlvbkZyYW1lOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUp
Cit7CisgICAgc2NlbmUtPnJlcXVlc3RBbmltYXRpb25GcmFtZSgpOworfQorI2VuZGlmCisKKyNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6Q3JlYXRlQ2FudmFzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUp
Cit7CisgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1
cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNT
aGFyaW5nOworICAgIHNjZW5lLT5jcmVhdGVDYW52YXMobGF5ZXJJRCwgY2FudmFzU2l6ZSwgR3Jh
cGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFzU2l6ZSwgc3VyZmFjZUZsYWdzLCB0b2tlbikpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6OmV4ZWN1
dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+c3luY0Nh
bnZhcyhsYXllcklELCBmcm9udEJ1ZmZlcik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5kZXN0cm95Q2FudmFzKGxheWVySUQpOworfQorI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldExheWVyRmlsdGVyczo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5zZXRMYXllckZpbHRlcnMobGF5ZXJJRCwgZmlsdGVy
cyk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6ZXhlY3V0ZShD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5jcmVhdGVDdXN0
b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1JRCwgcHJvZ3JhbUluZm8pOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclBy
b2dyYW06OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBz
Y2VuZS0+cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtSUQpOwor
fQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJS
ZXBhaW50Q291bnQ6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sK
KyAgICBzY2VuZS0+c2V0TGF5ZXJSZXBhaW50Q291bnQobGF5ZXJJRCwgcmVwYWludENvdW50KTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29s
b3I6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2Vu
ZS0+c2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbjo6ZXhlY3V0ZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5kaWRDaGFuZ2VTY3JvbGxQb3Np
dGlvbihwb3NpdGlvbik7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE5
ZjlmMzk2OWQwYWNjMGZiNDYzN2RlOGI1NWFkOGMzNzZhYzE2YQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgKQEAgLTAsMCArMSw1MjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKyNkZWZpbmUg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbl9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNv
b3JkaW5hdGVkU3VyZmFjZS5oIgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJD
dXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIgorI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJT
KQorI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKKyNlbmRpZgorI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2VUb2tlbi5oIgor
I2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOworCitjbGFzcyBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIE9wZXJhdGlvblR5cGUg
eworICAgICAgICBDcmVhdGVMYXllcnNUeXBlLAorICAgICAgICBEZWxldGVMYXllcnNUeXBlLAor
ICAgICAgICBTZXRSb290TGF5ZXJUeXBlLAorICAgICAgICBTZXRMYXllclN0YXRlVHlwZSwKKyAg
ICAgICAgU2V0TGF5ZXJDaGlsZHJlblR5cGUsCisgICAgICAgIENyZWF0ZVRpbGVUeXBlLAorICAg
ICAgICBVcGRhdGVUaWxlVHlwZSwKKyAgICAgICAgUmVtb3ZlVGlsZVR5cGUsCisgICAgICAgIENy
ZWF0ZVVwZGF0ZUF0bGFzVHlwZSwKKyAgICAgICAgUmVtb3ZlVXBkYXRlQXRsYXNUeXBlLAorICAg
ICAgICBDcmVhdGVJbWFnZUJhY2tpbmdUeXBlLAorICAgICAgICBVcGRhdGVJbWFnZUJhY2tpbmdU
eXBlLAorICAgICAgICBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzVHlwZSwKKyAgICAgICAgUmVt
b3ZlSW1hZ2VCYWNraW5nVHlwZSwKKyAgICAgICAgU2V0TGF5ZXJBbmltYXRpb25zVHlwZSwKKyNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgICAgIFJlcXVlc3RBbmltYXRp
b25GcmFtZVR5cGUsCisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAg
Q3JlYXRlQ2FudmFzVHlwZSwKKyAgICAgICAgU3luY0NhbnZhc1R5cGUsCisgICAgICAgIERlc3Ry
b3lDYW52YXNUeXBlLAorI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICBT
ZXRMYXllckZpbHRlcnNUeXBlLAorI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAg
ICAgICBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSwKKyAgICAgICAgUmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbVR5cGUsCisjZW5kaWYKKyAgICAgICAgU2V0TGF5ZXJSZXBhaW50Q291bnRU
eXBlLAorICAgICAgICBTZXRCYWNrZ3JvdW5kQ29sb3JUeXBlLAorICAgICAgICBEaWRDaGFuZ2VT
Y3JvbGxQb3NpdGlvblR5cGUsCisgICAgfTsKKworICAgIGNsYXNzIE9wZXJhdGlvbkJhc2UgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8T3BlcmF0aW9uQmFzZT4geworICAgIHB1YmxpYzoK
KyAgICAgICAgdmlydHVhbCB+T3BlcmF0aW9uQmFzZSgpIHsgfQorICAgICAgICB2aXJ0dWFsIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlw
ZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKikgPSAwOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTxPcGVyYXRpb25UeXBl
IFR5cGU+IGNsYXNzIE9wZXJhdGlvbiA6IHB1YmxpYyBPcGVyYXRpb25CYXNlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHZpcnR1YWwgfk9wZXJhdGlvbigpIHsgfQorICAgICAgICB2aXJ0dWFsIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIFR5cGU7IH0KKyAgICB9OworCisgICAgY2xhc3MgQ3JlYXRlTGF5
ZXJzIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVMYXllcnNUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
cmVhdGVMYXllcnM+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgbGF5
ZXJJRHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRl
TGF5ZXJzKGxheWVySURzKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgQ3JlYXRlTGF5
ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCisgICAgICAgICAgICA6
IGxheWVySURzKGlkcykKKyAgICAgICAgeyB9CisgICAgICAgIHZpcnR1YWwgfkNyZWF0ZUxheWVy
cygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBs
YXllcklEczsKKyAgICB9OworCisgICAgY2xhc3MgRGVsZXRlTGF5ZXJzIDogcHVibGljIE9wZXJh
dGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnNUeXBlPiB7Cisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEZWxldGVMYXllcnM+IGNyZWF0
ZShjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgbGF5ZXJJRHMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGVsZXRlTGF5ZXJzKGxheWVySURzKSk7
CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgRGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxD
b29yZGluYXRlZExheWVySUQ+JiBpZHMpCisgICAgICAgICAgICA6IGxheWVySURzKGlkcykKKyAg
ICAgICAgeyB9CisgICAgICAgIHZpcnR1YWwgfkRlbGV0ZUxheWVycygpIHsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsK
KworICAgICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBsYXllcklEczsKKyAgICB9Owor
CisgICAgY2xhc3MgU2V0Um9vdExheWVyIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXJUeXBlPiB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRSb290TGF5ZXI+IGNyZWF0ZShDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
ZXRSb290TGF5ZXIobGF5ZXJJRCkpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0IFNldFJv
b3RMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCisgICAgICAgICAgICA6IGxheWVySUQoaWQp
CisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5TZXRSb290TGF5ZXIoKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJ
REU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgfTsKKworICAg
IGNsYXNzIFNldExheWVyU3RhdGUgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlNldExheWVyU3RhdGVUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTZXRMYXllclN0YXRlPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBsYXllckluZm8pCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJTdGF0ZShsYXllcklE
LCBsYXllckluZm8pKTsKKyAgICAgICAgfQorICAgICAgICBTZXRMYXllclN0YXRlKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGluZm8pCisgICAgICAg
ICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICAgICAsIGxheWVySW5mbyhpbmZvKQorICAgICAg
ICB7IH0KKyAgICAgICAgdmlydHVhbCB+U2V0TGF5ZXJTdGF0ZSgpIHsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKwor
ICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgQ29vcmRpbmF0ZWRM
YXllckluZm8gbGF5ZXJJbmZvOworICAgIH07CisKKworICAgIGNsYXNzIFNldExheWVyQ2hpbGRy
ZW4gOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExh
eWVyQ2hpbGRyZW5UeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTZXRMYXllckNoaWxkcmVuPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllckNoaWxkcmVuKGxheWVySUQsIGNo
aWxkcmVuKSk7CisgICAgICAgIH0KKyAgICAgICAgU2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRl
ZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlblZl
Y3RvcikKKyAgICAgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgICAgICwgY2hpbGRyZW4o
Y2hpbGRyZW5WZWN0b3IpCisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5TZXRMYXllckNo
aWxkcmVuKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklEOworICAgICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBjaGlsZHJlbjsKKyAgICB9
OworCisgICAgY2xhc3MgQ3JlYXRlVGlsZSA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZVR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZVRpbGU+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlVGlsZShsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1
cGRhdGVJbmZvKSk7CisgICAgICAgIH0KKyAgICAgICAgQ3JlYXRlVGlsZShDb29yZGluYXRlZExh
eWVySUQgaWQsIHVpbnQzMl90IHRpbGUsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJiBpbmZvKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAg
ICAgLCB0aWxlSUQodGlsZSkKKyAgICAgICAgICAgICwgdGlsZVJlY3QocmVjdCkKKyAgICAgICAg
ICAgICwgdXBkYXRlSW5mbyhpbmZvKQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVhbCB+Q3Jl
YXRlVGlsZSgpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5
ZXJJRDsKKyAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0
OworICAgICAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgIH07CisKKyAgICBj
bGFzcyBVcGRhdGVUaWxlIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpVcGRhdGVUaWxlVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8VXBkYXRlVGlsZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBVcGRhdGVUaWxlKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8p
KTsKKyAgICAgICAgfQorICAgICAgICBVcGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
dWludDMyX3QgdGlsZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUlu
Zm8mIGluZm8pCisgICAgICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICAgICAsIHRpbGVJ
RCh0aWxlKQorICAgICAgICAgICAgLCB0aWxlUmVjdChyZWN0KQorICAgICAgICAgICAgLCB1cGRh
dGVJbmZvKGluZm8pCisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5VcGRhdGVUaWxlKCkg
eyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAg
ICAgICB1aW50MzJfdCB0aWxlSUQ7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3Q7CisgICAgICAg
IFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87CisgICAgfTsKKworICAgIGNsYXNzIFJlbW92
ZVRpbGUgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZVRpbGVUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxS
ZW1vdmVUaWxlPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRp
bGVJRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVU
aWxlKGxheWVySUQsIHRpbGVJRCkpOworICAgICAgICB9CisgICAgICAgIFJlbW92ZVRpbGUoQ29v
cmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCB0aWxlKQorICAgICAgICAgICAgOiBsYXllcklE
KGlkKQorICAgICAgICAgICAgLCB0aWxlSUQodGlsZSkKKyAgICAgICAgeyB9CisgICAgICAgIHZp
cnR1YWwgflJlbW92ZVRpbGUoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQ7CisgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICB9OworCisgICAg
Y2xhc3MgQ3JlYXRlVXBkYXRlQXRsYXMgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzVHlwZT4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3JlYXRlVXBkYXRlQXRsYXM+IGNyZWF0ZSh1aW50MzJf
dCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVVcGRhdGVBdGxhcyhh
dGxhc0lELCBzdXJmYWNlKSk7CisgICAgICAgIH0KKyAgICAgICAgQ3JlYXRlVXBkYXRlQXRsYXMo
dWludDMyX3QgaWQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1
cmZhY2UpCisgICAgICAgICAgICA6IGF0bGFzSUQoaWQpCisgICAgICAgICAgICAsIHN1cmZhY2Uo
Y29vcmRpbmF0ZWRTdXJmYWNlKQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVhbCB+Q3JlYXRl
VXBkYXRlQXRsYXMoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgdWludDMyX3QgYXRsYXNJRDsK
KyAgICAgICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZTsKKyAgICB9OworCisg
ICAgY2xhc3MgUmVtb3ZlVXBkYXRlQXRsYXMgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzVHlwZT4geworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVtb3ZlVXBkYXRlQXRsYXM+IGNyZWF0ZSh1aW50
MzJfdCBhdGxhc0lEKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFJlbW92ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpKTsKKyAgICAgICAgfQorICAgICAgICBleHBsaWNp
dCBSZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBpZCkKKyAgICAgICAgICAgIDogYXRsYXNJRChp
ZCkKKyAgICAgICAgeyB9CisgICAgICAgIHZpcnR1YWwgflJlbW92ZVVwZGF0ZUF0bGFzKCkgeyB9
CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSop
IE9WRVJSSURFOworCisgICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7CisgICAgfTsKKworICAgIGNs
YXNzIENyZWF0ZUltYWdlQmFja2luZyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nVHlwZT4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3JlYXRlSW1hZ2VCYWNraW5nPiBjcmVhdGUoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVJbWFnZUJhY2tpbmcoaW1hZ2VCYWNraW5nSUQp
KTsKKyAgICAgICAgfQorICAgICAgICBleHBsaWNpdCBDcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCkKKyAgICAgICAgICAgIDogaW1hZ2VCYWNraW5nSUQoaWQp
CisgICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5DcmVhdGVJbWFnZUJhY2tpbmcoKSB7IH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikg
T1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tp
bmdJRDsKKyAgICB9OworCisgICAgY2xhc3MgVXBkYXRlSW1hZ2VCYWNraW5nIDogcHVibGljIE9w
ZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmdU
eXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxVcGRhdGVJbWFn
ZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lE
LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VCYWNr
aW5nSUQsIHN1cmZhY2UpKTsKKyAgICAgICAgfQorICAgICAgICBVcGRhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZh
Y2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKKyAgICAgICAgICAgIDogaW1hZ2VCYWNraW5nSUQoaWQp
CisgICAgICAgICAgICAsIHN1cmZhY2UoY29vcmRpbmF0ZWRTdXJmYWNlKQorICAgICAgICB7IH0K
KyAgICAgICAgdmlydHVhbCB+VXBkYXRlSW1hZ2VCYWNraW5nKCkgeyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisg
ICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNraW5nSUQ7CisgICAgICAg
IFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2U7CisgICAgfTsKKworICAgIGNsYXNz
IENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHNUeXBlPiB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGVhckltYWdlQmFja2luZ0NvbnRl
bnRzPiBjcmVhdGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGVhckltYWdlQmFja2lu
Z0NvbnRlbnRzKGltYWdlQmFja2luZ0lEKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQg
Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkKQor
ICAgICAgICAgICAgOiBpbWFnZUJhY2tpbmdJRChpZCkKKyAgICAgICAgeyB9CisgICAgICAgIHZp
cnR1YWwgfkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAg
ICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRDsKKyAgICB9OworCisg
ICAgY2xhc3MgUmVtb3ZlSW1hZ2VCYWNraW5nIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmdUeXBlPiB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVJbWFnZUJhY2tpbmc+IGNyZWF0ZShD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lEKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZUltYWdlQmFja2luZyhpbWFnZUJhY2tp
bmdJRCkpOworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0IFJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkKQorICAgICAgICAgICAgOiBpbWFnZUJhY2tpbmdJ
RChpZCkKKyAgICAgICAgeyB9CisgICAgICAgIHZpcnR1YWwgflJlbW92ZUltYWdlQmFja2luZygp
IHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdl
QmFja2luZ0lEOworICAgIH07CisKKyAgICBjbGFzcyBTZXRMYXllckFuaW1hdGlvbnMgOiBwdWJs
aWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0
aW9uc1R5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldExh
eWVyQW5pbWF0aW9ucz4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBH
cmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYW5pbWF0
aW9ucykpOworICAgICAgICB9CisgICAgICAgIFNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRl
ZExheWVySUQgaWQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBsYXllckFuaW1hdGlv
bnMpCisgICAgICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICAgICAsIGFuaW1hdGlvbnMo
bGF5ZXJBbmltYXRpb25zKQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVhbCB+U2V0TGF5ZXJB
bmltYXRpb25zKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklEOworICAgICAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRpb25zOworICAg
IH07CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgY2xhc3MgUmVx
dWVzdEFuaW1hdGlvbkZyYW1lIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUeXBlPiB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWU+IGNyZWF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVxdWVzdEFuaW1hdGlv
bkZyYW1lKCkpOworICAgICAgICB9CisgICAgICAgIFJlcXVlc3RBbmltYXRpb25GcmFtZSgpCisg
ICAgICAgIHsgfQorICAgICAgICB2aXJ0dWFsIH5SZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSB7IH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikg
T1ZFUlJJREU7CisgICAgfTsKKyNlbmRpZgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisg
ICAgY2xhc3MgQ3JlYXRlQ2FudmFzIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXNUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVDYW52YXM+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNl
VG9rZW4mIHRva2VuKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENyZWF0ZUNhbnZhcyhsYXllcklELCBjYW52YXNTaXplLCB0b2tlbikpOworICAgICAgICB9Cisg
ICAgICAgIENyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUm
IHNpemUsIGNvbnN0IEdyYXBoaWNzU3VyZmFjZVRva2VuJiBzdXJmYWNlVG9rZW4pCisgICAgICAg
ICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICAgICAsIGNhbnZhc1NpemUoc2l6ZSkKKyAgICAg
ICAgICAgICwgdG9rZW4oc3VyZmFjZVRva2VuKQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVh
bCB+Q3JlYXRlQ2FudmFzKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkTGF5
ZXJJRCBsYXllcklEOworICAgICAgICBJbnRTaXplIGNhbnZhc1NpemU7CisgICAgICAgIEdyYXBo
aWNzU3VyZmFjZVRva2VuIHRva2VuOworICAgIH07CisKKyAgICBjbGFzcyBTeW5jQ2FudmFzIDog
cHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFz
VHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3luY0NhbnZh
cz4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZl
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTeW5jQ2FudmFz
KGxheWVySUQsIGZyb250QnVmZmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgU3luY0NhbnZhcyhD
b29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVySGFuZGxlKQorICAgICAg
ICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAgICAgLCBmcm9udEJ1ZmZlcihmcm9udEJ1ZmZl
ckhhbmRsZSkKKyAgICAgICAgeyB9CisgICAgICAgIHZpcnR1YWwgflN5bmNDYW52YXMoKSB7IH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikg
T1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAg
IHVpbnQzMl90IGZyb250QnVmZmVyOworICAgIH07CisKKyAgICBjbGFzcyBEZXN0cm95Q2FudmFz
IDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95
Q2FudmFzVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVz
dHJveUNhbnZhcz4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlc3Ryb3lDYW52YXMobGF5ZXJJRCkp
OworICAgICAgICB9CisgICAgICAgIGV4cGxpY2l0IERlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICB7IH0KKyAgICAg
ICAgdmlydHVhbCB+RGVzdHJveUNhbnZhcygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29y
ZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICB9OworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgY2xhc3MgU2V0TGF5ZXJGaWx0ZXJzIDogcHVibGljIE9wZXJhdGlvbjxD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnNUeXBlPiB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRMYXllckZpbHRlcnM+IGNyZWF0
ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXll
ckZpbHRlcnMobGF5ZXJJRCwgZmlsdGVycykpOworICAgICAgICB9CisgICAgICAgIFNldExheWVy
RmlsdGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlck9wZXJhdGlvbnMpCisgICAgICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICAgICAs
IGZpbHRlcnMoZmlsdGVyT3BlcmF0aW9ucykKKyAgICAgICAgeyB9CisgICAgICAgIHZpcnR1YWwg
flNldExheWVyRmlsdGVycygpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZExh
eWVySUQgbGF5ZXJJRDsKKyAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgIH07
CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgY2xhc3MgQ3JlYXRlQ3VzdG9tRmlsdGVy
UHJvZ3JhbSA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0+IGNyZWF0ZShpbnQgY3Vz
dG9tRmlsdGVyUHJvZ3JhbUlELCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3Jh
bUluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRl
Q3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtSUQsIHByb2dyYW1JbmZvKSk7
CisgICAgICAgIH0KKyAgICAgICAgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgcHJvZ3Jh
bUlELCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgaW5mbykKKyAgICAgICAgICAgIDog
Y3VzdG9tRmlsdGVyUHJvZ3JhbUlEKHByb2dyYW1JRCkKKyAgICAgICAgICAgICwgcHJvZ3JhbUlu
Zm8oaW5mbykKKyAgICAgICAgeyB9CisgICAgICAgIHZpcnR1YWwgfkNyZWF0ZUN1c3RvbUZpbHRl
clByb2dyYW0oKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgaW50IGN1c3RvbUZpbHRlclByb2dy
YW1JRDsKKyAgICAgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gcHJvZ3JhbUluZm87CisgICAg
fTsKKworICAgIGNsYXNzIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0gOiBwdWJsaWMgT3BlcmF0
aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW1UeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVD
dXN0b21GaWx0ZXJQcm9ncmFtPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpOworICAgICAgICB9CisgICAgICAgIGV4
cGxpY2l0IFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IHByb2dyYW1JRCkKKyAgICAgICAg
ICAgIDogY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKHByb2dyYW1JRCkKKyAgICAgICAgeyB9CisgICAg
ICAgIHZpcnR1YWwgflJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oKSB7IH0KKyAgICAgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisK
KyAgICAgICAgaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICB9OworI2VuZGlmCisjZW5k
aWYKKworICAgIGNsYXNzIFNldExheWVyUmVwYWludENvdW50IDogcHVibGljIE9wZXJhdGlvbjxD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3VudFR5cGU+IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldExheWVyUmVwYWludENv
dW50PiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGludCByZXBhaW50Q291bnQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJSZXBh
aW50Q291bnQobGF5ZXJJRCwgcmVwYWludENvdW50KSk7CisgICAgICAgIH0KKyAgICAgICAgU2V0
TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgY291bnQpCisgICAg
ICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICAgICAsIHJlcGFpbnRDb3VudChjb3VudCkK
KyAgICAgICAgeyB9CisgICAgICAgIHZpcnR1YWwgflNldExheWVyUmVwYWludENvdW50KCkgeyB9
CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSop
IE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAg
ICBpbnQgcmVwYWludENvdW50OworICAgIH07CisKKyAgICBjbGFzcyBTZXRCYWNrZ3JvdW5kQ29s
b3IgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldEJh
Y2tncm91bmRDb2xvclR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNldEJhY2tncm91bmRDb2xvcj4gY3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRCYWNrZ3JvdW5kQ29sb3Io
Y29sb3IpKTsKKyAgICAgICAgfQorICAgICAgICBleHBsaWNpdCBTZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikKKyAgICAgICAgICAgIDogY29sb3IoYmFja2dy
b3VuZENvbG9yKQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVhbCB+U2V0QmFja2dyb3VuZENv
bG9yKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvbG9yIGNvbG9yOworICAgIH07CisKKyAg
ICBjbGFzcyBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb25UeXBlPiB7Cisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEaWRDaGFuZ2VTY3JvbGxQb3Np
dGlvbj4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKHBvc2l0
aW9uKSk7CisgICAgICAgIH0KKyAgICAgICAgZXhwbGljaXQgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCisgICAgICAgICAgICA6IHBvc2l0
aW9uKHNjcm9sbFBvc2l0aW9uKQorICAgICAgICB7IH0KKyAgICAgICAgdmlydHVhbCB+RGlkQ2hh
bmdlU2Nyb2xsUG9zaXRpb24oKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgRmxvYXRQb2ludCBw
b3NpdGlvbjsKKyAgICB9OworCisgICAgY2xhc3MgUXVldWUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGVucXVldWUoUGFzc1JlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpPcGVyYXRpb25CYXNlPikgPSAwOworICAgIH07CisKK307IC8vIGNsYXNzIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlm
CisKKyNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41ODA2MWM0ZDNlZjU1NDZhOWIyN2Q2MmIxZTA3MTFmZjIzZTA4NTlmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmgKQEAgLTAsMCArMSw1
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25zX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnNfaAorCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25CYXNlPiBvcGVyYXRpb24pIHsg
bV9vcGVyYXRpb25zLmFwcGVuZChvcGVyYXRpb24pOyB9CisgICAgdm9pZCBjbGVhcigpIHsgbV9v
cGVyYXRpb25zLmNsZWFyKCk7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3BlcmF0aW9ucy5zaXplKCk7IH0KKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpPcGVyYXRpb25CYXNlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaW5kZXggPCBtX29wZXJhdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1f
b3BlcmF0aW9ucy5hdChpbmRleCkuZ2V0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3Rv
cjxSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uQmFzZT4gPiBt
X29wZXJhdGlvbnM7Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25zX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCBkMjE1ZmIzNjEzYjkwN2I2YjFkOWY1ZTg5
MTE5ZGJiMjY0NGY0NTk0Li5kN2RiMjM1OGRkZWJkMzQ3MzVkOWY2ZjhhM2RhMmVlMTVlMjk0NzRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5oIgogCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKQEAgLTIxNSw3ICsyMTYsNyBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygp
CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIHsKLSAgICBtX3BlbmRpbmdSZW5kZXJlZENv
bnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBtX3JlbmRlcmVkQ29udGVudHNT
Y3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CkBAIC01NTQsOSArNTU1LDEwIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21t
aXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpCiAgICAgbV9iYWNraW5nU3RvcmVzV2l0
aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpmbHVzaExheWVyQ2hhbmdlcygpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoY29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCiB7Ci0gICAgbV9yZW5kZXJlZENvbnRlbnRzU2Ny
b2xsUG9zaXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRpb25zLnNpemUoKTsgaSsrKQorICAgICAg
ICBvcGVyYXRpb25zLmF0KGkpLT5leGVjdXRlKHRoaXMpOwogCiAgICAgLy8gU2luY2UgdGhlIGZy
YW1lIGhhcyBub3cgYmVlbiByZW5kZXJlZCwgd2UgY2FuIHNhZmVseSB1bmxvY2sgdGhlIGFuaW1h
dGlvbnMgdW50aWwgdGhlIG5leHQgbGF5b3V0LgogICAgIHNldEFuaW1hdGlvbnNMb2NrZWQoZmFs
c2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZS5oCmluZGV4IGNmYWIxNjYyZDFhYzVjNDIzZmQ1MDEwYjAxY2Q3ZTQwNjM2OTMzODMuLmYw
NGE5M2ZkNGYzYmFlMDk4YTIyODRkNGMzOGJmNDc1YWZiMzg1MWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKQEAgLTIxLDYgKzIx
LDcgQEAKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lX2gKIAogI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
LmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJDb29yZGlu
YXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTQyLDYgKzQz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZTsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbnM7CiBjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtOwogY2xhc3MgQ3VzdG9tRmls
dGVyUHJvZ3JhbUluZm87CiBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CkBAIC04MiwxMyArODQs
NiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9h
dFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBw
b3NpdGlvbik7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxHcmFwaGlj
c1N1cmZhY2U+KTsKLSAgICB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5
ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVk
TGF5ZXJJRCwgaW50IHZhbHVlKTsKIAogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBhcHBl
bmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwpAQCAtOTgsMzggKzkzLDQ2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKICAgICB2b2lkIHNldEFjdGl2ZShi
b29sKTsKIAorICAgIHZvaWQgY29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoY29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmKTsKKyAgICB2b2lkIHNldEFuaW1hdGlv
bnNMb2NrZWQoYm9vbCk7CisKKyAgICAvLyBCZWdpbiBvcGVyYXRpb24gZXhlY3V0aW9ucy4KICAg
ICB2b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwog
ICAgIHZvaWQgZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7
CiAgICAgdm9pZCBzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOwotICAgIHZvaWQg
c2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGlu
YXRlZExheWVySUQ+Jik7CiAgICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Ci0gICAgdm9pZCBzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9p
ZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKSBjb25zdDsKLSAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50
IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwotI2VuZGlmCi0KKyAgICB2b2lkIHNldExheWVyQ2hp
bGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklE
PiYpOwogICAgIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgZmxvYXQgc2NhbGUpOwotICAgIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCk7CiAgICAgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5
ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJik7CisgICAgdm9pZCByZW1v
dmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKICAgICB2b2lkIGNy
ZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRT
dXJmYWNlPik7CiAgICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKTsK
LSAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7CiAgICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZh
Y2U+KTsKICAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCk7CiAgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCk7CiAgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXll
cklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwotICAgIHZvaWQgc2V0QW5pbWF0
aW9uc0xvY2tlZChib29sKTsKLSAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xv
ciYpOwotICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7IG1fc2V0RHJh
d3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCiAgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKICNlbmRpZgorI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQorICAgIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5
ZXJJRCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPik7CisgICAg
dm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZmZXIp
OworICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpOworI2VuZGlmCisj
aWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisjaWYgRU5BQkxF
KENTU19TSEFERVJTKQorICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQs
IGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7CisgICAgdm9pZCByZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtKGludCBpZCk7CisjZW5kaWYKKyAgICB2b2lkIHNldExheWVyUmVwYWludENv
dW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKKyAgICB2b2lkIHNldEJhY2tncm91
bmRDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pOworICAgIC8vIEVuZCBvcGVyYXRpb24gZXhlY3V0
aW9ucy4KKworICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7IG1fc2V0
RHJhd3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9CiAKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NMYXll
ciogbGF5ZXJCeUlEKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKQEAgLTE3MCw2ICsxNzMsMTAgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5
ZXIqKTsKICAgICB2b2lkIHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKEdyYXBoaWNz
TGF5ZXIqKTsKIAorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICB2b2lkIGluamVjdENhY2hl
ZEN1c3RvbUZpbHRlclByb2dyYW1zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNv
bnN0OworI2VuZGlmCisKICAgICBGbG9hdFNpemUgbV9jb250ZW50c1NpemU7CiAgICAgRmxvYXRS
ZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKIApAQCAtMjA4LDcgKzIxNSw2IEBAIHByaXZhdGU6
CiAgICAgTGF5ZXJSYXdQdHJNYXAgbV9maXhlZExheWVyczsKICAgICBDb29yZGluYXRlZExheWVy
SUQgbV9yb290TGF5ZXJJRDsKICAgICBGbG9hdFBvaW50IG1fcmVuZGVyZWRDb250ZW50c1Njcm9s
bFBvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9s
bFBvc2l0aW9uOwogICAgIGJvb2wgbV9hbmltYXRpb25zTG9ja2VkOwogI2lmIEVOQUJMRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICBib29sIG1fYW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmNwcAppbmRleCAxMjhiYWJlMjk4ZjY2Y2JjMjc2OWNmNmZmOGVhOTgyMjlkNTE1NTc3Li5mNGI5
NjU5ZmNjNmM1OWYzNDcxMTIzMjc0MDBhMWE5YzcyYTBlMjVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuaCIKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMzgsMTMgKzM5LDEzIEBAIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoCiAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4oaW1hZ2UpOwogfQog
Ci1QYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Y3JlYXRlKENvb3JkaW5hdG9yKiBjbGllbnQsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdl
KQorUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6OmNyZWF0ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogcXVldWUs
IFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcoY2xpZW50LCBpbWFnZSkpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcocXVldWUsIGltYWdlKSk7CiB9CiAKLUNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciog
Y2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKLSAgICA6IG1fY29vcmRpbmF0b3IoY2xp
ZW50KQorQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiBxdWV1ZSwgUGFzc1JlZlB0cjxJbWFn
ZT4gaW1hZ2UpCisgICAgOiBtX29wZXJhdGlvblF1ZXVlKHF1ZXVlKQogICAgICwgbV9pbWFnZShp
bWFnZSkKICAgICAsIG1faWQoZ2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChtX2ltYWdlLmdl
dCgpKSkKICAgICAsIG1fY2xlYXJDb250ZW50c1RpbWVyKHRoaXMsICZDb29yZGluYXRlZEltYWdl
QmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQpCkBAIC01NCw3ICs1NSw3IEBAIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciog
Y2xpZW50LCBQYXNzUmVmUHRyCiAgICAgLy8gRklYTUU6IFdlIHdvdWxkIG5lZWQgdG8gZGVjb2Rl
IGEgc21hbGwgaW1hZ2UgZGlyZWN0bHkgaW50byBhIEdyYXBoaWNzU3VyZmFjZS4KICAgICAvLyBo
dHRwOi8vd2Via2l0Lm9yZy9iLzEwMTQyNgogCi0gICAgbV9jb29yZGluYXRvci0+Y3JlYXRlSW1h
Z2VCYWNraW5nKGlkKCkpOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWUoQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQoKSkpOwog
fQogCiBDb29yZGluYXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCkK
QEAgLTc0LDcgKzc1LDcgQEAgdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVtb3ZlSG9z
dChIb3N0KiBob3N0KQogICAgIG1faG9zdHMucmVtb3ZlKHBvc2l0aW9uKTsKIAogICAgIGlmICht
X2hvc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+cmVtb3ZlSW1hZ2VCYWNr
aW5nKGlkKCkpOworICAgICAgICBtX29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVlKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlkKCkpKTsKIH0K
IAogdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6bWFya0RpcnR5KCkKQEAgLTExMyw5ICsx
MTQsOCBAQCB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1cGRhdGUoKQogCiAgICAgbV9u
YXRpdmVJbWFnZVB0ciA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAK
LSAgICAvLyBJZiBzZW5kaW5nIHRoZSBtZXNzYWdlIGZhaWxzLCB0cnkgYWdhaW4gaW4gdGhlIG5l
eHQgdXBkYXRlLgotICAgIGJvb2wgc3VjY2VzcyA9IG1fY29vcmRpbmF0b3ItPnVwZGF0ZUltYWdl
QmFja2luZyhpZCgpLCBtX3N1cmZhY2UpOwotICAgIG1faXNEaXJ0eSA9ICFzdWNjZXNzOworICAg
IG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
VXBkYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQoKSwgbV9zdXJmYWNlKSk7CisgICAgbV9pc0Rp
cnR5ID0gZmFsc2U7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbGVhc2VT
dXJmYWNlSWZOZWVkZWQoKQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OnVwZGF0ZVZpc2liaWxpdHlJZk5lZWRlZChib29sJiBjaGFuZ2VkVG9WaXNpYmxl
KQogCiB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNvbnRlbnRzVGltZXJGaXJl
ZChUaW1lcjxDb29yZGluYXRlZEltYWdlQmFja2luZz4qKQogewotICAgIG1fY29vcmRpbmF0b3It
PmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaWQoKSk7CisgICAgbV9vcGVyYXRpb25RdWV1ZS0+
ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0Nv
bnRlbnRzOjpjcmVhdGUoaWQoKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCmluZGV4
IDViNWI1N2E2ZWNiMTAxZWY3NWIyOTE5MWI1NzUwN2JlZGRhMmY3NjUuLjhiZjRkYjY1NzkxYmRi
NWViMGIwZTRlZTNiMDU0NjQ5Mjg4MTVkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2lu
Zy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5l
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nX2gKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgpAQCAtMzksMjAgKzQwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgOiBwdWJsaWMgUmVmQ291bnRlZDxD
b29yZGluYXRlZEltYWdlQmFja2luZz4gewogcHVibGljOgotICAgIGNsYXNzIENvb3JkaW5hdG9y
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBk
YXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJh
Y2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkg
PSAwOwotICAgIH07Ci0KICAgICBjbGFzcyBIb3N0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpbWFnZUJhY2tpbmdWaXNpYmxlKCkgPSAwOwogICAgIH07CiAKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdG9y
KiwgUGFzc1JlZlB0cjxJbWFnZT4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nPiBjcmVhdGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUq
LCBQYXNzUmVmUHRyPEltYWdlPik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcoKTsKIAogICAgIHN0YXRpYyBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGdldENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQoSW1hZ2UqKTsKQEAgLTY4LDEzICs2MSwxMyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1cGRhdGUoKTsKIAogcHJpdmF0ZToKLSAgICBDb29yZGluYXRlZEltYWdlQmFja2lu
ZyhDb29yZGluYXRvciosIFBhc3NSZWZQdHI8SW1hZ2U+KTsKKyAgICBDb29yZGluYXRlZEltYWdl
QmFja2luZyhDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSosIFBhc3NSZWZQdHI8
SW1hZ2U+KTsKIAogICAgIHZvaWQgcmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgpOwogICAgIHZvaWQg
dXBkYXRlVmlzaWJpbGl0eUlmTmVlZGVkKGJvb2wmIGNoYW5nZWRUb1Zpc2libGUpOwogICAgIHZv
aWQgY2xlYXJDb250ZW50c1RpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+
Kik7CiAKLSAgICBDb29yZGluYXRvciogbV9jb29yZGluYXRvcjsKKyAgICBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogbV9vcGVyYXRpb25RdWV1ZTsKICAgICBSZWZQdHI8SW1h
Z2U+IG1faW1hZ2U7CiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZVB0cjsKICAgICBD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIG1faWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9T
dXJmYWNlVXBkYXRlSW5mby5oCmluZGV4IDZhYjM4NGExMWVhYTVlYTI1NDA4MTNjNzAyNWU1ZmM4
YzE3ZDM5MTAuLmVhOGIyNWZlZjZlOTc3MjkyZjBlMzg4ZDQ4NjQyZmEyMjliNTA5NjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9TdXJmYWNlVXBkYXRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oCkBAIC0yMywxMyArMjMs
MTAgQEAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJJbnRSZWN0
LmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm8gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1
cmZhY2VVcGRhdGVJbmZvKTsKLQogcHVibGljOgogICAgIFN1cmZhY2VVcGRhdGVJbmZvKCkgeyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwCmluZGV4IDM2NGYwNjg3MTA4
MmI1OGZjYmQ4M2EwZWYzMTQ1MGJlNDgwMDg0OGIuLjVlZGMyZmU3ODI5ZjNhZmFiNzBiOWNjYTRl
MWRiZTc2ZDA5ODEwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcApA
QCAtMjMsMTQgKzIzLDE1IEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKKyNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFz
KFVwZGF0ZUF0bGFzQ2xpZW50KiBjbGllbnQsIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVkU3Vy
ZmFjZTo6RmxhZ3MgZmxhZ3MpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCitVcGRhdGVBdGxhczo6
VXBkYXRlQXRsYXMoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqIHF1ZXVlLCBp
bnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQorICAgIDogbV9v
cGVyYXRpb25RdWV1ZShxdWV1ZSkKICAgICAsIG1faW5hY3Rpdml0eUluU2Vjb25kcygwKQogewog
ICAgIHN0YXRpYyB1aW50MzJfdCBuZXh0SUQgPSAwOwpAQCAtMzgsMTUgKzM5LDEyIEBAIFVwZGF0
ZUF0bGFzOjpVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCogY2xpZW50LCBpbnQgZGltZW5z
aW9uLCBDb29yZGluYXRlZFN1CiAgICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2VyT2ZUd28oSW50
U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbikpOwogICAgIG1fc3VyZmFjZSA9IENvb3JkaW5hdGVk
U3VyZmFjZTo6Y3JlYXRlKHNpemUsIGZsYWdzKTsKIAotICAgIC8vIEZJWE1FOiBDdXJyZW50bHks
IGlmIHNlbmRpbmcgdGhlIG1lc3NhZ2UgZmFpbHMsIFVwZGF0ZUF0bGFzIGdpdmVzIHVwIGRyYXdp
bmcgYW55dGhpbmcgaW1wbGljaXRseS4KLSAgICBpZiAoIW1fY2xpZW50LT5jcmVhdGVVcGRhdGVB
dGxhcyhtX0lELCBtX3N1cmZhY2UpKQotICAgICAgICBtX3N1cmZhY2UuY2xlYXIoKTsKKyAgICBt
X29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNy
ZWF0ZVVwZGF0ZUF0bGFzOjpjcmVhdGUobV9JRCwgbV9zdXJmYWNlKSk7CiB9CiAKIFVwZGF0ZUF0
bGFzOjp+VXBkYXRlQXRsYXMoKQogewotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1fY2xp
ZW50LT5yZW1vdmVVcGRhdGVBdGxhcyhtX0lEKTsKKyAgICBtX29wZXJhdGlvblF1ZXVlLT5lbnF1
ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzOjpjcmVh
dGUobV9JRCkpOwogfQogCiB2b2lkIFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkK
QEAgLTcyLDkgKzcwLDYgQEAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFz
OjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIodWludDMyX3QKICAgICBpZiAocmVjdC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsK
IAotICAgIGlmICghbV9zdXJmYWNlKQotICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGlj
c0NvbnRleHQ+KCk7Ci0KICAgICBhdGxhc0lEID0gbV9JRDsKIAogICAgIC8vIEZJWE1FOiBVc2Ug
dHJpLXN0YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0
ZUF0bGFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvVXBkYXRlQXRsYXMuaAppbmRleCA0OGE2YmY4NDRhNDkwZjdmZDJjMzlhMDQyNGUzMzBm
ZGRiMTZkNzhiLi4xNjMxMzhmMTdjMjU2NDA3M2Q5YjU2ODZiMGE0Mzg4MjlhY2Y0ZDMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvVXBkYXRlQXRsYXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaApAQCAtMjIsNiArMjIsNyBAQAogI2RlZmlu
ZSBVcGRhdGVBdGxhc19oCiAKICNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3Vy
ZmFjZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIApAQCAtMzEsMTYgKzMyLDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEludFBvaW50Owog
Ci1jbGFzcyBVcGRhdGVBdGxhc0NsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGNy
ZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRT
dXJmYWNlPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJf
dCBhdGxhc0lEKSA9IDA7Ci19OwotCiBjbGFzcyBVcGRhdGVBdGxhcyB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVXBkYXRlQXRsYXMpOwogcHVibGljOgotICAgIFVwZGF0ZUF0bGFzKFVwZGF0
ZUF0bGFzQ2xpZW50KiwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7
CisgICAgVXBkYXRlQXRsYXMoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqLCBp
bnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzKTsKICAgICB+VXBkYXRlQXRs
YXMoKTsKIAogICAgIGlubGluZSBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N1cmZh
Y2UtPnNpemUoKTsgfQpAQCAtNjYsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYnVpbGRM
YXlvdXRJZk5lZWRlZCgpOwogCiBwcml2YXRlOgotICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2Ns
aWVudDsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogbV9vcGVyYXRp
b25RdWV1ZTsKICAgICBPd25QdHI8R2VuZXJhbEFyZWFBbGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRv
cjsKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBtX3N1cmZhY2U7CiAgICAgZG91Ymxl
IG1faW5hY3Rpdml0eUluU2Vjb25kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDVhMDZkMTE2OGMyMjc2MDJjYTIwYzFi
YzI4MGQxNzY5NzI2YTA1ODguLjlhYjZjMjBhZmJmYTUwN2EwZTEwYjFmZTI5Njc3MTg1MDM4NTc5
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50
Q29kZXJzLmNwcApAQCAtMjksOSArMjksMTEgQEAKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBo
aWNzQXJndW1lbnRDb2RlcnMuaCIKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNp
bmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvQ29sb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZExheWVySW5mby5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludDNELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0xheWVyQW5pbWF0aW9uLmg+CkBAIC03Myw5ICs3NSw3IEBACiAjZW5kaWYKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQogdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLSNlbmRpZgogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKQEAgLTgzNSw2ICs4MzUs
Mzg0IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmRlY29kZShBcmd1
bWVudERlY29kZXImIGRlY29kZXIsIFN1cmZhY2VVCiAgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50
Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUoZGVjb2Rlciwgc3VyZmFjZVVwZGF0ZUlu
Zm8pOwogfQogCit2b2lkIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bnM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKK3sKKyAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PHVpbnQzMl90PihvcGVyYXRpb25zLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2UqIG9wZXJhdGlvbiA9IG9wZXJhdGlvbnMu
YXQoaSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShvcGVyYXRpb24tPmdldE9wZXJhdGlv
blR5cGUoKSk7CisKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUo
KSkgeworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxh
eWVyc1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVycyo+KG9wZXJhdGlvbiktPmxheWVy
SURzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJz
Kj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXJUeXBlOgorICAgICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRSb290TGF5ZXIqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5
ZXJTdGF0ZVR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGUqPihvcGVyYXRpb24pLT5s
YXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlKj4ob3BlcmF0aW9uKS0+bGF5ZXJJ
bmZvOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlblR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
Q2hpbGRyZW4qPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNo
aWxkcmVuKj4ob3BlcmF0aW9uKS0+Y2hpbGRyZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlVHlwZToKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0
ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlUmVjdDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+
KG9wZXJhdGlvbiktPnVwZGF0ZUluZm87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlVHlwZToKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVw
ZGF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGUq
PihvcGVyYXRpb24pLT50aWxlUmVjdDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJh
dGlvbiktPnVwZGF0ZUluZm87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlVHlwZToKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
UmVtb3ZlVGlsZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRp
bGUqPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhc1R5cGU6IHsK
KyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXMqPihvcGVyYXRpb24pLT5hdGxhc0lEOwor
ICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2Ug
PSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhcyo+KG9wZXJhdGlv
biktPnN1cmZhY2UuZ2V0KCkpOworICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpI
YW5kbGUgaGFuZGxlOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGVhbCB3aXRo
IHRoZSBjYXNlIHRoYXQgaGFuZGxlIGNyZWF0aW9uIGlzIGZhaWxlZC4KKyAgICAgICAgICAgIHdl
YkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IGhhbmRsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXNUeXBl
OgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhcyo+KG9wZXJhdGlvbiktPmF0bGFzSUQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmdUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVJbWFn
ZUJhY2tpbmcqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdl
QmFja2luZ1R5cGU6IHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nKj4ob3BlcmF0
aW9uKS0+aW1hZ2VCYWNraW5nSUQ7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2Uq
IHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZSo+KHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0
ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbiktPnN1cmZhY2UuZ2V0KCkpOworICAgICAgICAgICAg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgLy8gRklY
TUU6IFdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHRoYXQgaGFuZGxlIGNyZWF0aW9uIGlz
IGZhaWxlZC4KKyAgICAgICAgICAgIHdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxl
KGhhbmRsZSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1h
Z2VCYWNraW5nQ29udGVudHMqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZUltYWdlQmFja2luZ1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZyo+
KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zVHlw
ZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zKj4ob3BlcmF0aW9uKS0+bGF5ZXJJ
RDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zKj4ob3BlcmF0aW9uKS0+YW5pbWF0
aW9uczsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0
QW5pbWF0aW9uRnJhbWVUeXBlOgorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVDYW52YXNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXMqPihvcGVy
YXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXMqPihvcGVyYXRpb24p
LT5jYW52YXNTaXplOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXMqPihvcGVyYXRpb24pLT50
b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlN5bmNDYW52YXNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzKj4o
b3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhcyo+KG9wZXJhdGlv
biktPmZyb250QnVmZmVyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhc1R5cGU6CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkRlc3Ryb3lDYW52YXMqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgYnJlYWs7
CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzVHlwZToKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0TGF5ZXJGaWx0ZXJzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJGaWx0ZXJzKj4ob3BlcmF0aW9uKS0+ZmlsdGVyczsKKyAgICAgICAgICAgIGJyZWFrOwor
I2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBjYXNlIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlOgorICAgICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKj4ob3BlcmF0aW9uKS0+Y3VzdG9tRmls
dGVyUHJvZ3JhbUlEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKj4o
b3BlcmF0aW9uKS0+cHJvZ3JhbUluZm87CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
VHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSo+KG9wZXJhdGlv
biktPmN1c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisg
ICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50
Q291bnRUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3VudCo+KG9wZXJhdGlv
biktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50Kj4ob3BlcmF0
aW9uKS0+cmVwYWludENvdW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yVHlwZToKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yKj4ob3BlcmF0aW9uKS0+Y29sb3I7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpE
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvblR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9s
bFBvc2l0aW9uKj4ob3BlcmF0aW9uKS0+cG9zaXRpb247CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucz46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRl
Y29kZXIsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiBvcGVyYXRpb25zKQoreworICAg
IHVuc2lnbmVkIG9wZXJhdGlvbnNTaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3BlcmF0
aW9uc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9wZXJhdGlvbnNTaXplOyArK2kpIHsKKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlRW51bSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpD
cmVhdGVMYXllcnNUeXBlOiB7CisgICAgICAgICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklE
PiBpZHM7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlkcykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpjcmVhdGUoaWRzKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkRlbGV0ZUxheWVyc1R5cGU6IHsKKyAgICAgICAgICAgIFZlY3RvcjxDb29y
ZGluYXRlZExheWVySUQ+IGlkczsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaWRz
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25z
LmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnM6OmNyZWF0
ZShpZHMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyVHlwZTogeworICAgICAgICAg
ICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJv
b3RMYXllcjo6Y3JlYXRlKGxheWVySUQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0
ZVR5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySW5mbyBsYXllckluZm87Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySW5mbykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6Y3JlYXRlKGxheWVySUQsIGxheWVy
SW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuVHlwZTogeworICAgICAg
ICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGNoaWxkcmVuOworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShjaGlsZHJlbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjo6Y3JlYXRlKGxheWVySUQsIGNoaWxkcmVuKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGVUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGF5ZXJJ
RCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdWludDMyX3Qg
dGlsZUlEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0aWxlSUQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3Q7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbGVSZWN0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZv
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh1cGRhdGVJbmZvKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlOjpjcmVhdGUobGF5ZXJJRCwgdGls
ZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxl
VHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUodGlsZUlEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh0aWxlUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgU3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodXBkYXRlSW5mbykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
VXBkYXRlVGlsZTo6Y3JlYXRlKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8p
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZVR5cGU6IHsKKyAgICAgICAgICAgIENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShs
YXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB1aW50
MzJfdCB0aWxlSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbGVJRCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBl
bmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZTo6Y3JlYXRlKGxheWVy
SUQsIHRpbGVJRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhc1R5cGU6IHsK
KyAgICAgICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGF0bGFzSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKGF0bGFzSUQsIFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRs
YXNUeXBlOiB7CisgICAgICAgICAgICB1aW50MzJfdCBhdGxhc0lEOworICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShhdGxhc0lEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpSZW1vdmVVcGRhdGVBdGxhczo6Y3JlYXRlKGF0bGFzSUQpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6Q3JlYXRlSW1hZ2VCYWNraW5nVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpZDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaWQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5k
KENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6Y3JlYXRl
KGlkKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZ1R5cGU6IHsKKyAgICAg
ICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQ7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGlkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQsIFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZTo6Y3JlYXRlKGhhbmRsZSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50c1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQ7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlkKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzOjpjcmVhdGUoaWQpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nVHlwZTogeworICAgICAgICAgICAg
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdl
QmFja2luZzo6Y3JlYXRlKGlkKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9u
c1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBpZDsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnM7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFuaW1hdGlvbnMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczo6Y3JlYXRlKGlkLCBhbmltYXRpb25z
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUeXBlOgorICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBl
bmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOjpj
cmVhdGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0
ZUNhbnZhc1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOwor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBJbnRTaXplIGNhbnZhc1NpemU7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNhbnZhc1NpemUpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0b2tlbikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzOjpjcmVhdGUobGF5ZXJJRCwgY2FudmFzU2l6ZSwg
dG9rZW4pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhc1R5cGU6IHsKKyAgICAgICAgICAg
IENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB1aW50MzJfdCBmcm9udEJ1ZmZlcjsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
ZnJvbnRCdWZmZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52
YXM6OmNyZWF0ZShsYXllcklELCBmcm9udEJ1ZmZlcikpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0
cm95Q2FudmFzVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OmNyZWF0ZShsYXllcklEKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
RmlsdGVyc1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOwor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZp
bHRlcnM7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZpbHRlcnMpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyczo6Y3JlYXRlKGxheWVy
SUQsIGZpbHRlcnMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZW5kaWYKKyNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGU6IHsKKyAgICAgICAgICAgIGlu
dCBjdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGN1c3RvbUZpbHRlclByb2dyYW1JRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gcHJvZ3JhbUluZm87
CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHByb2dyYW1JbmZvKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVh
dGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlELCBwcm9ncmFtSW5mbykpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZTogeworICAgICAgICAgICAgaW50IGN1c3Rv
bUZpbHRlclByb2dyYW1JRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY3VzdG9t
RmlsdGVyUHJvZ3JhbUlEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1v
dmVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnRUeXBlOiB7CisgICAg
ICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIHJlcGFpbnRDb3VudDsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVwYWludENvdW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3VudDo6Y3JlYXRlKGxheWVySUQsIHJlcGFpbnRD
b3VudCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3JUeXBlOiB7CisgICAg
ICAgICAgICBDb2xvciBjb2xvcjsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29s
b3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlv
bnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldEJhY2tncm91bmRDb2xv
cjo6Y3JlYXRlKGNvbG9yKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0
aW9uVHlwZTogeworICAgICAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbjsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocG9zaXRpb24pKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uOjpjcmVhdGUocG9zaXRpb24pKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgQ29yZUlQ
QwogCiAjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAppbmRleCA4ZTdkZWVmYjNm
ZWExN2Y5ODVlNTgzZTczMTAzZWY4YmFjMjk1MTFlLi5jYWRjOTlmZTM1YmRjZTk2YjQyNTE5MmI4
MTc1NTMwMDFjZTc0ZjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzQXJndW1lbnRDb2RlcnMuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFyZ3VtZW50
Q29kZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25zOwogY2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NMYXllckFu
aW1hdGlvbjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOwpAQCAtMTE3LDYgKzExOCwx
MSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlN1cmZhY2VVcGRh
dGVJbmZvPiB7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNv
cmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zPiB7CisgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25zJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJik7Cit9Owor
CiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5jcHAKaW5kZXggOTg2NDkzYzMyZmY4NDYyOGEzZTBiMGViYjNhMDUxYjc0MTU5Mzc1OC4u
OTU1ZmRiOTM4YTMzNjdiZTAwMDQ4YmY1MzA0NDY0NDhlNWNlMGY4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApAQCAtMjMsMTYg
KzIzLDExIEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKIAog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAi
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZExh
eWVySW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU3VyZmFjZVVwZGF0ZUluZm8uaD4KLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNp
bmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIgotI2VuZGlmCisjaW5jbHVkZSA8d3Rm
L0Z1bmN0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTU5LDc4ICs1NCw5IEBA
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0CiAgICAgbV9zY2VuZS0+YXBwZW5kVXBkYXRlKGZ1bmN0
aW9uKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGls
ZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNv
bnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OmNyZWF0ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby5z
Y2FsZUZhY3RvcikpOwotICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRp
bGVSZWN0LCB1cGRhdGVJbmZvKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6dXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50
MzJfdCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRl
SW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJ
RCwgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRl
UmVjdCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8uYXRsYXNJRCwgdXBkYXRlSW5mby5zdXJmYWNlT2Zm
c2V0KSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVU
aWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJl
bW92ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQotewot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRl
VXBkYXRlQXRsYXMsIG1fc2NlbmUuZ2V0KCksIGF0bGFzSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZTo6Y3JlYXRlKGhhbmRsZSkpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKLXsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVVwZGF0ZUF0bGFz
LCBtX3NjZW5lLmdldCgpLCBhdGxhc0lEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGlu
YXRlZExheWVySUQ+JiBpZHMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcnMsIG1fc2NlbmUuZ2V0KCksIGlkcykpOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xh
eWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQotewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXJzLCBt
X3NjZW5lLmdldCgpLCBpZHMpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQotewot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0Um9v
dExheWVySUQsIG1fc2NlbmUuZ2V0KCksIGlkKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVy
SUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZSwgbV9z
Y2VuZS5nZXQoKSwgaWQsIGluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJDaGls
ZHJlbiwgbV9zY2VuZS5nZXQoKSwgaWQsIGNoaWxkcmVuKSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3Np
dGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpzZXRMYXllckZpbHRlcnMsIG1fc2NlbmUuZ2V0KCksIGlkLCBmaWx0ZXJz
KSk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQot
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVt
b3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9zY2VuZS5nZXQoKSwgaWQpKTsKLX0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50
IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8pCi17Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVDdXN0
b21GaWx0ZXJQcm9ncmFtLCBtX3NjZW5lLmdldCgpLCBpZCwgcHJvZ3JhbUluZm8pKTsKLX0KLSNl
bmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFt
ZShjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IEludFJlY3QmIGNvdmVyZWRSZWN0
KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y29tbWl0Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbnMoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmIG9w
ZXJhdGlvbnMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpmbHVzaExheWVyQ2hhbmdlcywgbV9zY2VuZS5nZXQo
KSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMsIG1fc2NlbmUuZ2V0KCksIG9wZXJh
dGlvbnMpKTsKICAgICB1cGRhdGVWaWV3cG9ydCgpOwogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5kaWRSZW5kZXJGcmFtZShjb250
ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsKQEAgLTE0MCwyNCArNjYsOSBAQCB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBJbnRTaXplJiBjb250
ZW50c1NpemUsCiAjZW5kaWYKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNy
ZWF0ZUltYWdlQmFja2luZywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCkpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6Okhh
bmRsZSYgaGFuZGxlKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6dXBkYXRlSW1hZ2VCYWNraW5nLCBtX3NjZW5lLmdldCgpLCBpbWFnZUlELCBX
ZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cywgbV9z
Y2VuZS5nZXQoKSwgaW1hZ2VJRCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFn
ZUlEKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QW5pbWF0aW9uc0xv
Y2tlZChib29sIGxvY2tlZCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUltYWdlQmFja2luZywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJ
RCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
c2V0QW5pbWF0aW9uc0xvY2tlZCwgbV9zY2VuZS5nZXQoKSwgbG9ja2VkKSk7CiB9CiAKIHZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9h
dFNpemUmIGNvbnRlbnRzU2l6ZSkKQEAgLTE2NSwxNSArNzYsNiBAQCB2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250
ZW50c1NpegogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6c2V0Q29udGVudHNTaXplLCBtX3NjZW5lLmdldCgpLCBjb250ZW50c1NpemUpKTsKIH0KIAot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJBbmltYXRpb25zKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1h
dGlvbnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzZXRMYXllckFuaW1hdGlvbnMsIG1fc2NlbmUuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNM
b2NrZWQoYm9vbCBsb2NrZWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpzZXRBbmltYXRpb25zTG9ja2VkLCBtX3NjZW5lLmdldCgpLCBsb2Nr
ZWQpKTsKLX0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRy
YWplY3RvcnlWZWN0b3IpCiB7CkBAIC0xOTQsNTUgKzk2LDE2IEBAIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSgpCiB9CiAKICNpZiBFTkFCTEUoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBtX3NjZW5lLmdl
dCgpKSk7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6YW5pbWF0aW9uRnJhbWVSZWFkeSgpCiB7CiAgICAgbV9kcmF3aW5nQXJl
YVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpBbmltYXRpb25GcmFtZVJlYWR5KCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFn
ZSgpLT5wYWdlSUQoKSk7CiB9CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9zY2VuZS5nZXQoKSwgcG9zaXRpb24pKTsKLX0K
LQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6
ZSYgY2FudmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQotewotICAg
IEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpT
dXBwb3J0c1RleHR1cmVUYXJnZXQgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsK
LSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0
ZUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGNhbnZhc1NpemUsIEdyYXBoaWNzU3VyZmFjZTo6
Y3JlYXRlKGNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgdG9rZW4pKSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnN5bmNDYW52YXMsIG1fc2NlbmUuZ2V0KCksIGlkLCBm
cm9udEJ1ZmZlcikpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpk
ZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ryb3lDYW52YXMsIG1fc2NlbmUu
Z2V0KCksIGlkKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFs
dWUpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpzZXRMYXllclJlcGFpbnRDb3VudCwgbV9zY2VuZS5nZXQoKSwgaWQsIHZhbHVlKSk7Ci19Ci0K
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlQmFja2luZ1N0b3Jlcygp
CiB7CiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9k
cmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KIAotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnNldEJhY2tncm91bmRDb2xvciwgbV9zY2VuZS5nZXQoKSwgY29sb3IpKTsKLX0KLQogfQogI2Vu
ZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCmluZGV4IDI0YjM0NzcwYWMwODNjMzVhNTU0
MDMwNGUwOTBhMDUyNThlZjU3YWQuLmMzODgyMzVkMDQwNTQwZGM5OTNkMDY4ZWJkOWJmMmI4ZDJh
MDMxNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkuaApAQCAtMjUsMjMgKzI1LDEzIEBACiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAi
RHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIlJlZ2lvbi5oIgotI2luY2x1ZGUgIldlYkNv
b3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXJBbmltYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZVRva2VuLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXpl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1l
ci5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IENvb3JkaW5hdGVkTGF5ZXJJbmZvOworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bnM7CiBjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbzsKIH0KIApAQCAtNTMsNDUgKzQzLDEyIEBAIGNs
YXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IDogcHVibGljIFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZUNsCiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSopOwogICAgIHZpcnR1YWwgfkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVy
U3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySW5mbyYpOwotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRD4mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRDb21w
b3NpdGluZ0xheWVyRmlsdGVycyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdl
YkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKLSAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBXZWJD
b3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmls
dGVyUHJvZ3JhbShpbnQgaWQpOwotI2VuZGlmCi0gICAgdm9pZCBjcmVhdGVDb21wb3NpdGluZ0xh
eWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZv
aWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgdm9pZCBjb21taXRDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9ucyhjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgY292ZXJlZFJlY3QpOworICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsK
ICAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKICAg
ICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rvcik7Ci0gICAgdm9pZCBk
aWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsKLSAgICB2b2lkIGNyZWF0ZVRpbGVGb3JM
YXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7Ci0g
ICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpT
dXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKLSAgICB2b2lkIGNyZWF0ZVVw
ZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6
SGFuZGxlJik7Ci0gICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKTsK
LSAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOwot
ICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1l
c3NhZ2VEZWNvZGVyJik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbik7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci0gICAgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4m
KTsKLSAgICB2b2lkIHN5bmNDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExheWVyUmVwYWludENvdW50KFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKICAgICBXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2NlbmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmlt
YXRpb25zJik7Ci0gICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwotI2lmIEVOQUJM
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFt
ZSgpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6
Q29sb3ImKTsKIAogICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCBNZXRob2Rz
LgogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4K
aW5kZXggMjFkYzI2MzQ1MDNjY2RlODc5MDYyZDc5MzIzYzZiYmFiZTRmNzJlYy4uNmUyNzkyM2Ji
YzAzOGExZDhlNjY0MzMxYTMyMDBhZjVmOWExYzkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KQEAg
LTE5LDQ0ICsxOSw3IEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiBtZXNzYWdl
cyAtPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSBMZWdhY3lSZWNlaXZlciB7Ci0gICAg
U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySW5mbyBsYXllckluZm8pCi0gICAgU2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKHVp
bnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVuKQotI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyh1aW50MzJfdCBpZCwgV2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19TSEFE
RVJTKQotICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBXZWJDb3JlOjpDdXN0
b21GaWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbykKLSAgICBSZW1vdmVDdXN0b21GaWx0ZXJQ
cm9ncmFtKGludCBpZCkKLSNlbmRpZgotICAgIFNldFJvb3RDb21wb3NpdGluZ0xheWVyKHVpbnQz
Ml90IGlkKQotICAgIENyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRz
KQotICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRzKQotICAg
IENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdl
YkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0
ZUluZm8pCi0gICAgVXBkYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0
ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlEKQotICAgIENyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFz
SUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQotICAgIFJl
bW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi0gICAgQ3JlYXRlSW1hZ2VCYWNraW5n
KHVpbnQ2NF90IGltYWdlSUQpCi0gICAgVXBkYXRlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdl
SUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQotICAgIENs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHModWludDY0X3QgaW1hZ2VJRCkKLSAgICBSZW1vdmVJbWFn
ZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCkKLSAgICBEaWRSZW5kZXJGcmFtZShXZWJDb3JlOjpJ
bnRTaXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50UmVjdCBjb3ZlcmVkUmVjdCkKLSAgICBE
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvc2l0aW9uKQotICAg
IFNldExheWVyQW5pbWF0aW9ucyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFu
aW1hdGlvbnMgYW5pbWF0aW9ucykKKyAgICBDb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9ucyhXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyBvcGVyYXRpb25zLCBX
ZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50UmVjdCBjb3ZlcmVkUmVj
dCkKICAgICBTZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQotCi0jaWYgRU5BQkxFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIFJlcXVlc3RBbmltYXRpb25GcmFtZSgpCi0jZW5k
aWYKLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIENyZWF0ZUNhbnZhcyh1aW50MzJf
dCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52YXNTaXplLCBXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2VUb2tlbiB0b2tlbikKLSAgICBTeW5jQ2FudmFzKHVpbnQzMl90IGlkLCB1aW50MzJfdCBmcm9u
dEJ1ZmZlcikKLSAgICBEZXN0cm95Q2FudmFzKHVpbnQzMl90IGlkKQotI2VuZGlmCi0KLSAgICBT
ZXRMYXllclJlcGFpbnRDb3VudCh1aW50MzJfdCBsYXllcklELCBpbnQgdmFsdWUpCi0KLSAgICBT
ZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29yZTo6Q29sb3IgY29sb3IpCiB9CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
Y3BwCmluZGV4IDZlNWZiNTcyMzFjOWI4OTVmMmYwNmVhNDE1MTMwMTY5ODgxMGE0NWMuLjE2NWJj
YjlmMDA3NWY2ZGRhY2ExZWRjOTJjMzBlMDNmZjFiOTE1MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtMzgs
OSArMzgsOSBAQAogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUg
IldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5
ZXJCYWNraW5nLmg+CkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJW
aWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
U3VyZmFjZVVwZGF0ZUluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyLmg+CiAjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogCiAjaWYgRU5B
QkxFKENTU19TSEFERVJTKQpAQCAtODYsNyArODUsNiBAQCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlKiB3ZWJQYWdlKQogICAgICwgbV93
YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCiAgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQogICAg
ICwgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUodHJ1ZSkKLSAgICAsIG1fc2hvdWxk
U3luY0ZyYW1lKGZhbHNlKQogICAgICwgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5
ZXIoZmFsc2UpCiAgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKICAgICAsIG1fcmVsZWFzZUluYWN0aXZl
QXRsYXNlc1RpbWVyKHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lckZpcmVkKQpAQCAtMjg3LDE0ICsyODUsMTQgQEAgYm9vbCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCiAKICAgICBkZWxl
dGVDb21wb3NpdGluZ0xheWVycygpOwogCi0gICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7Cisg
ICAgaWYgKCFtX29wZXJhdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRpZFN5bmMgPSB0cnVl
OwogCiAgICAgICAgIEludFNpemUgY29udGVudHNTaXplID0gcm91bmRlZEludFNpemUobV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwogICAgICAgICBJbnRSZWN0IGNvdmVyZWRS
ZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRpZFJlbmRlckZyYW1lKGNvbnRlbnRz
U2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnMobV9vcGVyYXRpb25zLCBjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KSk7CisgICAg
ICAgIG1fb3BlcmF0aW9ucy5jbGVhcigpOwogICAgICAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3Mg
PSB0cnVlOwotICAgICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOwogICAgIH0gZWxzZQog
ICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7CiAKQEAgLTMyMCw5ICszMTgsOCBAQCB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoKQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ29tcG9zaXRpbmdMYXllcnMobV9sYXllcnNUb0NyZWF0
ZSkpOworICAgIGVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5
ZXJzOjpjcmVhdGUobV9sYXllcnNUb0NyZWF0ZSkpOwogICAgIG1fbGF5ZXJzVG9DcmVhdGUuY2xl
YXIoKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpkZWxldGVDb21wb3NpdGluZ0xheWVycygpCkBAIC0zMzUsOSArMzMy
LDggQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5
ZXJzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5
ZXJzKG1fbGF5ZXJzVG9EZWxldGUpKTsKKyAgICBlbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkRlbGV0ZUxheWVyczo6Y3JlYXRlKG1fbGF5ZXJzVG9EZWxldGUpKTsKICAgICBt
X2xheWVyc1RvRGVsZXRlLmNsZWFyKCk7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21wb3Np
dGluZ0xheWVySWZOZWVkZWQoKQpAQCAtMzQ1LDcwICszNDEsMTAgQEAgdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCkK
ICAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOworICAgIGVucXVldWUoQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyOjpjcmVhdGUodG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7CiAgICAgbV9kaWRJbml0aWFs
aXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0g
dHJ1ZTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllclN0YXRl
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGluZm8p
Ci17Ci0gICAgaWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7Ci0gICAgICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigp
KSk7Ci0gICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5n
TGF5ZXJTdGF0ZShpZCwgaW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c3luY0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8
Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4pKTsK
LX0KLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIq
IGNhbnZhc1BsYXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0gY2FudmFzUGxhdGZvcm1MYXllci0+Z3Jh
cGhpY3NTdXJmYWNlVG9rZW4oKTsKLSAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBjYW52YXNQbGF0
Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUNhbnZhcyhpZCwgY2Fu
dmFzU2l6ZSwgdG9rZW4pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5
bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0
Zm9ybUxheWVyKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICB1aW50MzJf
dCBmcm9udEJ1ZmZlciA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFj
ZSgpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OlN5bmNDYW52YXMoaWQsIGZyb250QnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkK
LXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95Q2FudmFzKGlkKSk7Ci19Ci0jZW5kaWYKLQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyUmVwYWludENvdW50KENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgaW50IHZhbHVlKQotewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldExheWVyUmVwYWludENvdW50
KGlkLCB2YWx1ZSkpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgY2hlY2tDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveGllcyhmaWx0ZXJzKTsKLSNlbmRpZgotICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5
ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Ci19Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjaGVja0N1c3RvbUZpbHRlclBy
b2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7CkBAIC00MzYs
NyArMzcyLDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmEKIAogICAgICAgICBpZiAoIWN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkpIHsKICAgICAgICAgICAgIGN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eS0+c2V0Q2xpZW50KHRoaXMpOwotICAgICAgICAgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ3VzdG9t
RmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1c3RvbU9wZXJh
dGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7CisgICAg
ICAgICAgICBlbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3Rv
bUZpbHRlclByb2dyYW06OmNyZWF0ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1
c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygp
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2xpZW50IHdhcyBu
b3QgZGlzY29ubmVjdGVkIHRoZW4gdGhpcyBjb29yZGluYXRvciBtdXN0IGJlIHRoZSBjbGllbnQg
Zm9yIGl0LgogICAgICAgICAgICAgQVNTRVJUKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xp
ZW50KCkgPT0gdGhpcyk7CkBAIC00NDksNyArMzg1LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1Qcm94eShXZWJDdXN0b21GaWx0ZXJQ
cm8KICAgICAvLyBBdCB0aGlzIHRpbWUgdGhlIHNoYWRlciBpcyBub3QgbmVlZGVkIGFueW1vcmUs
IHNvIHdlIHJlbW92ZSBpdCBmcm9tIG91ciBzZXQgYW5kCiAgICAgLy8gc2VuZCBhIG1lc3NhZ2Ug
dG8gdGhlIG90aGVyIHByb2Nlc3MgdG8gZGVsZXRlIGl0LgogICAgIG1fY3VzdG9tRmlsdGVyUHJv
Z3JhbXMucmVtb3ZlKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk7Ci0gICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCkpKTsKKyAgICBlbnF1
ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW06OmNyZWF0ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCkpKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygp
CkBAIC02MTMsNDAgKzU0OSw2IEBAIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VCYWNraW5nCiAgICAgcmV0dXJu
IGltYWdlQmFja2luZzsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUltYWdlQmFja2luZyhpbWFnZUlE
KSk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFj
ZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFjZSo+KGNvb3JkaW5hdGVkU3VyZmFj
ZS5nZXQoKSk7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOwotICAg
IGlmICghd2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZUltYWdlQmFja2luZyhpbWFnZUlELCBoYW5kbGUp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFn
ZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDbGVhckltYWdlQmFj
a2luZ0NvbnRlbnRzKGltYWdlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQp
Ci17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
bV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1v
dmVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpCiB7CiAgICAgSW1hZ2VCYWNr
aW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3MuZW5kKCk7CkBAIC03MDksNDEg
KzYxMSw1NSBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVw
ZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZVRp
bGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2Vi
Q29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHRpbGVSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRh
dGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlVGlsZShDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQordm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmVucXVldWUoUGFzc1JlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpPcGVyYXRpb25CYXNlPiBvcGVyYXRpb24pCiB7CiAgICAgaWYgKG1faXNQdXJnaW5nKQogICAg
ICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVRp
bGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKLX0KIAotYm9vbCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCi17Ci0gICAgV2ViQ29vcmRp
bmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29y
ZGluYXRlZFN1cmZhY2UqPihjb29yZGluYXRlZFN1cmZhY2UuZ2V0KCkpOwotICAgIFdlYkNvb3Jk
aW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIXdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpD
cmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBoYW5kbGUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB3aWxsRW5xdWV1ZU9wZXJhdGlvbihvcGVyYXRpb24uZ2V0KCkpOworICAgIG1fb3BlcmF0aW9u
cy5hcHBlbmQob3BlcmF0aW9uKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCit2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6d2lsbEVucXVldWVPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6T3BlcmF0aW9uQmFzZSogb3BlcmF0aW9uKQogewotICAgIGlmIChtX2lzUHVyZ2luZykK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpKTsKKyAgICBz
d2l0Y2ggKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgY2FzZSBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlwZToKKyAgICAgICAgaWYgKG1f
c2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7CisgICAgICAgICAgICBlbnF1ZXVlKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uOjpjcmVh
dGUobV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCkpKTsKKyAgICAgICAgICAgIG1fc2hv
dWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFn
ZUJhY2tpbmdUeXBlOgorICAgICAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdl
QmFja2luZyo+KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEKSk7CisgICAgICAgIG1faW1hZ2VC
YWNraW5ncy5yZW1vdmUoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNraW5nSUQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyQW5pbWF0aW9uc1R5cGU6IHsKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAg
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zID0gc3RhdGljX2Nh
c3Q8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zKj4ob3Bl
cmF0aW9uKS0+YW5pbWF0aW9uczsKKyAgICAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0
aXZlQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnMuZ2V0QWN0aXZlQW5pbWF0aW9ucygpOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJh
bWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7CisgICAgICAg
ICAgICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZp
bHRlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGogPSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgY29u
c3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
RmlsdGVyQW5pbWF0aW9uVmFsdWUqPihrZXlmcmFtZXMuYXQoaSkpOworICAgICAgICAgICAgICAg
IGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0aWNfY2FzdDxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnMqPihvcGVyYXRpb24pLT5hbmlt
YXRpb25zID0gYWN0aXZlQW5pbWF0aW9uczsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICB9
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzVHlwZToKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisg
ICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoc3RhdGljX2Nhc3Q8Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzKj4ob3BlcmF0aW9uKS0+Zmls
dGVycyk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CiB9CiAKIFdlYkNvcmU6OkZsb2F0UmVjdCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdApAQCAtNzUyLDI0ICs2Njgs
NiBAQCBXZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp2aXNpYmxl
Q29udGVudHNSZWN0KCkgY29uc3QKIH0KIAogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBH
cmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7Ci0gICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9u
cyA9IGFuaW1hdGlvbnMuZ2V0QWN0aXZlQW5pbWF0aW9ucygpOwotI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0
aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBr
ZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKLSAg
ICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRG
aWx0ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7
IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IEZpbHRlckFu
aW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1h
dGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkpKTsKLSAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3hpZXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKLSAgICAgICAgfQotICAg
IH0KLSNlbmRpZgotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVBbmltYXRp
b25zKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29u
dGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVj
dG9yeVZlY3RvcikKIHsKICAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMg
dGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgpAQCAtODEy
LDcgKzcxMCw3IEBAIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVBbmltYXRpb24o
KQogewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OlJlcXVlc3RBbmltYXRpb25GcmFtZSgpKTsKKyAgICBlbnF1ZXVlKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6Y3JlYXRlKCkpOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6YW5pbWF0aW9uRnJhbWVSZWFkeSgp
CkBAIC04OTUsNyArNzkzLDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVh
c2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGUKIAogdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpD
b2xvciYgY29sb3IpCiB7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKSk7CisgICAgZW5x
dWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6OmNy
ZWF0ZShjb2xvcikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggNzI5
N2VlZDgxZTA1YTJlZTBmMDA1ZWVhM2RmODE4ODVmZWMzZjJiNS4uZWFjZTQxMDE0Y2JhOGZjNWZi
Mzc4ODExNWU3YTUwYjBlNTk0MDUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgpAQCAtNDYsOCArNDcs
NyBAQCBjbGFzcyBXZWJQYWdlOwogCiBjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBw
dWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAogICAgICwg
cHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAotICAgICwgcHVi
bGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgotICAgICwg
cHVibGljIFdlYkNvcmU6OlVwZGF0ZUF0bGFzQ2xpZW50CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUKICAgICAsIHB1YmxpYyBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyRmFjdG9yeQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAsIFdl
YkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudApAQCAtNzksNDAgKzc5LDE0IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0
cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRl
ZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXZp
Y2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2lu
Z0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVz
aGluZ0xheWVyQ2hhbmdlczsgfQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJm
YWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRM
YXllcklELCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4
dEZyYW1lKCk7CiAgICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKwogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9u
KiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIE9WRVJSSURFOwogCi0gICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwg
Y29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c3luY0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXllckFuaW1hdGlvbnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAg
ICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKLSNlbmRpZgotI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBX
ZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3lDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsKLSNlbmRpZgot
ICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySUQsIGludCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzeW5j
Rml4ZWRMYXllcnMoKTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIFdlYkNv
cmU6OkludFBvaW50Jik7Ci0KLSAgICAvLyBVcGRhdGVBdGxhc0NsaWVudAotICAgIHZpcnR1YWwg
Ym9vbCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPFdlYkNv
cmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKTsKLQogI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBPVkVS
UklERTsKICNlbmRpZgpAQCAtMTMxLDE0ICsxMDUsMjIgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBm
bG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBPVkVSUklERTsKIAotICAgIC8vIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFn
ZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBib29sIHVwZGF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZElt
YWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4pIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkg
T1ZFUlJJREU7Ci0KICAgICB2b2lkIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsK
IAorICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgYm9v
bCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0Zs
dXNoaW5nTGF5ZXJDaGFuZ2VzOyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qgdmlz
aWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZO
ZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
TGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywg
dWludDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogb3BlcmF0
aW9uUXVldWUoKSB7IHJldHVybiB0aGlzOyB9OworCisgICAgLy8gQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UXVldWUKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZShQYXNzUmVmUHRyPFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2U+KSBPVkVS
UklERTsKKworICAgIHZvaWQgd2lsbEVucXVldWVPcGVyYXRpb24oV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uQmFzZSopOworCiAgICAgLy8gR3JhcGhpY3NM
YXllckZhY3RvcnkKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXll
cj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZF
UlJJREU7CiAKQEAgLTE4MSw2ICsxNjMsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBwYWdlIG92
ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KICAg
ICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwogCisg
ICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMgbV9vcGVyYXRpb25zOwor
CiAgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lz
dGVyZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9s
YXllcnNUb0NyZWF0ZTsKICAgICBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiBt
X2xheWVyc1RvRGVsZXRlOwpAQCAtMjA0LDcgKzE4OCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKIAogICAgIExheWVyVHJlZUNvbnRleHQg
bV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7CiAgICAgYm9v
bCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKICAgICBXZWJDb3JlOjpUaW1l
cjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOwogICAgIFdlYkNv
cmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9yZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186322</attachid>
            <date>2013-02-04 01:30:02 -0800</date>
            <delta_ts>2013-02-04 01:36:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108294-20130204182625.patch</filename>
            <type>text/plain</type>
            <size>130450</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDMyZDI0NTBkNDY3MTJm
MjYwMjI5ZDAxYTE4NWZmYmM5YjhkMzZlNi4uNTkyYTliOGNkN2ZmZjAwMjljYWY2M2YyNDdiNDc4
ZWYyMmMwNTk3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyMiBAQAorMjAxMy0wMi0wNCAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkgaGFzIHNvIG1hbnkgSVBDIG1lc3NhZ2VzIChlLmcuIFN5bmND
YW52YXMgYW5kCisgICAgICAgIENyZWF0ZVRpbGUpLCBhbmQgdGhlcmUgaXMgYSBsb25nIGZ1bmN0
aW9uIGNoYWluIGZyb20gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIHRvCisgICAgICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSAoNCBjbGFzc2VzKS4KKyAgICAgICAgSWYgd2Ugd2FudCB0byBh
ZGQgYSBuZXcgbWVzc2FnZSwgd2UgbmVlZCB0byBhZGQgc2ltaWxhciBmdW5jdGlvbnMgaW50byA0
IGNsYXNzZXMuCisKKyAgICAgICAgTm93IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBoYXMgb25s
eSBvbmUgSVBDIG1lc3NhZ2U6IENvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLgor
ICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lIHJ1biBhcyBmb2xsb3dzOgorICAgICAgICAxLiBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIgbWFrZXMgYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uIChlLmcuIENyZWF0ZVRpbGUp
LgorICAgICAgICAyLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgc3RvcmVzIGFsbCBvcGVyYXRp
b25zLgorICAgICAgICAzLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgc2VuZHMgYWxsIG9wZXJh
dGlvbnMgdG8gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkKKyAgICAgICAgYXQgdGhlIG1v
bWVudCBvZiBmbHVzaGluZyB2aWEgQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMg
bWVzc2FnZS4KKyAgICAgICAgNC4gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIGV4ZWN1dGVzIGFs
bCBvcGVyYXRpb25zLgorCisgICAgICAgIFRoZXJlIGlzIG9uZSBiaWcgYmVoYXZpb3IgY2hhbmdl
LiBBbGwgb3BlcmF0aW9ucyAoZS5nLiBDcmVhdGVMYXllcnMgYW5kCisgICAgICAgIFN5bmNDYW52
YXMpIGFyZSBwZXJmb3JtZWQgYXQgdGhlIHNhbWUgdGltZSwgd2hlbgorICAgICAgICBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zIGlz
IGNhbGxlZC4KKworICAgICAgICBJZiB5b3Ugd2FudCB0byBhZGQgYSBuZXcgb3BlcmF0aW9uLCBh
ZGQgY29kZSBhcyBmb2xsb3dzOgorICAgICAgICAxLiBDcmVhdGUgYSBuZXcgb3BlcmF0aW9uIHN1
YmNsYXNzIGluIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaAorICAgICAgICAyLiBPdmVy
cmlkZSBPcGVyYXRpb25CYXNlOjpleGVjdXRlKCkgdG8gZXhlY3V0ZSB3aGF0IHRoZSBvcGVyYXRp
b24gc2hvdWxkIGRvLgorICAgICAgICAzLiBJbXBsZW1lbnQgZW5jb2RlL2RlY29kZSBpbiBDb29y
ZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlz
dGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFz
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpj
cmVhdGVDYW52YXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpleGVjdXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxh
eWVyczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRSb290TGF5ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVu
OjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZVRpbGU6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpleGVjdXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0
ZUF0bGFzOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6ZXhlY3V0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRh
dGVJbWFnZUJhY2tpbmc6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6ZXhlY3V0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFn
ZUJhY2tpbmc6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6
ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpDcmVhdGVDYW52YXM6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpleGVjdXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
RmlsdGVyczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpleGVjdXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRl
clByb2dyYW06OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OmV4ZWN1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpl
eGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uOjpleGVjdXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbik6CisgICAgICAgIChPcGVyYXRpb25CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2U6On5PcGVyYXRpb25C
YXNlKToKKyAgICAgICAgKE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb246On5PcGVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uOjpnZXRPcGVyYXRp
b25UeXBlKToKKyAgICAgICAgKENyZWF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OkNy
ZWF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVMYXllcnM6On5DcmVhdGVMYXllcnMpOgorICAgICAgICAoRGVsZXRlTGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0
ZUxheWVyczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkRlbGV0ZUxheWVyczo6RGVsZXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6fkRlbGV0ZUxheWVy
cyk6CisgICAgICAgIChTZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyOjpTZXRSb290
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0Um9vdExheWVyOjp+U2V0Um9vdExheWVyKToKKyAgICAgICAgKFNldExheWVyU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJT
dGF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyU3RhdGU6OlNldExheWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6flNldExheWVyU3Rh
dGUpOgorICAgICAgICAoU2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGls
ZHJlbjo6U2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuOjp+U2V0TGF5ZXJDaGlsZHJlbik6Cisg
ICAgICAgIChDcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZVRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlOjpDcmVhdGVUaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGU6On5D
cmVhdGVUaWxlKToKKyAgICAgICAgKFVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OlVwZGF0
ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
VXBkYXRlVGlsZTo6flVwZGF0ZVRpbGUpOgorICAgICAgICAoUmVtb3ZlVGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlVGlsZTo6UmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjp+UmVtb3ZlVGlsZSk6CisgICAgICAgIChDcmVhdGVV
cGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzOjpDcmVhdGVVcGRhdGVB
dGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpD
cmVhdGVVcGRhdGVBdGxhczo6fkNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFJlbW92ZVVw
ZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZVVwZGF0ZUF0bGFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OlJlbW92ZVVwZGF0ZUF0
bGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZVVwZGF0ZUF0bGFzOjp+UmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoQ3JlYXRlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6Q3JlYXRlSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZUltYWdlQmFja2luZzo6fkNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChVcGRh
dGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpVcGRhdGVJ
bWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjp+VXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAg
KENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1h
Z2VCYWNraW5nQ29udGVudHM6OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50czo6fkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAoUmVtb3ZlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZUltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6UmVtb3ZlSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlJlbW92ZUltYWdlQmFja2luZzo6flJlbW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChTZXRM
YXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpTZXRMYXll
ckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjp+U2V0TGF5ZXJBbmltYXRpb25zKToKKyAgICAgICAg
KFJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9u
RnJhbWU6OlJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6On5SZXF1ZXN0QW5p
bWF0aW9uRnJhbWUpOgorICAgICAgICAoQ3JlYXRlQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZh
czo6Q3JlYXRlQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZUNhbnZhczo6fkNyZWF0ZUNhbnZhcyk6CisgICAgICAgIChTeW5jQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5
bmNDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpTeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6On5TeW5jQ2FudmFzKToKKyAg
ICAgICAgKERlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OkRlc3Ryb3lDYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVz
dHJveUNhbnZhczo6fkRlc3Ryb3lDYW52YXMpOgorICAgICAgICAoU2V0TGF5ZXJGaWx0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
RmlsdGVyczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldExheWVyRmlsdGVyczo6U2V0TGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyczo6flNl
dExheWVyRmlsdGVycyk6CisgICAgICAgIChDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3Rv
bUZpbHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpDcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06On5DcmVhdGVDdXN0b21GaWx0ZXJQcm9n
cmFtKToKKyAgICAgICAgKFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW06OlJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6flJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAg
ICAgICAoU2V0TGF5ZXJSZXBhaW50Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFp
bnRDb3VudDo6U2V0TGF5ZXJSZXBhaW50Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6On5TZXRMYXllclJl
cGFpbnRDb3VudCk6CisgICAgICAgIChTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0QmFja2dyb3VuZENvbG9yOjpTZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjp+U2V0
QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNj
cm9sbFBvc2l0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb246OkRpZENoYW5nZVNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uOjp+RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAg
ICAgICAoUXVldWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmlzRW1wdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OnNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmF0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAgICAgUmVtb3ZlIG1fcGVu
ZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiBiZWNhdXNlCisgICAgICAgICAgICBk
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvbigpIGlzIGNhbGxlZCBhdCB0aGUgbW9tZW50IG9mIGZsdXNo
aW5nLgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXREcmF3c0JhY2tncm91bmQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEltYWdlQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6cmVtb3ZlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6dXBkYXRlKToKKyAgICAgICAgICAgIFdlIGRvbid0IGRlYWwgd2l0
aCB0aGUgY2FzZSB3aGVuIHNlbmRpbmcgYW4gVXBkYXRlSW1hZ2VCYWNraW5nIG9wZXJhdGlvbiBm
YWlscy4KKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNv
bnRlbnRzVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg6CisgICAgICAgIChDb29yZGluYXRl
ZEltYWdlQmFja2luZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVw
ZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisgICAgICAgICAgICBXZSBkb24ndCBkZWFsIHdpdGgg
dGhlIGNhc2Ugd2hlbiBzZW5kaW5nIGEgQ3JlYXRlVXBkYXRlQXRsYXMgb3BlcmF0aW9uIGZhaWxz
LgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcyk6CisgICAgICAg
IChXZWJDb3JlOjpVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRs
YXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVXBkYXRlQXRsYXMpOgorCiAyMDEz
LTAyLTAzICBKb2FubWFyaWUgRGlnZ3MgIDxqZGlnZ3NAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXSBNYWtlIGRpc3RjaGVjayBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGY3OGJmYWNkMjUwYzY5YWQ4
Yjc4NjU4MmQ5YTc2NTc4YWQ0MDA3MGIuLjg2N2UyODRhZDMyMjFlN2Y5Y2M1YjNlNWZjZWEyOTc4
YzdiYmNhMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMy0wMi0wNCAgSHVhbmcg
RG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGluYXRl
ZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHR3
byBjaGFuZ2VzIGluIFdLMi4KKyAgICAgICAgMS4gQ2hhbmdlIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5IHRvIHVzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgorICAgICAgICAy
LiBBZGQgZW5jb2RlL2RlY29kZSBvZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uIGluCisg
ICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy4KKworICAgICAgICAqIFNo
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVy
cy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgICAgICBFbmNvZGlu
ZyBVcGRhdGVJbWFnZUJhY2tpbmcgYW5kIENyZWF0ZVVwZGF0ZUF0bGFzIGNhbiBmYWlsIHdoZW4K
KyAgICAgICAgICAgIGVuY29kaW5nIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGZhaWxz
LCBidXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIHJlY292ZXIgaW4gdGhlIGNhc2UuCisgICAgICAg
IChDb3JlSVBDKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRpbmdMYXllcnMpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJz
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXpl
Um9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjplbnF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp3
aWxsRW5xdWV1ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpvcGVyYXRpb25RdWV1
ZSk6CisKIDIwMTMtMDItMDMgIEpvYW5tYXJpZSBEaWdncyAgPGpkaWdnc0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHVEtdIE1ha2UgZGlzdGNoZWNrIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDBkNzJjYTBmZGRiYzdmZWU1MDhhZDk2YTJlMTBjZGNiZmU0ZDQ5MTcuLjdhYzhjNTg4OTAx
NDViM2JhYmUxZjk0MDQ0M2YyOTAwN2U4YjQ0MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0x
OTkzLDYgKzE5OTMsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFj
ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCmluZGV4IDkwZWZjNDBmMzc2MmQwZjIyNDg2Mjc0NTIyMzg0MTQ3YjNj
MTRkNjcuLjEyYmY3MzZhY2E1MGQzMTgzYTQxYjEwOWM3YzA1OTI2NTlhMDAyOTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtMjI0Niw2ICsyMjQ2LDggQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEN1c3RvbUZpbHRlclByb2dyYW0uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIFwK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbnMuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggXApA
QCAtMjg5MSw2ICsyODkzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkU3VyZmFjZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCAzNzM2ZjI2MDRjMGMxMDQzOTk5NTdiOThhMjUy
NWVlN2RiY2RkOWJiLi5kZjA2ZTE1OTFjZmQ5Nzc0OGEzY2E1NGQzMGQ1NGFhNjBhNDYxNWFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcApAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzeW5jQ2hpbGRyZW4oKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5z
aXplKCk7ICsraSkKICAgICAgICAgY2hpbGRJRHMuYXBwZW5kKHRvQ29vcmRpbmF0ZWRMYXllcklE
KGNoaWxkcmVuKClbaV0pKTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllckNoaWxkcmVu
KG1faWQsIGNoaWxkSURzKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5l
bnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW46OmNy
ZWF0ZShtX2lkLCBjaGlsZElEcykpOwogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAt
NTA5LDcgKzUwOSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVy
cygpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQogICAgICAgICByZXR1cm47CiAgICAg
bV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOwotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXll
ckZpbHRlcnMobV9pZCwgZmlsdGVycygpKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25R
dWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmls
dGVyczo6Y3JlYXRlKG1faWQsIGZpbHRlcnMoKSkpOwogfQogI2VuZGlmCiAKQEAgLTU3MCw3ICs1
NzAsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQog
ICAgICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKICAgICBtX2xheWVySW5mby5zaG93UmVw
YWludENvdW50ZXIgPSBpc1Nob3dpbmdSZXBhaW50Q291bnRlcigpOwogCi0gICAgbV9jb29yZGlu
YXRvci0+c3luY0xheWVyU3RhdGUobV9pZCwgbV9sYXllckluZm8pOworICAgIG1fY29vcmRpbmF0
b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6U2V0TGF5ZXJTdGF0ZTo6Y3JlYXRlKG1faWQsIG1fbGF5ZXJJbmZvKSk7CiB9CiAKIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29s
b3IsIGZsb2F0IHdpZHRoKQpAQCAtNTg3LDcgKzU4Nyw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCiAKICAgICBtX3Nob3VsZFN5bmNBbmltYXRpb25z
ID0gZmFsc2U7CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5zZXRMYXllckFuaW1hdGlvbnMobV9pZCwg
bV9hbmltYXRpb25zKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1
ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczo6Y3Jl
YXRlKG1faWQsIG1fYW5pbWF0aW9ucykpOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CkBAIC02MDQsNyArNjA0LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmND
YW52YXMoKQogICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX2Nvb3JkaW5hdG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7
CisgICAgQVNTRVJUKG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgdWludDMyX3QgZnJvbnRC
dWZmZXIgPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwor
ICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6Y3JlYXRlKG1faWQsIGZyb250QnVmZmVyKSk7
CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZOZWVk
ZWQoKQpAQCAtNjEzLDcgKzYxNSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpk
ZXN0cm95Q2FudmFzSWZOZWVkZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pc1Zh
bGlkQ2FudmFzKSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3ItPmRlc3Ryb3lDYW52YXMobV9pZCk7
CisgICAgICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6Y3JlYXRlKG1faWQpKTsKICAg
ICAgICAgbV9pc1ZhbGlkQ2FudmFzID0gZmFsc2U7CiAgICAgfQogCkBAIC02MjcsNyArNjI5LDkg
QEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUNhbnZhc0lmTmVlZGVkKCkK
IAogICAgIEFTU0VSVChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOwogICAgIGlmICghbV9pc1ZhbGlk
Q2FudmFzKSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZUNhbnZhcyhtX2lkLCBtX2Nh
bnZhc1BsYXRmb3JtTGF5ZXIpOworICAgICAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBtX2NhbnZh
c1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7CisgICAgICAgIEdyYXBoaWNzU3Vy
ZmFjZVRva2VuIHRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VU
b2tlbigpOworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1ZXVl
KENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6Y3JlYXRlKG1faWQs
IGNhbnZhc1NpemUsIHRva2VuKSk7CiAgICAgICAgIG1faXNWYWxpZENhbnZhcyA9IHRydWU7CiAg
ICAgfQogCkBAIC03MzYsNyArNzQwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3Qg
VmVjdG9yPEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCiB7CiAgICAgaWYgKGlzU2hvd2luZ1JlcGFp
bnRDb3VudGVyKCkgJiYgIXVwZGF0ZWRSZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fY29vcmRp
bmF0b3ItPnNldExheWVyUmVwYWludENvdW50KGlkKCksIGluY3JlbWVudFJlcGFpbnRDb3VudCgp
KTsKKyAgICAgICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUoKS0+ZW5xdWV1ZShDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3VudDo6Y3JlYXRlKGlk
KCksIGluY3JlbWVudFJlcGFpbnRDb3VudCgpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUhhc1BlbmRpbmdUaWxlQ3JlYXRpb24oKQpAQCAt
Nzk1LDIxICs3OTksMjEgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRp
bGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW4KIHsKICAgICBBU1NFUlQo
bV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXll
ckNoYW5nZXMoKSk7Ci0gICAgbV9jb29yZGluYXRvci0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQs
IHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1
ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGU6OmNy
ZWF0ZShpZCgpLCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CiB9CiAKIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQog
ewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+
aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT51cGRhdGVUaWxl
KGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3QpOworICAgIG1fY29vcmRpbmF0b3It
Pm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
VXBkYXRlVGlsZTo6Y3JlYXRlKGlkKCksIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsK
IH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUodWludDMyX3Qg
dGlsZUlEKQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29y
ZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIHx8IG1faXNQdXJnaW5nKTsKLSAgICBt
X2Nvb3JkaW5hdG9yLT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7CisgICAgbV9jb29yZGluYXRv
ci0+b3BlcmF0aW9uUXVldWUoKS0+ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpSZW1vdmVUaWxlOjpjcmVhdGUoaWQoKSwgdGlsZUlEKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggYTU1MWQzNTEx
YWRhNjQ0ZWJmNzMyYmVmNjJlODZhZDlkODdmMWEyMC4uNTE0ZjQ2MjlkZjA0NzQ0MzkyYzFlZjgz
MjAwODQ5NDIzZThlODFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAtMjEsNiArMjEsNyBAQAogI2lmbmRlZiBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJfaAogI2RlZmluZSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAog
CisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8u
aCIKICNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKQEAgLTQzLDM3ICs0NCwxNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI7Ci1jbGFz
cyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsKIAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hh
bmdlcygpIGNvbnN0ID0gMDsKLQotICAgIC8vIENvb3JkaW5hdGVkVGlsZUNsaWVudAotICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCkg
PSAwOwotCiAgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNy
ZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJ
bmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JikgPSAwOwotI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSA9IDA7Ci0jZW5kaWYKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENv
b3JkaW5hdGVkTGF5ZXJJRCwgUGxhdGZvcm1MYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFBsYXRmb3JtTGF5ZXIqKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7Ci0jZW5k
aWYKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExh
eWVySUQsIGludCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJikgPSAwOwot
CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciop
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkgPSAwOwogICAgIHZpcnR1
YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJ
bnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIElu
dFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
UXVldWUqIG9wZXJhdGlvblF1ZXVlKCkgPSAwOwogfTsKIAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NGJhMTgzMTQwNzU3NzkxZmM4Mjg1MWIzYzBlY2ZkMWY4YWE3MDJhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uY3BwCkBAIC0wLDAgKzEsMTcxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NT
dXJmYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+Y3JlYXRlTGF5ZXJzKGxheWVySURzKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnM6OmV4ZWN1dGUo
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+ZGVsZXRlTGF5
ZXJzKGxheWVySURzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRSb290TGF5ZXI6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sK
KyAgICBzY2VuZS0+c2V0Um9vdExheWVySUQobGF5ZXJJRCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6ZXhlY3V0ZShDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5zZXRMYXllclN0YXRlKGxheWVySUQs
IGxheWVySW5mbyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJDaGlsZHJlbjo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQor
eworICAgIHNjZW5lLT5zZXRMYXllckNoaWxkcmVuKGxheWVySUQsIGNoaWxkcmVuKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlOjpleGVjdXRlKENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPmNyZWF0ZVRpbGUo
bGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKTsKKyAgICBzY2VuZS0+dXBk
YXRlVGlsZShsYXllcklELCB0aWxlSUQsIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6VGlsZVVw
ZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGVSZWN0LCB1cGRhdGVJbmZvLmF0bGFzSUQs
IHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+dXBkYXRlVGlsZShsYXllcklELCB0aWxlSUQsIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRp
bGVSZWN0LCB1cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGU6OmV4ZWN1
dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+cmVtb3Zl
VGlsZShsYXllcklELCB0aWxlSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZSogc2NlbmUpCit7CisgICAgc2NlbmUtPmNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIHN1cmZh
Y2UpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0
ZUF0bGFzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAg
c2NlbmUtPnJlbW92ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6ZXhlY3V0ZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5jcmVhdGVJbWFnZUJhY2tpbmco
aW1hZ2VCYWNraW5nSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlVwZGF0ZUltYWdlQmFja2luZzo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNj
ZW5lKQoreworICAgIHNjZW5lLT51cGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VCYWNraW5nSUQsIHN1
cmZhY2UpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1h
Z2VCYWNraW5nQ29udGVudHM6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2Vu
ZSkKK3sKKyAgICBzY2VuZS0+Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUJhY2tpbmdJ
RCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VC
YWNraW5nOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAg
c2NlbmUtPnJlbW92ZUltYWdlQmFja2luZyhpbWFnZUJhY2tpbmdJRCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpleGVjdXRlKENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnNldExheWVyQW5p
bWF0aW9ucyhsYXllcklELCBhbmltYXRpb25zKTsKK30KKworI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVz
dEFuaW1hdGlvbkZyYW1lOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUp
Cit7CisgICAgc2NlbmUtPnJlcXVlc3RBbmltYXRpb25GcmFtZSgpOworfQorI2VuZGlmCisKKyNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6Q3JlYXRlQ2FudmFzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUp
Cit7CisgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1
cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNT
aGFyaW5nOworICAgIHNjZW5lLT5jcmVhdGVDYW52YXMobGF5ZXJJRCwgY2FudmFzU2l6ZSwgR3Jh
cGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFzU2l6ZSwgc3VyZmFjZUZsYWdzLCB0b2tlbikpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6OmV4ZWN1
dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+c3luY0Nh
bnZhcyhsYXllcklELCBmcm9udEJ1ZmZlcik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5kZXN0cm95Q2FudmFzKGxheWVySUQpOworfQorI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldExheWVyRmlsdGVyczo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5zZXRMYXllckZpbHRlcnMobGF5ZXJJRCwgZmlsdGVy
cyk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6ZXhlY3V0ZShD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5jcmVhdGVDdXN0
b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1JRCwgcHJvZ3JhbUluZm8pOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclBy
b2dyYW06OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBz
Y2VuZS0+cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtSUQpOwor
fQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJS
ZXBhaW50Q291bnQ6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sK
KyAgICBzY2VuZS0+c2V0TGF5ZXJSZXBhaW50Q291bnQobGF5ZXJJRCwgcmVwYWludENvdW50KTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29s
b3I6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2Vu
ZS0+c2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbjo6ZXhlY3V0ZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5kaWRDaGFuZ2VTY3JvbGxQb3Np
dGlvbihwb3NpdGlvbik7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFk
NzMyNGEwOTA4NTY1YjVlYmI4N2VmZWM5OWUwNTJjN2Q4MTdhNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgKQEAgLTAsMCArMSw1NTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKyNkZWZpbmUg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbl9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNv
b3JkaW5hdGVkU3VyZmFjZS5oIgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJD
dXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIgorI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJT
KQorI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKKyNlbmRpZgorI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2VUb2tlbi5oIgor
I2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOworCitjbGFzcyBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIE9wZXJhdGlvblR5cGUg
eworICAgICAgICBDcmVhdGVMYXllcnNUeXBlLAorICAgICAgICBEZWxldGVMYXllcnNUeXBlLAor
ICAgICAgICBTZXRSb290TGF5ZXJUeXBlLAorICAgICAgICBTZXRMYXllclN0YXRlVHlwZSwKKyAg
ICAgICAgU2V0TGF5ZXJDaGlsZHJlblR5cGUsCisgICAgICAgIENyZWF0ZVRpbGVUeXBlLAorICAg
ICAgICBVcGRhdGVUaWxlVHlwZSwKKyAgICAgICAgUmVtb3ZlVGlsZVR5cGUsCisgICAgICAgIENy
ZWF0ZVVwZGF0ZUF0bGFzVHlwZSwKKyAgICAgICAgUmVtb3ZlVXBkYXRlQXRsYXNUeXBlLAorICAg
ICAgICBDcmVhdGVJbWFnZUJhY2tpbmdUeXBlLAorICAgICAgICBVcGRhdGVJbWFnZUJhY2tpbmdU
eXBlLAorICAgICAgICBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzVHlwZSwKKyAgICAgICAgUmVt
b3ZlSW1hZ2VCYWNraW5nVHlwZSwKKyAgICAgICAgU2V0TGF5ZXJBbmltYXRpb25zVHlwZSwKKyNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgICAgIFJlcXVlc3RBbmltYXRp
b25GcmFtZVR5cGUsCisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAg
Q3JlYXRlQ2FudmFzVHlwZSwKKyAgICAgICAgU3luY0NhbnZhc1R5cGUsCisgICAgICAgIERlc3Ry
b3lDYW52YXNUeXBlLAorI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICBT
ZXRMYXllckZpbHRlcnNUeXBlLAorI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAg
ICAgICBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSwKKyAgICAgICAgUmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbVR5cGUsCisjZW5kaWYKKyAgICAgICAgU2V0TGF5ZXJSZXBhaW50Q291bnRU
eXBlLAorICAgICAgICBTZXRCYWNrZ3JvdW5kQ29sb3JUeXBlLAorICAgICAgICBEaWRDaGFuZ2VT
Y3JvbGxQb3NpdGlvblR5cGUsCisgICAgfTsKKworICAgIGNsYXNzIE9wZXJhdGlvbkJhc2UgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8T3BlcmF0aW9uQmFzZT4geworICAgIHB1YmxpYzoK
KyAgICAgICAgdmlydHVhbCB+T3BlcmF0aW9uQmFzZSgpIHsgfQorICAgICAgICB2aXJ0dWFsIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlw
ZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKikgPSAwOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTxPcGVyYXRpb25UeXBl
IFR5cGU+IGNsYXNzIE9wZXJhdGlvbiA6IHB1YmxpYyBPcGVyYXRpb25CYXNlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHZpcnR1YWwgfk9wZXJhdGlvbigpIHsgfQorICAgICAgICB2aXJ0dWFsIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIFR5cGU7IH0KKyAgICB9OworCisgICAgY2xhc3MgQ3JlYXRlTGF5
ZXJzIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVMYXllcnNUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
cmVhdGVMYXllcnM+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgbGF5
ZXJJRHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRl
TGF5ZXJzKGxheWVySURzKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgVmVjdG9y
PENvb3JkaW5hdGVkTGF5ZXJJRD4gbGF5ZXJJRHM7CisKKyAgICBwcml2YXRlOgorICAgICAgICBl
eHBsaWNpdCBDcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlk
cykKKyAgICAgICAgICAgIDogbGF5ZXJJRHMoaWRzKQorICAgICAgICB7IH0KKyAgICB9OworCisg
ICAgY2xhc3MgRGVsZXRlTGF5ZXJzIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnNUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxEZWxldGVMYXllcnM+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q29vcmRp
bmF0ZWRMYXllcklEPiYgbGF5ZXJJRHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRGVsZXRlTGF5ZXJzKGxheWVySURzKSk7CisgICAgICAgIH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7
CisKKyAgICAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbGF5ZXJJRHM7CisKKyAgICBw
cml2YXRlOgorICAgICAgICBleHBsaWNpdCBEZWxldGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4mIGlkcykKKyAgICAgICAgICAgIDogbGF5ZXJJRHMoaWRzKQorICAgICAg
ICB7IH0KKyAgICB9OworCisgICAgY2xhc3MgU2V0Um9vdExheWVyIDogcHVibGljIE9wZXJhdGlv
bjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXJUeXBlPiB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRSb290TGF5ZXI+IGNyZWF0ZShD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTZXRSb290TGF5ZXIobGF5ZXJJRCkpOworICAgICAgICB9CisgICAgICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURF
OworCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgZXhwbGljaXQgU2V0Um9vdExheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKKyAg
ICAgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgeyB9CisgICAgfTsKKworICAgIGNsYXNz
IFNldExheWVyU3RhdGUgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyU3RhdGVUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTZXRMYXllclN0YXRlPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVy
SUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBsYXllckluZm8pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJTdGF0ZShsYXllcklELCBsYXll
ckluZm8pKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRDsKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgU2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQs
IGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQorICAgICAgICAgICAgOiBsYXllcklE
KGlkKQorICAgICAgICAgICAgLCBsYXllckluZm8oaW5mbykKKyAgICAgICAgeyB9CisgICAgfTsK
KworCisgICAgY2xhc3MgU2V0TGF5ZXJDaGlsZHJlbiA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlblR5cGU+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNldExheWVyQ2hpbGRyZW4+IGNyZWF0ZShD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJ
RD4mIGNoaWxkcmVuKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNldExheWVyQ2hpbGRyZW4obGF5ZXJJRCwgY2hpbGRyZW4pKTsKKyAgICAgICAgfQorICAgICAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklE
RTsKKworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgVmVjdG9y
PENvb3JkaW5hdGVkTGF5ZXJJRD4gY2hpbGRyZW47CisKKyAgICBwcml2YXRlOgorICAgICAgICBT
ZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuVmVjdG9yKQorICAgICAgICAgICAgOiBsYXllcklEKGlk
KQorICAgICAgICAgICAgLCBjaGlsZHJlbihjaGlsZHJlblZlY3RvcikKKyAgICAgICAgeyB9Cisg
ICAgfTsKKworICAgIGNsYXNzIENyZWF0ZVRpbGUgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGVUeXBlPiB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVUaWxlPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXll
cklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZVRpbGUobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVj
dCwgdXBkYXRlSW5mbykpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
KENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5h
dGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICB1aW50MzJfdCB0aWxlSUQ7CisgICAgICAgIElu
dFJlY3QgdGlsZVJlY3Q7CisgICAgICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87CisK
KyAgICBwcml2YXRlOgorICAgICAgICBDcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
dWludDMyX3QgdGlsZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUlu
Zm8mIGluZm8pCisgICAgICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICAgICAsIHRpbGVJ
RCh0aWxlKQorICAgICAgICAgICAgLCB0aWxlUmVjdChyZWN0KQorICAgICAgICAgICAgLCB1cGRh
dGVJbmZvKGluZm8pCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBVcGRhdGVUaWxl
IDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVU
aWxlVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VXBkYXRl
VGlsZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRl
SW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVcGRhdGVU
aWxlKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKKyAgICAgICAgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBP
VkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAg
dWludDMyX3QgdGlsZUlEOworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0OworICAgICAgICBTdXJm
YWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVXBkYXRl
VGlsZShDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IHRpbGUsIGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiBpbmZvKQorICAgICAgICAgICAgOiBsYXll
cklEKGlkKQorICAgICAgICAgICAgLCB0aWxlSUQodGlsZSkKKyAgICAgICAgICAgICwgdGlsZVJl
Y3QocmVjdCkKKyAgICAgICAgICAgICwgdXBkYXRlSW5mbyhpbmZvKQorICAgICAgICB7IH0KKyAg
ICB9OworCisgICAgY2xhc3MgUmVtb3ZlVGlsZSA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZVR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZVRpbGU+IGNyZWF0ZShDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFJlbW92ZVRpbGUobGF5ZXJJRCwgdGlsZUlEKSk7CisgICAgICAgIH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikg
T1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAg
IHVpbnQzMl90IHRpbGVJRDsKKworICAgIHByaXZhdGU6CisgICAgICAgIFJlbW92ZVRpbGUoQ29v
cmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCB0aWxlKQorICAgICAgICAgICAgOiBsYXllcklE
KGlkKQorICAgICAgICAgICAgLCB0aWxlSUQodGlsZSkKKyAgICAgICAgeyB9CisgICAgfTsKKwor
ICAgIGNsYXNzIENyZWF0ZVVwZGF0ZUF0bGFzIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhc1R5cGU+IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZVVwZGF0ZUF0bGFzPiBjcmVhdGUodWlu
dDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlVXBkYXRlQXRs
YXMoYXRsYXNJRCwgc3VyZmFjZSkpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIHVp
bnQzMl90IGF0bGFzSUQ7CisgICAgICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZh
Y2U7CisKKyAgICBwcml2YXRlOgorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBp
ZCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKKyAg
ICAgICAgICAgIDogYXRsYXNJRChpZCkKKyAgICAgICAgICAgICwgc3VyZmFjZShjb29yZGluYXRl
ZFN1cmZhY2UpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBSZW1vdmVVcGRhdGVB
dGxhcyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlVXBkYXRlQXRsYXNUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSZW1vdmVVcGRhdGVBdGxhcz4gY3JlYXRlKHVpbnQzMl90IGF0bGFzSUQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVtb3ZlVXBkYXRlQXRsYXMoYXRs
YXNJRCkpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBleHBsaWNpdCBSZW1vdmVVcGRhdGVBdGxhcyh1aW50
MzJfdCBpZCkKKyAgICAgICAgICAgIDogYXRsYXNJRChpZCkKKyAgICAgICAgeyB9CisgICAgfTsK
KworICAgIGNsYXNzIENyZWF0ZUltYWdlQmFja2luZyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nVHlwZT4geworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3JlYXRlSW1hZ2VCYWNraW5nPiBjcmVh
dGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVJbWFnZUJhY2tpbmcoaW1hZ2VC
YWNraW5nSUQpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lEOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZXhw
bGljaXQgQ3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQpCisg
ICAgICAgICAgICA6IGltYWdlQmFja2luZ0lEKGlkKQorICAgICAgICB7IH0KKyAgICB9OworCisg
ICAgY2xhc3MgVXBkYXRlSW1hZ2VCYWNraW5nIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmdUeXBlPiB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxVcGRhdGVJbWFnZUJhY2tpbmc+IGNyZWF0ZShD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3Jk
aW5hdGVkU3VyZmFjZT4gc3VyZmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VCYWNraW5nSUQsIHN1cmZhY2UpKTsK
KyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlQmFja2luZ0lEOworICAgICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJm
YWNlOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgVXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgaWQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29y
ZGluYXRlZFN1cmZhY2UpCisgICAgICAgICAgICA6IGltYWdlQmFja2luZ0lEKGlkKQorICAgICAg
ICAgICAgLCBzdXJmYWNlKGNvb3JkaW5hdGVkU3VyZmFjZSkKKyAgICAgICAgeyB9CisgICAgfTsK
KworICAgIGNsYXNzIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMgOiBwdWJsaWMgT3BlcmF0aW9u
PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHNU
eXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzPiBjcmVhdGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJh
Y2tpbmdJRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlQmFja2luZ0lEKSk7CisgICAgICAgIH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJ
REU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRDsK
KworICAgIHByaXZhdGU6CisgICAgICAgIGV4cGxpY2l0IENsZWFySW1hZ2VCYWNraW5nQ29udGVu
dHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCkKKyAgICAgICAgICAgIDogaW1hZ2VCYWNr
aW5nSUQoaWQpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBSZW1vdmVJbWFnZUJh
Y2tpbmcgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZUltYWdlQmFja2luZ1R5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFJlbW92ZUltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VCYWNraW5nSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlQmFja2luZ0lEKSk7CisgICAgICAgIH0KKyAg
ICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZF
UlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJ
RDsKKworICAgIHByaXZhdGU6CisgICAgICAgIGV4cGxpY2l0IFJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkKQorICAgICAgICAgICAgOiBpbWFnZUJhY2tpbmdJ
RChpZCkKKyAgICAgICAgeyB9CisgICAgfTsKKworICAgIGNsYXNzIFNldExheWVyQW5pbWF0aW9u
cyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5
ZXJBbmltYXRpb25zVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2V0TGF5ZXJBbmltYXRpb25zPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQs
IGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldExheWVyQW5pbWF0aW9ucyhsYXllcklE
LCBhbmltYXRpb25zKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUo
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1h
dGlvbnM7CisKKyAgICBwcml2YXRlOgorICAgICAgICBTZXRMYXllckFuaW1hdGlvbnMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgbGF5ZXJBbmlt
YXRpb25zKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAgICAgLCBhbmltYXRp
b25zKGxheWVyQW5pbWF0aW9ucykKKyAgICAgICAgeyB9CisgICAgfTsKKworI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUg
OiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RB
bmltYXRpb25GcmFtZVR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJlcXVlc3RBbmltYXRpb25GcmFtZT4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KikgT1ZFUlJJREU7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZXF1ZXN0QW5pbWF0aW9uRnJh
bWUoKQorICAgICAgICB7IH0KKyAgICB9OworI2VuZGlmCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKKyAgICBjbGFzcyBDcmVhdGVDYW52YXMgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhc1R5cGU+IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZUNhbnZhcz4gY3JlYXRlKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBjb25zdCBHcmFwaGlj
c1N1cmZhY2VUb2tlbiYgdG9rZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ3JlYXRlQ2FudmFzKGxheWVySUQsIGNhbnZhc1NpemUsIHRva2VuKSk7CisgICAg
ICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7Cisg
ICAgICAgIEludFNpemUgY2FudmFzU2l6ZTsKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4g
dG9rZW47CisKKyAgICBwcml2YXRlOgorICAgICAgICBDcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tl
biYgc3VyZmFjZVRva2VuKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAgICAg
LCBjYW52YXNTaXplKHNpemUpCisgICAgICAgICAgICAsIHRva2VuKHN1cmZhY2VUb2tlbikKKyAg
ICAgICAgeyB9CisgICAgfTsKKworICAgIGNsYXNzIFN5bmNDYW52YXMgOiBwdWJsaWMgT3BlcmF0
aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXNUeXBlPiB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTeW5jQ2FudmFzPiBjcmVhdGUoQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN5bmNDYW52YXMobGF5ZXJJRCwgZnJv
bnRCdWZmZXIpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZExh
eWVySUQgbGF5ZXJJRDsKKyAgICAgICAgdWludDMyX3QgZnJvbnRCdWZmZXI7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBTeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3Qg
ZnJvbnRCdWZmZXJIYW5kbGUpCisgICAgICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICAg
ICAsIGZyb250QnVmZmVyKGZyb250QnVmZmVySGFuZGxlKQorICAgICAgICB7IH0KKyAgICB9Owor
CisgICAgY2xhc3MgRGVzdHJveUNhbnZhcyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhc1R5cGU+IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERlc3Ryb3lDYW52YXM+IGNyZWF0ZShDb29yZGluYXRlZExh
eWVySUQgbGF5ZXJJRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBEZXN0cm95Q2FudmFzKGxheWVySUQpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAg
ICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKworICAgIHByaXZhdGU6CisgICAgICAgIGV4
cGxpY2l0IERlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQorICAgICAgICAgICAg
OiBsYXllcklEKGlkKQorICAgICAgICB7IH0KKyAgICB9OworI2VuZGlmCisKKyNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCisgICAgY2xhc3MgU2V0TGF5ZXJGaWx0ZXJzIDogcHVibGljIE9wZXJhdGlv
bjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnNUeXBlPiB7Cisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRMYXllckZpbHRlcnM+IGNy
ZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRM
YXllckZpbHRlcnMobGF5ZXJJRCwgZmlsdGVycykpOworICAgICAgICB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisg
ICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICBGaWx0ZXJPcGVyYXRp
b25zIGZpbHRlcnM7CisKKyAgICBwcml2YXRlOgorICAgICAgICBTZXRMYXllckZpbHRlcnMoQ29v
cmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJPcGVyYXRp
b25zKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAgICAgLCBmaWx0ZXJzKGZp
bHRlck9wZXJhdGlvbnMpCisgICAgICAgIHsgfQorICAgIH07CisKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCisgICAgY2xhc3MgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBPcGVy
YXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJv
Z3JhbVR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0
ZUN1c3RvbUZpbHRlclByb2dyYW0+IGNyZWF0ZShpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlELCBj
b25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShj
dXN0b21GaWx0ZXJQcm9ncmFtSUQsIHByb2dyYW1JbmZvKSk7CisgICAgICAgIH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7
CisKKyAgICAgICAgaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICAgICAgQ3VzdG9tRmls
dGVyUHJvZ3JhbUluZm8gcHJvZ3JhbUluZm87CisKKyAgICBwcml2YXRlOgorICAgICAgICBDcmVh
dGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBwcm9ncmFtSUQsIGNvbnN0IEN1c3RvbUZpbHRlclBy
b2dyYW1JbmZvJiBpbmZvKQorICAgICAgICAgICAgOiBjdXN0b21GaWx0ZXJQcm9ncmFtSUQocHJv
Z3JhbUlEKQorICAgICAgICAgICAgLCBwcm9ncmFtSW5mbyhpbmZvKQorICAgICAgICB7IH0KKyAg
ICB9OworCisgICAgY2xhc3MgUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBPcGVy
YXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbVR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW0+IGNyZWF0ZShpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZUN1c3RvbUZp
bHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSk7CisgICAgICAgIH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7
CisKKyAgICAgICAgaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRDsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIGV4cGxpY2l0IFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IHByb2dyYW1JRCkK
KyAgICAgICAgICAgIDogY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKHByb2dyYW1JRCkKKyAgICAgICAg
eyB9CisgICAgfTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICBjbGFzcyBTZXRMYXllclJlcGFpbnRD
b3VudCA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJSZXBhaW50Q291bnRUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTZXRMYXllclJlcGFpbnRDb3VudD4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklELCBpbnQgcmVwYWludENvdW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNldExheWVyUmVwYWludENvdW50KGxheWVySUQsIHJlcGFpbnRDb3VudCkp
OworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklEOworICAgICAgICBpbnQgcmVwYWludENvdW50OworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
U2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgY291bnQpCisg
ICAgICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAgICAgICAsIHJlcGFpbnRDb3VudChjb3Vu
dCkKKyAgICAgICAgeyB9CisgICAgfTsKKworICAgIGNsYXNzIFNldEJhY2tncm91bmRDb2xvciA6
IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dy
b3VuZENvbG9yVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2V0QmFja2dyb3VuZENvbG9yPiBjcmVhdGUoY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldEJhY2tncm91bmRDb2xvcihjb2xv
cikpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvbG9yIGNvbG9yOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgZXhwbGljaXQgU2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9y
JiBiYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgICAgICA6IGNvbG9yKGJhY2tncm91bmRDb2xvcikK
KyAgICAgICAgeyB9CisgICAgfTsKKworICAgIGNsYXNzIERpZENoYW5nZVNjcm9sbFBvc2l0aW9u
IDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEaWRDaGFu
Z2VTY3JvbGxQb3NpdGlvblR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERpZENoYW5nZVNjcm9sbFBvc2l0aW9uPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlk
Q2hhbmdlU2Nyb2xsUG9zaXRpb24ocG9zaXRpb24pKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKwor
ICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZXhw
bGljaXQgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9z
aXRpb24pCisgICAgICAgICAgICA6IHBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKQorICAgICAgICB7
IH0KKyAgICB9OworCisgICAgY2xhc3MgUXVldWUgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCB+UXVldWUoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGVucXVldWUoUGFzc1JlZlB0
cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25CYXNlPikgPSAwOworICAg
IH07CisKK307IC8vIGNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODA2MWM0ZDNlZjU1NDZhOWIy
N2Q2MmIxZTA3MTFmZjIzZTA4NTlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25zLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBD
b21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbnNfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9ucyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
dm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVy
YXRpb25CYXNlPiBvcGVyYXRpb24pIHsgbV9vcGVyYXRpb25zLmFwcGVuZChvcGVyYXRpb24pOyB9
CisgICAgdm9pZCBjbGVhcigpIHsgbV9vcGVyYXRpb25zLmNsZWFyKCk7IH0KKworICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7IH0KKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5zaXplKCk7IH0KKyAgICBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25CYXNlKiBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBtX29wZXJhdGlvbnMuc2l6
ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9ucy5hdChpbmRleCkuZ2V0KCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFZlY3RvcjxSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6T3BlcmF0aW9uQmFzZT4gPiBtX29wZXJhdGlvbnM7Cit9OworCit9CisjZW5kaWYKKwor
I2VuZGlmIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zX2gKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCBk
MjE1ZmIzNjEzYjkwN2I2YjFkOWY1ZTg5MTE5ZGJiMjY0NGY0NTk0Li5kN2RiMjM1OGRkZWJkMzQ3
MzVkOWY2ZjhhM2RhMmVlMTVlMjk0NzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIgogCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIK
QEAgLTIxNSw3ICsyMTYsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YWRqdXN0
UG9zaXRpb25Gb3JGaXhlZExheWVycygpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIHsK
LSAgICBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsK
KyAgICBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOwogfQogCiAj
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBAIC01NTQsOSArNTU1LDEwIEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygp
CiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CiB9CiAKLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpmbHVzaExheWVyQ2hhbmdlcygpCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bnMoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCiB7Ci0g
ICAgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENv
bnRlbnRzU2Nyb2xsUG9zaXRpb247CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRp
b25zLnNpemUoKTsgaSsrKQorICAgICAgICBvcGVyYXRpb25zLmF0KGkpLT5leGVjdXRlKHRoaXMp
OwogCiAgICAgLy8gU2luY2UgdGhlIGZyYW1lIGhhcyBub3cgYmVlbiByZW5kZXJlZCwgd2UgY2Fu
IHNhZmVseSB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgdW50aWwgdGhlIG5leHQgbGF5b3V0LgogICAg
IHNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4IGNmYWIxNjYyZDFhYzVjNDIzZmQ1
MDEwYjAxY2Q3ZTQwNjM2OTMzODMuLmYwNGE5M2ZkNGYzYmFlMDk4YTIyODRkNGMzOGJmNDc1YWZi
Mzg1MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lX2gKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllcklu
Zm8uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKQEAgLTQyLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOwor
Y2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM7CiBjbGFzcyBDdXN0b21GaWx0ZXJQ
cm9ncmFtOwogY2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm87CiBjbGFzcyBUZXh0dXJlTWFw
cGVyTGF5ZXI7CkBAIC04MiwxMyArODQsNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2b2lkIHNl
dENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250
ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbik7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCi0gICAgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBJbnRT
aXplJiwgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KTsKLSAgICB2b2lkIHN5bmNDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0
cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExheWVy
UmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKIAogICAgIHZvaWQg
ZGV0YWNoKCk7CiAgICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYp
OwpAQCAtOTgsMzggKzkzLDQ2IEBAIHB1YmxpYzoKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMo
KTsKICAgICB2b2lkIHNldEFjdGl2ZShib29sKTsKIAorICAgIHZvaWQgY29tbWl0Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbnMoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMm
KTsKKyAgICB2b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CisKKyAgICAvLyBCZWdpbiBv
cGVyYXRpb24gZXhlY3V0aW9ucy4KICAgICB2b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8
Q29vcmRpbmF0ZWRMYXllcklEPiYpOwogICAgIHZvaWQgZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+Jik7CiAgICAgdm9pZCBzZXRSb290TGF5ZXJJRChDb29yZGlu
YXRlZExheWVySUQpOwotICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7CiAgICAgdm9pZCBzZXRMYXll
clN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsK
LSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRMYXllckZpbHRlcnMoQ29vcmRp
bmF0ZWRMYXllcklELCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFt
cyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKLSAgICB2b2lkIGNyZWF0
ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5m
byYpOwotICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwotI2VuZGlm
Ci0KKyAgICB2b2lkIHNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBW
ZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwogICAgIHZvaWQgY3JlYXRlVGlsZShDb29yZGlu
YXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgZmxvYXQgc2NhbGUpOwotICAgIHZvaWQgcmVt
b3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7CiAgICAgdm9pZCB1
cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxl
VXBkYXRlJik7CisgICAgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlEKTsKICAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQs
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPik7CiAgICAgdm9pZCByZW1vdmVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lEKTsKLSAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7CiAg
ICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAg
ICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFz
c1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKICAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5n
Q29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCByZW1vdmVJbWFn
ZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCBzZXRMYXllckFu
aW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9u
cyYpOwotICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKLSAgICB2b2lkIHNldEJh
Y2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwotICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5k
KGJvb2wgZW5hYmxlKSB7IG1fc2V0RHJhd3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9Ci0KICNpZiBF
TkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9u
RnJhbWUoKTsKICNlbmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZvaWQgY3Jl
YXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPik7CisgICAgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgdWludDMyX3QgZnJvbnRCdWZmZXIpOworICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGlu
YXRlZExheWVySUQpOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQg
c2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYpOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIHZvaWQgY3JlYXRlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7
CisgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7CisjZW5kaWYKKyAg
ICB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVl
KTsKKyAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQg
ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pOworICAg
IC8vIEVuZCBvcGVyYXRpb24gZXhlY3V0aW9ucy4KKworICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3Jv
dW5kKGJvb2wgZW5hYmxlKSB7IG1fc2V0RHJhd3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9CiAKIHBy
aXZhdGU6CiAgICAgR3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCkKQEAgLTE3MCw2ICsxNzMsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqKTsKICAgICB2b2lkIHJlc2V0QmFja2luZ1N0b3Jl
U2l6ZVRvTGF5ZXJTaXplKEdyYXBoaWNzTGF5ZXIqKTsKIAorI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKKyAgICB2b2lkIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0OworI2VuZGlmCisKICAgICBGbG9hdFNpemUgbV9j
b250ZW50c1NpemU7CiAgICAgRmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKIApAQCAt
MjA4LDcgKzIxNSw2IEBAIHByaXZhdGU6CiAgICAgTGF5ZXJSYXdQdHJNYXAgbV9maXhlZExheWVy
czsKICAgICBDb29yZGluYXRlZExheWVySUQgbV9yb290TGF5ZXJJRDsKICAgICBGbG9hdFBvaW50
IG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQgbV9wZW5k
aW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwogICAgIGJvb2wgbV9hbmltYXRpb25z
TG9ja2VkOwogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICBib29sIG1f
YW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAppbmRleCAxMjhiYWJlMjk4ZjY2Y2JjMjc2OWNm
NmZmOGVhOTgyMjlkNTE1NTc3Li5mNGI5NjU5ZmNjNmM1OWYzNDcxMTIzMjc0MDBhMWE5YzcyYTBl
MjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdl
QmFja2luZy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCIKIAorI2luY2x1ZGUgIkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTMgKzM5LDEzIEBAIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQoCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRD4oaW1hZ2UpOwogfQogCi1QYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nPiBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKENvb3JkaW5hdG9yKiBjbGllbnQs
IFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQorUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFj
a2luZz4gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZShDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpRdWV1ZSogcXVldWUsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoY2xpZW50LCBpbWFn
ZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcocXVl
dWUsIGltYWdlKSk7CiB9CiAKLUNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZElt
YWdlQmFja2luZyhDb29yZGluYXRvciogY2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkK
LSAgICA6IG1fY29vcmRpbmF0b3IoY2xpZW50KQorQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVl
KiBxdWV1ZSwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCisgICAgOiBtX29wZXJhdGlvblF1ZXVl
KHF1ZXVlKQogICAgICwgbV9pbWFnZShpbWFnZSkKICAgICAsIG1faWQoZ2V0Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRChtX2ltYWdlLmdldCgpKSkKICAgICAsIG1fY2xlYXJDb250ZW50c1RpbWVy
KHRoaXMsICZDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQp
CkBAIC01NCw3ICs1NSw3IEBAIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZElt
YWdlQmFja2luZyhDb29yZGluYXRvciogY2xpZW50LCBQYXNzUmVmUHRyCiAgICAgLy8gRklYTUU6
IFdlIHdvdWxkIG5lZWQgdG8gZGVjb2RlIGEgc21hbGwgaW1hZ2UgZGlyZWN0bHkgaW50byBhIEdy
YXBoaWNzU3VyZmFjZS4KICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMTQyNgogCi0gICAg
bV9jb29yZGluYXRvci0+Y3JlYXRlSW1hZ2VCYWNraW5nKGlkKCkpOworICAgIG1fb3BlcmF0aW9u
UXVldWUtPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VC
YWNraW5nOjpjcmVhdGUoaWQoKSkpOwogfQogCiBDb29yZGluYXRlZEltYWdlQmFja2luZzo6fkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nKCkKQEAgLTc0LDcgKzc1LDcgQEAgdm9pZCBDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6cmVtb3ZlSG9zdChIb3N0KiBob3N0KQogICAgIG1faG9zdHMucmVtb3Zl
KHBvc2l0aW9uKTsKIAogICAgIGlmIChtX2hvc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29y
ZGluYXRvci0+cmVtb3ZlSW1hZ2VCYWNraW5nKGlkKCkpOworICAgICAgICBtX29wZXJhdGlvblF1
ZXVlLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFj
a2luZzo6Y3JlYXRlKGlkKCkpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6
bWFya0RpcnR5KCkKQEAgLTExMyw5ICsxMTQsOCBAQCB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjp1cGRhdGUoKQogCiAgICAgbV9uYXRpdmVJbWFnZVB0ciA9IG1faW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKLSAgICAvLyBJZiBzZW5kaW5nIHRoZSBtZXNzYWdlIGZh
aWxzLCB0cnkgYWdhaW4gaW4gdGhlIG5leHQgdXBkYXRlLgotICAgIGJvb2wgc3VjY2VzcyA9IG1f
Y29vcmRpbmF0b3ItPnVwZGF0ZUltYWdlQmFja2luZyhpZCgpLCBtX3N1cmZhY2UpOwotICAgIG1f
aXNEaXJ0eSA9ICFzdWNjZXNzOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWUoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQoKSwg
bV9zdXJmYWNlKSk7CisgICAgbV9pc0RpcnR5ID0gZmFsc2U7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc6OnJlbGVhc2VTdXJmYWNlSWZOZWVkZWQoKQpAQCAtMTU2LDcgKzE1Niw3
IEBAIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZVZpc2liaWxpdHlJZk5lZWRl
ZChib29sJiBjaGFuZ2VkVG9WaXNpYmxlKQogCiB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpjbGVhckNvbnRlbnRzVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZEltYWdlQmFja2luZz4q
KQogewotICAgIG1fY29vcmRpbmF0b3ItPmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaWQoKSk7
CisgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzOjpjcmVhdGUoaWQoKSkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEltYWdlQmFja2luZy5oCmluZGV4IDViNWI1N2E2ZWNiMTAxZWY3NWIyOTE5MWI1NzUwN2Jl
ZGRhMmY3NjUuLjhiZjRkYjY1NzkxYmRiNWViMGIwZTRlZTNiMDU0NjQ5Mjg4MTVkMGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCkBA
IC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nX2gKIAogI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRl
ICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJJbWFnZS5oIgpAQCAtMzksMjAgKzQw
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcgOiBwdWJsaWMgUmVmQ291bnRlZDxDb29yZGluYXRlZEltYWdlQmFja2luZz4gewogcHVibGlj
OgotICAgIGNsYXNzIENvb3JkaW5hdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgPSAwOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwotICAgIH07Ci0KICAgICBjbGFzcyBIb3N0IHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpbWFnZUJhY2tpbmdWaXNpYmxlKCkg
PSAwOwogICAgIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFj
a2luZz4gY3JlYXRlKENvb3JkaW5hdG9yKiwgUGFzc1JlZlB0cjxJbWFnZT4pOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGUoQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UXVldWUqLCBQYXNzUmVmUHRyPEltYWdlPik7CiAgICAgdmlydHVh
bCB+Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoKTsKIAogICAgIHN0YXRpYyBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoSW1hZ2UqKTsKQEAgLTY4
LDEzICs2MSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGUoKTsKIAogcHJpdmF0ZToKLSAg
ICBDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciosIFBhc3NSZWZQdHI8SW1hZ2U+
KTsKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpRdWV1ZSosIFBhc3NSZWZQdHI8SW1hZ2U+KTsKIAogICAgIHZvaWQgcmVsZWFzZVN1cmZh
Y2VJZk5lZWRlZCgpOwogICAgIHZvaWQgdXBkYXRlVmlzaWJpbGl0eUlmTmVlZGVkKGJvb2wmIGNo
YW5nZWRUb1Zpc2libGUpOwogICAgIHZvaWQgY2xlYXJDb250ZW50c1RpbWVyRmlyZWQoVGltZXI8
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+Kik7CiAKLSAgICBDb29yZGluYXRvciogbV9jb29yZGlu
YXRvcjsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogbV9vcGVyYXRp
b25RdWV1ZTsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAgTmF0aXZlSW1hZ2VQdHIg
bV9uYXRpdmVJbWFnZVB0cjsKICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIG1faWQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oCmluZGV4IDZhYjM4NGEx
MWVhYTVlYTI1NDA4MTNjNzAyNWU1ZmM4YzE3ZDM5MTAuLmVhOGIyNWZlZjZlOTc3MjkyZjBlMzg4
ZDQ4NjQyZmEyMjliNTA5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBk
YXRlSW5mby5oCkBAIC0yMywxMyArMjMsMTAgQEAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm8gewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFN1cmZhY2VVcGRhdGVJbmZvKTsKLQogcHVibGljOgogICAg
IFN1cmZhY2VVcGRhdGVJbmZvKCkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRs
YXMuY3BwCmluZGV4IDM2NGYwNjg3MTA4MmI1OGZjYmQ4M2EwZWYzMTQ1MGJlNDgwMDg0OGIuLjVl
ZGMyZmU3ODI5ZjNhZmFiNzBiOWNjYTRlMWRiZTc2ZDA5ODEwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxh
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1VwZGF0ZUF0bGFzLmNwcApAQCAtMjMsMTQgKzIzLDE1IEBACiAKICNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCiAKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
VXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiBjbGllbnQsIGludCBk
aW1lbnNpb24sIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3MpCi0gICAgOiBtX2NsaWVu
dChjbGllbnQpCitVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6UXVldWUqIHF1ZXVlLCBpbnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6
OkZsYWdzIGZsYWdzKQorICAgIDogbV9vcGVyYXRpb25RdWV1ZShxdWV1ZSkKICAgICAsIG1faW5h
Y3Rpdml0eUluU2Vjb25kcygwKQogewogICAgIHN0YXRpYyB1aW50MzJfdCBuZXh0SUQgPSAwOwpA
QCAtMzgsMTUgKzM5LDEyIEBAIFVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0Ns
aWVudCogY2xpZW50LCBpbnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1CiAgICAgSW50U2l6ZSBz
aXplID0gbmV4dFBvd2VyT2ZUd28oSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbikpOwogICAg
IG1fc3VyZmFjZSA9IENvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKHNpemUsIGZsYWdzKTsKIAot
ICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIGlmIHNlbmRpbmcgdGhlIG1lc3NhZ2UgZmFpbHMsIFVw
ZGF0ZUF0bGFzIGdpdmVzIHVwIGRyYXdpbmcgYW55dGhpbmcgaW1wbGljaXRseS4KLSAgICBpZiAo
IW1fY2xpZW50LT5jcmVhdGVVcGRhdGVBdGxhcyhtX0lELCBtX3N1cmZhY2UpKQotICAgICAgICBt
X3N1cmZhY2UuY2xlYXIoKTsKKyAgICBtX29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVlKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzOjpjcmVhdGUobV9JRCwgbV9z
dXJmYWNlKSk7CiB9CiAKIFVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMoKQogewotICAgIGlmICht
X3N1cmZhY2UpCi0gICAgICAgIG1fY2xpZW50LT5yZW1vdmVVcGRhdGVBdGxhcyhtX0lEKTsKKyAg
ICBtX29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlJlbW92ZVVwZGF0ZUF0bGFzOjpjcmVhdGUobV9JRCkpOwogfQogCiB2b2lkIFVwZGF0ZUF0bGFz
OjpidWlsZExheW91dElmTmVlZGVkKCkKQEAgLTcyLDkgKzcwLDYgQEAgUGFzc093blB0cjxHcmFw
aGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIo
dWludDMyX3QKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBQYXNzT3du
UHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKIAotICAgIGlmICghbV9zdXJmYWNlKQotICAgICAgICBy
ZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7Ci0KICAgICBhdGxhc0lEID0gbV9J
RDsKIAogICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3Rl
ciB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaAppbmRleCA0OGE2YmY4
NDRhNDkwZjdmZDJjMzlhMDQyNGUzMzBmZGRiMTZkNzhiLi4xNjMxMzhmMTdjMjU2NDA3M2Q5YjU2
ODZiMGE0Mzg4MjlhY2Y0ZDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaApA
QCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBVcGRhdGVBdGxhc19oCiAKICNpbmNsdWRlICJBcmVh
QWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKIApA
QCAtMzEsMTYgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKIGNsYXNzIEludFBvaW50OwogCi1jbGFzcyBVcGRhdGVBdGxhc0NsaWVudCB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQs
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSA9IDA7Ci19OwotCiBjbGFzcyBVcGRh
dGVBdGxhcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRlQXRsYXMpOwogcHVibGlj
OgotICAgIFVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiwgaW50IGRpbWVuc2lvbiwgQ29v
cmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7CisgICAgVXBkYXRlQXRsYXMoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UXVldWUqLCBpbnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6
OkZsYWdzKTsKICAgICB+VXBkYXRlQXRsYXMoKTsKIAogICAgIGlubGluZSBJbnRTaXplIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnNpemUoKTsgfQpAQCAtNjYsNyArNjEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwogCiBwcml2YXRlOgotICAg
IFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpRdWV1ZSogbV9vcGVyYXRpb25RdWV1ZTsKICAgICBPd25QdHI8R2VuZXJhbEFyZWFB
bGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiBtX3N1cmZhY2U7CiAgICAgZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4
IDVhMDZkMTE2OGMyMjc2MDJjYTIwYzFiYzI4MGQxNzY5NzI2YTA1ODguLjlhYjZjMjBhZmJmYTUw
N2EwZTEwYjFmZTI5Njc3MTg1MDM4NTc5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVy
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApAQCAtMjksOSArMjksMTEgQEAKICNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKIAogI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIK
ICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Fu
aW1hdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29y
ZGluYXRlZExheWVySW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludDNELmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+CkBAIC03Myw5ICs3NSw3
IEBACiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0jaWYgRU5BQkxFKENTU19T
SEFERVJTKQogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLSNlbmRpZgogCiBuYW1lc3BhY2UgQ29y
ZUlQQyB7CiAKQEAgLTgzNSw2ICs4MzUsMzg0IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxTdXJmYWNl
VXBkYXRlSW5mbz46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFN1cmZhY2VVCiAg
ICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUo
ZGVjb2Rlciwgc3VyZmFjZVVwZGF0ZUluZm8pOwogfQogCit2b2lkIEFyZ3VtZW50Q29kZXI8Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKK3sK
KyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihvcGVyYXRpb25zLnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRpb25zLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2Uq
IG9wZXJhdGlvbiA9IG9wZXJhdGlvbnMuYXQoaSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRW51
bShvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSk7CisKKyAgICAgICAgc3dpdGNoIChvcGVy
YXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVyc1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxh
eWVycyo+KG9wZXJhdGlvbiktPmxheWVySURzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzVHlwZToKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRHM7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRSb290TGF5ZXJUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXIqPihvcGVyYXRpb24p
LT5sYXllcklEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZVR5cGU6CisgICAgICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExh
eWVyU3RhdGUqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0
YXRlKj4ob3BlcmF0aW9uKS0+bGF5ZXJJbmZvOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlblR5cGU6
CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW4qPihvcGVyYXRpb24pLT5sYXllcklEOwor
ICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuKj4ob3BlcmF0aW9uKS0+Y2hpbGRyZW47Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVUaWxlVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlv
biktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxl
SUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlUmVjdDsKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6Q3JlYXRlVGlsZSo+KG9wZXJhdGlvbiktPnVwZGF0ZUluZm87CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpV
cGRhdGVUaWxlVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJhdGlvbiktPmxh
eWVySUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlSUQ7Cisg
ICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlVwZGF0ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlUmVjdDsKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6VXBkYXRlVGlsZSo+KG9wZXJhdGlvbiktPnVwZGF0ZUluZm87CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVU
aWxlVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZSo+KG9wZXJhdGlvbiktPmxheWVySUQ7
CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGUqPihvcGVyYXRpb24pLT50aWxlSUQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpD
cmVhdGVVcGRhdGVBdGxhc1R5cGU6IHsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXMq
PihvcGVyYXRpb24pLT5hdGxhc0lEOworICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
KiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZh
Y2UqPihzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVVcGRhdGVBdGxhcyo+KG9wZXJhdGlvbiktPnN1cmZhY2UuZ2V0KCkpOworICAgICAgICAgICAg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICAgICAgLy8gRklY
TUU6IFdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHRoYXQgaGFuZGxlIGNyZWF0aW9uIGlz
IGZhaWxlZC4KKyAgICAgICAgICAgIHdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxl
KGhhbmRsZSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6UmVtb3ZlVXBkYXRlQXRsYXNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxh
cyo+KG9wZXJhdGlvbiktPmF0bGFzSUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmdUeXBlOgor
ICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tp
bmdJRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZ1R5cGU6IHsKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBk
YXRlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VCYWNraW5nSUQ7CisgICAgICAgICAg
ICBXZWJDb29yZGluYXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19j
YXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFjZSo+KHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbiktPnN1cmZh
Y2UuZ2V0KCkpOworICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFu
ZGxlOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoZSBjYXNl
IHRoYXQgaGFuZGxlIGNyZWF0aW9uIGlzIGZhaWxlZC4KKyAgICAgICAgICAgIHdlYkNvb3JkaW5h
dGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IGhhbmRsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGU6
CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMqPihvcGVyYXRpb24pLT5p
bWFnZUJhY2tpbmdJRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZ1R5cGU6CisgICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6U2V0TGF5ZXJBbmltYXRpb25zVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRp
b25zKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRp
b25zKj4ob3BlcmF0aW9uKS0+YW5pbWF0aW9uczsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIEVO
QUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUeXBlOgorICAgICAgICAgICAg
YnJlYWs7CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgY2FzZSBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXNUeXBlOgorICAgICAgICAg
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVDYW52YXMqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpD
cmVhdGVDYW52YXMqPihvcGVyYXRpb24pLT5jYW52YXNTaXplOworICAgICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVDYW52YXMqPihvcGVyYXRpb24pLT50b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXNUeXBlOgorICAg
ICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTeW5jQ2FudmFzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6U3luY0NhbnZhcyo+KG9wZXJhdGlvbiktPmZyb250QnVmZmVyOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNh
bnZhc1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXMqPihvcGVyYXRpb24pLT5sYXll
cklEOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0
ZXJzVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzKj4ob3BlcmF0aW9uKS0+bGF5
ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzKj4ob3BlcmF0aW9uKS0+ZmlsdGVy
czsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQor
ICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZp
bHRlclByb2dyYW1UeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFt
Kj4ob3BlcmF0aW9uKS0+Y3VzdG9tRmlsdGVyUHJvZ3JhbUlEOworICAgICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVDdXN0b21GaWx0ZXJQcm9ncmFtKj4ob3BlcmF0aW9uKS0+cHJvZ3JhbUluZm87CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbSo+KG9wZXJhdGlvbiktPmN1c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICAg
ICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnRUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8
PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXll
clJlcGFpbnRDb3VudCo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExh
eWVyUmVwYWludENvdW50Kj4ob3BlcmF0aW9uKS0+cmVwYWludENvdW50OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFj
a2dyb3VuZENvbG9yVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yKj4ob3Bl
cmF0aW9uKS0+Y29sb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvblR5cGU6CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKj4ob3BlcmF0aW9uKS0+cG9zaXRpb247
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucz46OmRl
Y29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25zJiBvcGVyYXRpb25zKQoreworICAgIHVuc2lnbmVkIG9wZXJhdGlvbnNTaXplOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUob3BlcmF0aW9uc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnNTaXplOyArK2kpIHsKKyAg
ICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlOwor
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnNUeXBlOiB7CisgICAgICAgICAgICBW
ZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBpZHM7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGlkcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
b3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5
ZXJzOjpjcmVhdGUoaWRzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyc1R5cGU6IHsK
KyAgICAgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGlkczsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoaWRzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpEZWxldGVMYXllcnM6OmNyZWF0ZShpZHMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9v
dExheWVyVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllcjo6Y3JlYXRlKGxheWVySUQpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZVR5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklE
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBDb29yZGluYXRl
ZExheWVySW5mbyBsYXllckluZm87CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxh
eWVySW5mbykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0
ZTo6Y3JlYXRlKGxheWVySUQsIGxheWVySW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXll
ckNoaWxkcmVuVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+
IGNoaWxkcmVuOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjaGlsZHJlbikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBl
bmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjo6Y3JlYXRl
KGxheWVySUQsIGNoaWxkcmVuKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGVUeXBlOiB7
CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZSh0aWxlSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIEludFJlY3QgdGlsZVJlY3Q7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRp
bGVSZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTdXJm
YWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh1cGRhdGVJbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVU
aWxlOjpjcmVhdGUobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90IHRp
bGVJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGlsZUlEKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBJbnRSZWN0IHRpbGVSZWN0OworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0aWxlUmVjdCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgU3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodXBkYXRlSW5mbykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6Y3JlYXRlKGxheWVySUQsIHRpbGVJ
RCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZVR5
cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB1aW50MzJfdCB0aWxlSUQ7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHRpbGVJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
UmVtb3ZlVGlsZTo6Y3JlYXRlKGxheWVySUQsIHRpbGVJRCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpD
cmVhdGVVcGRhdGVBdGxhc1R5cGU6IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7Cisg
ICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGF0bGFzSUQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxl
IGhhbmRsZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKGF0
bGFzSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXNUeXBlOiB7CisgICAgICAgICAgICB1aW50MzJfdCBh
dGxhc0lEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhdGxhc0lEKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhczo6Y3JlYXRlKGF0
bGFzSUQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nVHlwZTogeworICAg
ICAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZDsKKyAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNy
ZWF0ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlkKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUlt
YWdlQmFja2luZ1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aWQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlkKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRs
ZSBoYW5kbGU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUo
aWQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGU6IHsKKyAgICAgICAgICAgIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGlkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRp
b25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2lu
Z0NvbnRlbnRzOjpjcmVhdGUoaWQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNr
aW5nVHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZDsKKyAg
ICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaWQpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlkKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyQW5pbWF0aW9uc1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVk
TGF5ZXJJRCBpZDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaWQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRp
b25zIGFuaW1hdGlvbnM7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFuaW1hdGlv
bnMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlv
bnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9u
czo6Y3JlYXRlKGlkLCBhbmltYXRpb25zKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICAgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWVUeXBlOgorICAg
ICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
UmVxdWVzdEFuaW1hdGlvbkZyYW1lOjpjcmVhdGUoKSk7CisgICAgICAgICAgICBicmVhazsKKyNl
bmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICBjYXNlIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhc1R5cGU6IHsKKyAgICAgICAgICAgIENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShs
YXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBJbnRT
aXplIGNhbnZhc1NpemU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNhbnZhc1Np
emUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIEdyYXBoaWNz
U3VyZmFjZVRva2VuIHRva2VuOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0b2tl
bikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9u
cy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzOjpjcmVh
dGUobGF5ZXJJRCwgY2FudmFzU2l6ZSwgdG9rZW4pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0Nh
bnZhc1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB1aW50MzJfdCBmcm9udEJ1ZmZlcjsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZnJvbnRCdWZmZXIpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6OmNyZWF0ZShsYXllcklELCBmcm9udEJ1ZmZlcikp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzVHlwZTogeworICAgICAgICAgICAgQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52
YXM6OmNyZWF0ZShsYXllcklEKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2Vu
ZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyc1R5cGU6IHsKKyAgICAgICAgICAgIENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShs
YXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXZWJD
b3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGZpbHRlcnMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExh
eWVyRmlsdGVyczo6Y3JlYXRlKGxheWVySUQsIGZpbHRlcnMpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVR5cGU6IHsKKyAgICAgICAgICAgIGludCBjdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgV2ViQ29yZTo6Q3VzdG9tRmlsdGVy
UHJvZ3JhbUluZm8gcHJvZ3JhbUluZm87CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHByb2dyYW1JbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVD
dXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlELCBwcm9ncmFt
SW5mbykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZTog
eworICAgICAgICAgICAgaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3Vz
dG9tRmlsdGVyUHJvZ3JhbUlEKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2Vu
ZGlmCisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJS
ZXBhaW50Q291bnRUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJ
RDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIHJlcGFp
bnRDb3VudDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVwYWludENvdW50KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFw
cGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3VudDo6
Y3JlYXRlKGxheWVySUQsIHJlcGFpbnRDb3VudCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNr
Z3JvdW5kQ29sb3JUeXBlOiB7CisgICAgICAgICAgICBDb2xvciBjb2xvcjsKKyAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3IpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldEJhY2tncm91bmRDb2xvcjo6Y3JlYXRlKGNvbG9yKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uVHlwZTogeworICAgICAgICAgICAgRmxvYXRQb2lu
dCBwb3NpdGlvbjsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocG9zaXRpb24pKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9u
OjpjcmVhdGUocG9zaXRpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwogCiAjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRD
b2RlcnMuaAppbmRleCA4ZTdkZWVmYjNmZWExN2Y5ODVlNTgzZTczMTAzZWY4YmFjMjk1MTFlLi5j
YWRjOTlmZTM1YmRjZTk2YjQyNTE5MmI4MTc1NTMwMDFjZTc0ZjBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
QXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOwogY2xhc3MgRmxvYXRQb2ludDNE
OwogY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJBbmlt
YXRpb25zOwpAQCAtMTE3LDYgKzExOCwxMSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvPiB7CiAgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7CiB9OwogCit0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25zPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYs
IGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJik7CisgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25zJik7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCiAKICNlbmRp
ZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKaW5kZXggOTg2NDkzYzMyZmY4NDYyOGEz
ZTBiMGViYjNhMDUxYjc0MTU5Mzc1OC4uOTU1ZmRiOTM4YTMzNjdiZTAwMDQ4YmY1MzA0NDY0NDhl
NWNlMGY4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5LmNwcApAQCAtMjMsMTYgKzIzLDExIEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuaCIKIAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dE1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9Db29yZGluYXRlZExheWVySW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NTdXJmYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVwZGF0ZUluZm8uaD4KLQotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5o
IgotI2VuZGlmCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKQEAgLTU5LDc4ICs1NCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0CiAgICAgbV9z
Y2VuZS0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9uKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxheWVy
SUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOwotICAgIHVwZGF0ZVRpbGVGb3JM
YXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5h
dGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZVRpbGUsIG1fc2Nl
bmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpUaWxl
VXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8uYXRsYXNJ
RCwgdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxheWVySUQs
IHRpbGVJRCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVh
dGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZh
Y2U6OkhhbmRsZSYgaGFuZGxlKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVXBkYXRlQXRsYXMsIG1fc2NlbmUuZ2V0KCksIGF0bGFz
SUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3Qg
YXRsYXNJRCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OnJlbW92ZVVwZGF0ZUF0bGFzLCBtX3NjZW5lLmdldCgpLCBhdGxhc0lEKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5
ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCi17Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcnMsIG1f
c2NlbmUuZ2V0KCksIGlkcykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYgaWRzKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6ZGVsZXRlTGF5ZXJzLCBtX3NjZW5lLmdldCgpLCBpZHMpKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29v
cmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6c2V0Um9vdExheWVySUQsIG1fc2NlbmUuZ2V0KCksIGlkKSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5
ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZv
JiBpbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6c2V0TGF5ZXJTdGF0ZSwgbV9zY2VuZS5nZXQoKSwgaWQsIGluZm8pKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckNoaWxk
cmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJ
RD4mIGNoaWxkcmVuKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6c2V0TGF5ZXJDaGlsZHJlbiwgbV9zY2VuZS5nZXQoKSwgaWQsIGNoaWxkcmVu
KSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVy
SUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckZpbHRlcnMsIG1f
c2NlbmUuZ2V0KCksIGlkLCBmaWx0ZXJzKSk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUN1c3Rv
bUZpbHRlclByb2dyYW0oaW50IGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9zY2VuZS5n
ZXQoKSwgaWQpKTsKLX0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5m
byYgcHJvZ3JhbUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtLCBtX3NjZW5lLmdldCgpLCBp
ZCwgcHJvZ3JhbUluZm8pKTsKLX0KLSNlbmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIGNv
bnN0IEludFJlY3QmIGNvdmVyZWRSZWN0KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpCiB7Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpmbHVzaExh
eWVyQ2hhbmdlcywgbV9zY2VuZS5nZXQoKSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bnMsIG1fc2NlbmUuZ2V0KCksIG9wZXJhdGlvbnMpKTsKICAgICB1cGRhdGVWaWV3cG9ydCgpOwog
I2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFn
ZSgpLT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsKQEAgLTE0MCwy
NCArNjYsOSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJG
cmFtZShjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsCiAjZW5kaWYKIH0KIAotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUltYWdlQmFja2luZywgbV9zY2VuZS5nZXQoKSwg
aW1hZ2VJRCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRh
dGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBjb25zdCBX
ZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQotewotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlSW1hZ2VCYWNraW5nLCBt
X3NjZW5lLmdldCgpLCBpbWFnZUlELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5k
bGUpKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNsZWFySW1h
Z2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y2xlYXJJ
bWFnZUJhY2tpbmdDb250ZW50cywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCkpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6c2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKIHsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUltYWdlQmFja2lu
ZywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QW5pbWF0aW9uc0xvY2tlZCwgbV9zY2VuZS5nZXQo
KSwgbG9ja2VkKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNl
dENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6ZSkKQEAgLTE2NSwxNSAr
NzYsNiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1Np
emUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpegogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0Q29udGVudHNTaXplLCBtX3NjZW5lLmdldCgp
LCBjb250ZW50c1NpemUpKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhp
Y3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnMsIG1fc2NlbmUu
Z2V0KCksIGlkLCBhbmltYXRpb25zKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCi17Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBbmltYXRpb25zTG9j
a2VkLCBtX3NjZW5lLmdldCgpLCBsb2NrZWQpKTsKLX0KIAogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7CkBAIC0xOTQsNTUgKzk2
LDE2IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFt
ZSgpCiB9CiAKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQotewotICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVxdWVzdEFu
aW1hdGlvbkZyYW1lLCBtX3NjZW5lLmdldCgpKSk7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKLX0K
LQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6YW5pbWF0aW9uRnJhbWVSZWFk
eSgpCiB7CiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpBbmltYXRpb25GcmFtZVJlYWR5KCks
IG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAjZW5kaWYKIAotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9zY2Vu
ZS5nZXQoKSwgcG9zaXRpb24pKTsKLX0KLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVk
TGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJm
YWNlVG9rZW4mIHRva2VuKQotewotICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZs
YWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQgfCBHcmFwaGljc1N1
cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGNhbnZh
c1NpemUsIEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywg
dG9rZW4pKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnN5bmND
YW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKLXsKLSAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnN5bmNDYW52
YXMsIG1fc2NlbmUuZ2V0KCksIGlkLCBmcm9udEJ1ZmZlcikpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OmRlc3Ryb3lDYW52YXMsIG1fc2NlbmUuZ2V0KCksIGlkKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3VudCwgbV9zY2VuZS5n
ZXQoKSwgaWQsIHZhbHVlKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCiB7CiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpQ
dXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgp
KTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3Vu
ZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldEJhY2tncm91bmRDb2xvciwgbV9zY2VuZS5nZXQo
KSwgY29sb3IpKTsKLX0KLQogfQogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCmlu
ZGV4IDI0YjM0NzcwYWMwODNjMzVhNTU0MDMwNGUwOTBhMDUyNThlZjU3YWQuLmMzODgyMzVkMDQw
NTQwZGM5OTNkMDY4ZWJkOWJmMmI4ZDJhMDMxNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaApAQCAtMjUsMjMgKzI1LDEzIEBACiAjaW5j
bHVkZSAiQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3Vt
ZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIlJl
Z2lvbi5oIgotI2luY2x1ZGUgIldlYkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzU3VyZmFjZVRva2VuLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOworY2xhc3MgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM7CiBjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbzsKIH0K
IApAQCAtNTMsNDUgKzQzLDEyIEBAIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
IDogcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsCiBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94
eSopOwogICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0gICAg
dm9pZCBzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklE
LCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbyYpOwotICAgIHZvaWQgc2V0Q29t
cG9zaXRpbmdMYXllckNoaWxkcmVuKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhXZWJDb3JlOjpDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKLSNlbmRp
ZgotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclBy
b2dyYW0oaW50IGlkLCBjb25zdCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwot
ICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwotI2VuZGlmCi0gICAg
dm9pZCBjcmVhdGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3Qg
VmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIHNldFJvb3RD
b21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgdm9pZCBj
b21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhjb25zdCBXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRz
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpOworICAgIHZvaWQgc2V0
QW5pbWF0aW9uc0xvY2tlZChib29sKTsKICAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVj
dG9yeVZlY3Rvcik7Ci0gICAgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsK
LSAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OlN1cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgcmVt
b3ZlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlEKTsKLSAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7Ci0gICAgdm9pZCByZW1vdmVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lEKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhXZWJD
b3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUltYWdlQmFj
a2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJDb29yZGlu
YXRlZFN1cmZhY2U6OkhhbmRsZSYpOwotICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50
cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHJlbW92ZUlt
YWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2b2lk
IGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7Ci0gICAgdm9pZCBkaWRDaGFu
Z2VTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbik7Ci0j
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKLSAgICB2b2lkIHN5bmNDYW52YXMoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0
cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lk
IHNldExheWVyUmVwYWludENvdW50KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZh
bHVlKTsKICAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NlbmUuZ2V0KCk7IH0KLSAgICB2b2lk
IHNldExheWVyQW5pbWF0aW9ucyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7Ci0gICAgdm9pZCBzZXRBbmltYXRpb25z
TG9ja2VkKGJvb2wpOwotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2
b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRCYWNrZ3Jv
dW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKIAogICAgIC8vIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZUNsaWVudCBNZXRob2RzLgogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KaW5kZXggMjFkYzI2MzQ1MDNjY2RlODc5MDYyZDc5MzIz
YzZiYmFiZTRmNzJlYy4uNmUyNzkyM2JiYzAzOGExZDhlNjY0MzMxYTMyMDBhZjVmOWExYzkzNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkubWVzc2FnZXMuaW4KQEAgLTE5LDQ0ICsxOSw3IEBACiAKICNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCiBtZXNzYWdlcyAtPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eSBMZWdhY3lSZWNlaXZlciB7Ci0gICAgU2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKHVpbnQzMl90
IGlkLCBXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbyBsYXllckluZm8pCi0gICAgU2V0Q29t
cG9zaXRpbmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxk
cmVuKQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyRmls
dGVycyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQotI2Vu
ZGlmCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dy
YW0oaW50IGlkLCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbykK
LSAgICBSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKLSNlbmRpZgotICAgIFNldFJv
b3RDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQotICAgIENyZWF0ZUNvbXBvc2l0aW5nTGF5
ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRzKQotICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZl
Y3Rvcjx1aW50MzJfdD4gaWRzKQotICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6
OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgVXBkYXRlVGlsZUZvckxheWVyKHVp
bnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVj
dCwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxl
Rm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotICAgIENyZWF0ZVVw
ZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNl
OjpIYW5kbGUgaGFuZGxlKQotICAgIFJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQp
Ci0gICAgQ3JlYXRlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQpCi0gICAgVXBkYXRlSW1h
Z2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNl
OjpIYW5kbGUgaGFuZGxlKQotICAgIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHModWludDY0X3Qg
aW1hZ2VJRCkKLSAgICBSZW1vdmVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCkKLSAgICBE
aWRSZW5kZXJGcmFtZShXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50
UmVjdCBjb3ZlcmVkUmVjdCkKLSAgICBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpG
bG9hdFBvaW50IHBvc2l0aW9uKQotICAgIFNldExheWVyQW5pbWF0aW9ucyh1aW50MzJfdCBpZCwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYW5pbWF0aW9ucykKKyAgICBDb21taXRD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9ucyBvcGVyYXRpb25zLCBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgV2Vi
Q29yZTo6SW50UmVjdCBjb3ZlcmVkUmVjdCkKICAgICBTZXRBbmltYXRpb25zTG9ja2VkKGJvb2wg
bG9ja2VkKQotCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIFJlcXVl
c3RBbmltYXRpb25GcmFtZSgpCi0jZW5kaWYKLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQot
ICAgIENyZWF0ZUNhbnZhcyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52YXNTaXpl
LCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbikKLSAgICBTeW5jQ2FudmFzKHVp
bnQzMl90IGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKLSAgICBEZXN0cm95Q2FudmFzKHVpbnQz
Ml90IGlkKQotI2VuZGlmCi0KLSAgICBTZXRMYXllclJlcGFpbnRDb3VudCh1aW50MzJfdCBsYXll
cklELCBpbnQgdmFsdWUpCi0KLSAgICBTZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29yZTo6Q29sb3Ig
Y29sb3IpCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IDZlNWZiNTcyMzFjOWI4OTVmMmYwNmVh
NDE1MTMwMTY5ODgxMGE0NWMuLjE2NWJjYjlmMDA3NWY2ZGRhY2ExZWRjOTJjMzBlMDNmZjFiOTE1
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmNwcApAQCAtMzgsOSArMzgsOSBAQAogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+CkBAIC00OCw3ICs0OCw2IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5n
cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVwZGF0ZUluZm8uaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+CiAjaW5jbHVkZSA8d3RmL1RlbXBv
cmFyeUNoYW5nZS5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQpAQCAtODYsNyArODUsNiBA
QCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQ
YWdlKiB3ZWJQYWdlKQogICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCiAgICAgLCBt
X2lzU3VzcGVuZGVkKGZhbHNlKQogICAgICwgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRh
dGUodHJ1ZSkKLSAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQogICAgICwgbV9kaWRJbml0
aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIoZmFsc2UpCiAgICAgLCBtX2xheWVyRmx1c2hUaW1l
cih0aGlzLCAmQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCkK
ICAgICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQpAQCAtMjg3LDE0
ICsyODUsMTQgQEAgYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcygpCiAKICAgICBkZWxldGVDb21wb3NpdGluZ0xheWVycygpOwogCi0gICAgaWYg
KG1fc2hvdWxkU3luY0ZyYW1lKSB7CisgICAgaWYgKCFtX29wZXJhdGlvbnMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGRpZFN5bmMgPSB0cnVlOwogCiAgICAgICAgIEludFNpemUgY29udGVudHNTaXpl
ID0gcm91bmRlZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwog
ICAgICAgICBJbnRSZWN0IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0gICAgICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OkRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAgICAgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q29t
bWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMobV9vcGVyYXRpb25zLCBjb250ZW50c1Np
emUsIGNvdmVyZWRSZWN0KSk7CisgICAgICAgIG1fb3BlcmF0aW9ucy5jbGVhcigpOwogICAgICAg
ICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0cnVlOwotICAgICAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IGZhbHNlOwogICAgIH0gZWxzZQogICAgICAgICB1bmxvY2tBbmltYXRpb25zKCk7CiAKQEAg
LTMyMCw5ICszMTgsOCBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29t
cG9zaXRpbmdMYXllcnMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ29tcG9zaXRp
bmdMYXllcnMobV9sYXllcnNUb0NyZWF0ZSkpOworICAgIGVucXVldWUoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpjcmVhdGUobV9sYXllcnNUb0NyZWF0ZSkpOwog
ICAgIG1fbGF5ZXJzVG9DcmVhdGUuY2xlYXIoKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZWxldGVDb21wb3NpdGlu
Z0xheWVycygpCkBAIC0zMzUsOSArMzMyLDggQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKG1fbGF5ZXJzVG9EZWxldGUpKTsKKyAgICBlbnF1
ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyczo6Y3JlYXRlKG1f
bGF5ZXJzVG9EZWxldGUpKTsKICAgICBtX2xheWVyc1RvRGVsZXRlLmNsZWFyKCk7Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQpAQCAtMzQ1LDcwICsz
NDEsMTAgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29t
cG9zaXRpbmdMYXllcklmTmVlZGVkKCkKICAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENvbXBv
c2l0aW5nTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xh
eWVyKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkp
OworICAgIGVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVy
OjpjcmVhdGUodG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5p
ZCgpKSk7CiAgICAgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOwot
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29v
cmRpbmF0ZWRMYXllckluZm8mIGluZm8pCi17Ci0gICAgaWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBv
c2l0aW9uVXBkYXRlKSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJs
ZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBv
c2l0aW9uVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17
Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJD
aGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKLX0KLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExh
eWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0g
Y2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKLSAgICBJbnRTaXpl
IGNhbnZhc1NpemUgPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOwot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OkNyZWF0ZUNhbnZhcyhpZCwgY2FudmFzU2l6ZSwgdG9rZW4pKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQ
bGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxheWVyKQotewotICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKLSAgICB1aW50MzJfdCBmcm9udEJ1ZmZlciA9IGNhbnZhc1BsYXRmb3JtTGF5
ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlN5bmNDYW52YXMoaWQsIGZyb250QnVm
ZmVyKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXN0cm95Q2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95Q2Fu
dmFzKGlkKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNl
dExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IHZhbHVlKQotewot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OlNldExheWVyUmVwYWludENvdW50KGlkLCB2YWx1ZSkpOwotfQotCi0jaWYgRU5BQkxFKENT
U19GSUxURVJTKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckZpbHRl
cnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCi0gICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhmaWx0ZXJzKTsKLSNlbmRp
ZgotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Ci19Ci0jZW5k
aWYKLQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMpCiB7CkBAIC00MzYsNyArMzcyLDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3Bl
cmEKIAogICAgICAgICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkpIHsK
ICAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+c2V0Q2xpZW50KHRoaXMpOwot
ICAgICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFt
UHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0
ZWRQcm9ncmFtSW5mbygpKSk7CisgICAgICAgICAgICBlbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZShjdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgp
LT52YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBJZiB0aGUgY2xpZW50IHdhcyBub3QgZGlzY29ubmVjdGVkIHRoZW4gdGhpcyBjb29yZGlu
YXRvciBtdXN0IGJlIHRoZSBjbGllbnQgZm9yIGl0LgogICAgICAgICAgICAgQVNTRVJUKGN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkgPT0gdGhpcyk7CkBAIC00NDksNyArMzg1LDcg
QEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eShXZWJDdXN0b21GaWx0ZXJQcm8KICAgICAvLyBBdCB0aGlzIHRpbWUgdGhlIHNoYWRl
ciBpcyBub3QgbmVlZGVkIGFueW1vcmUsIHNvIHdlIHJlbW92ZSBpdCBmcm9tIG91ciBzZXQgYW5k
CiAgICAgLy8gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIG90aGVyIHByb2Nlc3MgdG8gZGVsZXRlIGl0
LgogICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMucmVtb3ZlKGN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eSk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFt
UHJveHktPmlkKCkpKTsKKyAgICBlbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJv
eHktPmlkKCkpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpc2Nvbm5l
Y3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpCkBAIC02MTMsNDAgKzU0OSw2IEBAIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRl
SW1hZ2VCYWNraW5nCiAgICAgcmV0dXJuIGltYWdlQmFja2luZzsKIH0KIAotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGltYWdlSUQpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNy
ZWF0ZUltYWdlQmFja2luZyhpbWFnZUlEKSk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Ojp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFn
ZUlELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQot
ewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZh
Y2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZSo+KGNvb3JkaW5hdGVkU3VyZmFjZS5nZXQoKSk7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJm
YWNlOjpIYW5kbGUgaGFuZGxlOwotICAgIGlmICghd2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVh
dGVIYW5kbGUoaGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZUltYWdl
QmFja2luZyhpbWFnZUlELCBoYW5kbGUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0g
dHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlSUQpKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQp
KTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV9pbWFnZUJhY2tpbmdzLnJl
bW92ZShpbWFnZUlEKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkpOwotfQotCiB2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hh
bmdlcygpCiB7CiAgICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFj
a2luZ3MuZW5kKCk7CkBAIC03MDksNDEgKzYxMSw1NSBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1
cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJ
RCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVy
SUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVp
bnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUlu
Zm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRpbGVSZWN0KQotewotICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0
aWxlUmVjdCwgdXBkYXRlSW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6cmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmVucXVldWUoUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25CYXNlPiBvcGVyYXRpb24pCiB7CiAg
ICAgaWYgKG1faXNQdXJnaW5nKQogICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKLX0K
IAotYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQz
Ml90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1
cmZhY2UpCi17Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZh
Y2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihjb29yZGluYXRlZFN1cmZh
Y2UuZ2V0KCkpOwotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKLSAg
ICBpZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBoYW5kbGUp
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICB3aWxsRW5xdWV1ZU9wZXJhdGlvbihvcGVyYXRpb24u
Z2V0KCkpOworICAgIG1fb3BlcmF0aW9ucy5hcHBlbmQob3BlcmF0aW9uKTsKIH0KIAotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFz
SUQpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6d2lsbEVucXVldWVPcGVyYXRpb24o
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uQmFzZSogb3BlcmF0aW9uKQog
ewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVVwZGF0
ZUF0bGFzKGF0bGFzSUQpKTsKKyAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlw
ZSgpKSB7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0
YXRlVHlwZToKKyAgICAgICAgaWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7
CisgICAgICAgICAgICBlbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENo
YW5nZVNjcm9sbFBvc2l0aW9uOjpjcmVhdGUobV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9u
KCkpKTsKKyAgICAgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmdUeXBlOgorICAgICAgICBBU1NFUlQobV9p
bWFnZUJhY2tpbmdzLmNvbnRhaW5zKHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbiktPmltYWdlQmFja2lu
Z0lEKSk7CisgICAgICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoc3RhdGljX2Nhc3Q8Y29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nKj4ob3BlcmF0
aW9uKS0+aW1hZ2VCYWNraW5nSUQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uc1R5cGU6IHsKKyNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25z
JiBhbmltYXRpb25zID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0TGF5ZXJBbmltYXRpb25zKj4ob3BlcmF0aW9uKS0+YW5pbWF0aW9uczsKKyAgICAgICAgR3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnMuZ2V0QWN0
aXZlQW5pbWF0aW9ucygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFu
aW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBL
ZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQo
aSkua2V5ZnJhbWVzKCk7CisgICAgICAgICAgICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0g
QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytq
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqIGZpbHRlclZh
bHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPihrZXlmcmFtZXMu
YXQoaSkpOworICAgICAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMo
KmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBzdGF0aWNfY2FzdDxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1h
dGlvbnMqPihvcGVyYXRpb24pLT5hbmltYXRpb25zID0gYWN0aXZlQW5pbWF0aW9uczsKKyNlbmRp
ZgorICAgICAgICBicmVhazsKKyAgICB9CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzVHlwZToKKyNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3hpZXMoc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJG
aWx0ZXJzKj4ob3BlcmF0aW9uKS0+ZmlsdGVycyk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7Cisj
ZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIFdlYkNvcmU6
OkZsb2F0UmVjdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdApAQCAtNzUyLDI0ICs2NjgsNiBAQCBXZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKIH0KIAogCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9u
cykKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgR3JhcGhpY3NMYXllckFu
aW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnMuZ2V0QWN0aXZlQW5pbWF0aW9u
cygpOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMo
KS5hdChpKS5rZXlmcmFtZXMoKTsKLSAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9
IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKLSAg
ICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkpKTsKLSAg
ICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoKmZpbHRlclZhbHVlLT52
YWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldExheWVyQW5pbWF0aW9u
cyhsYXllcklELCBhY3RpdmVBbmltYXRpb25zKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKICAgICAvLyBBIHplcm8gdHJh
amVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9y
dCBhcmUgcmVxdWVzdGVkLgpAQCAtODEyLDcgKzcxMCw3IEBAIEdyYXBoaWNzTGF5ZXJGYWN0b3J5
KiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKICNpZiBF
TkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c2NoZWR1bGVBbmltYXRpb24oKQogewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlcXVlc3RBbmltYXRpb25GcmFtZSgp
KTsKKyAgICBlbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmlt
YXRpb25GcmFtZTo6Y3JlYXRlKCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6YW5pbWF0aW9uRnJhbWVSZWFkeSgpCkBAIC04OTUsNyArNzkzLDcgQEAgdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVy
PENvb3JkaW5hdGUKIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91
bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiB7Ci0gICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QmFja2dyb3Vu
ZENvbG9yKGNvbG9yKSk7CisgICAgZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRCYWNrZ3JvdW5kQ29sb3I6OmNyZWF0ZShjb2xvcikpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmgKaW5kZXggNzI5N2VlZDgxZTA1YTJlZTBmMDA1ZWVhM2RmODE4ODVmZWMz
ZjJiNS4uZWFjZTQxMDE0Y2JhOGZjNWZiMzc4ODExNWU3YTUwYjBlNTk0MDUwNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVy
RmFjdG9yeS5oPgpAQCAtNDYsOCArNDcsNyBAQCBjbGFzcyBXZWJQYWdlOwogCiBjbGFzcyBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudAogICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllckNsaWVudAotICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpDb29yZGluYXRvcgotICAgICwgcHVibGljIFdlYkNvcmU6OlVwZGF0ZUF0bGFzQ2xpZW50
CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVl
dWUKICAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeQogI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKICAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudApA
QCAtNzksNDAgKzc5LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJp
bmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJl
bmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsg
fQogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJ
REU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsgfQotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUlu
Zm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRp
bGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZp
cnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgdmlydHVhbCB2b2lkIHB1cmdl
QmFja2luZ1N0b3JlcygpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsK
KwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFj
dG9yeSgpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklu
Zm8mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwotI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlv
bnMmKTsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0
Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklEKSBPVkVSUklERTsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlcGFpbnRD
b3VudChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGludCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciop
OwotICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKLQotICAgIHZpcnR1YWwgUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywg
dWludDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50Jik7Ci0KLSAgICAvLyBVcGRhdGVB
dGxhc0NsaWVudAotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKTsK
LQogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVBbmltYXRpb24oKSBPVkVSUklERTsKICNlbmRpZgpAQCAtMTMxLDE0ICsxMDUsMjIg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Qg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBPVkVS
UklERTsKIAotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZUltYWdlQmFja2lu
ZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6
OkNvb3JkaW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcklt
YWdlQmFja2luZ0NvbnRlbnRzKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0KICAgICB2b2lkIGZsdXNoUGVuZGlu
Z0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKIAorICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ckNsaWVudAorICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOyB9CisgICAgdmlydHVh
bCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2lu
Zz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBv
aW50JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpRdWV1ZSogb3BlcmF0aW9uUXVldWUoKSB7IHJldHVybiB0aGlzOyB9OworCisg
ICAgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUKKyAgICB2aXJ0dWFsIHZv
aWQgZW5xdWV1ZShQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246Ok9wZXJhdGlvbkJhc2U+KSBPVkVSUklERTsKKworICAgIHZvaWQgd2lsbEVucXVldWVPcGVy
YXRpb24oV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uQmFz
ZSopOworCiAgICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CiAKQEAgLTE4MSw2ICsxNjMsOCBAQCBwcml2
YXRlOgogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVy
ZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4g
bV9wYWdlT3ZlcmxheUxheWVyOwogCisgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnMgbV9vcGVyYXRpb25zOworCiAgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0NyZWF0ZTsKICAgICBWZWN0b3I8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwpAQCAtMjA0LDcgKzE4OCw2
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsK
IAogICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9z
aG91bGRTeW5jRnJhbWU7CiAgICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllcjsKICAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fbGF5
ZXJGbHVzaFRpbWVyOwogICAgIFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dD4gbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186323</attachid>
            <date>2013-02-04 01:36:23 -0800</date>
            <delta_ts>2013-03-05 01:16:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108294-20130204183247.patch</filename>
            <type>text/plain</type>
            <size>128459</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDMyZDI0NTBkNDY3MTJm
MjYwMjI5ZDAxYTE4NWZmYmM5YjhkMzZlNi4uODQwMjdmZmJmZmU2OWZlMjMzY2YxYWQwYTBhOTA3
MWJkMjE0MjNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwMSBAQAorMjAxMy0wMi0wNCAgSHVh
bmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkgaGFzIHNvIG1hbnkgSVBDIG1lc3NhZ2VzIChlLmcuIFN5bmND
YW52YXMgYW5kCisgICAgICAgIENyZWF0ZVRpbGUpLCBhbmQgdGhlcmUgaXMgYSBsb25nIGZ1bmN0
aW9uIGNoYWluIGZyb20gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIHRvCisgICAgICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSAoNCBjbGFzc2VzKS4KKyAgICAgICAgSWYgd2Ugd2FudCB0byBh
ZGQgYSBuZXcgbWVzc2FnZSwgd2UgbmVlZCB0byBhZGQgc2ltaWxhciBmdW5jdGlvbnMgaW50byA0
IGNsYXNzZXMuCisKKyAgICAgICAgTm93IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBoYXMgb25s
eSBvbmUgSVBDIG1lc3NhZ2U6IENvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLgor
ICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lIHJ1biBhcyBmb2xsb3dzOgorICAgICAgICAxLiBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIgbWFrZXMgYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uIChlLmcuIENyZWF0ZVRpbGUp
LgorICAgICAgICAyLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgc3RvcmVzIGFsbCBvcGVyYXRp
b25zLgorICAgICAgICAzLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgc2VuZHMgYWxsIG9wZXJh
dGlvbnMgdG8gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkKKyAgICAgICAgYXQgdGhlIG1v
bWVudCBvZiBmbHVzaGluZyB2aWEgQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMg
bWVzc2FnZS4KKyAgICAgICAgNC4gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIGV4ZWN1dGVzIGFs
bCBvcGVyYXRpb25zLgorCisgICAgICAgIFRoZXJlIGlzIG9uZSBiaWcgYmVoYXZpb3IgY2hhbmdl
LiBBbGwgb3BlcmF0aW9ucyAoZS5nLiBDcmVhdGVMYXllcnMgYW5kCisgICAgICAgIFN5bmNDYW52
YXMpIGFyZSBwZXJmb3JtZWQgYXQgdGhlIHNhbWUgdGltZSwgd2hlbgorICAgICAgICBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zIGlz
IGNhbGxlZC4KKworICAgICAgICBJZiB5b3Ugd2FudCB0byBhZGQgYSBuZXcgb3BlcmF0aW9uLCBh
ZGQgY29kZSBhcyBmb2xsb3dzOgorICAgICAgICAxLiBDcmVhdGUgYSBuZXcgb3BlcmF0aW9uIHN1
YmNsYXNzIGluIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaAorICAgICAgICAyLiBPdmVy
cmlkZSBPcGVyYXRpb25CYXNlOjpleGVjdXRlKCkgdG8gZXhlY3V0ZSB3aGF0IHRoZSBvcGVyYXRp
b24gc2hvdWxkIGRvLgorICAgICAgICAzLiBJbXBsZW1lbnQgZW5jb2RlL2RlY29kZSBpbiBDb29y
ZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlz
dGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFz
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpj
cmVhdGVDYW52YXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpleGVjdXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxh
eWVyczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRSb290TGF5ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVu
OjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZVRpbGU6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpleGVjdXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0
ZUF0bGFzOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6ZXhlY3V0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRh
dGVJbWFnZUJhY2tpbmc6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6ZXhlY3V0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFn
ZUJhY2tpbmc6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6
ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpDcmVhdGVDYW52YXM6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpleGVjdXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
RmlsdGVyczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpleGVjdXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRl
clByb2dyYW06OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OmV4ZWN1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpl
eGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uOjpleGVjdXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbik6CisgICAgICAgIChPcGVyYXRpb25CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2U6On5PcGVyYXRpb25C
YXNlKToKKyAgICAgICAgKE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb246On5PcGVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uOjpnZXRPcGVyYXRp
b25UeXBlKToKKyAgICAgICAgKENyZWF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OkNy
ZWF0ZUxheWVycyk6CisgICAgICAgIChEZWxldGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJz
OjpEZWxldGVMYXllcnMpOgorICAgICAgICAoU2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RM
YXllcjo6U2V0Um9vdExheWVyKToKKyAgICAgICAgKFNldExheWVyU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyU3RhdGU6OlNldExheWVyU3RhdGUpOgorICAgICAgICAoU2V0TGF5ZXJDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXll
ckNoaWxkcmVuOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjo6U2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAg
IChDcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZVRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlOjpDcmVhdGVUaWxlKToKKyAgICAgICAgKFVw
ZGF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6VXBkYXRlVGlsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OlVwZGF0ZVRpbGUpOgorICAgICAgICAoUmVtb3Zl
VGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVUaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlVGlsZTo6UmVtb3ZlVGlsZSk6CisgICAgICAgIChDcmVhdGVVcGRh
dGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzOjpDcmVhdGVVcGRhdGVBdGxh
cyk6CisgICAgICAgIChSZW1vdmVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhczo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0
ZUF0bGFzOjpSZW1vdmVVcGRhdGVBdGxhcyk6CisgICAgICAgIChDcmVhdGVJbWFnZUJhY2tpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRl
SW1hZ2VCYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nOjpDcmVhdGVJbWFnZUJhY2tpbmcpOgor
ICAgICAgICAoVXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFj
a2luZzo6VXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKENsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHM6OkNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAoUmVtb3ZlSW1hZ2VCYWNraW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUlt
YWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6UmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAg
ICAgICAgKFNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnM6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlv
bnM6OlNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAgIChSZXF1ZXN0QW5pbWF0aW9uRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVz
dEFuaW1hdGlvbkZyYW1lOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOjpSZXF1ZXN0QW5pbWF0aW9u
RnJhbWUpOgorICAgICAgICAoQ3JlYXRlQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6Q3Jl
YXRlQ2FudmFzKToKKyAgICAgICAgKFN5bmNDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6OlN5bmND
YW52YXMpOgorICAgICAgICAoRGVzdHJveUNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6
RGVzdHJveUNhbnZhcyk6CisgICAgICAgIChTZXRMYXllckZpbHRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJGaWx0ZXJzOjpTZXRMYXllckZpbHRlcnMpOgorICAgICAgICAoQ3JlYXRlQ3VzdG9tRmls
dGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bTo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChSZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
OjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFNldExheWVyUmVwYWludENv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyUmVwYWludENvdW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OlNldExheWVyUmVwYWlu
dENvdW50KToKKyAgICAgICAgKFNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRC
YWNrZ3JvdW5kQ29sb3I6OlNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChEaWRDaGFuZ2VT
Y3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9u
OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChRdWV1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZTo6flF1ZXVlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbnMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjphdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpZENoYW5nZVNj
cm9sbFBvc2l0aW9uKToKKyAgICAgICAgICAgIFJlbW92ZSBtX3BlbmRpbmdSZW5kZXJlZENvbnRl
bnRzU2Nyb2xsUG9zaXRpb24gYmVjYXVzZQorICAgICAgICAgICAgZGlkQ2hhbmdlU2Nyb2xsUG9z
aXRpb24oKSBpcyBjYWxsZWQgYXQgdGhlIG1vbWVudCBvZiBmbHVzaGluZy4KKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0RHJhd3NCYWNrZ3JvdW5kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OnJlbW92ZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OnVwZGF0ZSk6CisgICAgICAgICAgICBGSVhNRTogV2UgZG9uJ3QgZGVhbCB3aXRoIHRoZSBjYXNl
IHdoZW4gc2VuZGluZyBhbgorICAgICAgICAgICAgVXBkYXRlSW1hZ2VCYWNraW5nIG9wZXJhdGlv
biBmYWlscyBiZWNhdXNlIGVucXVldWVpbmcgYW4gb3BlcmF0aW9uCisgICAgICAgICAgICBpcyBh
c3luYy4KKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNv
bnRlbnRzVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg6CisgICAgICAgIChDb29yZGluYXRl
ZEltYWdlQmFja2luZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlVw
ZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisgICAgICAgICAgICBGSVhNRTogV2UgZG9uJ3QgZGVh
bCB3aXRoIHRoZSBjYXNlIHdoZW4gc2VuZGluZyBhIENyZWF0ZVVwZGF0ZUF0bGFzCisgICAgICAg
ICAgICBvcGVyYXRpb24gZmFpbHMgYmVjYXVzZSBlbnF1ZXVlaW5nIGFuIG9wZXJhdGlvbiBpcyBh
c3luYy4KKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0
ZUF0bGFzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFVwZGF0ZUF0bGFzKToKKwog
MjAxMy0wMi0wMyAgSm9hbm1hcmllIERpZ2dzICA8amRpZ2dzQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dUS10gTWFrZSBkaXN0Y2hlY2sgZmFpbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBmNzhiZmFjZDI1MGM2
OWFkOGI3ODY1ODJkOWE3NjU3OGFkNDAwNzBiLi44NjdlMjg0YWQzMjIxZTdmOWNjNWIzZTVmY2Vh
Mjk3OGM3YmJjYTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTMtMDItMDQgIEh1
YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUgcGVyZm9ybSB2aWEgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODI5NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFy
ZSB0d28gY2hhbmdlcyBpbiBXSzIuCisgICAgICAgIDEuIENoYW5nZSBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSB0byB1c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi4KKyAgICAg
ICAgMi4gQWRkIGVuY29kZS9kZWNvZGUgb2YgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbiBp
bgorICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuCisKKyAgICAgICAg
KiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRD
b2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOgorICAgICAgICAgICAgRW5j
b2RpbmcgVXBkYXRlSW1hZ2VCYWNraW5nIGFuZCBDcmVhdGVVcGRhdGVBdGxhcyBjYW4gZmFpbCB3
aGVuCisgICAgICAgICAgICBlbmNvZGluZyBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBm
YWlscywgYnV0IHdlIGRvbid0CisgICAgICAgICAgICByZWNvdmVyIGluIHRoZSBjYXNlLgorICAg
ICAgICAoQ29yZUlQQyk6CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgICog
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29k
ZXJzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZWxldGVDb21wb3NpdGluZ0xh
eWVycyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1c3RvbUZp
bHRlclByb2dyYW1Qcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6ZW5xdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6d2lsbEVucXVldWVPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFja2dyb3VuZENvbG9y
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6b3BlcmF0aW9u
UXVldWUpOgorCiAyMDEzLTAyLTAzICBKb2FubWFyaWUgRGlnZ3MgIDxqZGlnZ3NAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbR1RLXSBNYWtlIGRpc3RjaGVjayBmYWlscwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCAwZDcyY2EwZmRkYmM3ZmVlNTA4YWQ5NmEyZTEwY2RjYmZlNGQ0OTE3Li43YWM4YzU4
ODkwMTQ1YjNiYWJlMWY5NDA0NDNmMjkwMDdlOGI0NDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApA
QCAtMTk5Myw2ICsxOTkzLDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1
cmZhY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA5MGVmYzQwZjM3NjJkMGYyMjQ4NjI3NDUyMjM4NDE0
N2IzYzE0ZDY3Li4xMmJmNzM2YWNhNTBkMzE4M2E0MWIxMDljN2MwNTkyNjU5YTAwMjk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKQEAgLTIyNDYsNiArMjI0Niw4IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJh
dGlvbi5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24u
aCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25zLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5o
IFwKQEAgLTI4OTEsNiArMjg5Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFj
a2luZy5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZFN1cmZhY2UuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggMzczNmYyNjA0YzBjMTA0Mzk5OTU3Yjk4
YTI1MjVlZTdkYmNkZDliYi4uZGYwNmUxNTkxY2ZkOTc3NDhhM2NhNTRkMzBkNTRhYTYwYTQ2MTVh
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c3luY0NoaWxkcmVuKCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpCiAgICAgICAgIGNoaWxkSURzLmFwcGVuZCh0b0Nvb3JkaW5hdGVkTGF5
ZXJJRChjaGlsZHJlbigpW2ldKSk7CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJDaGls
ZHJlbihtX2lkLCBjaGlsZElEcyk7CisgICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUo
KS0+ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVu
OjpjcmVhdGUobV9pZCwgY2hpbGRJRHMpKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
QEAgLTUwOSw3ICs1MDksNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0Zp
bHRlcnMoKQogICAgIGlmICghbV9zaG91bGRTeW5jRmlsdGVycykKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSBmYWxzZTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5j
TGF5ZXJGaWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7CisgICAgbV9jb29yZGluYXRvci0+b3BlcmF0
aW9uUXVldWUoKS0+ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXll
ckZpbHRlcnM6OmNyZWF0ZShtX2lkLCBmaWx0ZXJzKCkpKTsKIH0KICNlbmRpZgogCkBAIC01NzAs
NyArNTcwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRl
KCkKICAgICAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiAgICAgbV9sYXllckluZm8uc2hv
d1JlcGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENvdW50ZXIoKTsKIAotICAgIG1fY29v
cmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKKyAgICBtX2Nvb3Jk
aW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyU3RhdGU6OmNyZWF0ZShtX2lkLCBtX2xheWVySW5mbykpOwogfQogCiB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RGVidWdCb3JkZXIoY29uc3QgQ29sb3Im
IGNvbG9yLCBmbG9hdCB3aWR0aCkKQEAgLTU4Nyw3ICs1ODcsNyBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMoKQogCiAgICAgbV9zaG91bGRTeW5jQW5pbWF0
aW9ucyA9IGZhbHNlOwogCi0gICAgbV9jb29yZGluYXRvci0+c2V0TGF5ZXJBbmltYXRpb25zKG1f
aWQsIG1fYW5pbWF0aW9ucyk7CisgICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUoKS0+
ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnM6
OmNyZWF0ZShtX2lkLCBtX2FuaW1hdGlvbnMpKTsKIH0KIAogI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQpAQCAtNjA0LDcgKzYwNCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
eW5jQ2FudmFzKCkKICAgICBpZiAoIW1faXNWYWxpZENhbnZhcykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9jb29yZGluYXRvci0+c3luY0NhbnZhcyhtX2lkLCBtX2NhbnZhc1BsYXRmb3JtTGF5
ZXIpOworICAgIEFTU0VSVChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOworICAgIHVpbnQzMl90IGZy
b250QnVmZmVyID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2Uo
KTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52YXM6OmNyZWF0ZShtX2lkLCBmcm9udEJ1ZmZl
cikpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNhbnZhc0lm
TmVlZGVkKCkKQEAgLTYxMyw3ICs2MTUsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6ZGVzdHJveUNhbnZhc0lmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
aXNWYWxpZENhbnZhcykgewotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5kZXN0cm95Q2FudmFzKG1f
aWQpOworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1ZXVlKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OmNyZWF0ZShtX2lkKSk7
CiAgICAgICAgIG1faXNWYWxpZENhbnZhcyA9IGZhbHNlOwogICAgIH0KIApAQCAtNjI3LDcgKzYy
OSw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVDYW52YXNJZk5lZWRl
ZCgpCiAKICAgICBBU1NFUlQobV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKICAgICBpZiAoIW1faXNW
YWxpZENhbnZhcykgewotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVDYW52YXMobV9pZCwg
bV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICAgICAgSW50U2l6ZSBjYW52YXNTaXplID0gbV9j
YW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOworICAgICAgICBHcmFwaGlj
c1N1cmZhY2VUb2tlbiB0b2tlbiA9IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJm
YWNlVG9rZW4oKTsKKyAgICAgICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUoKS0+ZW5x
dWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OmNyZWF0ZSht
X2lkLCBjYW52YXNTaXplLCB0b2tlbikpOwogICAgICAgICBtX2lzVmFsaWRDYW52YXMgPSB0cnVl
OwogICAgIH0KIApAQCAtNzM2LDcgKzc0MCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNv
bnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQogewogICAgIGlmIChpc1Nob3dpbmdS
ZXBhaW50Q291bnRlcigpICYmICF1cGRhdGVkUmVjdHMuaXNFbXB0eSgpKQotICAgICAgICBtX2Nv
b3JkaW5hdG9yLT5zZXRMYXllclJlcGFpbnRDb3VudChpZCgpLCBpbmNyZW1lbnRSZXBhaW50Q291
bnQoKSk7CisgICAgICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OmNyZWF0
ZShpZCgpLCBpbmNyZW1lbnRSZXBhaW50Q291bnQoKSkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVIYXNQZW5kaW5nVGlsZUNyZWF0aW9uKCkK
QEAgLTc5NSwyMSArNzk5LDIxIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVh
dGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluCiB7CiAgICAgQVNT
RVJUKG1fY29vcmRpbmF0b3IpOwogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5n
TGF5ZXJDaGFuZ2VzKCkpOwotICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZVRpbGUoaWQoKSwgdGls
ZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVjdCk7CisgICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9u
UXVldWUoKS0+ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxl
OjpjcmVhdGUoaWQoKSwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVj
dCkKIHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0
b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0gICAgbV9jb29yZGluYXRvci0+dXBkYXRl
VGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKyAgICBtX2Nvb3JkaW5h
dG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlVwZGF0ZVRpbGU6OmNyZWF0ZShpZCgpLCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZv
KSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVpbnQz
Ml90IHRpbGVJRCkKIHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1f
Y29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSB8fCBtX2lzUHVyZ2luZyk7Ci0g
ICAgbV9jb29yZGluYXRvci0+cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOworICAgIG1fY29vcmRp
bmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6UmVtb3ZlVGlsZTo6Y3JlYXRlKGlkKCksIHRpbGVJRCkpOwogfQogCiB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IGE1NTFk
MzUxMWFkYTY0NGViZjczMmJlZjYyZTg2YWQ5ZDg3ZjFhMjAuLjUxNGY0NjI5ZGYwNDc0NDM5MmMx
ZWY4MzIwMDg0OTQyM2U4ZTgxZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
X2gKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKICNpbmNsdWRl
ICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJ
bmZvLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCkBAIC00MywzNyArNDQsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOwot
Y2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7CiAKIGNsYXNzIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXll
ckNoYW5nZXMoKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKLSAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0JikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxl
SUQpID0gMDsKLQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
PiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSopID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExh
eWVySW5mbyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oQ29vcmRp
bmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpID0gMDsKLSNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMo
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgPSAwOwotI2VuZGlm
Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZh
cyhDb29yZGluYXRlZExheWVySUQsIFBsYXRmb3JtTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxheWVyKikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgPSAwOwot
I2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0
ZWRMYXllcklELCBpbnQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlv
bnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpID0g
MDsKLQogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpID0gMDsKICAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgSW50U2l6ZSYsIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lE
LCBJbnRQb2ludCYpID0gMDsKKyAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlF1ZXVlKiBvcGVyYXRpb25RdWV1ZSgpID0gMDsKIH07CiAKIGNsYXNzIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciA6IHB1YmxpYyBHcmFwaGljc0xheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTRiYTE4MzE0MDc1Nzc5MWZjODI4NTFiM2MwZWNmZDFmOGFhNzAyYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmNwcApAQCAtMCwwICsxLDE3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzU3VyZmFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPmNyZWF0ZUxheWVycyhsYXllcklEcyk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzOjpleGVj
dXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPmRlbGV0
ZUxheWVycyhsYXllcklEcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6U2V0Um9vdExheWVyOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUp
Cit7CisgICAgc2NlbmUtPnNldFJvb3RMYXllcklEKGxheWVySUQpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGU6OmV4ZWN1dGUoQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+c2V0TGF5ZXJTdGF0ZShsYXll
cklELCBsYXllckluZm8pOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlNldExheWVyQ2hpbGRyZW46OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2Vu
ZSkKK3sKKyAgICBzY2VuZS0+c2V0TGF5ZXJDaGlsZHJlbihsYXllcklELCBjaGlsZHJlbik7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZTo6ZXhlY3V0
ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5jcmVhdGVU
aWxlKGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZhY3Rvcik7CisgICAgc2NlbmUt
PnVwZGF0ZVRpbGUobGF5ZXJJRCwgdGlsZUlELCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OlRp
bGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0aWxlUmVjdCwgdXBkYXRlSW5mby5hdGxh
c0lELCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnVwZGF0ZVRpbGUobGF5ZXJJRCwgdGlsZUlELCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0
LCB0aWxlUmVjdCwgdXBkYXRlSW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQp
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpl
eGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnJl
bW92ZVRpbGUobGF5ZXJJRCwgdGlsZUlEKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5jcmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBz
dXJmYWNlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVV
cGRhdGVBdGxhczo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQorewor
ICAgIHNjZW5lLT5yZW1vdmVVcGRhdGVBdGxhcyhhdGxhc0lEKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmc6OmV4ZWN1dGUoQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+Y3JlYXRlSW1hZ2VCYWNr
aW5nKGltYWdlQmFja2luZ0lEKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmc6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+dXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlQmFja2luZ0lE
LCBzdXJmYWNlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSog
c2NlbmUpCit7CisgICAgc2NlbmUtPmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaW1hZ2VCYWNr
aW5nSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUlt
YWdlQmFja2luZzo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQorewor
ICAgIHNjZW5lLT5yZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2VCYWNraW5nSUQpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczo6ZXhlY3V0
ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5zZXRMYXll
ckFuaW1hdGlvbnMobGF5ZXJJRCwgYW5pbWF0aW9ucyk7Cit9CisKKyNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
cXVlc3RBbmltYXRpb25GcmFtZTo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNj
ZW5lKQoreworICAgIHNjZW5lLT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKK30KKyNlbmRpZgor
CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OkNyZWF0ZUNhbnZhczo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNj
ZW5lKQoreworICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhp
Y3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBv
cnRzU2hhcmluZzsKKyAgICBzY2VuZS0+Y3JlYXRlQ2FudmFzKGxheWVySUQsIGNhbnZhc1NpemUs
IEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgdG9rZW4p
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpl
eGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnN5
bmNDYW52YXMobGF5ZXJJRCwgZnJvbnRCdWZmZXIpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+ZGVzdHJveUNhbnZhcyhsYXllcklEKTsKK30K
KyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnM6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+c2V0TGF5ZXJGaWx0ZXJzKGxheWVySUQsIGZp
bHRlcnMpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OmV4ZWN1
dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+Y3JlYXRl
Q3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtSUQsIHByb2dyYW1JbmZvKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7Cisg
ICAgc2NlbmUtPnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbUlE
KTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExh
eWVyUmVwYWludENvdW50OjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUp
Cit7CisgICAgc2NlbmUtPnNldExheWVyUmVwYWludENvdW50KGxheWVySUQsIHJlcGFpbnRDb3Vu
dCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3Vu
ZENvbG9yOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAg
c2NlbmUtPnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb246OmV4ZWN1dGUoQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+ZGlkQ2hhbmdlU2Nyb2xs
UG9zaXRpb24ocG9zaXRpb24pOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhhZDczMjRhMDkwODU2NWI1ZWJiODdlZmVjOTllMDUyYzdkODE3YTUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oCkBAIC0wLDAgKzEsNTUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbl9oCisjZGVm
aW5lIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25faAorCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKKyNpbmNsdWRl
ICJDb29yZGluYXRlZFN1cmZhY2UuaCIKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVk
ZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCIKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCisjZW5kaWYKKyNpbmNsdWRlICJH
cmFwaGljc0xheWVyQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlVG9rZW4u
aCIKKyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTsKKworY2xhc3MgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBPcGVyYXRpb25U
eXBlIHsKKyAgICAgICAgQ3JlYXRlTGF5ZXJzVHlwZSwKKyAgICAgICAgRGVsZXRlTGF5ZXJzVHlw
ZSwKKyAgICAgICAgU2V0Um9vdExheWVyVHlwZSwKKyAgICAgICAgU2V0TGF5ZXJTdGF0ZVR5cGUs
CisgICAgICAgIFNldExheWVyQ2hpbGRyZW5UeXBlLAorICAgICAgICBDcmVhdGVUaWxlVHlwZSwK
KyAgICAgICAgVXBkYXRlVGlsZVR5cGUsCisgICAgICAgIFJlbW92ZVRpbGVUeXBlLAorICAgICAg
ICBDcmVhdGVVcGRhdGVBdGxhc1R5cGUsCisgICAgICAgIFJlbW92ZVVwZGF0ZUF0bGFzVHlwZSwK
KyAgICAgICAgQ3JlYXRlSW1hZ2VCYWNraW5nVHlwZSwKKyAgICAgICAgVXBkYXRlSW1hZ2VCYWNr
aW5nVHlwZSwKKyAgICAgICAgQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGUsCisgICAgICAg
IFJlbW92ZUltYWdlQmFja2luZ1R5cGUsCisgICAgICAgIFNldExheWVyQW5pbWF0aW9uc1R5cGUs
CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICAgICBSZXF1ZXN0QW5p
bWF0aW9uRnJhbWVUeXBlLAorI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAg
ICAgIENyZWF0ZUNhbnZhc1R5cGUsCisgICAgICAgIFN5bmNDYW52YXNUeXBlLAorICAgICAgICBE
ZXN0cm95Q2FudmFzVHlwZSwKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAg
ICAgU2V0TGF5ZXJGaWx0ZXJzVHlwZSwKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
KyAgICAgICAgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUsCisgICAgICAgIFJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW1UeXBlLAorI2VuZGlmCisgICAgICAgIFNldExheWVyUmVwYWludENv
dW50VHlwZSwKKyAgICAgICAgU2V0QmFja2dyb3VuZENvbG9yVHlwZSwKKyAgICAgICAgRGlkQ2hh
bmdlU2Nyb2xsUG9zaXRpb25UeXBlLAorICAgIH07CisKKyAgICBjbGFzcyBPcGVyYXRpb25CYXNl
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE9wZXJhdGlvbkJhc2U+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHZpcnR1YWwgfk9wZXJhdGlvbkJhc2UoKSB7IH0KKyAgICAgICAgdmlydHVh
bCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlv
blR5cGUoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZSopID0gMDsKKyAgICB9OworCisgICAgdGVtcGxhdGU8T3BlcmF0aW9u
VHlwZSBUeXBlPiBjbGFzcyBPcGVyYXRpb24gOiBwdWJsaWMgT3BlcmF0aW9uQmFzZSB7CisgICAg
cHVibGljOgorICAgICAgICB2aXJ0dWFsIH5PcGVyYXRpb24oKSB7IH0KKyAgICAgICAgdmlydHVh
bCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlv
blR5cGUoKSBjb25zdCB7IHJldHVybiBUeXBlOyB9CisgICAgfTsKKworICAgIGNsYXNzIENyZWF0
ZUxheWVycyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q3JlYXRlTGF5ZXJzVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q3JlYXRlTGF5ZXJzPiBjcmVhdGUoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4m
IGxheWVySURzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENy
ZWF0ZUxheWVycyhsYXllcklEcykpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+IGxheWVySURzOworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgZXhwbGljaXQgQ3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+
JiBpZHMpCisgICAgICAgICAgICA6IGxheWVySURzKGlkcykKKyAgICAgICAgeyB9CisgICAgfTsK
KworICAgIGNsYXNzIERlbGV0ZUxheWVycyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RGVsZXRlTGF5ZXJzPiBjcmVhdGUoY29uc3QgVmVjdG9yPENv
b3JkaW5hdGVkTGF5ZXJJRD4mIGxheWVySURzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERlbGV0ZUxheWVycyhsYXllcklEcykpOworICAgICAgICB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJS
SURFOworCisgICAgICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGxheWVySURzOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgZXhwbGljaXQgRGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxD
b29yZGluYXRlZExheWVySUQ+JiBpZHMpCisgICAgICAgICAgICA6IGxheWVySURzKGlkcykKKyAg
ICAgICAgeyB9CisgICAgfTsKKworICAgIGNsYXNzIFNldFJvb3RMYXllciA6IHB1YmxpYyBPcGVy
YXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyVHlwZT4gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2V0Um9vdExheWVyPiBjcmVh
dGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU2V0Um9vdExheWVyKGxheWVySUQpKTsKKyAgICAgICAgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVS
UklERTsKKworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKworICAgIHByaXZh
dGU6CisgICAgICAgIGV4cGxpY2l0IFNldFJvb3RMYXllcihDb29yZGluYXRlZExheWVySUQgaWQp
CisgICAgICAgICAgICA6IGxheWVySUQoaWQpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBj
bGFzcyBTZXRMYXllclN0YXRlIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTZXRMYXllclN0YXRlVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2V0TGF5ZXJTdGF0ZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgbGF5ZXJJbmZvKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldExheWVyU3RhdGUobGF5ZXJJRCwg
bGF5ZXJJbmZvKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQ7CisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVySW5mbzsK
KworICAgIHByaXZhdGU6CisgICAgICAgIFNldExheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKKyAgICAgICAgICAgIDogbGF5
ZXJJRChpZCkKKyAgICAgICAgICAgICwgbGF5ZXJJbmZvKGluZm8pCisgICAgICAgIHsgfQorICAg
IH07CisKKworICAgIGNsYXNzIFNldExheWVyQ2hpbGRyZW4gOiBwdWJsaWMgT3BlcmF0aW9uPENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW5UeXBlPiB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXRMYXllckNoaWxkcmVuPiBjcmVh
dGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+JiBjaGlsZHJlbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTZXRMYXllckNoaWxkcmVuKGxheWVySUQsIGNoaWxkcmVuKSk7CisgICAgICAgIH0KKyAg
ICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZF
UlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgIFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+IGNoaWxkcmVuOworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgU2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxD
b29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlblZlY3RvcikKKyAgICAgICAgICAgIDogbGF5ZXJJ
RChpZCkKKyAgICAgICAgICAgICwgY2hpbGRyZW4oY2hpbGRyZW5WZWN0b3IpCisgICAgICAgIHsg
fQorICAgIH07CisKKyAgICBjbGFzcyBDcmVhdGVUaWxlIDogcHVibGljIE9wZXJhdGlvbjxDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlVHlwZT4geworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3JlYXRlVGlsZT4gY3JlYXRlKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVUaWxlKGxheWVySUQsIHRpbGVJRCwgdGls
ZVJlY3QsIHVwZGF0ZUluZm8pKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29y
ZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAg
ICBJbnRSZWN0IHRpbGVSZWN0OworICAgICAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZv
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQg
aWQsIHVpbnQzMl90IHRpbGUsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFN1cmZhY2VVcGRh
dGVJbmZvJiBpbmZvKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAgICAgLCB0
aWxlSUQodGlsZSkKKyAgICAgICAgICAgICwgdGlsZVJlY3QocmVjdCkKKyAgICAgICAgICAgICwg
dXBkYXRlSW5mbyhpbmZvKQorICAgICAgICB7IH0KKyAgICB9OworCisgICAgY2xhc3MgVXBkYXRl
VGlsZSA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBk
YXRlVGlsZVR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVw
ZGF0ZVRpbGU+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVXBk
YXRlVGlsZShsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CisgICAgICAg
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KikgT1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAg
ICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAgICAgICAg
U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKworICAgIHByaXZhdGU6CisgICAgICAgIFVw
ZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCB0aWxlLCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgaW5mbykKKyAgICAgICAgICAgIDog
bGF5ZXJJRChpZCkKKyAgICAgICAgICAgICwgdGlsZUlEKHRpbGUpCisgICAgICAgICAgICAsIHRp
bGVSZWN0KHJlY3QpCisgICAgICAgICAgICAsIHVwZGF0ZUluZm8oaW5mbykKKyAgICAgICAgeyB9
CisgICAgfTsKKworICAgIGNsYXNzIFJlbW92ZVRpbGUgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGVUeXBlPiB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVUaWxlPiBjcmVhdGUoQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVUaWxlKGxheWVySUQsIHRpbGVJRCkpOworICAgICAg
ICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAg
ICAgICB1aW50MzJfdCB0aWxlSUQ7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZW1vdmVUaWxl
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgdGlsZSkKKyAgICAgICAgICAgIDogbGF5
ZXJJRChpZCkKKyAgICAgICAgICAgICwgdGlsZUlEKHRpbGUpCisgICAgICAgIHsgfQorICAgIH07
CisKKyAgICBjbGFzcyBDcmVhdGVVcGRhdGVBdGxhcyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXNUeXBlPiB7CisgICAgcHVi
bGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVVcGRhdGVBdGxhcz4gY3JlYXRl
KHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZVVwZGF0
ZUF0bGFzKGF0bGFzSUQsIHN1cmZhY2UpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAg
ICB1aW50MzJfdCBhdGxhc0lEOworICAgICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBz
dXJmYWNlOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ3JlYXRlVXBkYXRlQXRsYXModWludDMy
X3QgaWQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2Up
CisgICAgICAgICAgICA6IGF0bGFzSUQoaWQpCisgICAgICAgICAgICAsIHN1cmZhY2UoY29vcmRp
bmF0ZWRTdXJmYWNlKQorICAgICAgICB7IH0KKyAgICB9OworCisgICAgY2xhc3MgUmVtb3ZlVXBk
YXRlQXRsYXMgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlJlbW92ZVVwZGF0ZUF0bGFzVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8UmVtb3ZlVXBkYXRlQXRsYXM+IGNyZWF0ZSh1aW50MzJfdCBhdGxhc0lEKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZVVwZGF0ZUF0bGFz
KGF0bGFzSUQpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICB1aW50MzJfdCBhdGxh
c0lEOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZXhwbGljaXQgUmVtb3ZlVXBkYXRlQXRsYXMo
dWludDMyX3QgaWQpCisgICAgICAgICAgICA6IGF0bGFzSUQoaWQpCisgICAgICAgIHsgfQorICAg
IH07CisKKyAgICBjbGFzcyBDcmVhdGVJbWFnZUJhY2tpbmcgOiBwdWJsaWMgT3BlcmF0aW9uPENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZ1R5cGU+IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZUltYWdlQmFja2luZz4g
Y3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNraW5nSUQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlSW1hZ2VCYWNraW5nKGlt
YWdlQmFja2luZ0lEKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUo
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRDsKKworICAgIHByaXZhdGU6CisgICAgICAg
IGV4cGxpY2l0IENyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlk
KQorICAgICAgICAgICAgOiBpbWFnZUJhY2tpbmdJRChpZCkKKyAgICAgICAgeyB9CisgICAgfTsK
KworICAgIGNsYXNzIFVwZGF0ZUltYWdlQmFja2luZyA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nVHlwZT4geworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VXBkYXRlSW1hZ2VCYWNraW5nPiBjcmVh
dGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlQmFja2luZ0lELCBzdXJmYWNl
KSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCBpbWFnZUJhY2tpbmdJRDsKKyAgICAgICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4g
c3VyZmFjZTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFVwZGF0ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIGlkLCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4g
Y29vcmRpbmF0ZWRTdXJmYWNlKQorICAgICAgICAgICAgOiBpbWFnZUJhY2tpbmdJRChpZCkKKyAg
ICAgICAgICAgICwgc3VyZmFjZShjb29yZGluYXRlZFN1cmZhY2UpCisgICAgICAgIHsgfQorICAg
IH07CisKKyAgICBjbGFzcyBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzIDogcHVibGljIE9wZXJh
dGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRl
bnRzVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xlYXJJ
bWFnZUJhY2tpbmdDb250ZW50cz4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1h
Z2VCYWNraW5nSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUJhY2tpbmdJRCkpOworICAgICAgICB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9W
RVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNraW5n
SUQ7CisKKyAgICBwcml2YXRlOgorICAgICAgICBleHBsaWNpdCBDbGVhckltYWdlQmFja2luZ0Nv
bnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQpCisgICAgICAgICAgICA6IGltYWdl
QmFja2luZ0lEKGlkKQorICAgICAgICB7IH0KKyAgICB9OworCisgICAgY2xhc3MgUmVtb3ZlSW1h
Z2VCYWNraW5nIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpSZW1vdmVJbWFnZUJhY2tpbmdUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxSZW1vdmVJbWFnZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGltYWdlQmFja2luZ0lEKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFJlbW92ZUltYWdlQmFja2luZyhpbWFnZUJhY2tpbmdJRCkpOworICAgICAgICB9
CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSop
IE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNr
aW5nSUQ7CisKKyAgICBwcml2YXRlOgorICAgICAgICBleHBsaWNpdCBSZW1vdmVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCkKKyAgICAgICAgICAgIDogaW1hZ2VCYWNr
aW5nSUQoaWQpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBTZXRMYXllckFuaW1h
dGlvbnMgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dExheWVyQW5pbWF0aW9uc1R5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNldExheWVyQW5pbWF0aW9ucz4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllckFuaW1hdGlvbnMobGF5
ZXJJRCwgYW5pbWF0aW9ucykpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBh
bmltYXRpb25zOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2V0TGF5ZXJBbmltYXRpb25zKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGxheWVy
QW5pbWF0aW9ucykKKyAgICAgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgICAgICwgYW5p
bWF0aW9ucyhsYXllckFuaW1hdGlvbnMpCisgICAgICAgIHsgfQorICAgIH07CisKKyNpZiBFTkFC
TEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgY2xhc3MgUmVxdWVzdEFuaW1hdGlvbkZy
YW1lIDogcHVibGljIE9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVUeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJhbWU+IGNyZWF0ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkpOworICAg
ICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSopIE9WRVJSSURFOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVxdWVzdEFuaW1hdGlv
bkZyYW1lKCkKKyAgICAgICAgeyB9CisgICAgfTsKKyNlbmRpZgorCisjaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCisgICAgY2xhc3MgQ3JlYXRlQ2FudmFzIDogcHVibGljIE9wZXJhdGlvbjxDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXNUeXBlPiB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDcmVhdGVDYW52YXM+IGNyZWF0ZShDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3QgR3Jh
cGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENyZWF0ZUNhbnZhcyhsYXllcklELCBjYW52YXNTaXplLCB0b2tlbikpOwor
ICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZSopIE9WRVJSSURFOworCisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklE
OworICAgICAgICBJbnRTaXplIGNhbnZhc1NpemU7CisgICAgICAgIEdyYXBoaWNzU3VyZmFjZVRv
a2VuIHRva2VuOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ3JlYXRlQ2FudmFzKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNl
VG9rZW4mIHN1cmZhY2VUb2tlbikKKyAgICAgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAg
ICAgICwgY2FudmFzU2l6ZShzaXplKQorICAgICAgICAgICAgLCB0b2tlbihzdXJmYWNlVG9rZW4p
CisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBTeW5jQ2FudmFzIDogcHVibGljIE9w
ZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzVHlwZT4gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3luY0NhbnZhcz4gY3JlYXRl
KENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTeW5jQ2FudmFzKGxheWVySUQs
IGZyb250QnVmZmVyKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUo
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgIHVpbnQzMl90IGZyb250QnVmZmVyOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgU3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQz
Ml90IGZyb250QnVmZmVySGFuZGxlKQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAg
ICAgICAgLCBmcm9udEJ1ZmZlcihmcm9udEJ1ZmZlckhhbmRsZSkKKyAgICAgICAgeyB9CisgICAg
fTsKKworICAgIGNsYXNzIERlc3Ryb3lDYW52YXMgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXNUeXBlPiB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEZXN0cm95Q2FudmFzPiBjcmVhdGUoQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRGVzdHJveUNhbnZhcyhsYXllcklEKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAg
ICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBleHBsaWNpdCBEZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKKyAgICAgICAg
ICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgeyB9CisgICAgfTsKKyNlbmRpZgorCisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQorICAgIGNsYXNzIFNldExheWVyRmlsdGVycyA6IHB1YmxpYyBPcGVy
YXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzVHlwZT4g
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2V0TGF5ZXJGaWx0ZXJz
PiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U2V0TGF5ZXJGaWx0ZXJzKGxheWVySUQsIGZpbHRlcnMpKTsKKyAgICAgICAgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsK
KworICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgRmlsdGVyT3Bl
cmF0aW9ucyBmaWx0ZXJzOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2V0TGF5ZXJGaWx0ZXJz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVyT3Bl
cmF0aW9ucykKKyAgICAgICAgICAgIDogbGF5ZXJJRChpZCkKKyAgICAgICAgICAgICwgZmlsdGVy
cyhmaWx0ZXJPcGVyYXRpb25zKQorICAgICAgICB7IH0KKyAgICB9OworCisjaWYgRU5BQkxFKENT
U19TSEFERVJTKQorICAgIGNsYXNzIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0gOiBwdWJsaWMg
T3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRl
clByb2dyYW1UeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
cmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dyYW1J
RCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUN1c3RvbUZpbHRlclByb2dy
YW0oY3VzdG9tRmlsdGVyUHJvZ3JhbUlELCBwcm9ncmFtSW5mbykpOworICAgICAgICB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJS
SURFOworCisgICAgICAgIGludCBjdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAgICAgIEN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvIHByb2dyYW1JbmZvOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgcHJvZ3JhbUlELCBjb25zdCBDdXN0b21GaWx0
ZXJQcm9ncmFtSW5mbyYgaW5mbykKKyAgICAgICAgICAgIDogY3VzdG9tRmlsdGVyUHJvZ3JhbUlE
KHByb2dyYW1JRCkKKyAgICAgICAgICAgICwgcHJvZ3JhbUluZm8oaW5mbykKKyAgICAgICAgeyB9
CisgICAgfTsKKworICAgIGNsYXNzIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0gOiBwdWJsaWMg
T3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRl
clByb2dyYW1UeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxS
ZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dyYW1J
RCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpOworICAgICAgICB9CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJS
SURFOworCisgICAgICAgIGludCBjdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisKKyAgICBwcml2YXRl
OgorICAgICAgICBleHBsaWNpdCBSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBwcm9ncmFt
SUQpCisgICAgICAgICAgICA6IGN1c3RvbUZpbHRlclByb2dyYW1JRChwcm9ncmFtSUQpCisgICAg
ICAgIHsgfQorICAgIH07CisjZW5kaWYKKyNlbmRpZgorCisgICAgY2xhc3MgU2V0TGF5ZXJSZXBh
aW50Q291bnQgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlNldExheWVyUmVwYWludENvdW50VHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2V0TGF5ZXJSZXBhaW50Q291bnQ+IGNyZWF0ZShDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRCwgaW50IHJlcGFpbnRDb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllclJlcGFpbnRDb3VudChsYXllcklELCByZXBhaW50Q291
bnQpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRDsKKyAgICAgICAgaW50IHJlcGFpbnRDb3VudDsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIFNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IGNvdW50
KQorICAgICAgICAgICAgOiBsYXllcklEKGlkKQorICAgICAgICAgICAgLCByZXBhaW50Q291bnQo
Y291bnQpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBTZXRCYWNrZ3JvdW5kQ29s
b3IgOiBwdWJsaWMgT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldEJh
Y2tncm91bmRDb2xvclR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNldEJhY2tncm91bmRDb2xvcj4gY3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRCYWNrZ3JvdW5kQ29sb3Io
Y29sb3IpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgICAgICBDb2xvciBjb2xvcjsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIGV4cGxpY2l0IFNldEJhY2tncm91bmRDb2xvcihjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKQorICAgICAgICAgICAgOiBjb2xvcihiYWNrZ3JvdW5kQ29s
b3IpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBEaWRDaGFuZ2VTY3JvbGxQb3Np
dGlvbiA6IHB1YmxpYyBPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlk
Q2hhbmdlU2Nyb2xsUG9zaXRpb25UeXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbj4gY3JlYXRlKGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uKSk7CisgICAgICAgIH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7
CisKKyAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbjsKKworICAgIHByaXZhdGU6CisgICAgICAg
IGV4cGxpY2l0IERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9s
bFBvc2l0aW9uKQorICAgICAgICAgICAgOiBwb3NpdGlvbihzY3JvbGxQb3NpdGlvbikKKyAgICAg
ICAgeyB9CisgICAgfTsKKworICAgIGNsYXNzIFF1ZXVlIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHZpcnR1YWwgflF1ZXVlKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlKFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uQmFzZT4pID0gMDsK
KyAgICB9OworCit9OyAvLyBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZgorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbl9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTgwNjFjNGQzZWY1NTQ2
YTliMjdkNjJiMWUwNzExZmYyM2UwODU5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9ucy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uc19oCisjZGVmaW5lIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25zX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKwor
I2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbnMgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
T3BlcmF0aW9uQmFzZT4gb3BlcmF0aW9uKSB7IG1fb3BlcmF0aW9ucy5hcHBlbmQob3BlcmF0aW9u
KTsgfQorICAgIHZvaWQgY2xlYXIoKSB7IG1fb3BlcmF0aW9ucy5jbGVhcigpOyB9CisKKyAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGlvbnMuaXNFbXB0eSgpOyB9Cisg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdGlvbnMuc2l6ZSgpOyB9Cisg
ICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uQmFzZSogYXQoc2l6ZV90
IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9vcGVyYXRpb25z
LnNpemUoKSk7CisgICAgICAgIHJldHVybiBtX29wZXJhdGlvbnMuYXQoaW5kZXgpLmdldCgpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8UmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246Ok9wZXJhdGlvbkJhc2U+ID4gbV9vcGVyYXRpb25zOworfTsKKworfQorI2VuZGlm
CisKKyNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uc19oCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKaW5k
ZXggZDIxNWZiMzYxM2I5MDdiNmIxZDlmNWU4OTExOWRiYjI2NDRmNDU5NC4uZDdkYjIzNThkZGVi
ZDM0NzM1ZDlmNmY4YTNkYTJlZTE1ZTI5NDc0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAK
ICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCIKIAogI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgogI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmgiCkBAIC0yMTUsNyArMjE2LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFk
anVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24p
CiB7Ci0gICAgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gcG9zaXRp
b247CisgICAgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKIH0K
IAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQpAQCAtNTU0LDkgKzU1NSwxMCBAQCB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlv
bnMoKQogICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOwogfQog
Ci12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Zmx1c2hMYXllckNoYW5nZXMoKQordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25zKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiBvcGVyYXRpb25zKQog
ewotICAgIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gbV9wZW5kaW5nUmVuZGVy
ZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3Bl
cmF0aW9ucy5zaXplKCk7IGkrKykKKyAgICAgICAgb3BlcmF0aW9ucy5hdChpKS0+ZXhlY3V0ZSh0
aGlzKTsKIAogICAgIC8vIFNpbmNlIHRoZSBmcmFtZSBoYXMgbm93IGJlZW4gcmVuZGVyZWQsIHdl
IGNhbiBzYWZlbHkgdW5sb2NrIHRoZSBhbmltYXRpb25zIHVudGlsIHRoZSBuZXh0IGxheW91dC4K
ICAgICBzZXRBbmltYXRpb25zTG9ja2VkKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAppbmRleCBjZmFiMTY2MmQxYWM1YzQy
M2ZkNTAxMGIwMWNkN2U0MDYzNjkzMzgzLi5mMDRhOTNmZDRmM2JhZTA5OGEyMjg0ZDRjMzhiZjQ3
NWFmYjM4NTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZS5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZV9oCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5
ZXJJbmZvLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCkBAIC00Miw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU7CiBjbGFzcyBDb29yZGluYXRlZExheWVySW5m
bzsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOwogY2xhc3MgQ3VzdG9tRmls
dGVyUHJvZ3JhbTsKIGNsYXNzIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvOwogY2xhc3MgVGV4dHVy
ZU1hcHBlckxheWVyOwpAQCAtODIsMTMgKzg0LDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9p
ZCBzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJik7CiAgICAgdm9pZCBzZXRWaXNpYmxl
Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xs
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pOwotI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQotICAgIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
SW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPik7Ci0gICAgdm9pZCBzeW5jQ2Fu
dmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZmZXIpOwotICAgIHZvaWQg
ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRM
YXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQsIGludCB2YWx1ZSk7CiAKICAgICB2
b2lkIGRldGFjaCgpOwogICAgIHZvaWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mKTsKQEAgLTk4LDM4ICs5Myw0NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXJnZUdMUmVzb3Vy
Y2VzKCk7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CiAKKyAgICB2b2lkIGNvbW1pdENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25zJik7CisgICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOworCisgICAgLy8gQmVn
aW4gb3BlcmF0aW9uIGV4ZWN1dGlvbnMuCiAgICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVj
dG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKICAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25zdCBW
ZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwogICAgIHZvaWQgc2V0Um9vdExheWVySUQoQ29v
cmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIHNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRM
YXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwogICAgIHZvaWQgc2V0
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZv
Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENv
b3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0jaWYg
RU5BQkxFKENTU19TSEFERVJTKQotICAgIHZvaWQgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJv
Z3JhbXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgY29uc3Q7Ci0gICAgdm9pZCBj
cmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKLSNl
bmRpZgotCisgICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKICAgICB2b2lkIGNyZWF0ZVRpbGUoQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKTsKLSAgICB2b2lk
IHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwogICAgIHZv
aWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
VGlsZVVwZGF0ZSYpOworICAgIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVp
bnQzMl90IHRpbGVJRCk7CiAgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxh
c0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOwogICAgIHZvaWQgcmVtb3ZlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0gICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygp
OwogICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
OwogICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQs
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPik7CiAgICAgdm9pZCBjbGVhckltYWdlQmFj
a2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgcmVtb3Zl
SW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgc2V0TGF5
ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1h
dGlvbnMmKTsKLSAgICB2b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7Ci0gICAgdm9pZCBz
ZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIHNldERyYXdzQmFja2dy
b3VuZChib29sIGVuYWJsZSkgeyBtX3NldERyYXdzQmFja2dyb3VuZCA9IGVuYWJsZTsgfQotCiAj
aWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZvaWQgcmVxdWVzdEFuaW1h
dGlvbkZyYW1lKCk7CiAjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2b2lk
IGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEludFNpemUmLCBQYXNzUmVm
UHRyPEdyYXBoaWNzU3VyZmFjZT4pOworICAgIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExh
eWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKTsKKyAgICB2b2lkIGRlc3Ryb3lDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklEKTsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2
b2lkIHNldExheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmKTsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICB2b2lkIGNyZWF0
ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5m
byYpOworICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOworI2VuZGlm
CisgICAgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQsIGludCB2
YWx1ZSk7CisgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2
b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKTsK
KyAgICAvLyBFbmQgb3BlcmF0aW9uIGV4ZWN1dGlvbnMuCisKKyAgICB2b2lkIHNldERyYXdzQmFj
a2dyb3VuZChib29sIGVuYWJsZSkgeyBtX3NldERyYXdzQmFja2dyb3VuZCA9IGVuYWJsZTsgfQog
CiBwcml2YXRlOgogICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChDb29yZGluYXRlZExheWVy
SUQgaWQpCkBAIC0xNzAsNiArMTczLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVCYWNr
aW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVyKik7CiAgICAgdm9pZCByZXNldEJhY2tpbmdT
dG9yZVNpemVUb0xheWVyU2l6ZShHcmFwaGljc0xheWVyKik7CiAKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCisgICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKKyNlbmRpZgorCiAgICAgRmxvYXRTaXpl
IG1fY29udGVudHNTaXplOwogICAgIEZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CiAK
QEAgLTIwOCw3ICsyMTUsNiBAQCBwcml2YXRlOgogICAgIExheWVyUmF3UHRyTWFwIG1fZml4ZWRM
YXllcnM7CiAgICAgQ29vcmRpbmF0ZWRMYXllcklEIG1fcm9vdExheWVySUQ7CiAgICAgRmxvYXRQ
b2ludCBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50IG1f
cGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKICAgICBib29sIG1fYW5pbWF0
aW9uc0xvY2tlZDsKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgYm9v
bCBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKaW5kZXggMTI4YmFiZTI5OGY2NmNiYzI3
NjljZjZmZjhlYTk4MjI5ZDUxNTU3Ny4uZjRiOTY1OWZjYzZjNTlmMzQ3MTEyMzI3NDAwYTFhOWM3
MmEwZTI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmcuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQogI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCiAKKyNpbmNsdWRl
ICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDEzICszOSwxMyBAQCBDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQ+KGltYWdlKTsKIH0KIAotUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdl
QmFja2luZz4gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZShDb29yZGluYXRvciogY2xp
ZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc+IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UXVldWUqIHF1ZXVlLCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKGNsaWVudCwg
aW1hZ2UpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
KHF1ZXVlLCBpbWFnZSkpOwogfQogCi1Db29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1h
Z2UpCi0gICAgOiBtX2Nvb3JkaW5hdG9yKGNsaWVudCkKK0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpR
dWV1ZSogcXVldWUsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQorICAgIDogbV9vcGVyYXRpb25R
dWV1ZShxdWV1ZSkKICAgICAsIG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX2lkKGdldENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQobV9pbWFnZS5nZXQoKSkpCiAgICAgLCBtX2NsZWFyQ29udGVudHNU
aW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNsZWFyQ29udGVudHNUaW1lckZp
cmVkKQpAQCAtNTQsNyArNTUsNyBAQCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cgogICAgIC8vIEZJ
WE1FOiBXZSB3b3VsZCBuZWVkIHRvIGRlY29kZSBhIHNtYWxsIGltYWdlIGRpcmVjdGx5IGludG8g
YSBHcmFwaGljc1N1cmZhY2UuCiAgICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi8xMDE0MjYKIAot
ICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZUltYWdlQmFja2luZyhpZCgpKTsKKyAgICBtX29wZXJh
dGlvblF1ZXVlLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUlt
YWdlQmFja2luZzo6Y3JlYXRlKGlkKCkpKTsKIH0KIAogQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
On5Db29yZGluYXRlZEltYWdlQmFja2luZygpCkBAIC03NCw3ICs3NSw3IEBAIHZvaWQgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUhvc3QoSG9zdCogaG9zdCkKICAgICBtX2hvc3RzLnJl
bW92ZShwb3NpdGlvbik7CiAKICAgICBpZiAobV9ob3N0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1f
Y29vcmRpbmF0b3ItPnJlbW92ZUltYWdlQmFja2luZyhpZCgpKTsKKyAgICAgICAgbV9vcGVyYXRp
b25RdWV1ZS0+ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFn
ZUJhY2tpbmc6OmNyZWF0ZShpZCgpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc6Om1hcmtEaXJ0eSgpCkBAIC0xMTMsOSArMTE0LDggQEAgdm9pZCBDb29yZGluYXRlZEltYWdl
QmFja2luZzo6dXBkYXRlKCkKIAogICAgIG1fbmF0aXZlSW1hZ2VQdHIgPSBtX2ltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogCi0gICAgLy8gSWYgc2VuZGluZyB0aGUgbWVzc2Fn
ZSBmYWlscywgdHJ5IGFnYWluIGluIHRoZSBuZXh0IHVwZGF0ZS4KLSAgICBib29sIHN1Y2Nlc3Mg
PSBtX2Nvb3JkaW5hdG9yLT51cGRhdGVJbWFnZUJhY2tpbmcoaWQoKSwgbV9zdXJmYWNlKTsKLSAg
ICBtX2lzRGlydHkgPSAhc3VjY2VzczsKKyAgICBtX29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVlKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlk
KCksIG1fc3VyZmFjZSkpOworICAgIG1faXNEaXJ0eSA9IGZhbHNlOwogfQogCiB2b2lkIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjpyZWxlYXNlU3VyZmFjZUlmTmVlZGVkKCkKQEAgLTE1Niw3ICsx
NTYsNyBAQCB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1cGRhdGVWaXNpYmlsaXR5SWZO
ZWVkZWQoYm9vbCYgY2hhbmdlZFRvVmlzaWJsZSkKIAogdm9pZCBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc+KikKIHsKLSAgICBtX2Nvb3JkaW5hdG9yLT5jbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGlk
KCkpOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6Y3JlYXRlKGlkKCkpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAppbmRleCA1YjViNTdhNmVjYjEwMWVmNzViMjkxOTFiNTc1
MDdiZWRkYTJmNzY1Li44YmY0ZGI2NTc5MWJkYjVlYjBiMGU0ZWUzYjA1NDY0OTI4ODE1ZDBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
aApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBDb29yZGluYXRlZEltYWdlQmFja2luZ19oCiAK
ICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCiAjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTM5LDIw
ICs0MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nIDogcHVibGljIFJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IHsKIHB1
YmxpYzoKLSAgICBjbGFzcyBDb29yZGluYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0g
MDsKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKLSAgICB9OwotCiAgICAgY2xhc3MgSG9z
dCB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJs
ZSgpID0gMDsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRvciosIFBhc3NSZWZQdHI8SW1hZ2U+KTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiwgUGFzc1JlZlB0cjxJbWFnZT4pOwogICAgIHZp
cnR1YWwgfkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCk7CiAKICAgICBzdGF0aWMgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCBnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKEltYWdlKik7CkBA
IC02OCwxMyArNjEsMTMgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlKCk7CiAKIHByaXZhdGU6
Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0b3IqLCBQYXNzUmVmUHRyPElt
YWdlPik7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6UXVldWUqLCBQYXNzUmVmUHRyPEltYWdlPik7CiAKICAgICB2b2lkIHJlbGVhc2VT
dXJmYWNlSWZOZWVkZWQoKTsKICAgICB2b2lkIHVwZGF0ZVZpc2liaWxpdHlJZk5lZWRlZChib29s
JiBjaGFuZ2VkVG9WaXNpYmxlKTsKICAgICB2b2lkIGNsZWFyQ29udGVudHNUaW1lckZpcmVkKFRp
bWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiopOwogCi0gICAgQ29vcmRpbmF0b3IqIG1fY29v
cmRpbmF0b3I7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqIG1fb3Bl
cmF0aW9uUXVldWU7CiAgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIE5hdGl2ZUltYWdl
UHRyIG1fbmF0aXZlSW1hZ2VQdHI7CiAgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBtX2lk
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAppbmRleCA2YWIz
ODRhMTFlYWE1ZWEyNTQwODEzYzcwMjVlNWZjOGMxN2QzOTEwLi5lYThiMjVmZWY2ZTk3NzI5MmYw
ZTM4OGQ0ODY0MmZhMjI5YjUwOTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFj
ZVVwZGF0ZUluZm8uaApAQCAtMjMsMTMgKzIzLDEwIEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN1cmZhY2VVcGRhdGVJbmZvIHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdXJmYWNlVXBkYXRlSW5mbyk7Ci0KIHB1YmxpYzoK
ICAgICBTdXJmYWNlVXBkYXRlSW5mbygpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0
ZUF0bGFzLmNwcAppbmRleCAzNjRmMDY4NzEwODJiNThmY2JkODNhMGVmMzE0NTBiZTQ4MDA4NDhi
Li41ZWRjMmZlNzgyOWYzYWZhYjcwYjljY2E0ZTFkYmU3NmQwOTgxMDQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRl
QXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKQEAgLTIzLDE0ICsyMywxNSBAQAogCiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCogY2xpZW50LCBp
bnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQotICAgIDogbV9j
bGllbnQoY2xpZW50KQorVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlF1ZXVlKiBxdWV1ZSwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJm
YWNlOjpGbGFncyBmbGFncykKKyAgICA6IG1fb3BlcmF0aW9uUXVldWUocXVldWUpCiAgICAgLCBt
X2luYWN0aXZpdHlJblNlY29uZHMoMCkKIHsKICAgICBzdGF0aWMgdWludDMyX3QgbmV4dElEID0g
MDsKQEAgLTM4LDE1ICszOSwxMiBAQCBVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoVXBkYXRlQXRs
YXNDbGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdQogICAgIEludFNp
emUgc2l6ZSA9IG5leHRQb3dlck9mVHdvKEludFNpemUoZGltZW5zaW9uLCBkaW1lbnNpb24pKTsK
ICAgICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShzaXplLCBmbGFncyk7
CiAKLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBpZiBzZW5kaW5nIHRoZSBtZXNzYWdlIGZhaWxz
LCBVcGRhdGVBdGxhcyBnaXZlcyB1cCBkcmF3aW5nIGFueXRoaW5nIGltcGxpY2l0bHkuCi0gICAg
aWYgKCFtX2NsaWVudC0+Y3JlYXRlVXBkYXRlQXRsYXMobV9JRCwgbV9zdXJmYWNlKSkKLSAgICAg
ICAgbV9zdXJmYWNlLmNsZWFyKCk7CisgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5xdWV1ZShDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKG1fSUQs
IG1fc3VyZmFjZSkpOwogfQogCiBVcGRhdGVBdGxhczo6flVwZGF0ZUF0bGFzKCkKIHsKLSAgICBp
ZiAobV9zdXJmYWNlKQotICAgICAgICBtX2NsaWVudC0+cmVtb3ZlVXBkYXRlQXRsYXMobV9JRCk7
CisgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpSZW1vdmVVcGRhdGVBdGxhczo6Y3JlYXRlKG1fSUQpKTsKIH0KIAogdm9pZCBVcGRhdGVB
dGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCgpCkBAIC03Miw5ICs3MCw2IEBAIFBhc3NPd25QdHI8
R3JhcGhpY3NDb250ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVm
ZmVyKHVpbnQzMl90CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7CiAKLSAgICBpZiAoIW1fc3VyZmFjZSkKLSAgICAg
ICAgcmV0dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PigpOwotCiAgICAgYXRsYXNJRCA9
IG1fSUQ7CiAKICAgICAvLyBGSVhNRTogVXNlIHRyaS1zdGF0ZSBidWZmZXJzLCB0byBhbGxvdyBm
YXN0ZXIgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKaW5kZXggNDhh
NmJmODQ0YTQ5MGY3ZmQyYzM5YTA0MjRlMzMwZmRkYjE2ZDc4Yi4uMTYzMTM4ZjE3YzI1NjQwNzNk
OWI1Njg2YjBhNDM4ODI5YWNmNGQzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFz
LmgKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgVXBkYXRlQXRsYXNfaAogCiAjaW5jbHVkZSAi
QXJlYUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24u
aCIKICNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgi
CiAKQEAgLTMxLDE2ICszMiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CiBjbGFzcyBJbnRQb2ludDsKIAotY2xhc3MgVXBkYXRlQXRsYXNDbGllbnQgewot
cHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxh
c0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgPSAwOwotfTsKLQogY2xhc3Mg
VXBkYXRlQXRsYXMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKIHB1
YmxpYzoKLSAgICBVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCosIGludCBkaW1lbnNpb24s
IENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MpOworICAgIFVwZGF0ZUF0bGFzKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJm
YWNlOjpGbGFncyk7CiAgICAgflVwZGF0ZUF0bGFzKCk7CiAKICAgICBpbmxpbmUgSW50U2l6ZSBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLT5zaXplKCk7IH0KQEAgLTY2LDcgKzYxLDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKIAogcHJpdmF0ZToK
LSAgICBVcGRhdGVBdGxhc0NsaWVudCogbV9jbGllbnQ7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UXVldWUqIG1fb3BlcmF0aW9uUXVldWU7CiAgICAgT3duUHRyPEdlbmVyYWxB
cmVhQWxsb2NhdG9yPiBtX2FyZWFBbGxvY2F0b3I7CiAgICAgUmVmUHRyPENvb3JkaW5hdGVkU3Vy
ZmFjZT4gbV9zdXJmYWNlOwogICAgIGRvdWJsZSBtX2luYWN0aXZpdHlJblNlY29uZHM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApp
bmRleCA1YTA2ZDExNjhjMjI3NjAyY2EyMGMxYmMyODBkMTc2OTcyNmEwNTg4Li45YWI2YzIwYWZi
ZmE1MDdhMGUxMGIxZmUyOTY3NzE4NTAzODU3OWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRD
b2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTI5LDkgKzI5LDExIEBA
CiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAKICNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9BbmltYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Q29vcmRpbmF0ZWRMYXllckluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQzRC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgpAQCAtNzMsOSAr
NzUsNyBAQAogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0jZW5kaWYKIAogbmFtZXNwYWNl
IENvcmVJUEMgewogCkBAIC04MzUsNiArODM1LDM4NCBAQCBib29sIEFyZ3VtZW50Q29kZXI8U3Vy
ZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBTdXJmYWNl
VQogICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVj
b2RlKGRlY29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsKIH0KIAordm9pZCBBcmd1bWVudENvZGVy
PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYg
ZW5jb2RlciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmIG9wZXJhdGlvbnMp
Cit7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ob3BlcmF0aW9ucy5zaXpl
KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmF0aW9ucy5zaXplKCk7ICsraSkg
eworICAgICAgICBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb25C
YXNlKiBvcGVyYXRpb24gPSBvcGVyYXRpb25zLmF0KGkpOworICAgICAgICBlbmNvZGVyLmVuY29k
ZUVudW0ob3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpOworCisgICAgICAgIHN3aXRjaCAo
b3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnNUeXBlOgorICAgICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVMYXllcnMqPihvcGVyYXRpb24pLT5sYXllcklEczsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVyc1R5cGU6
CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkRlbGV0ZUxheWVycyo+KG9wZXJhdGlvbiktPmxheWVySURzOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6U2V0Um9vdExheWVyVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyKj4ob3BlcmF0
aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGVUeXBlOgorICAgICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllclN0YXRlKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5
ZXJTdGF0ZSo+KG9wZXJhdGlvbiktPmxheWVySW5mbzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW5U
eXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxkcmVuKj4ob3BlcmF0aW9uKS0+bGF5ZXJJ
RDsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbio+KG9wZXJhdGlvbiktPmNoaWxkcmVu
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6Q3JlYXRlVGlsZVR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19j
YXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGUqPihvcGVy
YXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlKj4ob3BlcmF0aW9uKS0+
dGlsZUlEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlKj4ob3BlcmF0aW9uKS0+dGlsZVJlY3Q7
CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGUqPihvcGVyYXRpb24pLT51cGRhdGVJbmZvOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6VXBkYXRlVGlsZVR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNv
bnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGUqPihvcGVyYXRpb24p
LT5sYXllcklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlKj4ob3BlcmF0aW9uKS0+dGlsZUlE
OworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlKj4ob3BlcmF0aW9uKS0+dGlsZVJlY3Q7CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlVwZGF0ZVRpbGUqPihvcGVyYXRpb24pLT51cGRhdGVJbmZvOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVt
b3ZlVGlsZVR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGUqPihvcGVyYXRpb24pLT5sYXll
cklEOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlKj4ob3BlcmF0aW9uKS0+dGlsZUlEOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6Q3JlYXRlVXBkYXRlQXRsYXNUeXBlOiB7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0
bGFzKj4ob3BlcmF0aW9uKS0+YXRsYXNJRDsKKyAgICAgICAgICAgIFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZSogd2ViQ29vcmRpbmF0ZWRTdXJmYWNlID0gc3RhdGljX2Nhc3Q8V2ViQ29vcmRpbmF0ZWRT
dXJmYWNlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q3JlYXRlVXBkYXRlQXRsYXMqPihvcGVyYXRpb24pLT5zdXJmYWNlLmdldCgpKTsKKyAgICAgICAg
ICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUgY2FzZSB0aGF0IGhhbmRsZSBjcmVhdGlv
biBpcyBmYWlsZWQuCisgICAgICAgICAgICB3ZWJDb29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhh
bmRsZShoYW5kbGUpOworICAgICAgICAgICAgZW5jb2RlciA8PCBoYW5kbGU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRl
QXRsYXMqPihvcGVyYXRpb24pLT5hdGxhc0lEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nVHlw
ZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+aW1hZ2VC
YWNraW5nSUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmdUeXBlOiB7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlVwZGF0ZUltYWdlQmFja2luZyo+KG9wZXJhdGlvbiktPmltYWdlQmFja2luZ0lEOworICAgICAg
ICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0
aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihzdGF0aWNfY2FzdDxjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5z
dXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxl
IGhhbmRsZTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUg
Y2FzZSB0aGF0IGhhbmRsZSBjcmVhdGlvbiBpcyBmYWlsZWQuCisgICAgICAgICAgICB3ZWJDb29y
ZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOworICAgICAgICAgICAgZW5jb2Rl
ciA8PCBoYW5kbGU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHNU
eXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKj4ob3BlcmF0aW9u
KS0+aW1hZ2VCYWNraW5nSUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmdUeXBlOgorICAgICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5pbWFnZUJhY2tpbmdJRDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyQW5pbWF0aW9uc1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5p
bWF0aW9ucyo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0
YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5p
bWF0aW9ucyo+KG9wZXJhdGlvbiktPmFuaW1hdGlvbnM7CisgICAgICAgICAgICBicmVhazsKKyNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgICAgIGNhc2UgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lVHlwZToKKyAgICAgICAg
ICAgIGJyZWFrOworI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzVHlwZToKKyAgICAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6Q3JlYXRlQ2FudmFzKj4ob3BlcmF0aW9uKS0+bGF5ZXJJRDsKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6Q3JlYXRlQ2FudmFzKj4ob3BlcmF0aW9uKS0+Y2FudmFzU2l6ZTsKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q3JlYXRlQ2FudmFzKj4ob3BlcmF0aW9uKS0+dG9rZW47CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzVHlwZToK
KyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6U3luY0NhbnZhcyo+KG9wZXJhdGlvbiktPmxheWVySUQ7CisgICAgICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlN5bmNDYW52YXMqPihvcGVyYXRpb24pLT5mcm9udEJ1ZmZlcjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ry
b3lDYW52YXNUeXBlOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzKj4ob3BlcmF0aW9uKS0+
bGF5ZXJJRDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
RmlsdGVyc1R5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVycyo+KG9wZXJhdGlvbikt
PmxheWVySUQ7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVycyo+KG9wZXJhdGlvbiktPmZp
bHRlcnM7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0
b21GaWx0ZXJQcm9ncmFtVHlwZToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJv
Z3JhbSo+KG9wZXJhdGlvbiktPmN1c3RvbUZpbHRlclByb2dyYW1JRDsKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSo+KG9wZXJhdGlvbiktPnByb2dyYW1JbmZvOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW0qPihvcGVyYXRpb24pLT5jdXN0b21GaWx0ZXJQcm9ncmFtSUQ7Cisg
ICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50VHlwZToKKyAgICAgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJSZXBhaW50Q291bnQqPihvcGVyYXRpb24pLT5sYXllcklEOworICAgICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllclJlcGFpbnRDb3VudCo+KG9wZXJhdGlvbiktPnJlcGFpbnRDb3VudDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dEJhY2tncm91bmRDb2xvclR5cGU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldEJhY2tncm91bmRDb2xvcio+
KG9wZXJhdGlvbiktPmNvbG9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb25UeXBlOgor
ICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbio+KG9wZXJhdGlvbiktPnBvc2l0
aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorfQorCitib29sIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM+
OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9ucyYgb3BlcmF0aW9ucykKK3sKKyAgICB1bnNpZ25lZCBvcGVyYXRpb25zU2l6ZTsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG9wZXJhdGlvbnNTaXplKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRpb25zU2l6ZTsgKytpKSB7
CisgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlw
ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0odHlwZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzVHlwZTogeworICAgICAgICAg
ICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gaWRzOworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShpZHMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0
ZUxheWVyczo6Y3JlYXRlKGlkcykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnNUeXBl
OiB7CisgICAgICAgICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBpZHM7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlkcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6RGVsZXRlTGF5ZXJzOjpjcmVhdGUoaWRzKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dFJvb3RMYXllclR5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklE
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OmNyZWF0ZShsYXllcklEKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlNldExheWVyU3RhdGVUeXBlOiB7CisgICAgICAgICAgICBDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGF5
ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgQ29vcmRp
bmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShsYXllckluZm8pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
U3RhdGU6OmNyZWF0ZShsYXllcklELCBsYXllckluZm8pKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
TGF5ZXJDaGlsZHJlblR5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXllcklEKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiBjaGlsZHJlbjsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2hpbGRyZW4p
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMu
YXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW46OmNy
ZWF0ZShsYXllcklELCBjaGlsZHJlbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlVHlw
ZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQ7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUodGlsZUlEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBJbnRSZWN0IHRpbGVSZWN0OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh0aWxlUmVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodXBkYXRlSW5mbykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlVGlsZTo6Y3JlYXRlKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZVR5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5h
dGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYXll
cklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB1aW50MzJf
dCB0aWxlSUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbGVJRCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGlsZVJlY3QpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUlu
Zm87CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHVwZGF0ZUluZm8pKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OmNyZWF0ZShsYXllcklELCB0
aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRp
bGVUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh0aWxlSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlbW92ZVRpbGU6OmNyZWF0ZShsYXllcklELCB0aWxlSUQpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6Q3JlYXRlVXBkYXRlQXRsYXNUeXBlOiB7CisgICAgICAgICAgICB1aW50MzJfdCBhdGxhc0lE
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhdGxhc0lEKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6Okhh
bmRsZSBoYW5kbGU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBl
bmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXM6OmNyZWF0
ZShhdGxhc0lELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzVHlwZTogeworICAgICAgICAgICAgdWludDMy
X3QgYXRsYXNJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXRsYXNJRCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBl
bmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OmNyZWF0
ZShhdGxhc0lEKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZ1R5cGU6IHsK
KyAgICAgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQ7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGlkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpDcmVhdGVJbWFnZUJhY2tpbmc6OmNyZWF0ZShpZCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRh
dGVJbWFnZUJhY2tpbmdUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpZCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpI
YW5kbGUgaGFuZGxlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZzo6Y3Jl
YXRlKGlkLCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHNUeXBlOiB7CisgICAgICAgICAgICBD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShpZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJh
Y2tpbmdDb250ZW50czo6Y3JlYXRlKGlkKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdl
QmFja2luZ1R5cGU6IHsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQ7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlkKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmc6OmNyZWF0ZShpZCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnNUeXBlOiB7CisgICAgICAgICAgICBDb29yZGlu
YXRlZExheWVySUQgaWQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlkKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBHcmFwaGljc0xheWVyQW5p
bWF0aW9ucyBhbmltYXRpb25zOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhbmlt
YXRpb25zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVy
YXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1h
dGlvbnM6OmNyZWF0ZShpZCwgYW5pbWF0aW9ucykpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgICAgIGNhc2Ug
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lVHlwZToK
KyAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlJlcXVlc3RBbmltYXRpb25GcmFtZTo6Y3JlYXRlKCkpOworICAgICAgICAgICAgYnJlYWs7
CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgY2FzZSBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXNUeXBlOiB7CisgICAgICAgICAgICBD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
SW50U2l6ZSBjYW52YXNTaXplOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYW52
YXNTaXplKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBHcmFw
aGljc1N1cmZhY2VUb2tlbiB0b2tlbjsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
dG9rZW4pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMuYXBwZW5kKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6
Y3JlYXRlKGxheWVySUQsIGNhbnZhc1NpemUsIHRva2VuKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5
bmNDYW52YXNUeXBlOiB7CisgICAgICAgICAgICBDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdWludDMyX3QgZnJvbnRCdWZmZXI7CisgICAg
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZyb250QnVmZmVyKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpjcmVhdGUobGF5ZXJJRCwgZnJvbnRCdWZm
ZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhc1R5cGU6IHsKKyAgICAgICAgICAg
IENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShsYXllcklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95
Q2FudmFzOjpjcmVhdGUobGF5ZXJJRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAgICAgY2FzZSBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnNUeXBlOiB7CisgICAgICAgICAgICBD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUobGF5ZXJJRCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShmaWx0ZXJzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllckZpbHRlcnM6OmNyZWF0ZShsYXllcklELCBmaWx0ZXJzKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclBy
b2dyYW1UeXBlOiB7CisgICAgICAgICAgICBpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlEOworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjdXN0b21GaWx0ZXJQcm9ncmFtSUQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFdlYkNvcmU6OkN1c3RvbUZp
bHRlclByb2dyYW1JbmZvIHByb2dyYW1JbmZvOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShwcm9ncmFtSW5mbykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKGN1c3RvbUZpbHRlclByb2dyYW1JRCwgcHJv
Z3JhbUluZm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5
cGU6IHsKKyAgICAgICAgICAgIGludCBjdXN0b21GaWx0ZXJQcm9ncmFtSUQ7CisgICAgICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGN1c3RvbUZpbHRlclByb2dyYW1JRCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRl
KGN1c3RvbUZpbHRlclByb2dyYW1JRCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyNlbmRpZgorICAgICAgICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExh
eWVyUmVwYWludENvdW50VHlwZTogeworICAgICAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGxh
eWVySUQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxheWVySUQpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBy
ZXBhaW50Q291bnQ7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcGFpbnRDb3Vu
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgb3BlcmF0aW9u
cy5hcHBlbmQoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291
bnQ6OmNyZWF0ZShsYXllcklELCByZXBhaW50Q291bnQpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0
QmFja2dyb3VuZENvbG9yVHlwZTogeworICAgICAgICAgICAgQ29sb3IgY29sb3I7CisgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9yKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6OmNyZWF0ZShjb2xvcikpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvblR5cGU6IHsKKyAgICAgICAgICAgIEZsb2F0
UG9pbnQgcG9zaXRpb247CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBvc2l0aW9u
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBvcGVyYXRpb25z
LmFwcGVuZChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3Np
dGlvbjo6Y3JlYXRlKHBvc2l0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3Vt
ZW50Q29kZXJzLmgKaW5kZXggOGU3ZGVlZmIzZmVhMTdmOTg1ZTU4M2U3MzEwM2VmOGJhYzI5NTEx
ZS4uY2FkYzk5ZmUzNWJkY2U5NmI0MjUxOTJiODE3NTUzMDAxY2U3NGYwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0FyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczsKIGNsYXNzIEZsb2F0UG9p
bnQzRDsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb247CiBjbGFzcyBHcmFwaGljc0xheWVy
QW5pbWF0aW9uczsKQEAgLTExNyw2ICsxMTgsMTEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbz4gewogICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwogfTsK
IAordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9ucz4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXImLCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyYpOworICAg
IHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9ucyYpOworfTsKKwogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwogCiAj
ZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCmluZGV4IDk4NjQ5M2MzMmZmODQ2
MjhhM2UwYjBlYmIzYTA1MWI3NDE1OTM3NTguLjk1NWZkYjkzOGEzMzY3YmUwMDA0OGJmNTMwNDQ2
NDQ4ZTVjZTBmODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eS5jcHAKQEAgLTIzLDE2ICsyMywxMSBAQAogI2luY2x1ZGUgIkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRMYXllckluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzU3VyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+Ci0K
LSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUlu
Zm8uaCIKLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCkBAIC01OSw3OCArNTQsOSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdAogICAg
IG1fc2NlbmUtPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxlLCBtX3NjZW5lLmdldCgpLCBs
YXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKLSAgICB1cGRhdGVUaWxl
Rm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbyk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihDb29y
ZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVUaWxlLCBt
X3NjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQsIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGVSZWN0LCB1cGRhdGVJbmZvLmF0
bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJ
RCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlLCBtX3NjZW5lLmdldCgpLCBsYXll
cklELCB0aWxlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0bGFzLCBtX3NjZW5lLmdldCgpLCBh
dGxhc0lELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQz
Ml90IGF0bGFzSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpyZW1vdmVVcGRhdGVBdGxhcywgbV9zY2VuZS5nZXQoKSwgYXRsYXNJRCkpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDb21wb3NpdGlu
Z0xheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQotewotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlTGF5ZXJz
LCBtX3NjZW5lLmdldCgpLCBpZHMpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mIGlkcykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmRlbGV0ZUxheWVycywgbV9zY2VuZS5nZXQoKSwgaWRzKSk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVy
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldFJvb3RMYXllcklELCBtX3NjZW5lLmdldCgpLCBpZCkp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGlu
Z0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVy
SW5mbyYgaW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnNldExheWVyU3RhdGUsIG1fc2NlbmUuZ2V0KCksIGlkLCBpbmZvKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJD
aGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+JiBjaGlsZHJlbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRyZW4sIG1fc2NlbmUuZ2V0KCksIGlkLCBjaGls
ZHJlbikpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJz
LCBtX3NjZW5lLmdldCgpLCBpZCwgZmlsdGVycykpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVD
dXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0sIG1fc2Nl
bmUuZ2V0KCksIGlkKSk7Ci19Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpj
cmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8mIHByb2dyYW1JbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9zY2VuZS5nZXQo
KSwgaWQsIHByb2dyYW1JbmZvKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXpl
LCBjb25zdCBJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KQog
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Zmx1
c2hMYXllckNoYW5nZXMsIG1fc2NlbmUuZ2V0KCkpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25zLCBtX3NjZW5lLmdldCgpLCBvcGVyYXRpb25zKSk7CiAgICAgdXBkYXRlVmlld3BvcnQo
KTsKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+ZGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7CkBAIC0x
NDAsMjQgKzY2LDkgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVu
ZGVyRnJhbWUoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLAogI2VuZGlmCiB9CiAKLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVJbWFnZUJhY2tpbmcsIG1fc2NlbmUuZ2V0
KCksIGltYWdlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29u
c3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZUltYWdlQmFja2lu
ZywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUo
aGFuZGxlKSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHMsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQpKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCiB7Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVJbWFnZUJh
Y2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldEFuaW1hdGlvbnNMb2NrZWQsIG1fc2NlbmUu
Z2V0KCksIGxvY2tlZCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUpCkBAIC0xNjUs
MTUgKzc2LDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29udGVu
dHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXoKICAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldENvbnRlbnRzU2l6ZSwgbV9zY2VuZS5n
ZXQoKSwgY29udGVudHNTaXplKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zLCBtX3Nj
ZW5lLmdldCgpLCBpZCwgYW5pbWF0aW9ucykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQotewotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QW5pbWF0aW9u
c0xvY2tlZCwgbV9zY2VuZS5nZXQoKSwgbG9ja2VkKSk7Ci19CiAKIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewpAQCAtMTk0LDU1
ICs5NiwxNiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW5kZXJOZXh0
RnJhbWUoKQogfQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKLXsK
LSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlcXVl
c3RBbmltYXRpb25GcmFtZSwgbV9zY2VuZS5nZXQoKSkpOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7
Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmFuaW1hdGlvbkZyYW1l
UmVhZHkoKQogewogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6QW5pbWF0aW9uRnJhbWVSZWFk
eSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwogfQogI2VuZGlmCiAK
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24sIG1f
c2NlbmUuZ2V0KCksIHBvc2l0aW9uKSk7Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUNhbnZhcyhDb29yZGlu
YXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIGNvbnN0IEdyYXBoaWNz
U3VyZmFjZVRva2VuJiB0b2tlbikKLXsKLSAgICBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIHN1cmZh
Y2VGbGFncyA9IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNUZXh0dXJlVGFyZ2V0IHwgR3JhcGhp
Y3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVDYW52YXMsIG1fc2NlbmUuZ2V0KCksIGlkLCBj
YW52YXNTaXplLCBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjYW52YXNTaXplLCBzdXJmYWNlRmxh
Z3MsIHRva2VuKSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpz
eW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCi17
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5j
Q2FudmFzLCBtX3NjZW5lLmdldCgpLCBpZCwgZnJvbnRCdWZmZXIpKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVy
SUQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpkZXN0cm95Q2FudmFzLCBtX3NjZW5lLmdldCgpLCBpZCkpOwotfQotI2VuZGlmCi0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVyUmVwYWludENvdW50KENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IHZhbHVlKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJSZXBhaW50Q291bnQsIG1fc2Nl
bmUuZ2V0KCksIGlkLCB2YWx1ZSkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogewogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+
cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdl
SUQoKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRCYWNrZ3JvdW5kQ29sb3IsIG1fc2NlbmUu
Z2V0KCksIGNvbG9yKSk7Ci19Ci0KIH0KICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
aAppbmRleCAyNGIzNDc3MGFjMDgzYzM1YTU1NDAzMDRlMDkwYTA1MjU4ZWY1N2FkLi5jMzg4MjM1
ZDA0MDU0MGRjOTkzZDA2OGViZDliZjJiOGQyYTAzMTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTI1LDIzICsyNSwxMyBAQAog
I2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NB
cmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRl
ICJSZWdpb24uaCIKLSNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc1N1cmZhY2VUb2tlbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9v
cC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb25h
bC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKK2NsYXNz
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOwogY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87
CiB9CiAKQEAgLTUzLDQ1ICs0MywxMiBAQCBjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbAogcHVibGlj
OgogICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVh
UHJveHkqKTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpOwot
ICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICB2b2lkIHNl
dENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0jaWYgRU5BQkxFKENT
U19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0j
ZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0
ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8m
KTsKLSAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKLSNlbmRpZgot
ICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRS
b290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQpOworICAgIHZv
aWQgY29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoY29uc3QgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250
ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsKKyAgICB2b2lk
IHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRy
YWplY3RvcnlWZWN0b3IpOwotICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVj
dCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lk
IHJlbW92ZVRpbGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCk7Ci0gICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBj
b25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOwotICAgIHZvaWQgcmVtb3ZlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmco
V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCB1cGRhdGVJbWFn
ZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCByZW1v
dmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAg
dm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwotICAgIHZvaWQgZGlk
Q2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24p
OwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZvaWQgY3JlYXRlQ2FudmFzKFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZmZXIpOwotICAgIHZvaWQg
ZGVzdHJveUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQpOwotI2VuZGlmCi0gICAg
dm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGlu
dCB2YWx1ZSk7CiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUoKSBjb25zdCB7IHJldHVybiBtX3NjZW5lLmdldCgpOyB9Ci0gICAg
dm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwotICAgIHZvaWQgc2V0QW5pbWF0
aW9uc0xvY2tlZChib29sKTsKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0g
ICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKLSNlbmRpZgotICAgIHZvaWQgc2V0QmFj
a2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAKICAgICAvLyBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmVDbGllbnQgTWV0aG9kcy4KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDIxZGMyNjM0NTAzY2NkZTg3OTA2MmQ3
OTMyM2M2YmJhYmU0ZjcyZWMuLjZlMjc5MjNiYmMwMzhhMWQ4ZTY2NDMzMWEzMjAwYWY1ZjlhMWM5
MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xOSw0NCArMTksNyBAQAogCiAjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQogbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkgTGVnYWN5UmVjZWl2ZXIgewotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50
MzJfdCBpZCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvKQotICAgIFNl
dENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbih1aW50MzJfdCBpZCwgVmVjdG9yPHVpbnQzMl90PiBj
aGlsZHJlbikKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgU2V0Q29tcG9zaXRpbmdMYXll
ckZpbHRlcnModWludDMyX3QgaWQsIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVycykK
LSNlbmRpZgotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBDcmVhdGVDdXN0b21GaWx0ZXJQ
cm9ncmFtKGludCBpZCwgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gcHJvZ3JhbUlu
Zm8pCi0gICAgUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCi0jZW5kaWYKLSAgICBT
ZXRSb290Q29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKLSAgICBDcmVhdGVDb21wb3NpdGlu
Z0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlkcykKLSAgICBEZWxldGVDb21wb3NpdGluZ0xheWVy
cyhWZWN0b3I8dWludDMyX3Q+IGlkcykKLSAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMyX3Qg
bGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0LCBXZWJD
b3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXll
cih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGls
ZVJlY3QsIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgUmVtb3Zl
VGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKLSAgICBDcmVh
dGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6SGFuZGxlIGhhbmRsZSkKLSAgICBSZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxh
c0lEKQotICAgIENyZWF0ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlEKQotICAgIFVwZGF0
ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6SGFuZGxlIGhhbmRsZSkKLSAgICBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKHVpbnQ2
NF90IGltYWdlSUQpCi0gICAgUmVtb3ZlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQpCi0g
ICAgRGlkUmVuZGVyRnJhbWUoV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUsIFdlYkNvcmU6
OkludFJlY3QgY292ZXJlZFJlY3QpCi0gICAgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oV2ViQ29y
ZTo6RmxvYXRQb2ludCBwb3NpdGlvbikKLSAgICBTZXRMYXllckFuaW1hdGlvbnModWludDMyX3Qg
aWQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnMpCisgICAgQ29t
bWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbnMgb3BlcmF0aW9ucywgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUs
IFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCiAgICAgU2V0QW5pbWF0aW9uc0xvY2tlZChi
b29sIGxvY2tlZCkKLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICBS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQotI2VuZGlmCi0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLSAgICBDcmVhdGVDYW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6OkludFNpemUgY2FudmFz
U2l6ZSwgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4pCi0gICAgU3luY0NhbnZh
cyh1aW50MzJfdCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCi0gICAgRGVzdHJveUNhbnZhcyh1
aW50MzJfdCBpZCkKLSNlbmRpZgotCi0gICAgU2V0TGF5ZXJSZXBhaW50Q291bnQodWludDMyX3Qg
bGF5ZXJJRCwgaW50IHZhbHVlKQotCi0gICAgU2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNv
bG9yIGNvbG9yKQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCA2ZTVmYjU3MjMxYzliODk1ZjJm
MDZlYTQxNTEzMDE2OTg4MTBhNDVjLi4xNjViY2I5ZjAwNzVmNmRkYWNhMWVkYzkyYzMwZTAzZmYx
YjkxNTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM4LDkgKzM4LDkgQEAKICNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgpAQCAtNDgsNyArNDgsNiBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0
dGluZ3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgogI2luY2x1ZGUgPHd0Zi9U
ZW1wb3JhcnlDaGFuZ2UuaD4KIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKQEAgLTg2LDcgKzg1
LDYgQEAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Qo
V2ViUGFnZSogd2ViUGFnZSkKICAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2Vzcyh0cnVlKQogICAg
ICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKICAgICAsIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9u
VXBkYXRlKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKICAgICAsIG1fZGlk
SW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQogICAgICwgbV9sYXllckZsdXNo
VGltZXIodGhpcywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJGbHVzaFRpbWVyRmly
ZWQpCiAgICAgLCBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lcih0aGlzLCAmQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZCkKQEAgLTI4
NywxNCArMjg1LDE0IEBAIGJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRp
bmdMYXllckNoYW5nZXMoKQogCiAgICAgZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoKTsKIAotICAg
IGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgeworICAgIGlmICghbV9vcGVyYXRpb25zLmlzRW1wdHko
KSkgewogICAgICAgICBkaWRTeW5jID0gdHJ1ZTsKIAogICAgICAgICBJbnRTaXplIGNvbnRlbnRz
U2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgp
KTsKICAgICAgICAgSW50UmVjdCBjb3ZlcmVkUmVjdCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPmNvdmVyUmVjdCgpOwotICAg
ICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpEaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KSk7CisgICAgICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKG1fb3BlcmF0aW9ucywgY29udGVu
dHNTaXplLCBjb3ZlcmVkUmVjdCkpOworICAgICAgICBtX29wZXJhdGlvbnMuY2xlYXIoKTsKICAg
ICAgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAgbV9zaG91bGRTeW5j
RnJhbWUgPSBmYWxzZTsKICAgICB9IGVsc2UKICAgICAgICAgdW5sb2NrQW5pbWF0aW9ucygpOwog
CkBAIC0zMjAsOSArMzE4LDggQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0
ZUNvbXBvc2l0aW5nTGF5ZXJzKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUNvbXBv
c2l0aW5nTGF5ZXJzKG1fbGF5ZXJzVG9DcmVhdGUpKTsKKyAgICBlbnF1ZXVlKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVyczo6Y3JlYXRlKG1fbGF5ZXJzVG9DcmVhdGUp
KTsKICAgICBtX2xheWVyc1RvQ3JlYXRlLmNsZWFyKCk7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29tcG9z
aXRpbmdMYXllcnMoKQpAQCAtMzM1LDkgKzMzMiw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpkZWxldGVDb21wb3NpdGluZ0xheWVycygpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpEZWxldGVDb21wb3NpdGluZ0xheWVycyhtX2xheWVyc1RvRGVsZXRlKSk7CisgICAg
ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnM6OmNyZWF0
ZShtX2xheWVyc1RvRGVsZXRlKSk7CiAgICAgbV9sYXllcnNUb0RlbGV0ZS5jbGVhcigpOwotICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCkKQEAgLTM0NSw3
MCArMzQxLDEwIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXplUm9v
dENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCiAgICAgaWYgKG1fZGlkSW5pdGlhbGl6ZVJvb3RD
b21wb3NpdGluZ0xheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRSb290Q29tcG9zaXRp
bmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlk
KCkpKTsKKyAgICBlbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RM
YXllcjo6Y3JlYXRlKHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgp
KS0+aWQoKSkpOwogICAgIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1
ZTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0
IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQotewotICAgIGlmIChtX3Nob3VsZFNlbmRTY3Jv
bGxQb3NpdGlvblVwZGF0ZSkgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihtX3Zp
c2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKSkpOwotICAgICAgICBtX3Nob3VsZFNlbmRTY3Jv
bGxQb3NpdGlvblVwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoaWQsIGluZm8pKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVu
KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xh
eWVyQ2hpbGRyZW4oaWQsIGNoaWxkcmVuKSk7Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVDYW52YXMoQ29vcmRpbmF0
ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxheWVyKQotewotICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tl
biA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgSW50
U2l6ZSBjYW52YXNTaXplID0gY2FudmFzUGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUo
KTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpDcmVhdGVDYW52YXMoaWQsIGNhbnZhc1NpemUsIHRva2VuKSk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKLXsKLSAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7Ci0gICAgdWludDMyX3QgZnJvbnRCdWZmZXIgPSBjYW52YXNQbGF0Zm9y
bUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTeW5jQ2FudmFzKGlkLCBmcm9u
dEJ1ZmZlcikpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveUNh
bnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJv
eUNhbnZhcyhpZCkpOwotfQotI2VuZGlmCi0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkK
LXsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpTZXRMYXllclJlcGFpbnRDb3VudChpZCwgdmFsdWUpKTsKLX0KLQotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJG
aWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycykKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0jaWYgRU5BQkxFKENTU19T
SEFERVJTKQotICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoZmlsdGVycyk7Ci0j
ZW5kaWYKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhpZCwgZmlsdGVycykpOwotfQot
I2VuZGlmCi0KICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKQogewpAQCAtNDM2LDcgKzM3Miw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRl
ck9wZXJhCiAKICAgICAgICAgaWYgKCFjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgp
KSB7CiAgICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPnNldENsaWVudCh0aGlz
KTsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFs
aWRhdGVkUHJvZ3JhbUluZm8oKSkpOworICAgICAgICAgICAgZW5xdWV1ZShDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dy
YW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gSWYgdGhlIGNsaWVudCB3YXMgbm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29v
cmRpbmF0b3IgbXVzdCBiZSB0aGUgY2xpZW50IGZvciBpdC4KICAgICAgICAgICAgIEFTU0VSVChj
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpID09IHRoaXMpOwpAQCAtNDQ5LDcgKzM4
NSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvCiAgICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBz
aGFkZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0
IGFuZAogICAgIC8vIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBvdGhlciBwcm9jZXNzIHRvIGRlbGV0
ZSBpdC4KICAgICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLnJlbW92ZShjdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHkpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5LT5pZCgpKSk7CisgICAgZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5LT5pZCgpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaXNj
b25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQpAQCAtNjEzLDQwICs1NDksNiBAQCBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNy
ZWF0ZUltYWdlQmFja2luZwogICAgIHJldHVybiBpbWFnZUJhY2tpbmc7CiB9CiAKLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpDcmVhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkpOwotfQotCi1ib29sIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFj
ZSkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRl
ZFN1cmZhY2UqPihjb29yZGluYXRlZFN1cmZhY2UuZ2V0KCkpOwotICAgIFdlYkNvb3JkaW5hdGVk
U3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJ
bWFnZUJhY2tpbmcoaW1hZ2VJRCwgaGFuZGxlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFn
ZUlEKSk7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1faW1hZ2VCYWNraW5n
cy5yZW1vdmUoaW1hZ2VJRCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKLX0K
LQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2lu
Z0NoYW5nZXMoKQogewogICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFn
ZUJhY2tpbmdzLmVuZCgpOwpAQCAtNzA5LDQxICs2MTEsNTUgQEAgYm9vbCBMYXllclRyZWVIb3N0
OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExh
eWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17
Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihs
YXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklE
LCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJ
RCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRp
bGVJRCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjplbnF1ZXVlKFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uQmFzZT4gb3BlcmF0aW9uKQog
ewogICAgIGlmIChtX2lzUHVyZ2luZykKICAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7
Ci19CiAKLWJvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVVcGRhdGVBdGxhcyh1
aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0
ZWRTdXJmYWNlKQotewotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZSogd2ViQ29vcmRpbmF0ZWRT
dXJmYWNlID0gc3RhdGljX2Nhc3Q8V2ViQ29vcmRpbmF0ZWRTdXJmYWNlKj4oY29vcmRpbmF0ZWRT
dXJmYWNlLmdldCgpKTsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7
Ci0gICAgaWYgKCF3ZWJDb29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVXBkYXRlQXRsYXMoYXRsYXNJRCwgaGFu
ZGxlKSk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgd2lsbEVucXVldWVPcGVyYXRpb24ob3BlcmF0
aW9uLmdldCgpKTsKKyAgICBtX29wZXJhdGlvbnMuYXBwZW5kKG9wZXJhdGlvbik7CiB9CiAKLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lEKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OndpbGxFbnF1ZXVlT3BlcmF0
aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2UqIG9wZXJhdGlv
bikKIHsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVV
cGRhdGVBdGxhcyhhdGxhc0lEKSk7CisgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9wZXJhdGlv
blR5cGUoKSkgeworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5
ZXJTdGF0ZVR5cGU6CisgICAgICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0
ZSkgeworICAgICAgICAgICAgZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpE
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvbjo6Y3JlYXRlKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2Nh
dGlvbigpKSk7CisgICAgICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nVHlwZToKKyAgICAgICAgQVNTRVJU
KG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5pbWFnZUJh
Y2tpbmdJRCkpOworICAgICAgICBtX2ltYWdlQmFja2luZ3MucmVtb3ZlKHN0YXRpY19jYXN0PGNv
bnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZyo+KG9w
ZXJhdGlvbiktPmltYWdlQmFja2luZ0lEKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnNUeXBlOiB7CisjaWYg
RU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0
aW9ucyYgYW5pbWF0aW9ucyA9IHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OlNldExheWVyQW5pbWF0aW9ucyo+KG9wZXJhdGlvbiktPmFuaW1hdGlvbnM7CisgICAgICAg
IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRpb25zLmdl
dEFjdGl2ZUFuaW1hdGlvbnMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3Rp
dmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygp
LmF0KGkpLmtleWZyYW1lcygpOworICAgICAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgp
ICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7
ICsraikgeworICAgICAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmaWx0
ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJh
bWVzLmF0KGkpKTsKKyAgICAgICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94
aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJB
bmltYXRpb25zKj4ob3BlcmF0aW9uKS0+YW5pbWF0aW9ucyA9IGFjdGl2ZUFuaW1hdGlvbnM7Cisj
ZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAg
ICBjYXNlIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVyc1R5cGU6
CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dy
YW1Qcm94aWVzKHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExh
eWVyRmlsdGVycyo+KG9wZXJhdGlvbiktPmZpbHRlcnMpOworI2VuZGlmCisgICAgICAgIGJyZWFr
OworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiBXZWJD
b3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp2aXNpYmxlQ29udGVudHNS
ZWN0KCkgY29uc3QKQEAgLTc1MiwyNCArNjY4LDYgQEAgV2ViQ29yZTo6RmxvYXRSZWN0IENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0CiB9CiAKIAot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1h
dGlvbnMpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIEdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRpb25zLmdldEFjdGl2ZUFuaW1h
dGlvbnMoKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgewotICAgICAg
ICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYW5pbWF0aW9ucy5hbmltYXRp
b25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7Ci0gICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHko
KSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7
Ci0gICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSogZmlsdGVyVmFsdWUgPSBz
dGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7
Ci0gICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1
ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRMYXllckFuaW1h
dGlvbnMobGF5ZXJJRCwgYWN0aXZlQW5pbWF0aW9ucykpOwotfQotCiB2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7CiAgICAgLy8gQSB6ZXJv
IHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmll
d3BvcnQgYXJlIHJlcXVlc3RlZC4KQEAgLTgxMiw3ICs3MTAsNyBAQCBHcmFwaGljc0xheWVyRmFj
dG9yeSogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCiAj
aWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIHsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZXF1ZXN0QW5pbWF0aW9uRnJh
bWUoKSk7CisgICAgZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0
QW5pbWF0aW9uRnJhbWU6OmNyZWF0ZSgpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQpAQCAtODk1LDcgKzc5Myw3IEBAIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChU
aW1lcjxDb29yZGluYXRlCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogewotICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldEJhY2tn
cm91bmRDb2xvcihjb2xvcikpOworICAgIGVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDcyOTdlZWQ4MWUwNWEyZWUwZjAwNWVlYTNkZjgxODg1
ZmVjM2YyYjUuLmVhY2U0MTAxNGNiYThmYzVmYjM3ODgxMTVlN2E1MGIwZTU5NDA1MDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1
ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NM
YXllckZhY3RvcnkuaD4KQEAgLTQ2LDggKzQ3LDcgQEAgY2xhc3MgV2ViUGFnZTsKIAogY2xhc3Mg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZzo6Q29vcmRpbmF0b3IKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpVcGRhdGVBdGxhc0Ns
aWVudAorICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlF1ZXVlCiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkKICNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgLCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHlDbGll
bnQKQEAgLTc5LDQwICs3OSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVu
ZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1
bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNo
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9W
RVJSSURFOwogCi0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRh
dGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBw
dXJnZUJhY2tpbmdTdG9yZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRz
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
Jik7CisKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7
CiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXll
ckZhY3RvcnkoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsK
LSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRl
cnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zJik7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6
UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBh
aW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBpbnQpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCk7Ci0KLSAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6Rmxh
Z3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpOwotCi0gICAgLy8gVXBk
YXRlQXRsYXNDbGllbnQKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlVXBkYXRlQXRsYXModWludDMy
X3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJ
RCk7Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgdmlydHVhbCB2
b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgT1ZFUlJJREU7CiAjZW5kaWYKQEAgLTEzMSwxNCArMTA1
LDIyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNv
bnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3Qg
T1ZFUlJJREU7CiAKLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IK
LSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJbWFnZUJh
Y2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6
OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotCiAgICAgdm9pZCBmbHVzaFBl
bmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CiAKKyAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsgfQorICAgIHZp
cnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMo
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6
OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJ
bnRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UXVldWUqIG9wZXJhdGlvblF1ZXVlKCkgeyByZXR1cm4gdGhpczsgfTsK
KworICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlCisgICAgdmlydHVh
bCB2b2lkIGVucXVldWUoUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpPcGVyYXRpb25CYXNlPikgT1ZFUlJJREU7CisKKyAgICB2b2lkIHdpbGxFbnF1ZXVl
T3BlcmF0aW9uKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlv
bkJhc2UqKTsKKwogICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CiAgICAgdmlydHVhbCBQYXNz
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwogCkBAIC0xODEsNiArMTYzLDggQEAg
cHJpdmF0ZToKICAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYg
dGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKIAorICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25zIG1fb3BlcmF0aW9uczsKKwogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwogICAgIFZlY3RvcjxXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9DcmVhdGU7CiAgICAgVmVjdG9yPFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKQEAgLTIwNCw3ICsx
ODgsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRh
dGU7CiAKICAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29s
IG1fc2hvdWxkU3luY0ZyYW1lOwogICAgIGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0
aW5nTGF5ZXI7CiAgICAgV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBt
X2xheWVyRmx1c2hUaW1lcjsKICAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q+IG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyOwo=
</data>
<flag name="review"
          id="205724"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="205725"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188273</attachid>
            <date>2013-02-14 00:08:31 -0800</date>
            <delta_ts>2013-02-20 05:37:23 -0800</delta_ts>
            <desc>WIP. Just for discussion</desc>
            <filename>0001-Coordinated-Graphics-CoordinatedGraphicsLayer-makes-.patch</filename>
            <type>text/plain</type>
            <size>232272</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">RnJvbSAwNWM2YmRhMWFjNmMyNTQ2MzY3YjVjNGY0NjAzN2EwMGE3YTdmZTA0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IEZyaSwgMTggSmFuIDIwMTMgMTU6MzM6MDAgKzA5MDAKU3ViamVjdDogW1BBVENI
XSBDb29yZGluYXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzCiBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcGVyZm9ybSB2aWEgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbi4KIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM4NTQK
CkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24gYmVjYW1lIGluZGVwZW5kZW50IG9mIENvcmVJ
UEMuCi0tLQogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDUgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAxOTggKysrKysKIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAzICsKIC4uLi9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwICAgICAgIHwgIDI2ICstCiAuLi4vdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5oICB8ICAyNCArLQogLi4uL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb24uY3BwICAgfCAxNjYgKysrKwogLi4uL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCAgICAgfCA0MTcgKysrKysrKysrKwogLi4uL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlLmggfCAzMDQgKysrKysrKwog
Li4uL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2Rlci5oICAgICAgICAgICAgfCAgNTQg
KysKIC4uLi9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXJzLmNwcCAgICAgICAgIHwg
OTA1ICsrKysrKysrKysrKysrKysrKysrKwogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25Db2RlcnMuaCAgICAgICAgICAgfCAxNzUgKysrKwogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25EZWNvZGVyLmNwcCAgICAgICAgfCAxMTMgKysrCiAuLi4vQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkRlY29kZXIuaCAgICAgICAgICB8IDEyNCArKysKIC4uLi9Db29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2Rlci5jcHAgICAgICAgIHwgIDcxICsrCiAuLi4vQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXIuaCAgICAgICAgICB8IDEyMiArKysKIC4uLi9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oICAgIHwgIDgzICsrCiAu
Li4vY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCAgICAgICB8ICAgNiAr
LQogLi4uL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCAgfCAg
NTIgKy0KIC4uLi90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3Bw
IHwgIDIwICstCiAuLi4vdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmggICB8ICAxNSArLQogLi4uL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2Uu
aCAgICAgICAgfCAgIDUgKwogLi4uL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5m
by5oICAgICAgICAgfCAgIDMgLQogLi4uL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRh
dGVBdGxhcy5jcHAgICAgfCAgMTUgKy0KIC4uLi9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
VXBkYXRlQXRsYXMuaCAgICAgIHwgIDExICstCiBTb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4
dCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSAtCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0NiArKwogLi4uL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NBcmd1bWVudENvZGVycy5jcHAgICAgICAgICAgfCA4NDAgLS0tLS0tLS0tLS0tLS0tLS0tLQog
Li4uL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oICAgICAgICAgICAgfCAxMjQg
LS0tCiAuLi4vQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuY3BwICB8
ICA0OCArLQogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgg
ICAgfCAgIDggKy0KIC4uLi9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgICAgICAg
ICAgICAgIHwgMTQyICstLS0KIC4uLi9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oICAg
ICAgICAgICAgICAgIHwgIDUyICstCiAuLi4vQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
bWVzc2FnZXMuaW4gICAgICB8ICAzOCArLQogLi4uL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5j
cHAgICAgICAgICAgICAgICAgICAgfCAyMDQgKystLS0KIC4uLi9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIHwgIDU1ICstCiAzNSBmaWxlcyBjaGFuZ2VkLCAy
OTk4IGluc2VydGlvbnMoKyksIDE0NzcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uQmFzZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2Rl
ci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcnMuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcnMuaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2Rlci5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXIuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2Rlci5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXIuaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5o
CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBiZDIzM2I5Li4yM2JhOTQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtMTk5Miw5ICsxOTkyLDE0IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCiAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29k
ZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXJzLmNwcAor
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3Iu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
QmFja2luZ1N0b3JlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZTM3Y2M1Li5iNzY0Zjg2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAxIEBACisyMDEzLTAyLTA0ICBIdWFuZyBEb25nc3Vu
ZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBo
aWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lIHBlcmZvcm0gdmlhIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgyOTQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSBoYXMgc28gbWFueSBJUEMgbWVzc2FnZXMgKGUuZy4gU3luY0NhbnZhcyBhbmQK
KyAgICAgICAgQ3JlYXRlVGlsZSksIGFuZCB0aGVyZSBpcyBhIGxvbmcgZnVuY3Rpb24gY2hhaW4g
ZnJvbSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgdG8KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lICg0IGNsYXNzZXMpLgorICAgICAgICBJZiB3ZSB3YW50IHRvIGFkZCBhIG5ldyBt
ZXNzYWdlLCB3ZSBuZWVkIHRvIGFkZCBzaW1pbGFyIGZ1bmN0aW9ucyBpbnRvIDQgY2xhc3Nlcy4K
KworICAgICAgICBOb3cgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGhhcyBvbmx5IG9uZSBJUEMg
bWVzc2FnZTogQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuCisgICAgICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcnVu
IGFzIGZvbGxvd3M6CisgICAgICAgIDEuIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBh
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24gKGUuZy4gQ3JlYXRlVGlsZSkuCisgICAgICAg
IDIuIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBzdG9yZXMgYWxsIG9wZXJhdGlvbnMuCisgICAg
ICAgIDMuIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBzZW5kcyBhbGwgb3BlcmF0aW9ucyB0byBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eQorICAgICAgICBhdCB0aGUgbW9tZW50IG9mIGZs
dXNoaW5nIHZpYSBDb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyBtZXNzYWdlLgor
ICAgICAgICA0LiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgZXhlY3V0ZXMgYWxsIG9wZXJhdGlv
bnMuCisKKyAgICAgICAgVGhlcmUgaXMgb25lIGJpZyBiZWhhdmlvciBjaGFuZ2UuIEFsbCBvcGVy
YXRpb25zIChlLmcuIENyZWF0ZUxheWVycyBhbmQKKyAgICAgICAgU3luY0NhbnZhcykgYXJlIHBl
cmZvcm1lZCBhdCB0aGUgc2FtZSB0aW1lLCB3aGVuCisgICAgICAgIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMgaXMgY2FsbGVkLgor
CisgICAgICAgIElmIHlvdSB3YW50IHRvIGFkZCBhIG5ldyBvcGVyYXRpb24sIGFkZCBjb2RlIGFz
IGZvbGxvd3M6CisgICAgICAgIDEuIENyZWF0ZSBhIG5ldyBvcGVyYXRpb24gc3ViY2xhc3MgaW4g
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oCisgICAgICAgIDIuIE92ZXJyaWRlIE9wZXJh
dGlvbkJhc2U6OmV4ZWN1dGUoKSB0byBleGVjdXRlIHdoYXQgdGhlIG9wZXJhdGlvbiBzaG91bGQg
ZG8uCisgICAgICAgIDMuIEltcGxlbWVudCBlbmNvZGUvZGVjb2RlIGluIENvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVycy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGNvbXBv
c2l0aW5nIHRlc3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGFy
Z2V0LnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNBbmltYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NhbnZhcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUNhbnZh
c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6cmVtb3ZlVGlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oOgorICAgICAg
ICAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmV4ZWN1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzOjpleGVj
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNl
dFJvb3RMYXllcjo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW46OmV4ZWN1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRl
VGlsZTo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpVcGRhdGVUaWxlOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGU6OmV4ZWN1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXM6OmV4
ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
UmVtb3ZlVXBkYXRlQXRsYXM6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nOjpleGVjdXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFj
a2luZzo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzOjpleGVjdXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6
ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRMYXllckFuaW1hdGlvbnM6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOjpleGVjdXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNh
bnZhczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTeW5jQ2FudmFzOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OmV4ZWN1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzOjpl
eGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW06OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6
ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRMYXllclJlcGFpbnRDb3VudDo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6OmV4ZWN1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdl
U2Nyb2xsUG9zaXRpb246OmV4ZWN1dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
KToKKyAgICAgICAgKE9wZXJhdGlvbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uQmFzZTo6fk9wZXJhdGlvbkJhc2UpOgorICAg
ICAgICAoT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246Ok9wZXJhdGlvbjo6fk9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb246OmdldE9wZXJhdGlvblR5cGUpOgor
ICAgICAgICAoQ3JlYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVyczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVyczo6Q3JlYXRlTGF5ZXJz
KToKKyAgICAgICAgKERlbGV0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZWxldGVMYXllcnM6OkRlbGV0ZUxh
eWVycyk6CisgICAgICAgIChTZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0Um9vdExheWVyOjpTZXRS
b290TGF5ZXIpOgorICAgICAgICAoU2V0TGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0YXRlOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0
ZTo6U2V0TGF5ZXJTdGF0ZSk6CisgICAgICAgIChTZXRMYXllckNoaWxkcmVuKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW46
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRMYXllckNoaWxkcmVuOjpTZXRMYXllckNoaWxkcmVuKToKKyAgICAgICAgKENyZWF0ZVRp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3Jl
YXRlVGlsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkNyZWF0ZVRpbGU6OkNyZWF0ZVRpbGUpOgorICAgICAgICAoVXBkYXRlVGlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVU
aWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6VXBkYXRlVGlsZTo6VXBkYXRlVGlsZSk6CisgICAgICAgIChSZW1vdmVUaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpSZW1vdmVUaWxlOjpSZW1vdmVUaWxlKToKKyAgICAgICAgKENyZWF0ZVVwZGF0ZUF0bGFzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVw
ZGF0ZUF0bGFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXM6OkNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAg
ICAgKFJlbW92ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OlJl
bW92ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKENyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVJbWFnZUJhY2tp
bmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpDcmVhdGVJbWFnZUJhY2tpbmc6OkNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChV
cGRhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlSW1hZ2VCYWNraW5nOjpVcGRh
dGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6Q2xlYXJJbWFnZUJh
Y2tpbmdDb250ZW50cyk6CisgICAgICAgIChSZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5n
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6UmVtb3ZlSW1hZ2VCYWNraW5nOjpSZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoU2V0
TGF5ZXJBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5pbWF0aW9uczo6U2V0TGF5
ZXJBbmltYXRpb25zKToKKyAgICAgICAgKFJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9u
RnJhbWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6OlJlcXVlc3RBbmltYXRpb25GcmFtZSk6Cisg
ICAgICAgIChDcmVhdGVDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzOjpDcmVhdGVDYW52YXMp
OgorICAgICAgICAoU3luY0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6U3luY0NhbnZhcyk6Cisg
ICAgICAgIChEZXN0cm95Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpEZXN0cm95Q2Fu
dmFzKToKKyAgICAgICAgKFNldExheWVyRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRlcnM6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckZpbHRl
cnM6OlNldExheWVyRmlsdGVycyk6CisgICAgICAgIChDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0
ZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpDcmVhdGVD
dXN0b21GaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0p
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3Zl
Q3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW06OlJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAoU2V0TGF5ZXJSZXBhaW50Q291bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBh
aW50Q291bnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3VudDo6U2V0TGF5ZXJSZXBhaW50Q291bnQpOgor
ICAgICAgICAoU2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldEJhY2tncm91bmRDb2xvcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldEJhY2tncm91bmRD
b2xvcjo6U2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKERpZENoYW5nZVNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRp
ZENoYW5nZVNjcm9sbFBvc2l0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb246OkRpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFF1ZXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlOjp+UXVldWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbnM6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uczo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbnM6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbnM6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbnM6OmF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRp
b24pOgorICAgICAgICAgICAgUmVtb3ZlIG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQ
b3NpdGlvbiBiZWNhdXNlCisgICAgICAgICAgICBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbigpIGlz
IGNhbGxlZCBhdCB0aGUgbW9tZW50IG9mIGZsdXNoaW5nLgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpzZXREcmF3c0JhY2tncm91bmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2lu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVtb3ZlSG9z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlKToK
KyAgICAgICAgICAgIEZJWE1FOiBXZSBkb24ndCBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlbiBzZW5k
aW5nIGFuCisgICAgICAgICAgICBVcGRhdGVJbWFnZUJhY2tpbmcgb3BlcmF0aW9uIGZhaWxzIGJl
Y2F1c2UgZW5xdWV1ZWluZyBhbiBvcGVyYXRpb24KKyAgICAgICAgICAgIGlzIGFzeW5jLgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNsZWFyQ29udGVudHNUaW1l
ckZpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaDoKKyAgICAgICAgKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3Vy
ZmFjZVVwZGF0ZUluZm8uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6
OlVwZGF0ZUF0bGFzKToKKyAgICAgICAgICAgIEZJWE1FOiBXZSBkb24ndCBkZWFsIHdpdGggdGhl
IGNhc2Ugd2hlbiBzZW5kaW5nIGEgQ3JlYXRlVXBkYXRlQXRsYXMKKyAgICAgICAgICAgIG9wZXJh
dGlvbiBmYWlscyBiZWNhdXNlIGVucXVldWVpbmcgYW4gb3BlcmF0aW9uIGlzIGFzeW5jLgorICAg
ICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJD
b3JlOjpVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVXBkYXRlQXRsYXMpOgorCiAyMDEzLTAyLTA1
ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIENv
b3JkaW5hdGVkIEdyYXBoaWNzOiBNYWtlIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBub3Qga25v
dyBjb250ZW50cyBzaXplLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZThmNmZjMS4uZGNhZTUyMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCkBAIC0yMjQ4LDYgKzIyNDgsOCBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRp
b24uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgg
XAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9ucy5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8uaCBc
CkBAIC0yODkzLDYgKzI4OTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHAgXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAgXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRTdXJmYWNlLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDM3MzZmMjYuLmRmMDZlMTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
CkBAIC01MDAsNyArNTAwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmND
aGlsZHJlbigpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsg
KytpKQogICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9Db29yZGluYXRlZExheWVySUQoY2hpbGRy
ZW4oKVtpXSkpOwogCi0gICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwg
Y2hpbGRJRHMpOworICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjo6Y3JlYXRlKG1f
aWQsIGNoaWxkSURzKSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC01MDksNyAr
NTA5LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKCkKICAg
ICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Nob3Vs
ZFN5bmNGaWx0ZXJzID0gZmFsc2U7Ci0gICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyRmlsdGVy
cyhtX2lkLCBmaWx0ZXJzKCkpOworICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCkt
PmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzOjpj
cmVhdGUobV9pZCwgZmlsdGVycygpKSk7CiB9CiAjZW5kaWYKIApAQCAtNTcwLDcgKzU3MCw3IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSgpCiAgICAgICAg
IHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwogICAgIG1fbGF5ZXJJbmZvLnNob3dSZXBhaW50Q291
bnRlciA9IGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCk7CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5z
eW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5mbyk7CisgICAgbV9jb29yZGluYXRvci0+b3Bl
cmF0aW9uUXVldWUoKS0+ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRM
YXllclN0YXRlOjpjcmVhdGUobV9pZCwgbV9sYXllckluZm8pKTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxv
YXQgd2lkdGgpCkBAIC01ODcsNyArNTg3LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnN5bmNBbmltYXRpb25zKCkKIAogICAgIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMgPSBmYWxz
ZTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnNldExheWVyQW5pbWF0aW9ucyhtX2lkLCBtX2FuaW1h
dGlvbnMpOworICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpjcmVhdGUobV9p
ZCwgbV9hbmltYXRpb25zKSk7CiB9CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKQEAgLTYw
NCw3ICs2MDQsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NhbnZhcygp
CiAgICAgaWYgKCFtX2lzVmFsaWRDYW52YXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY29v
cmRpbmF0b3ItPnN5bmNDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICBB
U1NFUlQobV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICB1aW50MzJfdCBmcm9udEJ1ZmZlciA9
IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7CisgICAgbV9j
b29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUoKS0+ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpjcmVhdGUobV9pZCwgZnJvbnRCdWZmZXIpKTsKIH0KIAog
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZCgpCkBA
IC02MTMsNyArNjE1LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lD
YW52YXNJZk5lZWRlZCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2lzVmFsaWRDYW52
YXMpIHsKLSAgICAgICAgbV9jb29yZGluYXRvci0+ZGVzdHJveUNhbnZhcyhtX2lkKTsKKyAgICAg
ICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUoKS0+ZW5xdWV1ZShDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpjcmVhdGUobV9pZCkpOwogICAgICAgICBt
X2lzVmFsaWRDYW52YXMgPSBmYWxzZTsKICAgICB9CiAKQEAgLTYyNyw3ICs2MjksOSBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQoKQogCiAgICAg
QVNTRVJUKG1fY2FudmFzUGxhdGZvcm1MYXllcik7CiAgICAgaWYgKCFtX2lzVmFsaWRDYW52YXMp
IHsKLSAgICAgICAgbV9jb29yZGluYXRvci0+Y3JlYXRlQ2FudmFzKG1faWQsIG1fY2FudmFzUGxh
dGZvcm1MYXllcik7CisgICAgICAgIEludFNpemUgY2FudmFzU2l6ZSA9IG1fY2FudmFzUGxhdGZv
cm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKTsKKyAgICAgICAgR3JhcGhpY3NTdXJmYWNlVG9r
ZW4gdG9rZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7
CisgICAgICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzOjpjcmVhdGUobV9pZCwgY2FudmFz
U2l6ZSwgdG9rZW4pKTsKICAgICAgICAgbV9pc1ZhbGlkQ2FudmFzID0gdHJ1ZTsKICAgICB9CiAK
QEAgLTczNiw3ICs3NDAsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8
SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKIHsKICAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50
ZXIoKSAmJiAhdXBkYXRlZFJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+
c2V0TGF5ZXJSZXBhaW50Q291bnQoaWQoKSwgaW5jcmVtZW50UmVwYWludENvdW50KCkpOworICAg
ICAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50OjpjcmVhdGUoaWQoKSwgaW5j
cmVtZW50UmVwYWludENvdW50KCkpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVDcmVhdGlvbigpCkBAIC03OTUsMjEg
Kzc5OSwyMSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSh1aW50
MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbgogewogICAgIEFTU0VSVChtX2Nvb3Jk
aW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdl
cygpKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRl
SW5mbywgdGlsZVJlY3QpOworICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVu
cXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZTo6Y3JlYXRlKGlk
KCksIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAogdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCiB7CiAgICAg
QVNTRVJUKG1fY29vcmRpbmF0b3IpOwogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNo
aW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAgIG1fY29vcmRpbmF0b3ItPnVwZGF0ZVRpbGUoaWQoKSwg
dGlsZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVjdCk7CisgICAgbV9jb29yZGluYXRvci0+b3BlcmF0
aW9uUXVldWUoKS0+ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVU
aWxlOjpjcmVhdGUoaWQoKSwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOwogfQogCiB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQp
CiB7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9y
LT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgfHwgbV9pc1B1cmdpbmcpOwotICAgIG1fY29vcmRp
bmF0b3ItPnJlbW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVy
YXRpb25RdWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92
ZVRpbGU6OmNyZWF0ZShpZCgpLCB0aWxlSUQpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAppbmRleCBhNTUxZDM1Li41MTRmNDYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cl9oCiAjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCiAKKyNpbmNsdWRlICJDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgogI2luY2x1ZGUgIkNv
b3JkaW5hdGVkVGlsZS5oIgpAQCAtNDMsMzcgKzQ0LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjsKLWNsYXNzIEdyYXBoaWNzTGF5ZXJB
bmltYXRpb25zOwogCiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgPSAw
OwotCi0gICAgLy8gQ29vcmRpbmF0ZWRUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VV
cGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVU
aWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKSA9IDA7Ci0KICAgICB2aXJ0
dWFsIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5n
SWZOZWVkZWQoSW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENv
b3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
VmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKSA9IDA7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJT
KQotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklE
LCBQbGF0Zm9ybUxheWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgUGxhdGZvcm1MYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVz
dHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpID0gMDsKLSNlbmRpZgotCi0gICAgdmlydHVh
bCB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50KSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPEdy
YXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmLCBDb29yZGlu
YXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmKSA9IDA7Cisg
ICAgdmlydHVhbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogb3BlcmF0aW9u
UXVldWUoKSA9IDA7CiB9OwogCiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJs
aWMgR3JhcGhpY3NMYXllcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjUyNzQxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbi5jcHAKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29t
cGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUxheWVy
czo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5l
LT5jcmVhdGVMYXllcnMoYXJndW1lbnRzMSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZSogc2NlbmUpCit7CisgICAgc2NlbmUtPmRlbGV0ZUxheWVycyhhcmd1bWVudHMxKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OmV4ZWN1dGUo
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+c2V0Um9vdExh
eWVySUQoYXJndW1lbnRzMSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6U2V0TGF5ZXJTdGF0ZTo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5l
KQoreworICAgIHNjZW5lLT5zZXRMYXllclN0YXRlKGFyZ3VtZW50czEsIGFyZ3VtZW50czIpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW46
OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+
c2V0TGF5ZXJDaGlsZHJlbihhcmd1bWVudHMxLCBhcmd1bWVudHMyKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlOjpleGVjdXRlKENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPmNyZWF0ZVRpbGUoYXJndW1lbnRz
MSwgYXJndW1lbnRzMiwgYXJndW1lbnRzNC5zY2FsZUZhY3Rvcik7CisgICAgc2NlbmUtPnVwZGF0
ZVRpbGUoYXJndW1lbnRzMSwgYXJndW1lbnRzMiwgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpU
aWxlVXBkYXRlKGFyZ3VtZW50czQudXBkYXRlUmVjdCwgYXJndW1lbnRzMywgYXJndW1lbnRzNC5h
dGxhc0lELCBhcmd1bWVudHM0LnN1cmZhY2VPZmZzZXQpKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVUaWxlOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnVwZGF0ZVRpbGUoYXJndW1lbnRzMSwgYXJn
dW1lbnRzMiwgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpUaWxlVXBkYXRlKGFyZ3VtZW50czQu
dXBkYXRlUmVjdCwgYXJndW1lbnRzMywgYXJndW1lbnRzNC5hdGxhc0lELCBhcmd1bWVudHM0LnN1
cmZhY2VPZmZzZXQpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVUaWxlOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7Cisg
ICAgc2NlbmUtPnJlbW92ZVRpbGUoYXJndW1lbnRzMSwgYXJndW1lbnRzMik7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXM6OmV4ZWN1dGUo
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICAvL3NjZW5lLT5jcmVhdGVV
cGRhdGVBdGxhcyhhcmd1bWVudHMxLCBhcmd1bWVudHMyKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhczo6ZXhlY3V0ZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5yZW1vdmVVcGRhdGVBdGxhcyhh
cmd1bWVudHMxKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVh
dGVJbWFnZUJhY2tpbmc6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkK
K3sKKyAgICBzY2VuZS0+Y3JlYXRlSW1hZ2VCYWNraW5nKGFyZ3VtZW50czEpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZzo6ZXhlY3V0
ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIC8vc2NlbmUtPnVwZGF0
ZUltYWdlQmFja2luZyhhcmd1bWVudHMxLCBhcmd1bWVudHMyKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzOjpleGVjdXRl
KENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPmNsZWFySW1h
Z2VCYWNraW5nQ29udGVudHMoYXJndW1lbnRzMSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nOjpleGVjdXRlKENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnJlbW92ZUltYWdlQmFja2luZyhhcmd1
bWVudHMxKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXll
ckFuaW1hdGlvbnM6OmV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sK
KyAgICBzY2VuZS0+c2V0TGF5ZXJBbmltYXRpb25zKGFyZ3VtZW50czEsIGFyZ3VtZW50czIpOwor
fQorCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6OmV4ZWN1dGUoQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+cmVxdWVzdEFuaW1hdGlv
bkZyYW1lKCk7Cit9CisjZW5kaWYKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OmV4ZWN1dGUoQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBHcmFwaGljc1N1cmZhY2U6OkZsYWdz
IHN1cmZhY2VGbGFncyA9IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNUZXh0dXJlVGFyZ2V0IHwg
R3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7CisgICAgc2NlbmUtPmNyZWF0ZUNhbnZh
cyhhcmd1bWVudHMxLCBhcmd1bWVudHMyLCBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShhcmd1bWVu
dHMyLCBzdXJmYWNlRmxhZ3MsIGFyZ3VtZW50czMpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTeW5jQ2FudmFzOjpleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnN5bmNDYW52YXMoYXJndW1lbnRzMSwgYXJndW1l
bnRzMik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNh
bnZhczo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNj
ZW5lLT5kZXN0cm95Q2FudmFzKGFyZ3VtZW50czEpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
RmlsdGVyczo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAg
IHNjZW5lLT5zZXRMYXllckZpbHRlcnMoYXJndW1lbnRzMSwgYXJndW1lbnRzMik7Cit9CisjZW5k
aWYKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6ZXhlY3V0ZShDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5jcmVhdGVDdXN0b21GaWx0ZXJQcm9n
cmFtKGFyZ3VtZW50czEsIGFyZ3VtZW50czIpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW06OmV4ZWN1dGUoQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkKK3sKKyAgICBzY2VuZS0+cmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbShhcmd1bWVudHMxKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50OjpleGVjdXRlKENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSogc2NlbmUpCit7CisgICAgc2NlbmUtPnNldExheWVyUmVwYWludENvdW50KGFy
Z3VtZW50czEsIGFyZ3VtZW50czIpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldEJhY2tncm91bmRDb2xvcjo6ZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUqIHNjZW5lKQoreworICAgIHNjZW5lLT5zZXRCYWNrZ3JvdW5kQ29sb3IoYXJndW1lbnRzMSk7
Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOGQyZDYzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
LmgKQEAgLTAsMCArMSw0MTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAx
MDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbl9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5
ZXJJbmZvLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCisjaWYgRU5BQkxFKENT
U19TSEFERVJTKQorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmgiCisjZW5kaWYK
KyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgor
I2VuZGlmCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzU3VyZmFjZVRva2VuLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKwor
I2luY2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBDcmVhdGVMYXllcnMgOiBwdWJsaWMgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OkNyZWF0
ZUxheWVyc1R5cGUsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jj4geworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkJhc2U+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgbGF5ZXJJ
RHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3JlYXRlTGF5
ZXJzKGxheWVySURzKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUo
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBleHBsaWNpdCBDcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJ
RD4mIGlkcykKKyAgICAgICAgICAgIDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OkNyZWF0ZUxheWVyc1R5cGUsIGNvbnN0IFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+Jj4oaWRzKQorICAgICAgICB7CisgICAgICAgICAgICBw
cmludGYoIiVzICVsdVxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgaWRzLnNpemUoKSk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgY2xhc3MgRGVsZXRlTGF5ZXJzIDogcHVibGljIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb24xPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpE
ZWxldGVMYXllcnNUeXBlLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiY+IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25CYXNlPiBjcmVhdGUoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGxh
eWVySURzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0
ZUxheWVycyhsYXllcklEcykpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgZXhwbGljaXQgRGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+JiBpZHMpCisgICAgICAgICAgICA6IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24x
PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpEZWxldGVMYXllcnNUeXBlLCBjb25z
dCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiY+KGlkcykKKyAgICAgICAgeworICAgICAgICAg
ICAgcHJpbnRmKCIlcyAlbHVcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIGlkcy5zaXplKCkpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIGNsYXNzIFNldFJvb3RMYXllciA6IHB1YmxpYyBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMTxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFz
ZTo6U2V0Um9vdExheWVyVHlwZSwgQ29vcmRpbmF0ZWRMYXllcklEPiB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFz
ZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldFJvb3RMYXllcihsYXllcklEKSk7CisgICAgICAg
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KikgT1ZFUlJJREU7CisKKyAgICBwcml2YXRlOgorICAgICAgICBleHBsaWNpdCBTZXRSb290TGF5
ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQorICAgICAgICAgICAgOiBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uMTxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6U2V0Um9vdExh
eWVyVHlwZSwgQ29vcmRpbmF0ZWRMYXllcklEPihpZCkKKyAgICAgICAgeyB9CisgICAgfTsKKwor
ICAgIGNsYXNzIFNldExheWVyU3RhdGUgOiBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlNldExheWVyU3RhdGVUeXBl
LCBDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJj4geworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbkJhc2U+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgQ29v
cmRpbmF0ZWRMYXllckluZm8mIGxheWVySW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllclN0YXRlKGxheWVySUQsIGxheWVySW5mbykpOworICAg
ICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSopIE9WRVJSSURFOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2V0TGF5ZXJTdGF0ZShD
b29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQor
ICAgICAgICAgICAgOiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMjxDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uQmFzZTo6U2V0TGF5ZXJTdGF0ZVR5cGUsIENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mPihpZCwgaW5mbykKKyAgICAgICAgeyB9Cisg
ICAgfTsKKworCisgICAgY2xhc3MgU2V0TGF5ZXJDaGlsZHJlbiA6IHB1YmxpYyBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uMjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6U2V0
TGF5ZXJDaGlsZHJlblR5cGUsIENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4mPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5
ZXJJRCBsYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4p
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJDaGls
ZHJlbihsYXllcklELCBjaGlsZHJlbikpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgU2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlblZlY3RvcikKKyAgICAgICAg
ICAgIDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjI8Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbkJhc2U6OlNldExheWVyQ2hpbGRyZW5UeXBlLCBDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jj4oaWQsIGNoaWxkcmVuVmVjdG9yKQorICAg
ICAgICB7CisgICAgICAgICAgICBwcmludGYoIiVzICVsdVxuIiwgX19QUkVUVFlfRlVOQ1RJT05f
XywgY2hpbGRyZW5WZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBjbGFz
cyBDcmVhdGVUaWxlIDogcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb240PENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpDcmVhdGVUaWxlVHlwZSwgQ29vcmRpbmF0ZWRM
YXllcklELCB1aW50MzJfdCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
Jj4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ3JlYXRlVGlsZShsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZv
KSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICBwcml2YXRlOgorICAgICAgICBDcmVhdGVU
aWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgdGlsZSwgY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIGluZm8pCisgICAgICAgICAgICA6IENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb240PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNl
OjpDcmVhdGVUaWxlVHlwZSwgQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJj4oaWQsIHRpbGUsIHJlY3QsIGluZm8pCisg
ICAgICAgIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBVcGRhdGVUaWxlIDogcHVibGljIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb240PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNl
OjpVcGRhdGVUaWxlVHlwZSwgQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJj4geworICAgIHB1YmxpYzoKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0
ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVXBkYXRlVGlsZShsYXllcklE
LCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CisgICAgICAgIH0KKyAgICAgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisK
KyAgICBwcml2YXRlOgorICAgICAgICBVcGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
dWludDMyX3QgdGlsZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUlu
Zm8mIGluZm8pCisgICAgICAgICAgICA6IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb240PENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpVcGRhdGVUaWxlVHlwZSwgQ29vcmRpbmF0
ZWRMYXllcklELCB1aW50MzJfdCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJ
bmZvJj4oaWQsIHRpbGUsIHJlY3QsIGluZm8pCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBj
bGFzcyBSZW1vdmVUaWxlIDogcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpSZW1vdmVUaWxlVHlwZSwgQ29vcmRpbmF0
ZWRMYXllcklELCB1aW50MzJfdD4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZVRpbGUobGF5ZXJJRCwgdGlsZUlEKSk7CisgICAg
ICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lKikgT1ZFUlJJREU7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZW1vdmVUaWxlKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgdGlsZSkKKyAgICAgICAgICAgIDogQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlJl
bW92ZVRpbGVUeXBlLCBDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90PihpZCwgdGlsZSkKKyAg
ICAgICAgeyB9CisgICAgfTsKKworICAgIGNsYXNzIENyZWF0ZVVwZGF0ZUF0bGFzIDogcHVibGlj
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25CYXNlOjpDcmVhdGVVcGRhdGVBdGxhc1R5cGUsIHVpbnQzMl90LCBDb29yZGluYXRlZFN1cmZh
Y2UmPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gY3JlYXRlKHVpbnQzMl90IGF0bGFzSUQsIENvb3JkaW5h
dGVkU3VyZmFjZSYgc3VyZmFjZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDcmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBzdXJmYWNlKSk7CisgICAgICAgIH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikg
T1ZFUlJJREU7CisKKyAgICBwcml2YXRlOgorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhcyh1aW50
MzJfdCBpZCwgQ29vcmRpbmF0ZWRTdXJmYWNlJiBjb29yZGluYXRlZFN1cmZhY2UpCisgICAgICAg
ICAgICA6IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25CYXNlOjpDcmVhdGVVcGRhdGVBdGxhc1R5cGUsIHVpbnQzMl90LCBDb29yZGluYXRl
ZFN1cmZhY2UmPihpZCwgY29vcmRpbmF0ZWRTdXJmYWNlKQorICAgICAgICB7IH0KKyAgICB9Owor
CisgICAgY2xhc3MgUmVtb3ZlVXBkYXRlQXRsYXMgOiBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlJlbW92ZVVwZGF0
ZUF0bGFzVHlwZSwgdWludDMyX3Q+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlPiBjcmVhdGUodWludDMyX3Qg
YXRsYXNJRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1v
dmVVcGRhdGVBdGxhcyhhdGxhc0lEKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBleHBsaWNpdCBSZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBpZCkKKyAg
ICAgICAgICAgIDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkJhc2U6OlJlbW92ZVVwZGF0ZUF0bGFzVHlwZSwgdWludDMyX3Q+KGlkKQor
ICAgICAgICB7IH0KKyAgICB9OworCisgICAgY2xhc3MgQ3JlYXRlSW1hZ2VCYWNraW5nIDogcHVi
bGljIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24xPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25CYXNlOjpDcmVhdGVJbWFnZUJhY2tpbmdUeXBlLCBDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VCYWNraW5nSUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlQmFja2luZ0lEKSk7CisgICAgICAgIH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJ
REU7CisKKyAgICBwcml2YXRlOgorICAgICAgICBleHBsaWNpdCBDcmVhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCkKKyAgICAgICAgICAgIDogQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OkNyZWF0
ZUltYWdlQmFja2luZ1R5cGUsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ+KGlkKQorICAgICAg
ICB7IH0KKyAgICB9OworCisgICAgY2xhc3MgVXBkYXRlSW1hZ2VCYWNraW5nIDogcHVibGljIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25C
YXNlOjpVcGRhdGVJbWFnZUJhY2tpbmdUeXBlLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBD
b29yZGluYXRlZFN1cmZhY2UmPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gY3JlYXRlKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNraW5nSUQsIENvb3JkaW5hdGVkU3VyZmFjZSYgc3VyZmFj
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVcGRhdGVJbWFn
ZUJhY2tpbmcoaW1hZ2VCYWNraW5nSUQsIHN1cmZhY2UpKTsKKyAgICAgICAgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIFVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGlkLCBDb29yZGluYXRlZFN1cmZhY2UmIGNvb3JkaW5hdGVkU3VyZmFjZSkK
KyAgICAgICAgICAgIDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjI8Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkJhc2U6OlVwZGF0ZUltYWdlQmFja2luZ1R5cGUsIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQsIENvb3JkaW5hdGVkU3VyZmFjZSY+KGlkLCBjb29yZGluYXRlZFN1cmZh
Y2UpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBDbGVhckltYWdlQmFja2luZ0Nv
bnRlbnRzIDogcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24xPENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25CYXNlOjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzVHlwZSwgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lEKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaW1hZ2VCYWNr
aW5nSUQpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGV4
cGxpY2l0IENsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpZCkKKyAgICAgICAgICAgIDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHNUeXBl
LCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEPihpZCkKKyAgICAgICAgeyB9CisgICAgfTsKKwor
ICAgIGNsYXNzIFJlbW92ZUltYWdlQmFja2luZyA6IHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uMTxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6UmVtb3ZlSW1hZ2VC
YWNraW5nVHlwZSwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+
IGNyZWF0ZShDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlQmFja2luZ0lEKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZUltYWdlQmFja2luZyhp
bWFnZUJhY2tpbmdJRCkpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
KENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgZXhwbGljaXQgUmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaWQpCisgICAgICAgICAgICA6IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24xPENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpSZW1vdmVJbWFnZUJhY2tpbmdUeXBlLCBDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEPihpZCkKKyAgICAgICAgeyB9CisgICAgfTsKKworICAgIGNs
YXNzIFNldExheWVyQW5pbWF0aW9ucyA6IHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uMjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6U2V0TGF5ZXJBbmltYXRpb25z
VHlwZSwgQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyY+
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25CYXNlPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNv
bnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBh
bmltYXRpb25zKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBTZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGlj
c0xheWVyQW5pbWF0aW9ucyYgbGF5ZXJBbmltYXRpb25zKQorICAgICAgICAgICAgOiBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uMjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6
U2V0TGF5ZXJBbmltYXRpb25zVHlwZSwgQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBHcmFwaGlj
c0xheWVyQW5pbWF0aW9ucyY+KGlkLCBsYXllckFuaW1hdGlvbnMpCisgICAgICAgIHsgfQorICAg
IH07CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgY2xhc3MgUmVx
dWVzdEFuaW1hdGlvbkZyYW1lIDogcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24w
PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWVU
eXBlPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAgICAgIH0K
KyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikg
T1ZFUlJJREU7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUo
KQorICAgICAgICAgICAgOiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMDxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lVHlwZT4oKQorICAg
ICAgICB7IH0KKyAgICB9OworI2VuZGlmCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAg
ICBjbGFzcyBDcmVhdGVDYW52YXMgOiBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjM8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OkNyZWF0ZUNhbnZhc1R5cGUsIENv
b3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzU3VyZmFjZVRv
a2VuJj4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJ
RCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4m
IHRva2VuKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0
ZUNhbnZhcyhsYXllcklELCBjYW52YXNTaXplLCB0b2tlbikpOworICAgICAgICB9CisgICAgICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURF
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHN1
cmZhY2VUb2tlbikKKyAgICAgICAgICAgIDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjM8
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OkNyZWF0ZUNhbnZhc1R5cGUsIENvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEdyYXBoaWNzU3VyZmFjZVRva2Vu
Jj4oaWQsIHNpemUsIHN1cmZhY2VUb2tlbikKKyAgICAgICAgeyB9CisgICAgfTsKKworICAgIGNs
YXNzIFN5bmNDYW52YXMgOiBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjI8Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlN5bmNDYW52YXNUeXBlLCBDb29yZGluYXRl
ZExheWVySUQsIHVpbnQzMl90PiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gY3JlYXRlKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTeW5jQ2FudmFzKGxheWVySUQsIGZyb250QnVmZmVy
KSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICBwcml2YXRlOgorICAgICAgICBTeW5jQ2Fu
dmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXJIYW5kbGUpCisg
ICAgICAgICAgICA6IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25CYXNlOjpTeW5jQ2FudmFzVHlwZSwgQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdD4oaWQsIGZyb250QnVmZmVySGFuZGxlKQorICAgICAgICB7IH0KKyAgICB9OworCisg
ICAgY2xhc3MgRGVzdHJveUNhbnZhcyA6IHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uMTxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6RGVzdHJveUNhbnZhc1R5cGUs
IENvb3JkaW5hdGVkTGF5ZXJJRD4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBEZXN0cm95Q2FudmFzKGxheWVySUQpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAg
IHByaXZhdGU6CisgICAgICAgIGV4cGxpY2l0IERlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklEIGlkKQorICAgICAgICAgICAgOiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMTxDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6RGVzdHJveUNhbnZhc1R5cGUsIENvb3JkaW5h
dGVkTGF5ZXJJRD4oaWQpCisgICAgICAgIHsgfQorICAgIH07CisjZW5kaWYKKworI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKKyAgICBjbGFzcyBTZXRMYXllckZpbHRlcnMgOiBwdWJsaWMgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6
OlNldExheWVyRmlsdGVyc1R5cGUsIENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyY+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGxh
eWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJGaWx0ZXJzKGxheWVySUQsIGZpbHRl
cnMpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFNldExh
eWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IGZpbHRlck9wZXJhdGlvbnMpCisgICAgICAgICAgICA6IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb24yPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpTZXRMYXllckZpbHRlcnNU
eXBlLCBDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPihpZCwgZmls
dGVyT3BlcmF0aW9ucykKKyAgICAgICAgeyB9CisgICAgfTsKKworI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKKyAgICBjbGFzcyBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtIDogcHVibGljIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNl
OjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSwgaW50LCBjb25zdCBjdXN0b21GaWx0ZXJQ
cm9ncmFtSW5mbyY+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclBy
b2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUN1c3RvbUZpbHRl
clByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbUlELCBwcm9ncmFtSW5mbykpOworICAgICAgICB9
CisgICAgICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSop
IE9WRVJSSURFOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJv
Z3JhbShpbnQgcHJvZ3JhbUlELCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgaW5mbykK
KyAgICAgICAgICAgIDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjI8Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkJhc2U6OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlLCBpbnQs
IGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJj4ocHJvZ3JhbUlELCBpbmZvKQorICAgICAg
ICB7IH0KKyAgICB9OworCisgICAgY2xhc3MgUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSA6IHB1
YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMTxDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uQmFzZTo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUsIGludD4geworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkJhc2U+IGNyZWF0ZShpbnQgY3VzdG9tRmlsdGVyUHJvZ3JhbUlEKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0o
Y3VzdG9tRmlsdGVyUHJvZ3JhbUlEKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKikgT1ZFUlJJREU7CisKKyAgICAgICAg
aW50IGN1c3RvbUZpbHRlclByb2dyYW1JRDsKKworICAgIHByaXZhdGU6CisgICAgICAgIGV4cGxp
Y2l0IFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IHByb2dyYW1JRCkKKyAgICAgICAgICAg
IDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkJhc2U6OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlLCBpbnQ+KHByb2dyYW1JRCkK
KyAgICAgICAgeyB9CisgICAgfTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICBjbGFzcyBTZXRMYXll
clJlcGFpbnRDb3VudCA6IHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMjxDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6U2V0TGF5ZXJSZXBhaW50Q291bnRUeXBlLCBD
b29yZGluYXRlZExheWVySUQsIGludD4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCwgaW50IHJlcGFpbnRDb3VudCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllclJlcGFpbnRDb3VudChsYXllcklELCBy
ZXBhaW50Q291bnQpKTsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSBPVkVSUklERTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIFNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IGNvdW50
KQorICAgICAgICAgICAgOiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMjxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6U2V0TGF5ZXJSZXBhaW50Q291bnRUeXBlLCBDb29yZGlu
YXRlZExheWVySUQsIGludD4oaWQsIGNvdW50KQorICAgICAgICB7IH0KKyAgICB9OworCisgICAg
Y2xhc3MgU2V0QmFja2dyb3VuZENvbG9yIDogcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb24xPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpTZXRCYWNrZ3JvdW5kQ29s
b3JUeXBlLCBjb25zdCBDb2xvciY+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlPiBjcmVhdGUoY29uc3QgQ29s
b3ImIGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNl
dEJhY2tncm91bmRDb2xvcihjb2xvcikpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopIE9WRVJSSURFOworCisgICAgcHJp
dmF0ZToKKyAgICAgICAgZXhwbGljaXQgU2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKKyAgICAgICAgICAgIDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlNldEJhY2tncm91bmRDb2xvclR5cGUsIGNvbnN0
IENvbG9yJj4oY29sb3IpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBRdWV1ZSB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5RdWV1ZSgpIHsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgZW5xdWV1ZShQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25C
YXNlPikgPSAwOworICAgIH07CisKK307IC8vIGNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb24KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmCisKKyNlbmRpZiAvLyBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2UuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2MzZmZjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlLmgKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZV9oCisjZGVm
aW5lIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlX2gKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25D
b2RlcnMuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CisKKyNpbmNs
dWRlIDxzdGRpby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU7CisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25C
YXNlPiB7CitwdWJsaWM6CisgICAgZW51bSBPcGVyYXRpb25UeXBlIHsKKyAgICAgICAgQ3JlYXRl
TGF5ZXJzVHlwZSwKKyAgICAgICAgRGVsZXRlTGF5ZXJzVHlwZSwKKyAgICAgICAgU2V0Um9vdExh
eWVyVHlwZSwKKyAgICAgICAgU2V0TGF5ZXJTdGF0ZVR5cGUsCisgICAgICAgIFNldExheWVyQ2hp
bGRyZW5UeXBlLAorICAgICAgICBDcmVhdGVUaWxlVHlwZSwKKyAgICAgICAgVXBkYXRlVGlsZVR5
cGUsCisgICAgICAgIFJlbW92ZVRpbGVUeXBlLAorICAgICAgICBDcmVhdGVVcGRhdGVBdGxhc1R5
cGUsCisgICAgICAgIFJlbW92ZVVwZGF0ZUF0bGFzVHlwZSwKKyAgICAgICAgQ3JlYXRlSW1hZ2VC
YWNraW5nVHlwZSwKKyAgICAgICAgVXBkYXRlSW1hZ2VCYWNraW5nVHlwZSwKKyAgICAgICAgQ2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGUsCisgICAgICAgIFJlbW92ZUltYWdlQmFja2luZ1R5
cGUsCisgICAgICAgIFNldExheWVyQW5pbWF0aW9uc1R5cGUsCisgICAgI2lmIEVOQUJMRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICAgICAgUmVxdWVzdEFuaW1hdGlvbkZyYW1lVHlwZSwK
KyAgICAjZW5kaWYKKyAgICAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgIENyZWF0
ZUNhbnZhc1R5cGUsCisgICAgICAgIFN5bmNDYW52YXNUeXBlLAorICAgICAgICBEZXN0cm95Q2Fu
dmFzVHlwZSwKKyAgICAjZW5kaWYKKyAgICAjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAg
ICBTZXRMYXllckZpbHRlcnNUeXBlLAorICAgICNlbmRpZgorICAgICNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCisgICAgICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlLAorICAgICAgICBS
ZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSwKKyAgICAjZW5kaWYKKyAgICAgICAgU2V0TGF5
ZXJSZXBhaW50Q291bnRUeXBlLAorICAgICAgICBTZXRCYWNrZ3JvdW5kQ29sb3JUeXBlLAorICAg
IH07CisKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZSgpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSopID0g
MDsKKyAgICB2aXJ0dWFsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpPcGVyYXRp
b25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJikgY29uc3QgPSAwOwor
fTsKKwordGVtcGxhdGU8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJhdGlv
blR5cGUgVDA+CitzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjAgOiBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZSB7CisgICAgdHlwZWRlZiBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uMDxUMD4gIFZhbHVlVHlwZTsKKworICAgIHZpcnR1YWwgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIFQwOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGNv
ZGVyLmVuY29kZUVudW0oVDApOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb24wJikKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3RlbXBs
YXRlPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpPcGVyYXRpb25UeXBlIFQwLCB0
eXBlbmFtZSBUMT4KK3N0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMSA6IENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24wPFQwPiB7CisgICAgdHlwZWRlZiBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uMTxUMCwgdHlwZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0eXBlbmFtZSBX
VEY6OlJlbW92ZVJlZmVyZW5jZTxUMT46OlR5cGU+OjpUeXBlPiBWYWx1ZVR5cGU7CisKKyAgICBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMSgpCisgICAgeworICAgIH0KKworICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24xKFQxIHQxKQorICAgICAgICA6IGFyZ3VtZW50czEodDEp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGUoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkVuY29kZXImIGNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjA8VDA+OjplbmNvZGUoY29kZXIpOworICAgICAgICBjb2Rl
ci5lbmNvZGUoYXJndW1lbnRzMSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiBjb2RlciwgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjEmIHJlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb2Rlci5kZWNv
ZGUocmVzdWx0LmFyZ3VtZW50czEpOworICAgIH0KKworICAgIFQxIGFyZ3VtZW50czE7Cit9Owor
Cit0ZW1wbGF0ZTxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6T3BlcmF0aW9uVHlw
ZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorc3RydWN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb24yIDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8VDAsIFQxPiB7Cisg
ICAgdHlwZWRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMjxUMCwgdHlwZW5hbWUgV1RG
OjpSZW1vdmVDb25zdDx0eXBlbmFtZSBXVEY6OlJlbW92ZVJlZmVyZW5jZTxUMT46OlR5cGU+OjpU
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0
eXBlbmFtZSBXVEY6OlJlbW92ZVJlZmVyZW5jZTxUMj46OlR5cGU+OjpUeXBlPiBWYWx1ZVR5cGU7
CisKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMigpCisgICAgeworICAgIH0KKwor
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yKFQxIHQxLCBUMiB0MikKKyAgICAgICAg
OiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMTxUMCwgVDE+KHQxKQorICAgICAgICAsIGFy
Z3VtZW50czIodDIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGUoQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImIGNvZGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8VDAsIFQxPjo6ZW5jb2RlKGNvZGVy
KTsKKyAgICAgICAgY29kZXIuZW5jb2RlKGFyZ3VtZW50czIpOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgY29kZXIs
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yJiByZXN1bHQpCisgICAgeworICAgICAgICBp
ZiAoIUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24xPFQwLCBUMT46OmRlY29kZShjb2Rlciwg
cmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gY29k
ZXIuZGVjb2RlKHJlc3VsdC5hcmd1bWVudHMyKTsKKyAgICB9CisKKyAgICBUMiBhcmd1bWVudHMy
OworfTsKKwordGVtcGxhdGU8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJh
dGlvblR5cGUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDM+CitzdHJ1
Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjMgOiBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uMjxUMCwgVDEsIFQyPiB7CisgICAgdHlwZWRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uMzxUMCwgdHlwZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0eXBlbmFtZSBXVEY6OlJlbW92
ZVJlZmVyZW5jZTxUMT46OlR5cGU+OjpUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBXVEY6OlJlbW92ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVtb3ZlUmVmZXJlbmNlPFQyPjo6
VHlwZT46OlR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIFdURjo6UmVtb3Zl
Q29uc3Q8dHlwZW5hbWUgV1RGOjpSZW1vdmVSZWZlcmVuY2U8VDM+OjpUeXBlPjo6VHlwZT4gVmFs
dWVUeXBlOworCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjMoKQorICAgIHsKKyAg
ICB9CisKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMyhUMSB0MSwgVDIgdDIsIFQz
IHQzKQorICAgICAgICA6IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPFQwLCBUMSwgVDI+
KHQxLCB0MikKKyAgICAgICAgLCBhcmd1bWVudHMzKHQzKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBj
b2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24y
PFQwLCBUMSwgVDI+OjplbmNvZGUoY29kZXIpOworICAgICAgICBjb2Rlci5lbmNvZGUoYXJndW1l
bnRzMyk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25EZWNvZGVyJiBjb2RlciwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjMm
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIGlmICghQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjI8VDAsIFQxLCBUMj46OmRlY29kZShjb2RlciwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICByZXR1cm4gY29kZXIuZGVjb2RlKHJlc3VsdC5hcmd1bWVudHMz
KTsKKyAgICB9CisKKyAgICBUMyBhcmd1bWVudHMzOworfTsKKwordGVtcGxhdGU8Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJhdGlvblR5cGUgVDAsIHR5cGVuYW1lIFQxLCB0
eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0Pgorc3RydWN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb240IDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjM8VDAsIFQx
LCBUMiwgVDM+IHsKKyAgICB0eXBlZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb240PFQw
LCB0eXBlbmFtZSBXVEY6OlJlbW92ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVtb3ZlUmVmZXJlbmNl
PFQxPjo6VHlwZT46OlR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIFdURjo6
UmVtb3ZlQ29uc3Q8dHlwZW5hbWUgV1RGOjpSZW1vdmVSZWZlcmVuY2U8VDI+OjpUeXBlPjo6VHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0eXBl
bmFtZSBXVEY6OlJlbW92ZVJlZmVyZW5jZTxUMz46OlR5cGU+OjpUeXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBXVEY6OlJlbW92ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVtb3Zl
UmVmZXJlbmNlPFQ0Pjo6VHlwZT46OlR5cGU+IFZhbHVlVHlwZTsKKworICAgIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb240KCkKKyAgICB7CisgICAgfQorCisgICAgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjQoVDEgdDEsIFQyIHQyLCBUMyB0MywgVDQgdDQpCisgICAgICAgIDogQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjM8VDAsIFQxLCBUMiwgVDM+KHQxLCB0MiwgdDMpCisg
ICAgICAgICwgYXJndW1lbnRzNCh0NCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYgY29kZXIpIGNvbnN0
CisgICAgeworICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMzxUMCwgVDEsIFQy
LCBUMz46OmVuY29kZShjb2Rlcik7CisgICAgICAgIGNvZGVyLmVuY29kZShhcmd1bWVudHM0KTsK
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkRlY29kZXImIGNvZGVyLCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uNCYgcmVzdWx0
KQorICAgIHsKKyAgICAgICAgaWYgKCFDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMzxUMCwg
VDEsIFQyLCBUMz46OmRlY29kZShjb2RlciwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICByZXR1cm4gY29kZXIuZGVjb2RlKHJlc3VsdC5hcmd1bWVudHM0KTsK
KyAgICB9CisKKyAgICBUNCBhcmd1bWVudHM0OworfTsKKwordGVtcGxhdGU8Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJhdGlvblR5cGUgVDAsIHR5cGVuYW1lIFQxLCB0eXBl
bmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0eXBlbmFtZSBUNT4KK3N0cnVjdCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uNSA6IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b240PFQwLCBUMSwgVDIsIFQzLCBUND4geworICAgIHR5cGVkZWYgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjU8VDAsIHR5cGVuYW1lIFdURjo6UmVtb3ZlQ29uc3Q8dHlwZW5hbWUgV1RGOjpS
ZW1vdmVSZWZlcmVuY2U8VDE+OjpUeXBlPjo6VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0eXBlbmFtZSBXVEY6OlJlbW92ZVJlZmVyZW5jZTxU
Mj46OlR5cGU+OjpUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBXVEY6OlJl
bW92ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVtb3ZlUmVmZXJlbmNlPFQzPjo6VHlwZT46OlR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIFdURjo6UmVtb3ZlQ29uc3Q8dHlwZW5h
bWUgV1RGOjpSZW1vdmVSZWZlcmVuY2U8VDQ+OjpUeXBlPjo6VHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0eXBlbmFtZSBXVEY6OlJlbW92ZVJl
ZmVyZW5jZTxUNT46OlR5cGU+OjpUeXBlPiBWYWx1ZVR5cGU7CisKKyAgICBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uNSgpCisgICAgeworICAgIH0KKworICAgIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb241KFQxIHQxLCBUMiB0MiwgVDMgdDMsIFQ0IHQ0LCBUNSB0NSkKKyAgICAgICAg
OiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uNDxUMCwgVDEsIFQyLCBUMywgVDQ+KHQxLCB0
MiwgdDMsIHQ0KQorICAgICAgICAsIGFyZ3VtZW50czUodDUpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBlbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXIm
IGNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjQ8VDAsIFQxLCBUMiwgVDMsIFQ0Pjo6ZW5jb2RlKGNvZGVyKTsKKyAgICAgICAgY29kZXIuZW5j
b2RlKGFyZ3VtZW50czUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgY29kZXIsIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb241JiByZXN1bHQpCisgICAgeworICAgICAgICBpZiAoIUNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb240PFQwLCBUMSwgVDIsIFQzLCBUND46OmRlY29kZShjb2RlciwgcmVzdWx0KSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gY29kZXIuZGVjb2Rl
KHJlc3VsdC5hcmd1bWVudHM1KTsKKyAgICB9CisKKyAgICBUNSBhcmd1bWVudHM1OworfTsKKwor
dGVtcGxhdGU8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJhdGlvblR5cGUg
VDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0LCB0
eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDY+CitzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjYgOiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uNTxUMCwgVDEsIFQyLCBUMywgVDQs
IFQ1PiB7CisgICAgdHlwZWRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uNjxUMCwgdHlw
ZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0eXBlbmFtZSBXVEY6OlJlbW92ZVJlZmVyZW5jZTxUMT46
OlR5cGU+OjpUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBXVEY6OlJlbW92
ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVtb3ZlUmVmZXJlbmNlPFQyPjo6VHlwZT46OlR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIFdURjo6UmVtb3ZlQ29uc3Q8dHlwZW5hbWUg
V1RGOjpSZW1vdmVSZWZlcmVuY2U8VDM+OjpUeXBlPjo6VHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0eXBlbmFtZSBXVEY6OlJlbW92ZVJlZmVy
ZW5jZTxUND46OlR5cGU+OjpUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBX
VEY6OlJlbW92ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVtb3ZlUmVmZXJlbmNlPFQ1Pjo6VHlwZT46
OlR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIFdURjo6UmVtb3ZlQ29uc3Q8
dHlwZW5hbWUgV1RGOjpSZW1vdmVSZWZlcmVuY2U8VDY+OjpUeXBlPjo6VHlwZT4gVmFsdWVUeXBl
OworCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjYoKQorICAgIHsKKyAgICB9CisK
KyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uNihUMSB0MSwgVDIgdDIsIFQzIHQzLCBU
NCB0NCwgVDUgdDUsIFQ2IHQ2KQorICAgICAgICA6IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b241PFQwLCBUMSwgVDIsIFQzLCBUNCwgVDU+KHQxLCB0MiwgdDMsIHQ0LCB0NSkKKyAgICAgICAg
LCBhcmd1bWVudHM2KHQ2KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2Rl
KENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBjb2RlcikgY29uc3QKKyAgICB7
CisgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb241PFQwLCBUMSwgVDIsIFQzLCBU
NCwgVDU+OjplbmNvZGUoY29kZXIpOworICAgICAgICBjb2Rlci5lbmNvZGUoYXJndW1lbnRzNik7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25EZWNvZGVyJiBjb2RlciwgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjYmIHJlc3Vs
dCkKKyAgICB7CisgICAgICAgIGlmICghQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjU8VDAs
IFQxLCBUMiwgVDMsIFQ0LCBUNT46OmRlY29kZShjb2RlciwgcmVzdWx0KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gY29kZXIuZGVjb2RlKHJlc3VsdC5hcmd1
bWVudHM2KTsKKyAgICB9CisKKyAgICBUNiBhcmd1bWVudHM2OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5k
aWYgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2VfaAorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNv
ZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmViZjRiNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXIuaApAQCAtMCwwICsxLDU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkNvZGVyX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyX2gK
KworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyOworY2xhc3MgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXIgeworICAgIHN0YXRpYyB2
b2lkIGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgVCYgdCkKKyAgICB7CisgICAgICAgIHQuZW5jb2RlKGVuY29kZXIpOworICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2Rl
ciYgZGVjb2RlciwgVCYgdCkKKyAgICB7CisgICAgICAgIHJldHVybiBUOjpkZWNvZGUoZGVjb2Rl
ciwgdCk7CisgICAgfQorCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uQ29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25D
b2RlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcnMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZGVmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVycy5jcHAKQEAgLTAsMCArMSw5MDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25Db2RlcnMuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KworI2luY2x1ZGUgIkFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZExh
eWVySW5mby5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5o
IgorI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiTGVuZ3RoLmgiCisjaW5jbHVkZSAi
TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKKyNpbmNsdWRlICJQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgor
I2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oIgor
I2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiVGltaW5nRnVuY3Rpb24u
aCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorI2luY2x1
ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19TSEFERVJT
KQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmls
dGVyQXJyYXlQYXJhbWV0ZXIuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb25zdGFudHMuaCIK
KyNpbmNsdWRlICJDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIuaCIKKyNpbmNsdWRlICJDdXN0
b21GaWx0ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCisj
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0
ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtLmgiCisjaW5jbHVkZSAiVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisj
ZW5kaWYKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorI2luY2x1ZGUgIkdyYXBoaWNzU3Vy
ZmFjZS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQW4gYXJndW1lbnQg
Y29kZXIgd29ya3Mgb24gUE9EIHR5cGVzCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2lt
cGxlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyIHsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFQmIHQpCisgICAgeworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPigmdCksIHNpemVvZihUKSk7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVy
JiBkZWNvZGVyLCBUJiB0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZ0KSwgc2l6ZW9mKFQpKTsK
KyAgICB9Cit9OworCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxDb2xv
cj46OmVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmICghY29sb3IuaXNWYWxpZCgpKSB7CisgICAg
ICAgIGVuY29kZXIuZW5jb2RlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGVuY29kZXIuZW5jb2RlKHRydWUpOworICAgIGVuY29kZXIuZW5jb2RlKGNvbG9yLnJnYigpKTsK
K30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8Q29sb3I+OjpkZWNv
ZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImIGRlY29kZXIsIENvbG9yJiBj
b2xvcikKK3sKKyAgICBib29sIGlzVmFsaWQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc1Zh
bGlkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFpc1ZhbGlkKSB7CisgICAg
ICAgIGNvbG9yID0gQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
UkdCQTMyIHJnYmE7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZ2JhKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgY29sb3IgPSBDb2xvcihyZ2JhKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8SW50U2l6ZT46OmVu
Y29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
SW50U2l6ZSYgaW50U2l6ZSkKK3sKKyAgICBTaW1wbGVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uQ29kZXI8SW50U2l6ZT46OmVuY29kZShlbmNvZGVyLCBpbnRTaXplKTsKK30KKworYm9vbCBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8SW50U2l6ZT46OmRlY29kZShDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgZGVjb2RlciwgSW50U2l6ZSYgaW50U2l6ZSkK
K3sKKyAgICByZXR1cm4gU2ltcGxlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPElu
dFNpemU+OjpkZWNvZGUoZGVjb2RlciwgaW50U2l6ZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkNvZGVyPEludFJlY3Q+OjplbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbkVuY29kZXImIGVuY29kZXIsIGNvbnN0IEludFJlY3QmIGludFJlY3QpCit7Cisg
ICAgU2ltcGxlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPEludFJlY3Q+OjplbmNv
ZGUoZW5jb2RlciwgaW50UmVjdCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkNvZGVyPEludFJlY3Q+OjpkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRl
Y29kZXImIGRlY29kZXIsIEludFJlY3QmIGludFJlY3QpCit7CisgICAgcmV0dXJuIFNpbXBsZUNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxJbnRSZWN0Pjo6ZGVjb2RlKGRlY29kZXIs
IGludFJlY3QpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxG
bG9hdFBvaW50M0Q+OjplbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IEZsb2F0UG9pbnQzRCYgZmxvYXRQb2ludDNEKQoreworICAgIFNpbXBs
ZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxGbG9hdFBvaW50M0Q+OjplbmNvZGUo
ZW5jb2RlciwgZmxvYXRQb2ludDNEKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uQ29kZXI8RmxvYXRQb2ludDNEPjo6ZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25EZWNvZGVyJiBkZWNvZGVyLCBGbG9hdFBvaW50M0QmIGZsb2F0UG9pbnQzRCkKK3sKKyAg
ICByZXR1cm4gU2ltcGxlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPEZsb2F0UG9p
bnQzRD46OmRlY29kZShkZWNvZGVyLCBmbG9hdFBvaW50M0QpOworfQorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxMZW5ndGg+OjplbmNvZGUoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkVuY29kZXImIGVuY29kZXIsIGNvbnN0IExlbmd0aCYgbGVuZ3RoKQorewor
ICAgIFNpbXBsZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxMZW5ndGg+OjplbmNv
ZGUoZW5jb2RlciwgbGVuZ3RoKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uQ29kZXI8TGVuZ3RoPjo6ZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNv
ZGVyJiBkZWNvZGVyLCBMZW5ndGgmIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gU2ltcGxlQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCBsZW5n
dGgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxUcmFuc2Zv
cm1hdGlvbk1hdHJpeD46OmVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybWF0aW9uTWF0
cml4KQoreworICAgIFNpbXBsZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxUcmFu
c2Zvcm1hdGlvbk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCB0cmFuc2Zvcm1hdGlvbk1hdHJpeCk7
Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPFRyYW5zZm9ybWF0
aW9uTWF0cml4Pjo6ZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiBk
ZWNvZGVyLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtYXRpb25NYXRyaXgpCit7Cisg
ICAgcmV0dXJuIFNpbXBsZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxUcmFuc2Zv
cm1hdGlvbk1hdHJpeD46OmRlY29kZShkZWNvZGVyLCB0cmFuc2Zvcm1hdGlvbk1hdHJpeCk7Cit9
CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25Db2RlcjxGaWx0ZXJPcGVyYXRpb25zPjo6ZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25FbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQoreworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpbHRlcnMuc2l6ZSgp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBmaWx0ZXIgPSBmaWx0ZXJzLmF0KGkpOworICAg
ICAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSA9IGZpbHRlci0+Z2V0T3Bl
cmF0aW9uVHlwZSgpOworICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0odHlwZSk7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxF
OgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTQVRVUkFURToKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhV
RV9ST1RBVEU6CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGRvdWJsZT4oc3Rh
dGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRlcikt
PmFtb3VudCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SU5WRVJUOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoK
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgorICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVy
T3BlcmF0aW9uKj4oZmlsdGVyKS0+YW1vdW50KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICAgICAgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkNvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2Fz
dDxjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyKS0+c3RkRGV2aWF0aW9uKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NI
QURPVzogeworICAgICAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiogc2hh
ZG93ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbio+KGZpbHRl
cik7CisgICAgICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8SW50UG9p
bnQ+OjplbmNvZGUoZW5jb2Rlciwgc2hhZG93LT5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2hhZG93LT5zdGREZXZpYXRpb24oKSk7Cisg
ICAgICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8Q29sb3I+OjplbmNv
ZGUoZW5jb2Rlciwgc2hhZG93LT5jb2xvcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6Q1VTVE9NOgorICAgICAgICAgICAgLy8gQ3VzdG9tIEZpbHRlcnMgYXJlIGNvbnZlcnRlZCB0
byBWQUxJREFURURfQ1VTVE9NIGJlZm9yZSByZWFjaGluZyB0aGlzIHBvaW50LgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlZBTElEQVRFRF9DVVNUT006IHsKKyAgICAgICAgICAgIGNvbnN0
IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbiogY3VzdG9tT3BlcmF0aW9uID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyKTsKKyAg
ICAgICAgICAgIEFTU0VSVChjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKSk7Cisg
ICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gcHJvZ3JhbSA9
IGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpOworICAgICAgICAgICAgQVNTRVJU
KHByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSk7CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbS0+
cGxhdGZvcm1Db21waWxlZFByb2dyYW0oKSk7CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbS0+
cGxhdGZvcm1Db21waWxlZFByb2dyYW0oKS0+Y2xpZW50KCkpOworICAgICAgICAgICAgV2ViQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5KiBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgPSBzdGF0aWNf
Y2FzdDxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqPihwcm9ncmFtLT5wbGF0Zm9ybUNvbXBp
bGVkUHJvZ3JhbSgpLT5jbGllbnQoKSk7CisgICAgICAgICAgICBjb25zdCBDdXN0b21GaWx0ZXJQ
cm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8gPSBwcm9ncmFtLT5wcm9ncmFtSW5mbygpOworICAgICAg
ICAgICAgLy8gRklYTUU6IEN1c3RvbUZpbHRlck9wZXJhdGlvbiBzaG91bGQgbm90IG5lZWQgdGhl
IG1lc2hUeXBlLCBpdCBzaG91bGQganVzdCBiZSBlbmNvZGVkIGluIHRoZSBwcm9ncmFtIGl0c2Vs
Zi4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDI1MjkKKyAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShwcm9ncmFtSW5mby5tZXNo
VHlwZSgpKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
LT5pZCgpOworICAgICAgICAgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJz
ID0gY3VzdG9tT3BlcmF0aW9uLT5wYXJhbWV0ZXJzKCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IHN0YXRpY19jYXN0PHVpbnQzMl90PihwYXJhbWV0ZXJzLnNpemUoKSk7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJhbWV0ZXIgPSBwYXJhbWV0
ZXJzW2ldOworICAgICAgICAgICAgICAgIGVuY29kZXIgPDwgcGFyYW1ldGVyLT5uYW1lKCk7Cisg
ICAgICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHBhcmFtZXRlci0+cGFyYW1ldGVyVHlw
ZSgpKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyYW1ldGVyLT5wYXJhbWV0ZXJUeXBl
KCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6QVJSQVk6
IHsKKyAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIqIGFycmF5
UGFyYW1ldGVyID0gc3RhdGljX2Nhc3Q8Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIqPihwYXJh
bWV0ZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PHVpbnQzMl90PihhcnJheVBhcmFtZXRlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBhcnJheVBhcmFtZXRlci0+c2l6ZSgpOyArK2opCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIDw8IGFycmF5UGFyYW1ldGVyLT52YWx1ZUF0KGop
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6Ok5VTUJFUjogeworICAgICAgICAg
ICAgICAgICAgICBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIqIG51Ym1lclBhcmFtZXRlciA9
IHN0YXRpY19jYXN0PEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcio+KHBhcmFtZXRlci5nZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KG51Ym1lclBhcmFtZXRlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBudWJtZXJQYXJhbWV0ZXItPnNpemUoKTsgKytqKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZW5jb2RlciA8PCBudWJtZXJQYXJhbWV0ZXItPnZhbHVlQXQoaik7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6VFJBTlNGT1JNOiB7CisgICAgICAgICAgICAg
ICAgICAgIEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlciogdHJhbnNmb3JtUGFyYW1ldGVy
ID0gc3RhdGljX2Nhc3Q8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKj4ocGFyYW1ldGVy
LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bkNvZGVyPFRyYW5zZm9ybU9wZXJhdGlvbnM+OjplbmNvZGUoZW5jb2RlciwgdHJhbnNmb3JtUGFy
YW1ldGVyLT5vcGVyYXRpb25zKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBlbmNvZGVyIDw8IGN1c3RvbU9wZXJhdGlvbi0+bWVzaFJvd3MoKTsKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgY3VzdG9tT3BlcmF0aW9uLT5tZXNoQ29sdW1ucygpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbkNvZGVyPEZpbHRlck9wZXJhdGlvbnM+OjpkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbkRlY29kZXImIGRlY29kZXIsIEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7
CisgICAgdWludDMyX3Qgc2l6ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4g
PiYgb3BlcmF0aW9ucyA9IGZpbHRlcnMub3BlcmF0aW9ucygpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIHR5cGU7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlcjsKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0odHlwZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToK
KyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogeworICAgICAgICAgICAgZG91YmxlIHZhbHVlOwor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZmlsdGVyID0gQmFzaWNDb2xvck1hdHJpeEZpbHRl
ck9wZXJhdGlvbjo6Y3JlYXRlKHZhbHVlLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6Q09OVFJBU1Q6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7
CisgICAgICAgICAgICBkb3VibGUgdmFsdWU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBm
aWx0ZXIgPSBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUodmFs
dWUsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgICAgIExlbmd0aCBsZW5ndGg7CisgICAg
ICAgICAgICBpZiAoIUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxMZW5ndGg+Ojpk
ZWNvZGUoZGVjb2RlciwgbGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBmaWx0ZXIgPSBCbHVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobGVuZ3RoLCB0
eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpEUk9QX1NIQURPVzogeworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb247
CisgICAgICAgICAgICBpbnQzMl90IHN0ZERldmlhdGlvbjsKKyAgICAgICAgICAgIENvbG9yIGNv
bG9yOworICAgICAgICAgICAgaWYgKCFDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8
SW50UG9pbnQ+OjpkZWNvZGUoZGVjb2RlciwgbG9jYXRpb24pKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RkRGV2aWF0aW9u
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIUNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxDb2xvcj46OmRlY29kZShkZWNvZGVyLCBjb2xv
cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZmlsdGVyID0g
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGxvY2F0aW9uLCBzdGREZXZpYXRpb24s
IGNvbG9yLCB0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWYgRU5BQkxF
KENTU19TSEFERVJTKQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NOgorICAg
ICAgICAgICAgLy8gQ3VzdG9tIEZpbHRlcnMgYXJlIGNvbnZlcnRlZCB0byBWQUxJREFURURfQ1VT
VE9NIGJlZm9yZSByZWFjaGluZyB0aGlzIHBvaW50LgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlZBTElEQVRFRF9DVVNUT006IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDdXN0b21GaWx0
ZXJPcGVyYXRpb24gc2hvdWxkIG5vdCBuZWVkIHRoZSBtZXNoVHlwZS4KKyAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI1MjkKKyAgICAgICAg
ICAgIEN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlOworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUVudW0obWVzaFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGludCBwcm9ncmFtSUQgPSAwOworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShwcm9ncmFtSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICAgICAgdWludDMyX3QgcGFyYW1ldGVyc1NpemU7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHBhcmFtZXRlcnNTaXplKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyhwYXJh
bWV0ZXJzU2l6ZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRl
cnNTaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZTsKKyAgICAgICAgICAg
ICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6OlBhcmFtZXRlclR5cGUgcGFyYW1ldGVyVHlwZTsK
KyAgICAgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUVudW0ocGFyYW1ldGVyVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyYW1ldGVyVHlwZSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpBUlJBWTogeworICAgICAgICAgICAgICAg
ICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXI+IGFycmF5UGFyYW1ldGVyID0g
Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsKKyAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QgYXJyYXlQYXJhbWV0ZXJTaXplOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGFycmF5UGFyYW1ldGVyU2l6ZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhcnJheVBh
cmFtZXRlclZhbHVlOworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IGFycmF5UGFyYW1ldGVyU2l6ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGFycmF5UGFyYW1ldGVyVmFsdWUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5UGFy
YW1ldGVyLT5hZGRWYWx1ZShhcnJheVBhcmFtZXRlclZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gYXJyYXlQYXJhbWV0ZXIu
cmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6Ok5VTUJFUjogewor
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyPiBu
dW1iZXJQYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI6OmNyZWF0ZShuYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtYmVyUGFyYW1ldGVyU2l6ZTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShudW1iZXJQYXJhbWV0ZXJTaXpl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgZG91YmxlIG51bWJlclBhcmFtZXRlclZhbHVlOworICAgICAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBqID0gMDsgaiA8IG51bWJlclBhcmFtZXRlclNpemU7ICsraikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShudW1iZXJQYXJhbWV0ZXJWYWx1
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtYmVyUGFyYW1ldGVyLT5hZGRWYWx1ZShudW1iZXJQYXJhbWV0ZXJW
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFyYW1l
dGVyc1tpXSA9IG51bWJlclBhcmFtZXRlci5yZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIEN1c3RvbUZp
bHRlclBhcmFtZXRlcjo6VFJBTlNGT1JNOiB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxD
dXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRlciA9IEN1c3Rv
bUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOworICAgICAgICAgICAgICAg
ICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgICAgICAgICAgICAgICAg
IGlmICghQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPFRyYW5zZm9ybU9wZXJhdGlv
bnM+OjpkZWNvZGUoZGVjb2Rlciwgb3BlcmF0aW9ucykpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVBhcmFtZXRlci0+
c2V0T3BlcmF0aW9ucyhvcGVyYXRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
c1tpXSA9IHRyYW5zZm9ybVBhcmFtZXRlci5yZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzOworICAgICAgICAgICAgdW5zaWdu
ZWQgbWVzaENvbHVtbnM7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1lc2hSb3dz
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKG1lc2hDb2x1bW5zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIFNoYWRlcnMgYXJlIGFscmVhZHkgdmFs
aWRhdGVkLCBzbyB3ZSBqdXN0IHVzZSBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24gZm9yIHRyYW5z
cG9ydGF0aW9uLgorICAgICAgICAgICAgZmlsdGVyID0gQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZSgwLCBwcm9ncmFtSUQsIHBhcmFtZXRlcnMsIG1lc2hSb3dzLCBtZXNo
Q29sdW1ucywgbWVzaFR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRp
ZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZmlsdGVyKQorICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoZmlsdGVyKTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19T
SEFERVJTKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8Q3VzdG9tRmls
dGVyUHJvZ3JhbUluZm8+OjplbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykK
K3sKKyAgICBlbmNvZGVyIDw8IHByb2dyYW1JbmZvLnZlcnRleFNoYWRlclN0cmluZygpOworICAg
IGVuY29kZXIgPDwgcHJvZ3JhbUluZm8uZnJhZ21lbnRTaGFkZXJTdHJpbmcoKTsKKyAgICBlbmNv
ZGVyLmVuY29kZUVudW0ocHJvZ3JhbUluZm8ucHJvZ3JhbVR5cGUoKSk7CisgICAgZW5jb2Rlci5l
bmNvZGVFbnVtKHByb2dyYW1JbmZvLm1lc2hUeXBlKCkpOworICAgIGNvbnN0IEN1c3RvbUZpbHRl
clByb2dyYW1NaXhTZXR0aW5ncyYgbWl4U2V0dGluZ3MgPSBwcm9ncmFtSW5mby5taXhTZXR0aW5n
cygpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShtaXhTZXR0aW5ncy5ibGVuZE1vZGUpOworICAg
IGVuY29kZXIuZW5jb2RlRW51bShtaXhTZXR0aW5ncy5jb21wb3NpdGVPcGVyYXRvcik7Cit9CisK
K2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPEN1c3RvbUZpbHRlclByb2dy
YW1JbmZvPjo6ZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiBkZWNv
ZGVyLCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8pCit7CisgICAgU3RyaW5n
IHZlcnRleFNoYWRlclN0cmluZzsKKyAgICBTdHJpbmcgZnJhZ21lbnRTaGFkZXJTdHJpbmc7Cisg
ICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGU7CisgICAgQ3VzdG9tRmlsdGVy
TWVzaFR5cGUgbWVzaFR5cGU7CisgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbU1peFNldHRpbmdzIG1p
eFNldHRpbmdzOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmVydGV4U2hhZGVyU3RyaW5nKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZnJhZ21lbnRT
aGFkZXJTdHJpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUVudW0ocHJvZ3JhbVR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUVudW0obWVzaFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZUVudW0obWl4U2V0dGluZ3MuYmxlbmRNb2RlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKG1peFNldHRpbmdzLmNv
bXBvc2l0ZU9wZXJhdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHByb2dyYW1JbmZv
ID0gQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8odmVydGV4U2hhZGVyU3RyaW5nLCBmcmFnbWVudFNo
YWRlclN0cmluZywgcHJvZ3JhbVR5cGUsIG1peFNldHRpbmdzLCBtZXNoVHlwZSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZW5jb2Rl
KENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zJiB0cmFuc2Zvcm1PcGVyYXRpb25zKQoreworICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRyYW5zZm9ybU9wZXJhdGlvbnMuc2l6ZSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zZm9ybU9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBvcGVyYXRpb24gPSB0cmFuc2Zvcm1P
cGVyYXRpb25zLmF0KGkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0ob3BlcmF0aW9uLT5n
ZXRPcGVyYXRpb25UeXBlKCkpOworCisgICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLT5nZXRPcGVy
YXRpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6
CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOgorICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpTQ0FMRV9aOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6
CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eCgpOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnkoKTsK
KyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24qPihvcGVyYXRpb24pLT56KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgorICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEU6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEVfWjoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoKKyAg
ICAgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxMZW5ndGg+OjplbmNv
ZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
Kj4ob3BlcmF0aW9uKS0+eCgpKTsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25Db2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eSgpKTsKKyAgICAgICAgICAg
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rl
ciwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0
aW9uKS0+eigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Uk9UQVRFOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRF
X1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKKyAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDoKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9u
KS0+eCgpOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT55KCk7CisgICAgICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlv
biktPnooKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+YW5nbGUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOgorICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0tFVzoKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
U2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmFuZ2xlWCgpOworICAgICAgICAg
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4o
b3BlcmF0aW9uKS0+YW5nbGVZKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDoKKyAgICAgICAgICAgIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25Db2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCBz
dGF0aWNfY2FzdDxjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5t
YXRyaXgoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246Ok1BVFJJWF8zRDoKKyAgICAgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25Db2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2Fz
dDxjb25zdCBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1hdHJpeCgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
UEVSU1BFQ1RJVkU6CisgICAgICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29k
ZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PGNvbnN0IFBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+cGVyc3BlY3RpdmUoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklERU5USVRZOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05F
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
Q29kZXI8VHJhbnNmb3JtT3BlcmF0aW9ucz46OmRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uRGVjb2RlciYgZGVjb2RlciwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnNmb3JtT3Bl
cmF0aW9ucykKK3sKKyAgICB1aW50MzJfdCBvcGVyYXRpb25zU2l6ZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKG9wZXJhdGlvbnNTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRpb25zU2l6ZTsgKytpKSB7CisgICAgICAgIFRy
YW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlOworICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlRW51bShvcGVyYXRpb25UeXBlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpTQ0FMRV9ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6
CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgorICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6IHsKKyAgICAgICAgICAgIGRvdWJsZSB4LCB5
LCB6OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh4KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoeikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdHJhbnNm
b3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoeCwgeSwgeiwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgor
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k6CisgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6CisgICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfWjoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV8zRDogeworICAgICAgICAgICAgTGVuZ3RoIHgsIHksIHo7CisgICAgICAgICAg
ICBpZiAoIUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxMZW5ndGg+OjpkZWNvZGUo
ZGVjb2RlciwgeCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
aWYgKCFDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8TGVuZ3RoPjo6ZGVjb2RlKGRl
Y29kZXIsIHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlm
ICghQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPExlbmd0aD46OmRlY29kZShkZWNv
ZGVyLCB6KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB0cmFu
c2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwgb3BlcmF0aW9uVHlwZSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURToK
KyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgorICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpST1RBVEVfM0Q6IHsKKyAgICAgICAgICAgIGRvdWJsZSB4LCB5LCB6LCBhbmdsZTsK
KyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh5KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHop
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoYW5nbGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgb3BlcmF0aW9uVHlwZSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlNLRVdfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKKyAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVc6IHsKKyAgICAgICAgICAgIGRvdWJs
ZSBhbmdsZVgsIGFuZ2xlWTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYW5nbGVY
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGFuZ2xlWSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNrZXdUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgsIGFuZ2xlWSwgb3BlcmF0aW9uVHlwZSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246Ok1BVFJJWDogeworICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4Owor
ICAgICAgICAgICAgaWYgKCFDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8VHJhbnNm
b3JtYXRpb25NYXRyaXg+OjpkZWNvZGUoZGVjb2RlciwgbWF0cml4KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlv
bnMoKS5hcHBlbmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4KSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6TUFUUklYXzNEOiB7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRy
aXg7CisgICAgICAgICAgICBpZiAoIUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxU
cmFuc2Zvcm1hdGlvbk1hdHJpeD46OmRlY29kZShkZWNvZGVyLCBtYXRyaXgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJp
eCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOiB7CisgICAgICAgICAgICBMZW5ndGggcGVyc3BlY3Rp
dmU7CisgICAgICAgICAgICBpZiAoIUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxM
ZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgcGVyc3BlY3RpdmUpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygp
LmFwcGVuZChQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHBlcnNwZWN0aXZl
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6SURFTlRJVFk6CisgICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5hcHBlbmQoSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9O
RToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGVu
Y29kZVRpbWluZ0Z1bmN0aW9uKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24pCit7CisgICAgaWYg
KCF0aW1pbmdGdW5jdGlvbikgeworICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0oVGltaW5nRnVu
Y3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSgtMSkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSB0eXBlID0gdGltaW5nRnVu
Y3Rpb24gPyB0aW1pbmdGdW5jdGlvbi0+dHlwZSgpIDogVGltaW5nRnVuY3Rpb246OkxpbmVhckZ1
bmN0aW9uOworICAgIGVuY29kZXIuZW5jb2RlRW51bSh0eXBlKTsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjogeworICAg
ICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdWJpYyA9IHN0YXRpY19jYXN0
PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7CisgICAg
ICAgIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uUHJlc2V0IGJlemll
clByZXNldCA9IGN1YmljLT50aW1pbmdGdW5jdGlvblByZXNldCgpOworICAgICAgICBlbmNvZGVy
LmVuY29kZUVudW0oYmV6aWVyUHJlc2V0KTsKKyAgICAgICAgaWYgKGJlemllclByZXNldCA9PSBD
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpDdXN0b20pIHsKKyAgICAgICAgICAgIGVuY29kZXIg
PDwgY3ViaWMtPngxKCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGN1YmljLT55MSgpOworICAg
ICAgICAgICAgZW5jb2RlciA8PCBjdWJpYy0+eDIoKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
Y3ViaWMtPnkyKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
VGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246IHsKKyAgICAgICAgY29uc3QgU3RlcHNUaW1p
bmdGdW5jdGlvbiogc3RlcHMgPSBzdGF0aWNfY2FzdDxjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9u
Kj4odGltaW5nRnVuY3Rpb24pOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihzdGVwcy0+bnVtYmVyT2ZTdGVwcygpKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGVwcy0+
c3RlcEF0U3RhcnQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KK30KKworYm9vbCBk
ZWNvZGVUaW1pbmdGdW5jdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYg
ZGVjb2RlciwgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiYgdGltaW5nRnVuY3Rpb24pCit7CisgICAg
VGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSB0eXBlOworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVFbnVtKHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodHlw
ZSA9PSBUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlKC0xKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFRpbWluZ0Z1bmN0aW9u
OjpMaW5lYXJGdW5jdGlvbjoKKyAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBMaW5lYXJUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgVGltaW5n
RnVuY3Rpb246OkN1YmljQmV6aWVyRnVuY3Rpb246IHsKKyAgICAgICAgZG91YmxlIHgxLCB5MSwg
eDIsIHkyOworICAgICAgICBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlv
blByZXNldCBiZXppZXJQcmVzZXQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKGJl
emllclByZXNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChiZXpp
ZXJQcmVzZXQgIT0gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Q3VzdG9tKSB7CisgICAgICAg
ICAgICB0aW1pbmdGdW5jdGlvbiA9IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZShi
ZXppZXJQcmVzZXQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh4MSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeTEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHgyKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh5MikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgdGltaW5nRnVuY3Rpb24gPSBDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3RlcHNGdW5jdGlvbjogeworICAgICAgICB1
aW50MzJfdCBudW1iZXJPZlN0ZXBzOworICAgICAgICBib29sIHN0ZXBBdFN0YXJ0OworICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKG51bWJlck9mU3RlcHMpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0ZXBBdFN0YXJ0KSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IFN0ZXBzVGlt
aW5nRnVuY3Rpb246OmNyZWF0ZShudW1iZXJPZlN0ZXBzLCBzdGVwQXRTdGFydCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRp
b24+OjplbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImIGVuY29kZXIs
IGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb24mIGFuaW1hdGlvbikKK3sKKyAgICBlbmNvZGVy
IDw8IGFuaW1hdGlvbi5uYW1lKCk7CisgICAgZW5jb2RlciA8PCBhbmltYXRpb24uYm94U2l6ZSgp
OworICAgIGVuY29kZXIuZW5jb2RlRW51bShhbmltYXRpb24uc3RhdGUoKSk7CisgICAgZW5jb2Rl
ciA8PCBhbmltYXRpb24uc3RhcnRUaW1lKCk7CisgICAgZW5jb2RlciA8PCBhbmltYXRpb24ucGF1
c2VUaW1lKCk7CisgICAgZW5jb2RlciA8PCBhbmltYXRpb24ubGlzdHNNYXRjaCgpOworCisgICAg
UmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uT2JqZWN0ID0gYW5pbWF0aW9uLmFuaW1hdGlvbigp
OworICAgIGVuY29kZXIuZW5jb2RlRW51bShhbmltYXRpb25PYmplY3QtPmRpcmVjdGlvbigpKTsK
KyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihhbmltYXRpb25PYmplY3QtPmZp
bGxNb2RlKCkpOworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uT2JqZWN0LT5kdXJhdGlvbigpOwor
ICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uT2JqZWN0LT5pdGVyYXRpb25Db3VudCgpOworICAgIGVu
Y29kZVRpbWluZ0Z1bmN0aW9uKGVuY29kZXIsIGFuaW1hdGlvbk9iamVjdC0+dGltaW5nRnVuY3Rp
b24oKS5nZXQoKSk7CisKKyAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0g
YW5pbWF0aW9uLmtleWZyYW1lcygpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShrZXlmcmFtZXMu
cHJvcGVydHkoKSk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oa2V5ZnJh
bWVzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlmcmFtZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHZhbHVlID0ga2V5ZnJhbWVz
LmF0KGkpOworICAgICAgICBlbmNvZGVyIDw8IHZhbHVlLT5rZXlUaW1lKCk7CisgICAgICAgIGVu
Y29kZVRpbWluZ0Z1bmN0aW9uKGVuY29kZXIsIHZhbHVlLT50aW1pbmdGdW5jdGlvbigpKTsKKyAg
ICAgICAgc3dpdGNoIChrZXlmcmFtZXMucHJvcGVydHkoKSkgeworICAgICAgICBjYXNlIEFuaW1h
dGVkUHJvcGVydHlPcGFjaXR5OgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxj
b25zdCBGbG9hdEFuaW1hdGlvblZhbHVlKj4odmFsdWUpLT52YWx1ZSgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybToKKyAg
ICAgICAgICAgIGVuY29kZXIgPDwgKnN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKj4odmFsdWUpLT52YWx1ZSgpOworICAgICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQorICAgICAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXI6
CisgICAgICAgICAgICBlbmNvZGVyIDw8ICpzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRp
b25WYWx1ZSo+KHZhbHVlKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30K
KworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8R3JhcGhpY3NMYXllckFu
aW1hdGlvbj46OmRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgZGVj
b2RlciwgR3JhcGhpY3NMYXllckFuaW1hdGlvbiYgYW5pbWF0aW9uKQoreworICAgIFN0cmluZyBu
YW1lOworICAgIEludFNpemUgYm94U2l6ZTsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZSBzdGF0ZTsKKyAgICBkb3VibGUgc3RhcnRUaW1lOworICAgIGRvdWJsZSBw
YXVzZVRpbWU7CisgICAgYm9vbCBsaXN0c01hdGNoOworCisgICAgQW5pbWF0aW9uOjpBbmltYXRp
b25EaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIHVuc2lnbmVkIGZpbGxNb2RlOworICAgIGRvdWJs
ZSBkdXJhdGlvbjsKKyAgICBkb3VibGUgaXRlcmF0aW9uQ291bnQ7CisgICAgUmVmUHRyPFRpbWlu
Z0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRp
b25PYmplY3Q7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShib3hTaXplKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHN0YXRlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhcnRUaW1lKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGF1c2VUaW1lKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGlzdHNNYXRjaCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShkaXJl
Y3Rpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShm
aWxsTW9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGR1cmF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoaXRlcmF0aW9uQ291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNv
ZGVUaW1pbmdGdW5jdGlvbihkZWNvZGVyLCB0aW1pbmdGdW5jdGlvbikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGFuaW1hdGlvbk9iamVjdCA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Cisg
ICAgYW5pbWF0aW9uT2JqZWN0LT5zZXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKKyAgICBhbmltYXRp
b25PYmplY3QtPnNldEZpbGxNb2RlKGZpbGxNb2RlKTsKKyAgICBhbmltYXRpb25PYmplY3QtPnNl
dER1cmF0aW9uKGR1cmF0aW9uKTsKKyAgICBhbmltYXRpb25PYmplY3QtPnNldEl0ZXJhdGlvbkNv
dW50KGl0ZXJhdGlvbkNvdW50KTsKKyAgICBpZiAodGltaW5nRnVuY3Rpb24pCisgICAgICAgIGFu
aW1hdGlvbk9iamVjdC0+c2V0VGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24pOworCisgICAg
QW5pbWF0ZWRQcm9wZXJ0eUlEIHByb3BlcnR5OworICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVt
KHByb3BlcnR5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEtleWZyYW1lVmFsdWVMaXN0
IGtleWZyYW1lcyhwcm9wZXJ0eSk7CisgICAgdW5zaWduZWQga2V5ZnJhbWVzU2l6ZTsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGtleWZyYW1lc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleWZyYW1lc1NpemU7ICsraSkgeworICAg
ICAgICBmbG9hdCBrZXlUaW1lOworICAgICAgICBSZWZQdHI8VGltaW5nRnVuY3Rpb24+IHRpbWlu
Z0Z1bmN0aW9uOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtleVRpbWUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZVRpbWluZ0Z1bmN0aW9uKGRl
Y29kZXIsIHRpbWluZ0Z1bmN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7CisgICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9w
YWNpdHk6IHsKKyAgICAgICAgICAgIGZsb2F0IHZhbHVlOworICAgICAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAga2V5ZnJhbWVzLmluc2VydChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZShrZXlUaW1lLCB2
YWx1ZSwgdGltaW5nRnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogeworICAgICAgICAg
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFuc2Zvcm07CisgICAgICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRyYW5zZm9ybSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAga2V5ZnJhbWVzLmluc2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoa2V5
VGltZSwgJnRyYW5zZm9ybSwgdGltaW5nRnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICBjYXNlIEFuaW1hdGVk
UHJvcGVydHlXZWJraXRGaWx0ZXI6IHsKKyAgICAgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmls
dGVyOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShmaWx0ZXIpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGtleWZyYW1lcy5pbnNlcnQobmV3IEZp
bHRlckFuaW1hdGlvblZhbHVlKGtleVRpbWUsICZmaWx0ZXIsIHRpbWluZ0Z1bmN0aW9uKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFuaW1hdGlvbiA9IEdy
YXBoaWNzTGF5ZXJBbmltYXRpb24obmFtZSwga2V5ZnJhbWVzLCBib3hTaXplLCBhbmltYXRpb25P
YmplY3QuZ2V0KCksIHN0YXJ0VGltZSwgbGlzdHNNYXRjaCk7CisgICAgYW5pbWF0aW9uLnNldFN0
YXRlKHN0YXRlLCBwYXVzZVRpbWUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zPjo6
ZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKK3sKKyAgICBlbmNvZGVyIDw8
IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpOworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25Db2RlcjxHcmFwaGljc0xheWVyQW5pbWF0aW9ucz46OmRlY29kZShDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgZGVjb2RlciwgR3JhcGhpY3NMYXllckFuaW1hdGlv
bnMmIGFuaW1hdGlvbnMpCit7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGFuaW1hdGlvbnMu
YW5pbWF0aW9ucygpKTsKK30KKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8R3JhcGhpY3NTdXJmYWNlVG9rZW4+OjplbmNv
ZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImIGVuY29kZXIsIGNvbnN0IEdy
YXBoaWNzU3VyZmFjZVRva2VuJiB0b2tlbikKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAgZW5jb2Rl
ciA8PCBBdHRhY2htZW50KHRva2VuLmZyb250QnVmZmVySGFuZGxlLCBNQUNIX01TR19UWVBFX01P
VkVfU0VORCk7CisgICAgZW5jb2RlciA8PCBBdHRhY2htZW50KHRva2VuLmJhY2tCdWZmZXJIYW5k
bGUsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKTsKKyNlbGlmIE9TKFdJTkRPV1MpCisgICAgZW5j
b2RlciA8PCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih0b2tlbi5mcm9udEJ1ZmZlckhhbmRs
ZSk7CisgICAgZW5jb2RlciA8PCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih0b2tlbi5iYWNr
QnVmZmVySGFuZGxlKTsKKyNlbGlmIE9TKExJTlVYKQorICAgIGVuY29kZXIgPDwgdG9rZW4uZnJv
bnRCdWZmZXJIYW5kbGU7CisjZW5kaWYKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uQ29kZXI8R3JhcGhpY3NTdXJmYWNlVG9rZW4+OjpkZWNvZGUoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkRlY29kZXImIGRlY29kZXIsIEdyYXBoaWNzU3VyZmFjZVRva2VuJiB0b2tl
bikKK3sKKyNpZiBPUyhXSU5ET1dTKQorICAgIHVpbnQ2NF90IGZyb250QnVmZmVySGFuZGxlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZnJvbnRCdWZmZXJIYW5kbGUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgdG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUgPSByZWludGVycHJldF9jYXN0
PEdyYXBoaWNzU3VyZmFjZVRva2VuOjpCdWZmZXJIYW5kbGU+KGZyb250QnVmZmVySGFuZGxlKTsK
KyAgICB1aW50NjRfdCBiYWNrQnVmZmVySGFuZGxlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
YmFja0J1ZmZlckhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB0b2tlbi5iYWNr
QnVmZmVySGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxHcmFwaGljc1N1cmZhY2VUb2tlbjo6QnVm
ZmVySGFuZGxlPihiYWNrQnVmZmVySGFuZGxlKTsKKyNlbGlmIE9TKERBUldJTikKKyAgICBBdHRh
Y2htZW50IGZyb250QXR0YWNobWVudCwgYmFja0F0dGFjaG1lbnQ7CisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShmcm9udEF0dGFjaG1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShiYWNrQXR0YWNobWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHRva2VuID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4oZnJvbnRBdHRhY2htZW50LnBvcnQo
KSwgYmFja0F0dGFjaG1lbnQucG9ydCgpKTsKKyNlbGlmIE9TKExJTlVYKQorICAgIGlmICghZGVj
b2Rlci5kZWNvZGUodG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxDb29yZGluYXRlZExheWVySW5mbz46OmVuY29kZShD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29vcmRp
bmF0ZWRMYXllckluZm8mIGNvb3JkaW5hdGVkTGF5ZXJJbmZvKQoreworICAgIFNpbXBsZUNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxDb29yZGluYXRlZExheWVySW5mbz46OmVuY29k
ZShlbmNvZGVyLCBjb29yZGluYXRlZExheWVySW5mbyk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkNvZGVyPENvb3JkaW5hdGVkTGF5ZXJJbmZvPjo6ZGVjb2RlKENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiBkZWNvZGVyLCBDb29yZGluYXRlZExheWVy
SW5mbyYgY29vcmRpbmF0ZWRMYXllckluZm8pCit7CisgICAgcmV0dXJuIFNpbXBsZUNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxDb29yZGluYXRlZExheWVySW5mbz46OmRlY29kZShk
ZWNvZGVyLCBjb29yZGluYXRlZExheWVySW5mbyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkNvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZW5jb2RlKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYgc3VyZmFjZVVwZGF0ZUluZm8pCit7CisgICAgU2ltcGxlQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbkNvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZW5jb2RlKGVuY29kZXIsIHN1cmZhY2VV
cGRhdGVJbmZvKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8
U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRl
Y29kZXImIGRlY29kZXIsIFN1cmZhY2VVcGRhdGVJbmZvJiBzdXJmYWNlVXBkYXRlSW5mbykKK3sK
KyAgICByZXR1cm4gU2ltcGxlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPFN1cmZh
Y2VVcGRhdGVJbmZvPjo6ZGVjb2RlKGRlY29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8Q29vcmRpbmF0ZWRTdXJmYWNl
Pjo6ZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBDb29yZGluYXRlZFN1cmZhY2UmIGNvb3JkaW5hdGVkU3VyZmFjZSkKK3sKK30KKworYm9v
bCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8Q29vcmRpbmF0ZWRTdXJmYWNlPjo6
ZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiBkZWNvZGVyLCBDb29y
ZGluYXRlZFN1cmZhY2UmIGNvb3JkaW5hdGVkU3VyZmFjZSkKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcnMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMTJlMDM0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uQ29kZXJzLmgKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXJzX2gKKyNkZWZpbmUgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyc19oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2Rlci5o
IgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyLmgiCisjaW5j
bHVkZSAid3RmL1ZlY3Rvci5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEludFNpemU7CitjbGFzcyBJbnRSZWN0Owor
CitjbGFzcyBDb29yZGluYXRlZFN1cmZhY2U7CisKK2NsYXNzIEZsb2F0UG9pbnQzRDsKK2NsYXNz
IEdyYXBoaWNzTGF5ZXJBbmltYXRpb247CitjbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsK
K2NsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7Citj
bGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25zOworc3RydWN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvOwor
c3RydWN0IExlbmd0aDsKKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK2NsYXNzIEZpbHRlck9w
ZXJhdGlvbnM7CisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKK2NsYXNzIEN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvOworI2VuZGlmCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
K3N0cnVjdCBHcmFwaGljc1N1cmZhY2VUb2tlbjsKKyNlbmRpZgorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8Q29sb3I+IHsKKyAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImLCBjb25zdCBD
b2xvciYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uRGVjb2RlciYsIENvbG9yJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8SW50U2l6ZT4geworICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYsIGNvbnN0IEludFNpemUmKTsK
KyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29k
ZXImLCBJbnRTaXplJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uQ29kZXI8SW50UmVjdD4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYsIGNvbnN0IEludFJlY3QmKTsKKyAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImLCBJ
bnRSZWN0Jik7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkNvZGVyPFZlY3RvcjxUPiA+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZl
Y3RvcjxUPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlcyAlbHVcbiIsIF9fUFJF
VFRZX0ZVTkNUSU9OX18sIHZlY3Rvci5zaXplKCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZShz
dGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSkpOworICAgICAgICBlbmNvZGVyLmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0
b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSk7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiBkZWNv
ZGVyLCBWZWN0b3I8VD4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IHNpemU7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgVmVjdG9yPFQ+IHRlbXA7CisgICAgICAgIHRlbXAucmVzaXplKHNpemUp
OworCisgICAgICAgIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSk7CisKKyAgICAgICAg
dmVjdG9yLnN3YXAodGVtcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxGbG9hdFBv
aW50M0Q+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkVuY29kZXImLCBjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImLCBGbG9hdFBvaW50M0QmKTsK
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2Rl
cjxMZW5ndGg+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbkVuY29kZXImLCBjb25zdCBMZW5ndGgmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImLCBMZW5ndGgmKTsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxUcmFuc2Zv
cm1hdGlvbk1hdHJpeD4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uRW5jb2RlciYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAg
c3RhdGljIGJvb2wgZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiwg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKK307CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8RmlsdGVy
T3BlcmF0aW9ucz4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uRW5jb2RlciYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImLCBGaWx0ZXJP
cGVyYXRpb25zJik7Cit9OworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8Q3VzdG9tRmls
dGVyUHJvZ3JhbUluZm8+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkVuY29kZXImLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwor
ICAgIHN0YXRpYyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2Rl
ciYsIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7Cit9OworI2VuZGlmCisKK3RlbXBsYXRlPD4g
c3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxUcmFuc2Zvcm1PcGVyYXRp
b25zPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25FbmNvZGVyJiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYpOworICAgIHN0YXRpYyBib29s
IGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYsIFRyYW5zZm9ybU9w
ZXJhdGlvbnMmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25Db2RlcjxHcmFwaGljc0xheWVyQW5pbWF0aW9ucz4geworICAgIHN0YXRpYyB2b2lk
IGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYsIGNvbnN0IEdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiwgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxH
cmFwaGljc0xheWVyQW5pbWF0aW9uPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlv
biYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
RGVjb2RlciYsIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24mKTsKK307CisKKyNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKK3RlbXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25Db2RlcjxHcmFwaGljc1N1cmZhY2VUb2tlbj4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYsIGNvbnN0IEdyYXBoaWNzU3VyZmFj
ZVRva2VuJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25EZWNvZGVyJiwgR3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKK307CisjZW5kaWYKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPENvb3JkaW5h
dGVkTGF5ZXJJbmZvPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25FbmNvZGVyJiwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKKyAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImLCBD
b29yZGluYXRlZExheWVySW5mbyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPiB7CisgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkRlY29kZXImLCBTdXJmYWNlVXBkYXRlSW5mbyYpOworfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPENvb3JkaW5h
dGVkU3VyZmFjZT4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uRW5jb2RlciYsIGNvbnN0IENvb3JkaW5hdGVkU3VyZmFjZSYpOworICAgIHN0YXRp
YyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYsIENvb3Jk
aW5hdGVkU3VyZmFjZSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkNvZGVyc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bkRlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGI5NzA2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyLmNwcApAQCAtMCwwICsxLDExMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXIuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25EZWNvZGVyOjpkZWNvZGVCeXRlcyhWZWN0b3I8dWludDhfdD4mIG91dCkKK3sKKyAg
ICBvdXQuY2xlYXIoKTsKKworICAgIHVpbnQzMl90IGNvdW50OworICAgIGlmICghZGVjb2RlVUlu
dDMyKGNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgb3V0LnJlc2VydmVDYXBh
Y2l0eShjb3VudCk7CisKKyAgICBpZiAobV9wb3NpdGlvbiArIGNvdW50ID4gYnVmZmVyU2l6ZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50OF90KiBpdGVyID0gbV9idWZmZXIt
PmRhdGEoKSArIG1fcG9zaXRpb247CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgb3V0LmFwcGVuZChpdGVyW2ldKTsKKyAgICB9CisKKyAgICBtX3Bv
c2l0aW9uICs9IGNvdW50OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGljIGlubGluZSBzaXplX3QgZGVjb2RlU3RyaW5nVGV4
dChjb25zdCBDaGFyYWN0ZXJUeXBlKiBzb3VyY2VCdWZmZXIsIHVpbnQzMl90IGxlbmd0aCwgU3Ry
aW5nJiByZXN1bHQpCit7CisgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOworICAgIFN0cmluZyBz
dHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOworCisg
ICAgc2l6ZV90IGJ5dGVTaXplID0gbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUpOworICAg
IG1lbWNweShidWZmZXIsIHNvdXJjZUJ1ZmZlciwgYnl0ZVNpemUpOworCisgICAgcmVzdWx0ID0g
c3RyaW5nOworCisgICAgcmV0dXJuIGJ5dGVTaXplOworfQorCitib29sIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25EZWNvZGVyOjpkZWNvZGVTdHJpbmcoU3RyaW5nJiBvdXQpCit7CisgICAg
dWludDMyX3QgbGVuZ3RoOworICAgIGlmICghZGVjb2RlVUludDMyKGxlbmd0aCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpKSB7CisgICAgICAgIG91dCA9IFN0cmluZygpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9wb3NpdGlvbiArIGxlbmd0aCA+IGJ1ZmZlclNp
emUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBpczhCaXQ7CisKKyAgICBp
ZiAoIWRlY29kZUJvb2woaXM4Qml0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2l6
ZV90IGFkdmFuY2VkQnl0ZXMgPSAwOworCisgICAgaWYgKGlzOEJpdCkKKyAgICAgICAgYWR2YW5j
ZWRCeXRlcyA9IGRlY29kZVN0cmluZ1RleHQ8TENoYXI+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPihtX2J1ZmZlciArIG1fcG9zaXRpb24pLCBsZW5ndGgsIG91dCk7CisgICAgZWxzZQor
ICAgICAgICBhZHZhbmNlZEJ5dGVzID0gZGVjb2RlU3RyaW5nVGV4dDxVQ2hhcj4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBVQ2hhcio+KG1fYnVmZmVyICsgbV9wb3NpdGlvbiksIGxlbmd0aCwgb3V0
KTsKKworICAgIG1fcG9zaXRpb24gKz0gYWR2YW5jZWRCeXRlczsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2Rlcjo6ZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIGlmIChtX3Bv
c2l0aW9uICsgc2l6ZSA+IGJ1ZmZlclNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyICsgbV9wb3NpdGlvbiwgc2l6ZSk7CisKKyAgICBtX3Bv
c2l0aW9uICs9IHNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25EZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1Yzc3MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2Rlci5oCkBAIC0w
LDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkRlY29kZXJfaAorI2RlZmluZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uRGVjb2Rlcl9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRl
ICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0Rl
Y29kZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uRGVjb2RlciA6IHB1YmxpYyBXVEY6OkRlY29kZXIgeworcHVibGljOgorICAg
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyKFZlY3Rvcjx1aW50OF90PiogYnVm
ZmVyKSA6IG1fYnVmZmVyKGJ1ZmZlciksIG1fcG9zaXRpb24oMCkge30KKworICAgIGJvb2wgZGVj
b2RlKGJvb2wmIHZhbHVlKSB7IHJldHVybiBkZWNvZGVTaW1wbGUodmFsdWUpOyB9CisgICAgYm9v
bCBkZWNvZGUodWludDhfdCYgdmFsdWUpIHsgcmV0dXJuIGRlY29kZVNpbXBsZSh2YWx1ZSk7IH0K
KyAgICBib29sIGRlY29kZSh1aW50MzJfdCYgdmFsdWUpIHsgcmV0dXJuIGRlY29kZVNpbXBsZSh2
YWx1ZSk7IH0KKyAgICBib29sIGRlY29kZSh1aW50NjRfdCYgdmFsdWUpIHsgcmV0dXJuIGRlY29k
ZVNpbXBsZSh2YWx1ZSk7IH0KKyAgICBib29sIGRlY29kZShpbnQzMl90JiB2YWx1ZSkgeyByZXR1
cm4gZGVjb2RlU2ltcGxlKHZhbHVlKTsgfQorICAgIGJvb2wgZGVjb2RlKGludDY0X3QmIHZhbHVl
KSB7IHJldHVybiBkZWNvZGVTaW1wbGUodmFsdWUpOyB9CisgICAgYm9vbCBkZWNvZGUoZmxvYXQm
IHZhbHVlKSB7IHJldHVybiBkZWNvZGVTaW1wbGUodmFsdWUpOyB9CisgICAgYm9vbCBkZWNvZGUo
ZG91YmxlJiB2YWx1ZSkgeyByZXR1cm4gZGVjb2RlU2ltcGxlKHZhbHVlKTsgfQorICAgIGJvb2wg
ZGVjb2RlKFN0cmluZyYgc3RyaW5nKSB7IHJldHVybiBkZWNvZGVTdHJpbmcoc3RyaW5nKTsgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gYm9vbCBkZWNvZGUoVHlwZSYgdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8VHlwZT46
OmRlY29kZSgqdGhpcywgdCk7CisgICAgfQorCisgICAgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERh
dGEodWludDhfdCosIHNpemVfdCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBib29s
IGRlY29kZUVudW0oVHlwZSYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKFR5cGUpIDw9IHNpemVvZih1aW50NjRfdCksIGVudW1fdHlwZV9tdXN0X25vdF9iZV9s
YXJnZXJfdGhhbl82NF9iaXRzKTsKKworICAgICAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICAgICAg
aWYgKCFkZWNvZGVTaW1wbGUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdWludDMyX3QgYnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYnVmZmVyLT5zaXplKCk7IH0KKyAgICBjb25zdCB1aW50OF90KiBidWZmZXIoKSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlci0+ZGF0YSgpOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4gYm9vbCBkZWNvZGVTaW1wbGUoVHlwZSYgb3V0KSB7CisgICAgICAgIGlmICht
X3Bvc2l0aW9uICsgc2l6ZW9mKFR5cGUpID4gYnVmZmVyU2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIG91dCA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IFR5cGUq
PihtX2J1ZmZlci0+ZGF0YSgpICsgbV9wb3NpdGlvbik7CisgICAgICAgIG1fcG9zaXRpb24gKz0g
c2l6ZW9mKFR5cGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgZGVjb2RlQnl0ZXMoVmVjdG9yPHVpbnQ4X3Q+Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wg
ZGVjb2RlQm9vbChib29sJiBvdXQpIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZVNpbXBsZShvdXQp
OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVVSW50MzIodWludDMyX3QmIG91dCkg
eworICAgICAgICByZXR1cm4gZGVjb2RlU2ltcGxlKG91dCk7CisgICAgfQorCisgICAgdmlydHVh
bCBib29sIGRlY29kZVVJbnQ2NCh1aW50NjRfdCYgb3V0KSB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVTaW1wbGUob3V0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlSW50MzIoaW50
MzJfdCYgb3V0KSB7CisgICAgICAgIHJldHVybiBkZWNvZGVTaW1wbGUob3V0KTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlSW50NjQoaW50NjRfdCYgb3V0KSB7CisgICAgICAgIHJl
dHVybiBkZWNvZGVTaW1wbGUob3V0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2Rl
RmxvYXQoZmxvYXQmIG91dCkgeworICAgICAgICByZXR1cm4gZGVjb2RlU2ltcGxlKG91dCk7Cisg
ICAgfQorCisgICAgdmlydHVhbCBib29sIGRlY29kZURvdWJsZShkb3VibGUmIG91dCkgeworICAg
ICAgICByZXR1cm4gZGVjb2RlU2ltcGxlKG91dCk7CisgICAgfQorCisgICAgdmlydHVhbCBib29s
IGRlY29kZVN0cmluZyhTdHJpbmcmKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiogbV9idWZmZXI7
CisgICAgdWludDMyX3QgbV9wb3NpdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGI1YWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXIuY3BwCkBAIC0wLDAgKzEs
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25FbmNvZGVyLmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
Q29kZXJzLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyOjplbmNvZGVCeXRlcyhjb25z
dCB1aW50OF90KiBieXRlcywgc2l6ZV90IHNpemUpCit7CisgICAgZW5jb2RlVUludDMyKHNpemUp
OworICAgIG1fYnVmZmVyLmFwcGVuZChieXRlcywgc2l6ZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXI6OmVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0
cmluZykKK3sKKyAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51bGwgc3RyaW5nCisgICAgaWYgKHN0
cmluZy5pc051bGwoKSkgeworICAgICAgICB1aW50MzJfdCB0ZXJtaW5hdG9yID0gc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICBtX2J1ZmZlci5hcHBlbmQocmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnRlcm1pbmF0b3IpLCBzaXplb2YodGVybWluYXRvcikp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5n
Lmxlbmd0aCgpOworICAgIGJvb2wgaXM4Qml0ID0gc3RyaW5nLmlzOEJpdCgpOworCisgICAgZW5j
b2RlVUludDMyKGxlbmd0aCk7CisgICAgZW5jb2RlQm9vbChpczhCaXQpOworCisgICAgaWYgKGlz
OEJpdCkKKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzOCgpKSwgbGVuZ3RoICogc2l6ZW9mKExDaGFyKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2J1ZmZlci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwgbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXI6OmVuY29kZUZp
eGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBw
cmludGYoIiVzIDogJXAgJWx1XG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBkYXRhLCBzaXplKTsK
KyAgICBtX2J1ZmZlci5hcHBlbmQoZGF0YSwgc2l6ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25FbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzNmM1MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2Rlci5oCkBAIC0w
LDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkVuY29kZXJfaAorI2RlZmluZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uRW5jb2Rlcl9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRl
ICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0Vu
Y29kZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uRW5jb2RlciA6IHB1YmxpYyBXVEY6OkVuY29kZXIgeworcHVibGljOgorICAg
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyKCkgeyB9CisgICAgdmlydHVhbCB+
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXIoKSB7IH0KKworICAgIHZvaWQgZW5j
b2RlKGJvb2wgdmFsdWUpIHsgZW5jb2RlU2ltcGxlKHZhbHVlKTsgfQorICAgIHZvaWQgZW5jb2Rl
KHVpbnQ4X3QgdmFsdWUpIHsgZW5jb2RlU2ltcGxlKHZhbHVlKTsgfQorICAgIHZvaWQgZW5jb2Rl
KHVpbnQzMl90IHZhbHVlKSB7IGVuY29kZVNpbXBsZSh2YWx1ZSk7IH0KKyAgICB2b2lkIGVuY29k
ZSh1aW50NjRfdCB2YWx1ZSkgeyBlbmNvZGVTaW1wbGUodmFsdWUpOyB9CisgICAgdm9pZCBlbmNv
ZGUoaW50MzJfdCB2YWx1ZSkgeyBlbmNvZGVTaW1wbGUodmFsdWUpOyB9CisgICAgdm9pZCBlbmNv
ZGUoaW50NjRfdCB2YWx1ZSkgeyBlbmNvZGVTaW1wbGUodmFsdWUpOyB9CisgICAgdm9pZCBlbmNv
ZGUoZmxvYXQgdmFsdWUpIHsgZW5jb2RlU2ltcGxlKHZhbHVlKTsgfQorICAgIHZvaWQgZW5jb2Rl
KGRvdWJsZSB2YWx1ZSkgeyBlbmNvZGVTaW1wbGUodmFsdWUpOyB9CisgICAgdm9pZCBlbmNvZGUo
Y29uc3QgU3RyaW5nJiBzdHJpbmcpIHsgZW5jb2RlU3RyaW5nKHN0cmluZyk7IH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFR5cGU+IHZvaWQgZW5jb2RlKGNvbnN0IFR5cGUmIHQpCisgICAgewor
ICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8VHlwZT46OmVuY29kZSgq
dGhpcywgdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVHlwZSYgdCkKKyAg
ICB7CisgICAgICAgIGVuY29kZSh0KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwor
ICAgIHZvaWQgZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gdm9pZCBlbmNvZGVFbnVtKFR5cGUgdCkKKyAg
ICB7CisgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlKSA8PSBzaXplb2YodWludDY0
X3QpLCBlbnVtX3R5cGVfbXVzdF9ub3RfYmVfbGFyZ2VyX3RoYW5fNjRfYml0cyk7CisKKyAgICAg
ICAgZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0KSk7CisgICAgfQorCisgICAgdWludDMy
X3QgYnVmZmVyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQorICAgIGNv
bnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KKwor
cHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiB2b2lkIGVuY29kZVNpbXBsZShU
eXBlJiB2YWx1ZSkgeworICAgICAgICBtX2J1ZmZlci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJnZhbHVlKSwgc2l6ZW9mKFR5cGUpKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlQnl0ZXMoY29uc3QgdWludDhf
dCosIHNpemVfdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlQm9vbChib29sIHZhbHVlKSB7
CisgICAgICAgIGVuY29kZVNpbXBsZSh2YWx1ZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGVuY29kZVVJbnQzMih1aW50MzJfdCB2YWx1ZSkgeworICAgICAgICBlbmNvZGVTaW1wbGUodmFs
dWUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVVSW50NjQodWludDY0X3QgdmFs
dWUpIHsKKyAgICAgICAgZW5jb2RlU2ltcGxlKHZhbHVlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZW5jb2RlSW50MzIoaW50MzJfdCB2YWx1ZSkgeworICAgICAgICBlbmNvZGVTaW1wbGUo
dmFsdWUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQ2NChpbnQ2NF90IHZh
bHVlKSB7CisgICAgICAgIGVuY29kZVNpbXBsZSh2YWx1ZSk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIGVuY29kZUZsb2F0KGZsb2F0IHZhbHVlKSB7CisgICAgICAgIGVuY29kZVNpbXBsZSh2
YWx1ZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGVuY29kZURvdWJsZShkb3VibGUgdmFs
dWUpIHsKKyAgICAgICAgZW5jb2RlU2ltcGxlKHZhbHVlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+
IG1fYnVmZmVyOworICAgIHVpbnQzMl90IG1fcG9zaXRpb247Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRp
ZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2Rlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYmE2ZGQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaApAQCAtMCwwICsxLDgzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnNfaAorI2Rl
ZmluZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uc19oCisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFz
ZS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyLmgiCisj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXIuaCIKKyNpbmNsdWRl
IDx3dGYvRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9FbmNvZGVyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25zIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25C
YXNlPiBvcGVyYXRpb24pIHsgbV9vcGVyYXRpb25zLmFwcGVuZChvcGVyYXRpb24pOyB9CisgICAg
dm9pZCBjbGVhcigpIHsgbV9vcGVyYXRpb25zLmNsZWFyKCk7IH0KKworICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7IH0KKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5zaXplKCk7IH0KKyAgICBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZSogYXQoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9vcGVyYXRpb25zLnNpemUoKSk7CisgICAgICAgIHJl
dHVybiBtX29wZXJhdGlvbnMuYXQoaW5kZXgpLmdldCgpOworICAgIH0KKworICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpCisgICAgeworICAgICAgICBlbmNvZGVyLmVuY29kZVVJbnQ2
NChzaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciBvcGVyYXRp
b25FbmNvZGVyOworICAgICAgICAgICAgbV9vcGVyYXRpb25zLmF0KGkpLT5lbmNvZGUob3BlcmF0
aW9uRW5jb2Rlcik7CisgICAgICAgICAgICBlbmNvZGVyLmVuY29kZUJ5dGVzKG9wZXJhdGlvbkVu
Y29kZXIuZGF0YSgpLCBvcGVyYXRpb25FbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKKyAgICB7
CisgICAgICAgIHVpbnQ2NF90IG9wZXJhdGlvbnNTaXplOworICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlVUludDY0KG9wZXJhdGlvbnNTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnNTaXplOyArK2kpIHsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
VmVjdG9yPFJlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gPiBtX29wZXJh
dGlvbnM7Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25zX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCAxZWEzY2JmLi42ZGYzMzQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApAQCAt
MjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIgogCiAj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmUuaCIKQEAgLTUzMiw4ICs1MzMsMTEgQEAgdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCkKICAgICBt
X2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKIH0KIAotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZsdXNoTGF5ZXJDaGFuZ2VzKGNvbnN0IEZsb2F0UG9pbnQm
IHNjcm9sbFBvc2l0aW9uKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25zJiBvcGVyYXRpb25zLCBjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wZXJhdGlvbnMuc2l6ZSgpOyBpKyspCisgICAg
ICAgIG9wZXJhdGlvbnMuYXQoaSktPmV4ZWN1dGUodGhpcyk7CisKICAgICBtX3JlbmRlcmVkQ29u
dGVudHNTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwogCiAgICAgLy8gU2luY2UgdGhl
IGZyYW1lIGhhcyBub3cgYmVlbiByZW5kZXJlZCwgd2UgY2FuIHNhZmVseSB1bmxvY2sgdGhlIGFu
aW1hdGlvbnMgdW50aWwgdGhlIG5leHQgbGF5b3V0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4IDc3YzYxODkuLmJhZWZjOTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
X2gKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIK
ICNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKQEAgLTQyLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZTsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOworY2xhc3Mg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM7CiBjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFt
OwogY2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm87CiBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5
ZXI7CkBAIC04MSwxMiArODMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFRvR3JhcGhpY3ND
b250ZXh0KGNhaXJvX3QqKTsKICNlbmRpZgogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZvaWQgY3Jl
YXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgdWludDMyX3QgZnJvbnRCdWZmZXIpOwotICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGlu
YXRlZExheWVySUQpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChDb29y
ZGluYXRlZExheWVySUQsIGludCB2YWx1ZSk7CiAKICAgICB2b2lkIGRldGFjaCgpOwogICAgIHZv
aWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKQEAgLTk2LDM4ICs5Miw0
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRB
Y3RpdmUoYm9vbCk7CiAKKyAgICB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25zKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiwgY29uc3QgRmxvYXRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24pOworICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsK
KworICAgIC8vIEJlZ2luIG9wZXJhdGlvbiBleGVjdXRpb25zLgogICAgIHZvaWQgY3JlYXRlTGF5
ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7CiAgICAgdm9pZCBkZWxldGVM
YXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKICAgICB2b2lkIHNldFJv
b3RMYXllcklEKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAgdm9pZCBzZXRMYXllckNoaWxkcmVu
KENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsK
ICAgICB2b2lkIHNldExheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGlu
YXRlZExheWVySW5mbyYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldExh
eWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsK
LSNlbmRpZgotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICB2b2lkIGluamVjdENhY2hlZEN1
c3RvbUZpbHRlclByb2dyYW1zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0
OwotICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvJik7Ci0gICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
KGludCBpZCk7Ci0jZW5kaWYKLQorICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7CiAgICAgdm9pZCBj
cmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBmbG9hdCBzY2Fs
ZSk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlEKTsKICAgICB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0
aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0
ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKICAgICB2
b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1c2hM
YXllckNoYW5nZXMoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogICAgIHZvaWQg
Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQg
dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRTdXJmYWNlPik7CiAgICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRz
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25z
KENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKLSAg
ICB2b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIHNldERyYXdzQmFja2dyb3VuZChib29sIGVu
YWJsZSkgeyBtX3NldERyYXdzQmFja2dyb3VuZCA9IGVuYWJsZTsgfQotCiAjaWYgRU5BQkxFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7
CiAjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2b2lkIGNyZWF0ZUNhbnZh
cyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEdyYXBoaWNz
U3VyZmFjZT4pOworICAgIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIHVpbnQz
Ml90IGZyb250QnVmZmVyKTsKKyAgICB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklEKTsKKyNlbmRpZgorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2b2lkIHNldExheWVy
RmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyNl
bmRpZgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRl
clByb2dyYW0oaW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOworICAgIHZv
aWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOworI2VuZGlmCisgICAgdm9pZCBz
ZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQsIGludCB2YWx1ZSk7CisgICAg
dm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGRpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKTsKKyAgICAvLyBFbmQg
b3BlcmF0aW9uIGV4ZWN1dGlvbnMuCisKKyAgICB2b2lkIHNldERyYXdzQmFja2dyb3VuZChib29s
IGVuYWJsZSkgeyBtX3NldERyYXdzQmFja2dyb3VuZCA9IGVuYWJsZTsgfQogCiBwcml2YXRlOgog
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChDb29yZGluYXRlZExheWVySUQgaWQpCkBAIC0x
NjgsNiArMTcyLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVCYWNraW5nU3RvcmVJZk5l
ZWRlZChHcmFwaGljc0xheWVyKik7CiAgICAgdm9pZCByZXNldEJhY2tpbmdTdG9yZVNpemVUb0xh
eWVyU2l6ZShHcmFwaGljc0xheWVyKik7CiAKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAg
dm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKSBjb25zdDsKKyNlbmRpZgorCiAgICAgLy8gUmVuZGVyIHF1ZXVlIGNhbiBi
ZSBhY2Nlc3NlZCBvbnkgZnJvbSBtYWluIHRocmVhZCBvciB1cGRhdGVQYWludE5vZGUgY2FsbCBz
dGFjayEKICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fcmVuZGVyUXVldWU7CiAgICAg
TXV0ZXggbV9yZW5kZXJRdWV1ZU11dGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKaW5kZXggMTI4YmFiZS4uNDU5ZDhmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
Y3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCiAKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDEzICszOSwxMyBAQCBDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQ+KGltYWdlKTsKIH0KIAotUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZShDb29yZGluYXRvciogY2xpZW50LCBQYXNzUmVm
UHRyPEltYWdlPiBpbWFnZSkKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6UXVldWUqIHF1ZXVlLCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKGNsaWVudCwgaW1hZ2UpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKHF1ZXVlLCBpbWFn
ZSkpOwogfQogCi1Db29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCi0gICAgOiBt
X2Nvb3JkaW5hdG9yKGNsaWVudCkKK0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRl
ZEltYWdlQmFja2luZyhDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogcXVldWUs
IFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQorICAgIDogbV9vcGVyYXRpb25RdWV1ZShxdWV1ZSkK
ICAgICAsIG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX2lkKGdldENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQobV9pbWFnZS5nZXQoKSkpCiAgICAgLCBtX2NsZWFyQ29udGVudHNUaW1lcih0aGlzLCAm
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNsZWFyQ29udGVudHNUaW1lckZpcmVkKQpAQCAtNTQs
NyArNTUsNyBAQCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cgogICAgIC8vIEZJWE1FOiBXZSB3b3Vs
ZCBuZWVkIHRvIGRlY29kZSBhIHNtYWxsIGltYWdlIGRpcmVjdGx5IGludG8gYSBHcmFwaGljc1N1
cmZhY2UuCiAgICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi8xMDE0MjYKIAotICAgIG1fY29vcmRp
bmF0b3ItPmNyZWF0ZUltYWdlQmFja2luZyhpZCgpKTsKKyAgICBtX29wZXJhdGlvblF1ZXVlLT5l
bnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZzo6
Y3JlYXRlKGlkKCkpKTsKIH0KIAogQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6On5Db29yZGluYXRl
ZEltYWdlQmFja2luZygpCkBAIC03NCw3ICs3NSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6OnJlbW92ZUhvc3QoSG9zdCogaG9zdCkKICAgICBtX2hvc3RzLnJlbW92ZShwb3NpdGlv
bik7CiAKICAgICBpZiAobV9ob3N0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fY29vcmRpbmF0b3It
PnJlbW92ZUltYWdlQmFja2luZyhpZCgpKTsKKyAgICAgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5x
dWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmc6OmNy
ZWF0ZShpZCgpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Om1hcmtEaXJ0
eSgpCkBAIC0xMTMsOSArMTE0LDggQEAgdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBk
YXRlKCkKIAogICAgIG1fbmF0aXZlSW1hZ2VQdHIgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwogCi0gICAgLy8gSWYgc2VuZGluZyB0aGUgbWVzc2FnZSBmYWlscywgdHJ5
IGFnYWluIGluIHRoZSBuZXh0IHVwZGF0ZS4KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2Nvb3JkaW5h
dG9yLT51cGRhdGVJbWFnZUJhY2tpbmcoaWQoKSwgbV9zdXJmYWNlKTsKLSAgICBtX2lzRGlydHkg
PSAhc3VjY2VzczsKKyAgICBtX29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlkKCksICptX3N1cmZh
Y2UpKTsKKyAgICBtX2lzRGlydHkgPSBmYWxzZTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEltYWdl
QmFja2luZzo6cmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9p
ZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlVmlzaWJpbGl0eUlmTmVlZGVkKGJvb2wm
IGNoYW5nZWRUb1Zpc2libGUpCiAKIHZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNsZWFy
Q29udGVudHNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiopCiB7Ci0g
ICAgbV9jb29yZGluYXRvci0+Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpZCgpKTsKKyAgICBt
X29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHM6OmNyZWF0ZShpZCgpKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nLmgKaW5kZXggNWI1YjU3YS4uOGJmNGRiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNkZWZpbmUgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfaAogCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKICNp
bmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3Vy
ZmFjZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC0zOSwyMCArNDAsMTIgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGluYXRlZEltYWdlQmFja2luZyA6IHB1YmxpYyBSZWZD
b3VudGVkPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiB7CiBwdWJsaWM6Ci0gICAgY2xhc3MgQ29v
cmRpbmF0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
Ym9vbCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKSA9IDA7Ci0gICAgfTsKLQogICAgIGNsYXNzIEhvc3QgewogICAgIHB1YmxpYzoKICAg
ICAgICAgdmlydHVhbCBib29sIGltYWdlQmFja2luZ1Zpc2libGUoKSA9IDA7CiAgICAgfTsKIAot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGUoQ29v
cmRpbmF0b3IqLCBQYXNzUmVmUHRyPEltYWdlPik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpRdWV1ZSosIFBhc3NSZWZQdHI8SW1hZ2U+KTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZElt
YWdlQmFja2luZygpOwogCiAgICAgc3RhdGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgZ2V0
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChJbWFnZSopOwpAQCAtNjgsMTMgKzYxLDEzIEBAIHB1
YmxpYzoKICAgICB2b2lkIHVwZGF0ZSgpOwogCiBwcml2YXRlOgotICAgIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nKENvb3JkaW5hdG9yKiwgUGFzc1JlZlB0cjxJbWFnZT4pOworICAgIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiwgUGFz
c1JlZlB0cjxJbWFnZT4pOwogCiAgICAgdm9pZCByZWxlYXNlU3VyZmFjZUlmTmVlZGVkKCk7CiAg
ICAgdm9pZCB1cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoYm9vbCYgY2hhbmdlZFRvVmlzaWJsZSk7
CiAgICAgdm9pZCBjbGVhckNvbnRlbnRzVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZEltYWdl
QmFja2luZz4qKTsKIAotICAgIENvb3JkaW5hdG9yKiBtX2Nvb3JkaW5hdG9yOworICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiBtX29wZXJhdGlvblF1ZXVlOwogICAgIFJl
ZlB0cjxJbWFnZT4gbV9pbWFnZTsKICAgICBOYXRpdmVJbWFnZVB0ciBtX25hdGl2ZUltYWdlUHRy
OwogICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgbV9pZDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZFN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuaAppbmRleCAzMDc3YzNjLi5kNzNjNmEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5oCkBAIC0zMCw2ICsz
MCw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBCaXRtYXBUZXh0dXJlOwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29k
ZXI7CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlcjsKIAogY2xhc3Mg
Q29vcmRpbmF0ZWRTdXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvb3JkaW5h
dGVkU3VyZmFjZT4gewogcHVibGljOgpAQCAtNTUsNiArNTcsOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGNvcHlUb1RleHR1cmUoUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiwgY29uc3Qg
SW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0KSA9IDA7CiAjZW5k
aWYKIAorICAgIHZpcnR1YWwgdm9pZCBlbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bkVuY29kZXImKSA9IDA7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImKTsKKwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgRmxhZ3MgZmxhZ3MoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJm
YWNlVXBkYXRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKaW5kZXggNmFiMzg0YS4uZWE4YjI1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKQEAgLTIzLDEz
ICsyMywxMCBAQAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIklu
dFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU3VyZmFjZVVwZGF0ZUluZm8pOwotCiBwdWJsaWM6CiAgICAgU3VyZmFjZVVwZGF0ZUluZm8o
KSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKaW5kZXggMzY0ZjA2
OC4uMmI3MTA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwCkBAIC0y
MywxNCArMjMsMTUgQEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAorI2luY2x1
ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1VcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoVXBk
YXRlQXRsYXNDbGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJmYWNl
OjpGbGFncyBmbGFncykKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKK1VwZGF0ZUF0bGFzOjpVcGRh
dGVBdGxhcyhDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogcXVldWUsIGludCBk
aW1lbnNpb24sIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3MpCisgICAgOiBtX29wZXJh
dGlvblF1ZXVlKHF1ZXVlKQogICAgICwgbV9pbmFjdGl2aXR5SW5TZWNvbmRzKDApCiB7CiAgICAg
c3RhdGljIHVpbnQzMl90IG5leHRJRCA9IDA7CkBAIC0zOCwxNSArMzksMTIgQEAgVXBkYXRlQXRs
YXM6OlVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiBjbGllbnQsIGludCBkaW1lbnNpb24s
IENvb3JkaW5hdGVkU3UKICAgICBJbnRTaXplIHNpemUgPSBuZXh0UG93ZXJPZlR3byhJbnRTaXpl
KGRpbWVuc2lvbiwgZGltZW5zaW9uKSk7CiAgICAgbV9zdXJmYWNlID0gQ29vcmRpbmF0ZWRTdXJm
YWNlOjpjcmVhdGUoc2l6ZSwgZmxhZ3MpOwogCi0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwgaWYg
c2VuZGluZyB0aGUgbWVzc2FnZSBmYWlscywgVXBkYXRlQXRsYXMgZ2l2ZXMgdXAgZHJhd2luZyBh
bnl0aGluZyBpbXBsaWNpdGx5LgotICAgIGlmICghbV9jbGllbnQtPmNyZWF0ZVVwZGF0ZUF0bGFz
KG1fSUQsIG1fc3VyZmFjZSkpCi0gICAgICAgIG1fc3VyZmFjZS5jbGVhcigpOworICAgIG1fb3Bl
cmF0aW9uUXVldWUtPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRl
VXBkYXRlQXRsYXM6OmNyZWF0ZShtX0lELCAqbV9zdXJmYWNlKSk7CiB9CiAKIFVwZGF0ZUF0bGFz
Ojp+VXBkYXRlQXRsYXMoKQogewotICAgIGlmIChtX3N1cmZhY2UpCi0gICAgICAgIG1fY2xpZW50
LT5yZW1vdmVVcGRhdGVBdGxhcyhtX0lEKTsKKyAgICBtX29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVl
KENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzOjpjcmVhdGUo
bV9JRCkpOwogfQogCiB2b2lkIFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKQEAg
LTcyLDkgKzcwLDYgQEAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpi
ZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIodWludDMyX3QKICAgICBpZiAocmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKIAot
ICAgIGlmICghbV9zdXJmYWNlKQotICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0Nv
bnRleHQ+KCk7Ci0KICAgICBhdGxhc0lEID0gbV9JRDsKIAogICAgIC8vIEZJWE1FOiBVc2UgdHJp
LXN0YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0
bGFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvVXBkYXRlQXRsYXMuaAppbmRleCA0OGE2YmY4Li4xNjMxMzhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRs
YXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvVXBkYXRlQXRsYXMuaApAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBVcGRhdGVBdGxh
c19oCiAKICNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKIApAQCAtMzEsMTYgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEludFBvaW50OwogCi1jbGFzcyBVcGRh
dGVBdGxhc0NsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSA9
IDA7Ci19OwotCiBjbGFzcyBVcGRhdGVBdGxhcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
VXBkYXRlQXRsYXMpOwogcHVibGljOgotICAgIFVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50
KiwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7CisgICAgVXBkYXRl
QXRsYXMoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqLCBpbnQgZGltZW5zaW9u
LCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzKTsKICAgICB+VXBkYXRlQXRsYXMoKTsKIAogICAg
IGlubGluZSBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnNpemUoKTsg
fQpAQCAtNjYsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRl
ZCgpOwogCiBwcml2YXRlOgotICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKKyAgICBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogbV9vcGVyYXRpb25RdWV1ZTsKICAg
ICBPd25QdHI8R2VuZXJhbEFyZWFBbGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKICAgICBSZWZQ
dHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBtX3N1cmZhY2U7CiAgICAgZG91YmxlIG1faW5hY3Rpdml0
eUluU2Vjb25kczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXggYWY2YjE0MS4uNzMwOWE0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKQEAgLTIxOSw3ICsyMTksNiBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VT
CiAgICAgU2hhcmVkL0FQSS9jL1dLVVJMUmVzcG9uc2UuY3BwCiAgICAgU2hhcmVkL0FQSS9jL1dL
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcAogCi0gICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAogICAgIFNoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5jcHAKICAgICBTaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkuY3BwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCA1NjZmYjNiLi4wNTA1NDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIw
MTMtMDItMDQgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CisKKyAg
ICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtl
cyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcGVyZm9ybSB2aWEgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwODI5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZXJlIGFyZSB0d28gY2hhbmdlcyBpbiBXSzIuCisgICAgICAgIDEuIENoYW5nZSBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSB0byB1c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbi4KKyAgICAgICAgMi4gQWRkIGVuY29kZS9kZWNvZGUgb2YgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbiBpbgorICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
CisKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOgorICAg
ICAgICAgICAgRW5jb2RpbmcgVXBkYXRlSW1hZ2VCYWNraW5nIGFuZCBDcmVhdGVVcGRhdGVBdGxh
cyBjYW4gZmFpbCB3aGVuCisgICAgICAgICAgICBlbmNvZGluZyBXZWJDb29yZGluYXRlZFN1cmZh
Y2U6OkhhbmRsZSBmYWlscywgYnV0IHdlIGRvbid0CisgICAgICAgICAgICByZWNvdmVyIGluIHRo
ZSBjYXNlLgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6
CisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAg
ICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZWxldGVD
b21wb3NpdGluZ0xheWVycyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3hpZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJl
bW92ZUN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6ZW5xdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6d2lsbEVucXVldWVPcGVyYXRpb24pOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1h
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6b3BlcmF0aW9uUXVldWUpOgorCiAyMDEzLTAyLTA1ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRl
bGxhQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBNYWtl
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBub3Qga25vdyBjb250ZW50cyBzaXplLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMDZkMTEuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg0MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3Vt
ZW50Q29kZXJzLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAi
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24uaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRl
ZExheWVySW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludDNELmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9J
ZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0xlbmd0aC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWF0cml4
M0RUcmFuc2Zvcm1PcGVyYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVy
YXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1N1cmZh
Y2VVcGRhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1pbmdGdW5jdGlvbi5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oPgotCi0jaWYgRU5BQkxFKENTU19GSUxURVJT
KQotI2luY2x1ZGUgPFdlYkNvcmUvRmlsdGVyT3BlcmF0aW9ucy5oPgotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9DdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvQ3VzdG9tRmlsdGVyQ29uc3RhbnRzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DdXN0
b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0N1c3RvbUZpbHRl
ck9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0N1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVmFs
aWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+Ci0jZW5kaWYK
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKLSNlbmRpZgotCi1uYW1lc3BhY2UgQ29yZUlQQyB7Ci0KLXZv
aWQgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBGbG9hdFBvaW50M0QmIGZsb2F0UG9pbnQzRCkKLXsKLSAgICBTaW1wbGVB
cmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50M0Qp
OwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciYgZGVjb2RlciwgRmxvYXRQb2ludDNEJiBmbG9hdFBvaW50M0QpCi17Ci0gICAgcmV0
dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZGVjb2RlKGRlY29kZXIsIGZs
b2F0UG9pbnQzRCk7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBMZW5ndGgmIGxlbmd0aCkKLXsKLSAgICBTaW1w
bGVBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBsZW5ndGgpOwotfQotCi1i
b29sIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2Rl
ciwgTGVuZ3RoJiBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8TGVu
Z3RoPjo6ZGVjb2RlKGRlY29kZXIsIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxU
cmFuc2Zvcm1hdGlvbk1hdHJpeD46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1hdGlvbk1hdHJpeCkKLXsKLSAgICBT
aW1wbGVBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZW5jb2RlKGVuY29kZXIs
IHRyYW5zZm9ybWF0aW9uTWF0cml4KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFRyYW5zZm9y
bWF0aW9uTWF0cml4Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybWF0aW9uTWF0cml4KQotewotICAgIHJldHVybiBTaW1wbGVB
cmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZGVjb2RlKGRlY29kZXIsIHRyYW5z
Zm9ybWF0aW9uTWF0cml4KTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykK
LXsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihmaWx0ZXJzLnNpemUoKSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyID0gZmlsdGVycy5hdChpKTsKLSAgICAg
ICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUgPSBmaWx0ZXItPmdldE9wZXJh
dGlvblR5cGUoKTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKHR5cGUpOwotICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToK
LSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVf
Uk9UQVRFOgotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KHN0YXRp
Y19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXIpLT5h
bW91bnQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OklOVkVSVDoKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0g
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbio+KGZpbHRlciktPmFtb3VudCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8
TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVy
YXRpb24qPihmaWx0ZXIpLT5zdGREZXZpYXRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBj
b25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKiBzaGFkb3cgPSBzdGF0aWNfY2FzdDxjb25z
dCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyKTsKLSAgICAgICAgICAgIEFyZ3Vt
ZW50Q29kZXI8SW50UG9pbnQ+OjplbmNvZGUoZW5jb2Rlciwgc2hhZG93LT5sb2NhdGlvbigpKTsK
LSAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2hhZG93LT5zdGRE
ZXZpYXRpb24oKSk7Ci0gICAgICAgICAgICBBcmd1bWVudENvZGVyPENvbG9yPjo6ZW5jb2RlKGVu
Y29kZXIsIHNoYWRvdy0+Y29sb3IoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNV
U1RPTToKLSAgICAgICAgICAgIC8vIEN1c3RvbSBGaWx0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gVkFM
SURBVEVEX0NVU1RPTSBiZWZvcmUgcmVhY2hpbmcgdGhpcyBwb2ludC4KLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpWQUxJREFURURfQ1VTVE9NOiB7Ci0gICAgICAgICAgICBjb25zdCBWYWxp
ZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qIGN1c3RvbU9wZXJhdGlvbiA9IHN0YXRpY19jYXN0
PGNvbnN0IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KGZpbHRlcik7Ci0gICAgICAg
ICAgICBBU1NFUlQoY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCkpOwotICAgICAg
ICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHByb2dyYW0gPSBjdXN0
b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKTsKLSAgICAgICAgICAgIEFTU0VSVChwcm9n
cmFtLT5pc0luaXRpYWxpemVkKCkpOwotICAgICAgICAgICAgQVNTRVJUKHByb2dyYW0tPnBsYXRm
b3JtQ29tcGlsZWRQcm9ncmFtKCkpOwotICAgICAgICAgICAgQVNTRVJUKHByb2dyYW0tPnBsYXRm
b3JtQ29tcGlsZWRQcm9ncmFtKCktPmNsaWVudCgpKTsKLSAgICAgICAgICAgIFdlYkN1c3RvbUZp
bHRlclByb2dyYW1Qcm94eSogY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5ID0gc3RhdGljX2Nhc3Q8
V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kj4ocHJvZ3JhbS0+cGxhdGZvcm1Db21waWxlZFBy
b2dyYW0oKS0+Y2xpZW50KCkpOwotICAgICAgICAgICAgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8mIHByb2dyYW1JbmZvID0gcHJvZ3JhbS0+cHJvZ3JhbUluZm8oKTsKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBDdXN0b21GaWx0ZXJPcGVyYXRpb24gc2hvdWxkIG5vdCBuZWVkIHRoZSBtZXNo
VHlwZSwgaXQgc2hvdWxkIGp1c3QgYmUgZW5jb2RlZCBpbiB0aGUgcHJvZ3JhbSBpdHNlbGYuCi0g
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAy
NTI5Ci0gICAgICAgICAgICBlbmNvZGVyLmVuY29kZUVudW0ocHJvZ3JhbUluZm8ubWVzaFR5cGUo
KSk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQo
KTsKLSAgICAgICAgICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyA9IGN1
c3RvbU9wZXJhdGlvbi0+cGFyYW1ldGVycygpOwotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4ocGFyYW1ldGVycy5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tp
XTsKLSAgICAgICAgICAgICAgICBlbmNvZGVyIDw8IHBhcmFtZXRlci0+bmFtZSgpOwotICAgICAg
ICAgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShwYXJhbWV0ZXItPnBhcmFtZXRlclR5cGUoKSk7
Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhcmFtZXRlci0+cGFyYW1ldGVyVHlwZSgpKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6OkFSUkFZOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKiBhcnJheVBhcmFt
ZXRlciA9IHN0YXRpY19jYXN0PEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKj4ocGFyYW1ldGVy
LmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oYXJyYXlQYXJhbWV0ZXItPnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGogPSAwOyBqIDwgYXJyYXlQYXJhbWV0ZXItPnNpemUoKTsgKytqKQotICAgICAgICAg
ICAgICAgICAgICAgICAgZW5jb2RlciA8PCBhcnJheVBhcmFtZXRlci0+dmFsdWVBdChqKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpOVU1CRVI6IHsKLSAgICAgICAgICAgICAg
ICAgICAgQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKiBudWJtZXJQYXJhbWV0ZXIgPSBzdGF0
aWNfY2FzdDxDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIqPihwYXJhbWV0ZXIuZ2V0KCkpOwot
ICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihudWJt
ZXJQYXJhbWV0ZXItPnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwgbnVibWVyUGFyYW1ldGVyLT5zaXplKCk7ICsraikKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVuY29kZXIgPDwgbnVibWVyUGFyYW1ldGVyLT52YWx1ZUF0KGopOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6OlRSQU5TRk9STTogewotICAgICAgICAgICAgICAgICAg
ICBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqIHRyYW5zZm9ybVBhcmFtZXRlciA9IHN0
YXRpY19jYXN0PEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcio+KHBhcmFtZXRlci5nZXQo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtT3BlcmF0aW9u
cz46OmVuY29kZShlbmNvZGVyLCB0cmFuc2Zvcm1QYXJhbWV0ZXItPm9wZXJhdGlvbnMoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVuY29kZXIgPDwgY3VzdG9tT3Bl
cmF0aW9uLT5tZXNoUm93cygpOwotICAgICAgICAgICAgZW5jb2RlciA8PCBjdXN0b21PcGVyYXRp
b24tPm1lc2hDb2x1bW5zKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2VuZGlm
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+OjpkZWNv
ZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKQotewotICAgIHVpbnQzMl90IHNpemU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
aXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+ID4mIG9wZXJhdGlvbnMgPSBmaWx0ZXJzLm9wZXJhdGlvbnMoKTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSB0eXBlOwotICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBm
aWx0ZXI7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHR5cGUpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6U0VQSUE6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6IHsKLSAgICAgICAgICAgIGRvdWJs
ZSB2YWx1ZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZpbHRlciA9IEJhc2ljQ29sb3JN
YXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSh2YWx1ZSwgdHlwZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgot
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
T1BBQ0lUWTogewotICAgICAgICAgICAgZG91YmxlIHZhbHVlOwotICAgICAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgZmlsdGVyID0gQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKHZhbHVlLCB0eXBlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7Ci0gICAgICAgICAgICBMZW5ndGggbGVu
Z3RoOwotICAgICAgICAgICAgaWYgKCFBcmd1bWVudENvZGVyPExlbmd0aD46OmRlY29kZShkZWNv
ZGVyLCBsZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGZpbHRlciA9IEJsdXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsZW5ndGgsIHR5cGUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbjsKLSAgICAgICAg
ICAgIGludDMyX3Qgc3RkRGV2aWF0aW9uOwotICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAg
ICAgICAgICBpZiAoIUFyZ3VtZW50Q29kZXI8SW50UG9pbnQ+OjpkZWNvZGUoZGVjb2RlciwgbG9j
YXRpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc3RkRGV2aWF0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBpZiAoIUFyZ3VtZW50Q29kZXI8Q29sb3I+OjpkZWNvZGUoZGVjb2Rl
ciwgY29sb3IpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZp
bHRlciA9IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsb2NhdGlvbiwgc3RkRGV2
aWF0aW9uLCBjb2xvciwgdHlwZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNVU1RP
TToKLSAgICAgICAgICAgIC8vIEN1c3RvbSBGaWx0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gVkFMSURB
VEVEX0NVU1RPTSBiZWZvcmUgcmVhY2hpbmcgdGhpcyBwb2ludC4KLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpWQUxJREFURURfQ1VTVE9NOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uIHNob3VsZCBub3QgbmVlZCB0aGUgbWVzaFR5cGUuCi0gICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNTI5Ci0g
ICAgICAgICAgICBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZTsKLSAgICAgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVFbnVtKG1lc2hUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBpbnQgcHJvZ3JhbUlEID0gMDsKLSAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocHJvZ3JhbUlEKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgIHVpbnQzMl90IHBhcmFtZXRlcnNTaXplOwotICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzU2l6ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0IHBhcmFtZXRl
cnMocGFyYW1ldGVyc1NpemUpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
YXJhbWV0ZXJzU2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAg
ICAgICAgICAgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpQYXJhbWV0ZXJUeXBlIHBhcmFtZXRl
clR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShuYW1lKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVFbnVtKHBhcmFtZXRlclR5cGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhcmFtZXRlclR5cGUpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6QVJSQVk6IHsKLSAgICAgICAg
ICAgICAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyPiBhcnJheVBhcmFt
ZXRlciA9IEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyOjpjcmVhdGUobmFtZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGFycmF5UGFyYW1ldGVyU2l6ZTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcnJheVBhcmFtZXRlclNpemUpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBkb3VibGUg
YXJyYXlQYXJhbWV0ZXJWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCBhcnJheVBhcmFtZXRlclNpemU7ICsraikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcnJheVBhcmFtZXRlclZhbHVlKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
cnJheVBhcmFtZXRlci0+YWRkVmFsdWUoYXJyYXlQYXJhbWV0ZXJWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tpXSA9IGFycmF5UGFy
YW1ldGVyLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpOVU1C
RVI6IHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlck51bWJlclBhcmFt
ZXRlcj4gbnVtYmVyUGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyOjpjcmVh
dGUobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG51bWJlclBhcmFtZXRlclNp
emU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobnVtYmVyUGFyYW1l
dGVyU2l6ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBudW1iZXJQYXJhbWV0ZXJWYWx1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBudW1iZXJQYXJhbWV0ZXJTaXplOyArK2opIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobnVtYmVyUGFyYW1l
dGVyVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG51bWJlclBhcmFtZXRlci0+YWRkVmFsdWUobnVtYmVyUGFy
YW1ldGVyVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IHBhcmFtZXRlcnNbaV0gPSBudW1iZXJQYXJhbWV0ZXIucmVsZWFzZSgpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBD
dXN0b21GaWx0ZXJQYXJhbWV0ZXI6OlRSQU5TRk9STTogewotICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyPiB0cmFuc2Zvcm1QYXJhbWV0ZXIg
PSBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsKLSAgICAgICAg
ICAgICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIUFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtT3BlcmF0aW9ucz46OmRlY29kZShk
ZWNvZGVyLCBvcGVyYXRpb25zKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5zZXRPcGVyYXRpb25z
KG9wZXJhdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gdHJhbnNm
b3JtUGFyYW1ldGVyLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgdW5zaWduZWQgbWVzaFJvd3M7Ci0gICAgICAgICAgICB1bnNpZ25lZCBtZXNoQ29sdW1u
czsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWVzaFJvd3MpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWVz
aENvbHVtbnMpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCB0aGUgU2hhZGVycyBhcmUgYWxyZWFkeSB2YWxpZGF0ZWQsIHNvIHdl
IGp1c3QgdXNlIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbiBmb3IgdHJhbnNwb3J0YXRpb24uCi0g
ICAgICAgICAgICBmaWx0ZXIgPSBDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6Y3Jl
YXRlKDAsIHByb2dyYW1JRCwgcGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNo
VHlwZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmaWx0
ZXIpCi0gICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChmaWx0ZXIpOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi12b2lk
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8+OjplbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYg
cHJvZ3JhbUluZm8pCi17Ci0gICAgZW5jb2RlciA8PCBwcm9ncmFtSW5mby52ZXJ0ZXhTaGFkZXJT
dHJpbmcoKTsKLSAgICBlbmNvZGVyIDw8IHByb2dyYW1JbmZvLmZyYWdtZW50U2hhZGVyU3RyaW5n
KCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKHByb2dyYW1JbmZvLnByb2dyYW1UeXBlKCkpOwot
ICAgIGVuY29kZXIuZW5jb2RlRW51bShwcm9ncmFtSW5mby5tZXNoVHlwZSgpKTsKLSAgICBjb25z
dCBDdXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MmIG1peFNldHRpbmdzID0gcHJvZ3JhbUlu
Zm8ubWl4U2V0dGluZ3MoKTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0obWl4U2V0dGluZ3MuYmxl
bmRNb2RlKTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0obWl4U2V0dGluZ3MuY29tcG9zaXRlT3Bl
cmF0b3IpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJv
Z3JhbUluZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBDdXN0b21GaWx0ZXJQ
cm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8pCi17Ci0gICAgU3RyaW5nIHZlcnRleFNoYWRlclN0cmlu
ZzsKLSAgICBTdHJpbmcgZnJhZ21lbnRTaGFkZXJTdHJpbmc7Ci0gICAgQ3VzdG9tRmlsdGVyUHJv
Z3JhbVR5cGUgcHJvZ3JhbVR5cGU7Ci0gICAgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGU7
Ci0gICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbU1peFNldHRpbmdzIG1peFNldHRpbmdzOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUodmVydGV4U2hhZGVyU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZnJhZ21lbnRTaGFkZXJTdHJpbmcpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocHJvZ3JhbVR5
cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0o
bWVzaFR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUVudW0obWl4U2V0dGluZ3MuYmxlbmRNb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKG1peFNldHRpbmdzLmNvbXBvc2l0ZU9wZXJhdG9yKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHByb2dyYW1JbmZvID0gQ3VzdG9tRmlsdGVyUHJv
Z3JhbUluZm8odmVydGV4U2hhZGVyU3RyaW5nLCBmcmFnbWVudFNoYWRlclN0cmluZywgcHJvZ3Jh
bVR5cGUsIG1peFNldHRpbmdzLCBtZXNoVHlwZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5k
aWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQotCi12b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3Jt
T3BlcmF0aW9ucz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMmIHRyYW5zZm9ybU9wZXJhdGlvbnMpCi17Ci0gICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50MzJfdD4odHJhbnNmb3JtT3BlcmF0aW9ucy5zaXplKCkpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhbnNmb3JtT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIG9wZXJhdGlvbiA9IHRyYW5zZm9ybU9w
ZXJhdGlvbnMuYXQoaSk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShvcGVyYXRpb24tPmdl
dE9wZXJhdGlvblR5cGUoKSk7Ci0KLSAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9wZXJh
dGlvblR5cGUoKSkgewotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDoK
LSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlNDQUxFX1o6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDoK
LSAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24qPihvcGVyYXRpb24pLT54KCk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eSgpOwot
ICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbio+KG9wZXJhdGlvbiktPnooKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6Ci0gICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlRSQU5TTEFURToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV9aOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgotICAg
ICAgICAgICAgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nh
c3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eCgpKTsK
LSAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIHN0YXRp
Y19jYXN0PGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnko
KSk7Ci0gICAgICAgICAgICBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBz
dGF0aWNfY2FzdDxjb25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24p
LT56KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpST1RBVEU6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDoK
LSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOgotICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgotICAgICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT54
KCk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnkoKTsKLSAgICAgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+
eigpOwotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5hbmdsZSgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g6Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpTS0VXOgotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+YW5nbGVYKCk7Ci0gICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVy
YXRpb24pLT5hbmdsZVkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6TUFUUklYOgotICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxUcmFuc2Zv
cm1hdGlvbk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxjb25zdCBNYXRyaXhU
cmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5tYXRyaXgoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDoKLSAgICAg
ICAgICAgIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjplbmNvZGUoZW5jb2Rl
ciwgc3RhdGljX2Nhc3Q8Y29uc3QgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRp
b24pLT5tYXRyaXgoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOgotICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxMZW5n
dGg+OjplbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Y29uc3QgUGVyc3BlY3RpdmVUcmFuc2Zv
cm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5wZXJzcGVjdGl2ZSgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJVFk6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6Ci0gICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtT3BlcmF0aW9ucz46
OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRy
YW5zZm9ybU9wZXJhdGlvbnMpCi17Ci0gICAgdWludDMyX3Qgb3BlcmF0aW9uc1NpemU7Ci0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShvcGVyYXRpb25zU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmF0aW9uc1NpemU7ICsraSkgewot
ICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ob3BlcmF0aW9uVHlwZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNoIChvcGVyYXRpb25UeXBlKSB7Ci0g
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9YOgotICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlNDQUxFOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWjoKLSAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOiB7Ci0gICAgICAgICAgICBk
b3VibGUgeCwgeSwgejsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHopKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEVfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9ZOgot
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOgotICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1o6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q6IHsKLSAgICAgICAgICAgIExlbmd0aCB4LCB5LCB6Owot
ICAgICAgICAgICAgaWYgKCFBcmd1bWVudENvZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCB4
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIUFyZ3Vt
ZW50Q29kZXI8TGVuZ3RoPjo6ZGVjb2RlKGRlY29kZXIsIHkpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNv
ZGUoZGVjb2RlciwgeikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgdHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIG9wZXJhdGlvblR5cGUpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpS
T1RBVEU6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDoKLSAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOgotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOiB7Ci0gICAgICAgICAgICBkb3VibGUgeCwgeSwgeiwg
YW5nbGU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh6KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGFuZ2xlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUsIG9wZXJhdGlvblR5cGUp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTS0VXX1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VX
X1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOiB7Ci0gICAgICAgICAg
ICBkb3VibGUgYW5nbGVYLCBhbmdsZVk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGFuZ2xlWCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShhbmdsZVkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoYW5nbGVYLCBhbmdsZVksIG9wZXJhdGlvblR5cGUp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpNQVRSSVg6IHsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1h
dHJpeDsKLSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJp
eD46OmRlY29kZShkZWNvZGVyLCBtYXRyaXgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChN
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtYXRyaXgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVhf
M0Q6IHsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICAgICAg
ICAgIGlmICghQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmRlY29kZShkZWNv
ZGVyLCBtYXRyaXgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOiB7Ci0gICAg
ICAgICAgICBMZW5ndGggcGVyc3BlY3RpdmU7Ci0gICAgICAgICAgICBpZiAoIUFyZ3VtZW50Q29k
ZXI8TGVuZ3RoPjo6ZGVjb2RlKGRlY29kZXIsIHBlcnNwZWN0aXZlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlv
bnMoKS5hcHBlbmQoUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShwZXJzcGVj
dGl2ZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OklERU5USVRZOgotICAgICAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkuYXBwZW5kKElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
Ok5PTkU6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9p
ZCBlbmNvZGVUaW1pbmdGdW5jdGlvbihBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRp
bWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikKLXsKLSAgICBpZiAoIXRpbWluZ0Z1bmN0aW9u
KSB7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVu
Y3Rpb25UeXBlKC0xKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBUaW1pbmdGdW5j
dGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlIHR5cGUgPSB0aW1pbmdGdW5jdGlvbiA/IHRpbWluZ0Z1
bmN0aW9uLT50eXBlKCkgOiBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb247Ci0gICAgZW5j
b2Rlci5lbmNvZGVFbnVtKHR5cGUpOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVGlt
aW5nRnVuY3Rpb246OkxpbmVhckZ1bmN0aW9uOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRp
bWluZ0Z1bmN0aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOiB7Ci0gICAgICAgIGNvbnN0IEN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb24qIGN1YmljID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAgICAgICAgQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25QcmVzZXQgYmV6aWVyUHJlc2V0ID0gY3ViaWMt
PnRpbWluZ0Z1bmN0aW9uUHJlc2V0KCk7Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShiZXpp
ZXJQcmVzZXQpOwotICAgICAgICBpZiAoYmV6aWVyUHJlc2V0ID09IEN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb246OkN1c3RvbSkgewotICAgICAgICAgICAgZW5jb2RlciA8PCBjdWJpYy0+eDEoKTsK
LSAgICAgICAgICAgIGVuY29kZXIgPDwgY3ViaWMtPnkxKCk7Ci0gICAgICAgICAgICBlbmNvZGVy
IDw8IGN1YmljLT54MigpOwotICAgICAgICAgICAgZW5jb2RlciA8PCBjdWJpYy0+eTIoKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6
U3RlcHNGdW5jdGlvbjogewotICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKiBzdGVw
cyA9IHN0YXRpY19jYXN0PGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlv
bik7Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0ZXBzLT5udW1i
ZXJPZlN0ZXBzKCkpOwotICAgICAgICBlbmNvZGVyIDw8IHN0ZXBzLT5zdGVwQXRTdGFydCgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotfQotCi1ib29sIGRlY29kZVRpbWluZ0Z1bmN0
aW9uKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiYgdGlt
aW5nRnVuY3Rpb24pCi17Ci0gICAgVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSB0
eXBlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHR5cGUpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAodHlwZSA9PSBUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25U
eXBlKC0xKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKLSAgICAgICAgdGltaW5nRnVu
Y3Rpb24gPSBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkN1YmljQmV6aWVyRnVuY3Rpb246IHsKLSAg
ICAgICAgZG91YmxlIHgxLCB5MSwgeDIsIHkyOwotICAgICAgICBDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uOjpUaW1pbmdGdW5jdGlvblByZXNldCBiZXppZXJQcmVzZXQ7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVFbnVtKGJlemllclByZXNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmIChiZXppZXJQcmVzZXQgIT0gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bjo6Q3VzdG9tKSB7Ci0gICAgICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IEN1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb246OmNyZWF0ZShiZXppZXJQcmVzZXQpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh4MSkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeTEpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHgyKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh5
MikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdGltaW5nRnVuY3Rpb24g
PSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3RlcHNG
dW5jdGlvbjogewotICAgICAgICB1aW50MzJfdCBudW1iZXJPZlN0ZXBzOwotICAgICAgICBib29s
IHN0ZXBBdFN0YXJ0OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG51bWJlck9mU3RlcHMp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHN0ZXBBdFN0YXJ0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB0aW1p
bmdGdW5jdGlvbiA9IFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZShudW1iZXJPZlN0ZXBzLCBz
dGVwQXRTdGFydCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xheWVyQW5pbWF0
aW9uPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbiYgYW5pbWF0aW9uKQotewotICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLm5hbWUo
KTsKLSAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5ib3hTaXplKCk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKGFuaW1hdGlvbi5zdGF0ZSgpKTsKLSAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5zdGFy
dFRpbWUoKTsKLSAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5wYXVzZVRpbWUoKTsKLSAgICBlbmNv
ZGVyIDw8IGFuaW1hdGlvbi5saXN0c01hdGNoKCk7Ci0KLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBh
bmltYXRpb25PYmplY3QgPSBhbmltYXRpb24uYW5pbWF0aW9uKCk7Ci0gICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKGFuaW1hdGlvbk9iamVjdC0+ZGlyZWN0aW9uKCkpOwotICAgIGVuY29kZXIgPDwgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGFuaW1hdGlvbk9iamVjdC0+ZmlsbE1vZGUoKSk7Ci0gICAgZW5j
b2RlciA8PCBhbmltYXRpb25PYmplY3QtPmR1cmF0aW9uKCk7Ci0gICAgZW5jb2RlciA8PCBhbmlt
YXRpb25PYmplY3QtPml0ZXJhdGlvbkNvdW50KCk7Ci0gICAgZW5jb2RlVGltaW5nRnVuY3Rpb24o
ZW5jb2RlciwgYW5pbWF0aW9uT2JqZWN0LT50aW1pbmdGdW5jdGlvbigpLmdldCgpKTsKLQotICAg
IGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb24ua2V5ZnJhbWVz
KCk7Ci0gICAgZW5jb2Rlci5lbmNvZGVFbnVtKGtleWZyYW1lcy5wcm9wZXJ0eSgpKTsKLSAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihrZXlmcmFtZXMuc2l6ZSgpKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBj
b25zdCBBbmltYXRpb25WYWx1ZSogdmFsdWUgPSBrZXlmcmFtZXMuYXQoaSk7Ci0gICAgICAgIGVu
Y29kZXIgPDwgdmFsdWUtPmtleVRpbWUoKTsKLSAgICAgICAgZW5jb2RlVGltaW5nRnVuY3Rpb24o
ZW5jb2RlciwgdmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpOwotICAgICAgICBzd2l0Y2ggKGtleWZy
YW1lcy5wcm9wZXJ0eSgpKSB7Ci0gICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6
Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9u
VmFsdWUqPih2YWx1ZSktPnZhbHVlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgotICAgICAgICAgICAgZW5jb2RlciA8
PCAqc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPih2YWx1ZSktPnZh
bHVlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAg
ICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcjoKLSAgICAgICAgICAgIGVuY29k
ZXIgPDwgKnN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4odmFsdWUpLT52
YWx1ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIEFyZ3VtZW50Q29k
ZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbj46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29k
ZXIsIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24mIGFuaW1hdGlvbikKLXsKLSAgICBTdHJpbmcgbmFt
ZTsKLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGUgc3RhdGU7Ci0gICAgZG91YmxlIHN0YXJ0VGltZTsKLSAgICBkb3VibGUgcGF1
c2VUaW1lOwotICAgIGJvb2wgbGlzdHNNYXRjaDsKLQotICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbjsKLSAgICB1bnNpZ25lZCBmaWxsTW9kZTsKLSAgICBkb3VibGUg
ZHVyYXRpb247Ci0gICAgZG91YmxlIGl0ZXJhdGlvbkNvdW50OwotICAgIFJlZlB0cjxUaW1pbmdG
dW5jdGlvbj4gdGltaW5nRnVuY3Rpb247Ci0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9u
T2JqZWN0OwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShuYW1lKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYm94U2l6ZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShzdGF0ZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXJ0VGltZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhdXNlVGltZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxpc3RzTWF0Y2gpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oZGlyZWN0
aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZmls
bE1vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShk
dXJhdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGl0ZXJhdGlvbkNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rl
VGltaW5nRnVuY3Rpb24oZGVjb2RlciwgdGltaW5nRnVuY3Rpb24pKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhbmltYXRpb25PYmplY3QgPSBBbmltYXRpb246OmNyZWF0ZSgpOwotICAg
IGFuaW1hdGlvbk9iamVjdC0+c2V0RGlyZWN0aW9uKGRpcmVjdGlvbik7Ci0gICAgYW5pbWF0aW9u
T2JqZWN0LT5zZXRGaWxsTW9kZShmaWxsTW9kZSk7Ci0gICAgYW5pbWF0aW9uT2JqZWN0LT5zZXRE
dXJhdGlvbihkdXJhdGlvbik7Ci0gICAgYW5pbWF0aW9uT2JqZWN0LT5zZXRJdGVyYXRpb25Db3Vu
dChpdGVyYXRpb25Db3VudCk7Ci0gICAgaWYgKHRpbWluZ0Z1bmN0aW9uKQotICAgICAgICBhbmlt
YXRpb25PYmplY3QtPnNldFRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKTsKLQotICAgIEFu
aW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShw
cm9wZXJ0eSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBLZXlmcmFtZVZhbHVlTGlzdCBr
ZXlmcmFtZXMocHJvcGVydHkpOwotICAgIHVuc2lnbmVkIGtleWZyYW1lc1NpemU7Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShrZXlmcmFtZXNTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlmcmFtZXNTaXplOyArK2kpIHsKLSAgICAg
ICAgZmxvYXQga2V5VGltZTsKLSAgICAgICAgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiB0aW1pbmdG
dW5jdGlvbjsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXlUaW1lKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVUaW1pbmdGdW5jdGlvbihkZWNv
ZGVyLCB0aW1pbmdGdW5jdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgc3dpdGNoIChwcm9wZXJ0eSkgewotICAgICAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlPcGFj
aXR5OiB7Ci0gICAgICAgICAgICBmbG9hdCB2YWx1ZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGtleWZyYW1lcy5pbnNlcnQobmV3IEZsb2F0QW5pbWF0aW9uVmFsdWUoa2V5VGltZSwgdmFs
dWUsIHRpbWluZ0Z1bmN0aW9uKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06IHsKLSAgICAgICAgICAg
IFRyYW5zZm9ybU9wZXJhdGlvbnMgdHJhbnNmb3JtOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZSh0cmFuc2Zvcm0pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGtleWZyYW1lcy5pbnNlcnQobmV3IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKGtleVRp
bWUsICZ0cmFuc2Zvcm0sIHRpbWluZ0Z1bmN0aW9uKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICAgICAgY2FzZSBBbmltYXRlZFBy
b3BlcnR5V2Via2l0RmlsdGVyOiB7Ci0gICAgICAgICAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRl
cjsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZmlsdGVyKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBrZXlmcmFtZXMuaW5zZXJ0KG5ldyBGaWx0
ZXJBbmltYXRpb25WYWx1ZShrZXlUaW1lLCAmZmlsdGVyLCB0aW1pbmdGdW5jdGlvbikpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhbmltYXRpb24gPSBHcmFw
aGljc0xheWVyQW5pbWF0aW9uKG5hbWUsIGtleWZyYW1lcywgYm94U2l6ZSwgYW5pbWF0aW9uT2Jq
ZWN0LmdldCgpLCBzdGFydFRpbWUsIGxpc3RzTWF0Y2gpOwotICAgIGFuaW1hdGlvbi5zZXRTdGF0
ZShzdGF0ZSwgcGF1c2VUaW1lKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbnM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsK
LSAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpOwotfQotCi1ib29sIEFyZ3Vt
ZW50Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbnM+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVy
JiBkZWNvZGVyLCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBy
ZXR1cm4gZGVjb2Rlci5kZWNvZGUoYW5pbWF0aW9ucy5hbmltYXRpb25zKCkpOwotfQotCi0jaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhp
Y3NTdXJmYWNlVG9rZW4+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4pCi17Ci0jaWYgT1MoREFSV0lOKQot
ICAgIGVuY29kZXIgPDwgQXR0YWNobWVudCh0b2tlbi5mcm9udEJ1ZmZlckhhbmRsZSwgTUFDSF9N
U0dfVFlQRV9NT1ZFX1NFTkQpOwotICAgIGVuY29kZXIgPDwgQXR0YWNobWVudCh0b2tlbi5iYWNr
QnVmZmVySGFuZGxlLCBNQUNIX01TR19UWVBFX01PVkVfU0VORCk7Ci0jZWxpZiBPUyhXSU5ET1dT
KQotICAgIGVuY29kZXIgPDwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4odG9rZW4uZnJvbnRC
dWZmZXJIYW5kbGUpOwotICAgIGVuY29kZXIgPDwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4o
dG9rZW4uYmFja0J1ZmZlckhhbmRsZSk7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICBlbmNvZGVyIDw8
IHRva2VuLmZyb250QnVmZmVySGFuZGxlOwotI2VuZGlmCi19Ci0KLWJvb2wgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbj46OmRlY29kZShBcmd1bWVudERlY29kZXIm
IGRlY29kZXIsIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJiB0b2tlbikKLXsKLSNpZiBP
UyhXSU5ET1dTKQotICAgIHVpbnQ2NF90IGZyb250QnVmZmVySGFuZGxlOwotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoZnJvbnRCdWZmZXJIYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgdG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUgPSByZWludGVycHJldF9jYXN0PEdyYXBoaWNzU3Vy
ZmFjZVRva2VuOjpCdWZmZXJIYW5kbGU+KGZyb250QnVmZmVySGFuZGxlKTsKLSAgICB1aW50NjRf
dCBiYWNrQnVmZmVySGFuZGxlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYmFja0J1ZmZlckhh
bmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0b2tlbi5iYWNrQnVmZmVySGFuZGxl
ID0gcmVpbnRlcnByZXRfY2FzdDxHcmFwaGljc1N1cmZhY2VUb2tlbjo6QnVmZmVySGFuZGxlPihi
YWNrQnVmZmVySGFuZGxlKTsKLSNlbGlmIE9TKERBUldJTikKLSAgICBBdHRhY2htZW50IGZyb250
QXR0YWNobWVudCwgYmFja0F0dGFjaG1lbnQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShmcm9u
dEF0dGFjaG1lbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShiYWNrQXR0YWNobWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHRva2Vu
ID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4oZnJvbnRBdHRhY2htZW50LnBvcnQoKSwgYmFja0F0dGFj
aG1lbnQucG9ydCgpKTsKLSNlbGlmIE9TKExJTlVYKQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
dG9rZW4uZnJvbnRCdWZmZXJIYW5kbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIEFyZ3VtZW50Q29kZXI8Q29vcmRp
bmF0ZWRMYXllckluZm8+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBD
b29yZGluYXRlZExheWVySW5mbyYgY29vcmRpbmF0ZWRMYXllckluZm8pCi17Ci0gICAgU2ltcGxl
QXJndW1lbnRDb2RlcjxDb29yZGluYXRlZExheWVySW5mbz46OmVuY29kZShlbmNvZGVyLCBjb29y
ZGluYXRlZExheWVySW5mbyk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZExh
eWVySW5mbz46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIENvb3JkaW5hdGVkTGF5
ZXJJbmZvJiBjb29yZGluYXRlZExheWVySW5mbykKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1l
bnRDb2RlcjxDb29yZGluYXRlZExheWVySW5mbz46OmRlY29kZShkZWNvZGVyLCBjb29yZGluYXRl
ZExheWVySW5mbyk7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46
OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiBzdXJmYWNlVXBkYXRlSW5mbykKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VV
cGRhdGVJbmZvPjo6ZW5jb2RlKGVuY29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsKLX0KLQotYm9v
bCBBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciYgZGVjb2RlciwgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvKQotewotICAg
IHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVjb2RlKGRl
Y29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwot
Ci0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGU3ZGVlZi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENv
b3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVyc19oCi0jZGVmaW5lIENvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVyc19oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0j
aW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
RmxvYXRQb2ludDNEOwotY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbjsKLWNsYXNzIEdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zOwotY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87Ci1jbGFzcyBUcmFu
c2Zvcm1hdGlvbk1hdHJpeDsKLWNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7Ci1zdHJ1Y3QgQ29v
cmRpbmF0ZWRMYXllckluZm87Ci1zdHJ1Y3QgTGVuZ3RoOwotCi0jaWYgRU5BQkxFKENTU19GSUxU
RVJTKQotY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19T
SEFERVJTKQotY2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm87Ci0jZW5kaWYKLQotI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQotc3RydWN0IEdyYXBoaWNzU3VyZmFjZVRva2VuOwotI2VuZGlm
Ci19Ci0KLW5hbWVzcGFjZSBDb3JlSVBDIHsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpGbG9hdFBvaW50M0Q+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJik7Ci0gICAgc3RhdGlj
IGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpOwot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpMZW5ndGg+IHsK
LSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6
TGVuZ3RoJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNv
cmU6Okxlbmd0aCYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1
bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAg
IHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpOwotfTsKLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucz4gewotICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJP
cGVyYXRpb25zJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdl
YkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKLX07Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q3VzdG9t
RmlsdGVyUHJvZ3JhbUluZm8+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNv
ZGVyJiwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKLSAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJv
Z3JhbUluZm8mKTsKLX07Ci0jZW5kaWYKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnMmKTsK
LSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6VHJhbnNm
b3JtT3BlcmF0aW9ucyYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9u
cyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9uPiB7Ci0gICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJB
bmltYXRpb24mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbiYpOwotfTsKLQotI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGlj
c1N1cmZhY2VUb2tlbj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIm
LCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYpOwotICAgIHN0YXRpYyBib29s
IGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYp
OwotfTsKLSNlbmRpZgotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgc3Rh
dGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJbmZvJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OlN1cmZhY2VVcGRhdGVJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciYsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgc3RhdGljIGJv
b2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBDb3JlSVBDCi0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2Rl
cnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5jcHAKaW5kZXggNTJiN2Y2ZC4u
YTAwOTUzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuY3BwCkBAIC0yMiw5
ICsyMiwxMCBAQAogI2luY2x1ZGUgIldlYkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogCiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1
bWVudENvZGVycy5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1ZGUgIkFy
Z3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkNvZGVycy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJm
YWNlVG9rZW4uaD4KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUikKQEAgLTMzLDEzICszNCwyNiBA
QAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworCitQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gQ29vcmRpbmF0ZWRTdXJmYWNlOjpkZWNvZGUo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImIGRlY29kZXIpCit7CisgICAgV2Vi
S2l0OjpXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFXZWJL
aXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlOjpkZWNvZGUoZGVjb2RlciwgaGFuZGxl
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJDb29yZGluYXRl
ZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpOworfQorCit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZTo6SGFuZGxlKCkKIHsKIH0KIAotdm9pZCBX
ZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlcikgY29uc3QKK3ZvaWQgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGU6
OmVuY29kZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fc2l6ZSA8PCBtX2ZsYWdzOwogI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQpAQCAtNDcsMTAgKzYxLDEzIEBAIHZvaWQgV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29k
ZXIpIGNvCiAgICAgaWYgKG1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4uaXNWYWxpZCgpKQogICAgICAg
ICByZXR1cm47CiAjZW5kaWYKLSAgICBlbmNvZGVyIDw8IG1fYml0bWFwSGFuZGxlOworICAgIE93
blB0cjxDb3JlSVBDOjpBcmd1bWVudEVuY29kZXI+IGhhbmRsZUVuY29kZXI7CisgICAgbV9iaXRt
YXBIYW5kbGUuZW5jb2RlKCpoYW5kbGVFbmNvZGVyKTsKKyAgICBlbmNvZGVyLmVuY29kZShzdGF0
aWNfY2FzdDx1aW50NjRfdD4oaGFuZGxlRW5jb2Rlci0+YnVmZmVyU2l6ZSgpKSk7CisgICAgZW5j
b2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoaGFuZGxlRW5jb2Rlci0+YnVmZmVyKCksIGhhbmRs
ZUVuY29kZXItPmJ1ZmZlclNpemUoKSk7CiB9CiAKLWJvb2wgV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
OjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEhhbmRs
ZSYgaGFuZGxlKQorYm9vbCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZTo6ZGVjb2RlKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiBkZWNvZGVyLCBIYW5k
bGUmIGhhbmRsZSkKIHsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZS5tX3NpemUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MiwxMiArNzksMzEgQEAgYm9vbCBXZWJDb29yZGlu
YXRlZFN1cmZhY2U6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVj
b2RlciwgSGEKICAgICBpZiAoaGFuZGxlLm1fZ3JhcGhpY3NTdXJmYWNlVG9rZW4uaXNWYWxpZCgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
aGFuZGxlLm1fYml0bWFwSGFuZGxlKSkKKyAgICB1aW50NjRfdCBoYW5kbGVTaXplID0gMDsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZVNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICB1aW50OF90KiBidWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obWFsbG9jKGhh
bmRsZVNpemUpKTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKGJ1ZmZl
ciwgaGFuZGxlU2l6ZSkpIHsKKyAgICAgICAgZnJlZShidWZmZXIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgT3duUHRyPENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcj4gaGFu
ZGxlRGVjb2RlciA9IENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlcjo6Y3JlYXRlKGJ1ZmZlciwgaGFu
ZGxlU2l6ZSk7CisgICAgZnJlZShidWZmZXIpOworICAgIGlmICghU2hhcmVhYmxlQml0bWFwOjpI
YW5kbGU6OmRlY29kZSgqaGFuZGxlRGVjb2RlciwgaGFuZGxlLm1fYml0bWFwSGFuZGxlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlOjplbmNvZGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkVuY29kZXImIGVuY29kZXIpCit7CisgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5k
bGUgaGFuZGxlOworICAgIGNyZWF0ZUhhbmRsZShoYW5kbGUpOworICAgIGhhbmRsZS5lbmNvZGUo
ZW5jb2Rlcik7Cit9CisKIFBhc3NSZWZQdHI8V2ViQ29vcmRpbmF0ZWRTdXJmYWNlPiBXZWJDb29y
ZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1
cmZhY2U6OkZsYWdzIGZsYWdzKQogewogICAgIFJlZlB0cjxXZWJDb29yZGluYXRlZFN1cmZhY2U+
IHN1cmZhY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5oCmluZGV4IDUzODZhOTEu
LmNjMzNiMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5oCkBAIC0zMiw2ICsz
Miw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBCaXRtYXBUZXh0dXJlOwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29k
ZXI7CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlcjsKIH0KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC00Myw4ICs0NSw4IEBAIHB1YmxpYzoKICAgICBwdWJsaWM6CiAg
ICAgICAgIEhhbmRsZSgpOwogCi0gICAgICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50
RW5jb2RlciYpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyJiwgSGFuZGxlJik7CisgICAgICAgIHZvaWQgZW5jb2RlKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHN0YXRp
YyBib29sIGRlY29kZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2Rl
ciYsIEhhbmRsZSYpOwogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAgICAgICAgIFdlYkNv
cmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuIGdyYXBoaWNzU3VyZmFjZVRva2VuKCkgY29uc3QgeyBy
ZXR1cm4gbV9ncmFwaGljc1N1cmZhY2VUb2tlbjsgfQpAQCAtNjAsNiArNjIsOCBAQCBwdWJsaWM6
CiAgICAgICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgbV9mbGFnczsKICAg
ICB9OwogCisgICAgdmlydHVhbCB2b2lkIGVuY29kZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uRW5jb2RlciYpIE9WRVJSSURFOworCiAgICAgLy8gQ3JlYXRlIGEgbmV3IFdl
YkNvb3JkaW5hdGVkU3VyZmFjZSwgYW5kIGFsbG9jYXRlIGVpdGhlciBhIEdyYXBoaWNzU3VyZmFj
ZSBvciBhIFNoYXJlYWJsZUJpdG1hcCBhcyBiYWNraW5nLgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkNvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBG
bGFncyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5LmNwcAppbmRleCBmOWJkYjgyLi5jY2JhZjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC0yMywxNiArMjMsMTIg
QEAKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogCiAjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9Db29yZGluYXRlZExheWVySW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NTdXJmYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVwZGF0ZUluZm8uaD4KLQotI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIgot
I2VuZGlmCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKQEAgLTU5LDc4ICs1NSwxMSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdAogICAgIG1fc2Nl
bmUtPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFj
ZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxlLCBtX3NjZW5lLmdldCgpLCBsYXllcklE
LCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKLSAgICB1cGRhdGVUaWxlRm9yTGF5
ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbyk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVUaWxlLCBtX3NjZW5l
LmdldCgpLCBsYXllcklELCB0aWxlSUQsIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6VGlsZVVw
ZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGVSZWN0LCB1cGRhdGVJbmZvLmF0bGFzSUQs
IHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlLCBtX3NjZW5lLmdldCgpLCBsYXllcklELCB0
aWxlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRl
VXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
OjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0bGFzLCBtX3NjZW5lLmdldCgpLCBhdGxhc0lE
LCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0
bGFzSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpyZW1vdmVVcGRhdGVBdGxhcywgbV9zY2VuZS5nZXQoKSwgYXRsYXNJRCkpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDb21wb3NpdGluZ0xheWVy
cyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlTGF5ZXJzLCBtX3Nj
ZW5lLmdldCgpLCBpZHMpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJ
RD4mIGlkcykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OmRlbGV0ZUxheWVycywgbV9zY2VuZS5nZXQoKSwgaWRzKSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnNldFJvb3RMYXllcklELCBtX3NjZW5lLmdldCgpLCBpZCkpOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVy
U3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYg
aW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnNldExheWVyU3RhdGUsIG1fc2NlbmUuZ2V0KCksIGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJl
bihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+
JiBjaGlsZHJlbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnNldExheWVyQ2hpbGRyZW4sIG1fc2NlbmUuZ2V0KCksIGlkLCBjaGlsZHJlbikp
OwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3Nj
ZW5lLmdldCgpLCBpZCwgZmlsdGVycykpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtKGludCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0sIG1fc2NlbmUuZ2V0
KCksIGlkKSk7Ci19Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVD
dXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8m
IHByb2dyYW1JbmZvKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y29tbWl0
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5j
ZSYgb3BlcmF0aW9uc0RhdGEsIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25z
dCBJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IEludFJlY3QmIGNvdmVyZWRSZWN0KQogewot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRl
Q3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9zY2VuZS5nZXQoKSwgaWQsIHByb2dyYW1JbmZvKSk7Ci19
Ci0jZW5kaWYKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyBvcGVyYXRpb25zOwog
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25z
dCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXpl
LCBjb25zdCBJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3NjZW5lLmdl
dCgpLCBzY3JvbGxQb3NpdGlvbikpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMsIG1f
c2NlbmUuZ2V0KCksIG9wZXJhdGlvbnMsIHNjcm9sbFBvc2l0aW9uKSk7CiAgICAgdXBkYXRlVmll
d3BvcnQoKTsKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+ZGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7
CkBAIC0xNDAsMzEgKzY5LDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
ZGlkUmVuZGVyRnJhbWUoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXQKICNlbmRpZgogfQog
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlSW1hZ2VCYWNraW5nLCBtX3Nj
ZW5lLmdldCgpLCBpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdl
SUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVJbWFn
ZUJhY2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6
Y3JlYXRlKGhhbmRsZSkpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWdlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzLCBtX3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUltYWdlQmFj
a2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVJbWFnZUJhY2tpbmcs
IG1fc2NlbmUuZ2V0KCksIGltYWdlSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29u
c3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnMs
IG1fc2NlbmUuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCiB7CiAg
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBbmlt
YXRpb25zTG9ja2VkLCBtX3NjZW5lLmdldCgpLCBsb2NrZWQpKTsKQEAgLTE4OSw1MCArOTMsMTYg
QEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVuZGVyTmV4dEZyYW1lKCkK
IH0KIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlcXVlc3RBbmltYXRpb25GcmFtZSgpCi17Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZXF1ZXN0QW5pbWF0
aW9uRnJhbWUsIG1fc2NlbmUuZ2V0KCkpKTsKLSAgICB1cGRhdGVWaWV3cG9ydCgpOwotfQotCiB2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjphbmltYXRpb25GcmFtZVJlYWR5KCkK
IHsKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkFuaW1hdGlvbkZyYW1lUmVhZHkoKSwgbV9k
cmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KICNlbmRpZgogCi0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpj
cmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNT
aXplLCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4pCi17Ci0gICAgR3JhcGhpY3NT
dXJmYWNlOjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4
dHVyZVRhcmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzLCBt
X3NjZW5lLmdldCgpLCBpZCwgY2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2Fu
dmFzU2l6ZSwgc3VyZmFjZUZsYWdzLCB0b2tlbikpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQz
Ml90IGZyb250QnVmZmVyKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6c3luY0NhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGZyb250QnVmZmVy
KSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVzdHJveUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQp
KTsKLX0KLSNlbmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRM
YXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVy
UmVwYWludENvdW50LCBtX3NjZW5lLmdldCgpLCBpZCwgdmFsdWUpKTsKLX0KLQogdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBt
X2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QmFja2dy
b3VuZENvbG9yLCBtX3NjZW5lLmdldCgpLCBjb2xvcikpOwotfQotCiB9CiAjZW5kaWYgLy8gVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggYTg2MDBkOC4uNDVkMDM1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0yMywyOCAr
MjMsMjAgQEAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJCYWNr
aW5nU3RvcmUuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
aCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0j
aW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NT
dXJmYWNlVG9rZW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0ludFNpemUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ29vcmRpbmF0ZWRMYXllckluZm87CiBjbGFzcyBTdXJmYWNlVXBkYXRl
SW5mbzsKIH0KIAorbmFtZXNwYWNlIENvcmVJUEMgeworY2xhc3MgRGF0YVJlZmVyZW5jZTsKK30K
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5IDogcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCB7CkBA
IC01Myw0MyArNDUsMTEgQEAgY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgOiBw
dWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2wKIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5Kik7
CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICB2b2lk
IHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdm9pZCBzZXRDb21wb3Np
dGluZ0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0j
aWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7Ci0gICAg
dm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7Ci0jZW5kaWYKLSAgICB2b2lk
IGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0
b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIGNvbW1p
dENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVu
Y2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3Zl
cmVkUmVjdCk7CisgICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwogICAgIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKTsKLSAgICB2b2lkIGRpZFJlbmRl
ckZyYW1lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNv
dmVyZWRSZWN0KTsKLSAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNv
bnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgdm9pZCB1cGRhdGVUaWxlRm9y
TGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwot
ICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlEKTsKLSAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0
bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7Ci0gICAgdm9pZCBy
ZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdl
QmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHVw
ZGF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25z
dCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOwotICAgIHZvaWQgY2xlYXJJbWFnZUJh
Y2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2
b2lkIHJlbW92ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KTsKICAgICB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3Nh
Z2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7Ci0jaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKLSAgICB2b2lkIHN5bmNDYW52YXMoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95
Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNl
dExheWVyUmVwYWludENvdW50KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVl
KTsKICAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NlbmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dExheWVyQW5pbWF0aW9ucyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7Ci0gICAgdm9pZCBzZXRBbmltYXRpb25zTG9j
a2VkKGJvb2wpOwotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lk
IHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKIAogICAgIC8vIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZUNsaWVudCBNZXRob2RzLgogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkubWVzc2FnZXMuaW4KaW5kZXggMTg4OGFkYi4uMDdjZDYxMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVz
c2FnZXMuaW4KQEAgLTE5LDQzICsxOSw3IEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiBtZXNzYWdlcyAtPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSBMZWdhY3lSZWNl
aXZlciB7Ci0gICAgU2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKHVpbnQzMl90IGlkLCBXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySW5mbyBsYXllckluZm8pCi0gICAgU2V0Q29tcG9zaXRpbmdMYXll
ckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVuKQotI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyh1aW50MzJf
dCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQotI2VuZGlmCi0jaWYgRU5B
QkxFKENTU19TSEFERVJTKQotICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBX
ZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbykKLSAgICBSZW1vdmVD
dXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKLSNlbmRpZgotICAgIFNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKHVpbnQzMl90IGlkKQotICAgIENyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1
aW50MzJfdD4gaWRzKQotICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJf
dD4gaWRzKQotICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OlN1cmZhY2VVcGRh
dGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgVXBkYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViQ29yZTo6
U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWlu
dDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotICAgIENyZWF0ZVVwZGF0ZUF0bGFzKHVp
bnQzMl90IGF0bGFzSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFu
ZGxlKQotICAgIFJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi0gICAgQ3JlYXRl
SW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQpCi0gICAgVXBkYXRlSW1hZ2VCYWNraW5nKHVp
bnQ2NF90IGltYWdlSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFu
ZGxlKQotICAgIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHModWludDY0X3QgaW1hZ2VJRCkKLSAg
ICBSZW1vdmVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCkKLSAgICBEaWRSZW5kZXJGcmFt
ZShXZWJDb3JlOjpGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRTaXplIGNv
bnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50UmVjdCBjb3ZlcmVkUmVjdCkKLSAgICBTZXRMYXllckFu
aW1hdGlvbnModWludDMyX3QgaWQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFu
aW1hdGlvbnMpCisgICAgQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoQ29yZUlQ
Qzo6RGF0YVJlZmVyZW5jZSBvcGVyYXRpb25zRGF0YSwgV2ViQ29yZTo6RmxvYXRQb2ludCBzY3Jv
bGxQb3NpdGlvbiwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUsIFdlYkNvcmU6OkludFJl
Y3QgY292ZXJlZFJlY3QpCiAgICAgU2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKLQot
I2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICBSZXF1ZXN0QW5pbWF0aW9u
RnJhbWUoKQotI2VuZGlmCi0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBDcmVhdGVD
YW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgV2ViQ29yZTo6
R3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4pCi0gICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwg
dWludDMyX3QgZnJvbnRCdWZmZXIpCi0gICAgRGVzdHJveUNhbnZhcyh1aW50MzJfdCBpZCkKLSNl
bmRpZgotCi0gICAgU2V0TGF5ZXJSZXBhaW50Q291bnQodWludDMyX3QgbGF5ZXJJRCwgaW50IHZh
bHVlKQotCi0gICAgU2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogfQog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmNwcAppbmRleCA4NmJlNWVlLi43YWU3ZDNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAg
LTMwLDE3ICszMCwxOCBAQAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRl
ICJDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKIAotI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKKyNpbmNsdWRl
ICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRW5jb2RlckFkYXB0ZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIK
ICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgi
CiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzU3VyZmFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5o
PgpAQCAtNDgsNyArNDksNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRh
dGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5o
PgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIAogI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKQEAgLTg1LDcgKzg1LDYgQEAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSogd2ViUGFnZSkKICAgICAsIG1faXNGbHVzaGluZ0xh
eWVyQ2hhbmdlcyhmYWxzZSkKICAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2Vzcyh0cnVlKQogICAg
ICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKLSAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQog
ICAgICwgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIoZmFsc2UpCiAgICAgLCBt
X2xheWVyRmx1c2hUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZs
dXNoVGltZXJGaXJlZCkKICAgICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMs
ICZDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZp
cmVkKQpAQCAtMjg2LDE0ICsyODUsMTggQEAgYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCiAKICAgICBkZWxldGVDb21wb3NpdGluZ0xheWVy
cygpOwogCi0gICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7CisgICAgaWYgKCFtX29wZXJhdGlv
bnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRpZFN5bmMgPSB0cnVlOwogCiAgICAgICAgIEludFNp
emUgY29udGVudHNTaXplID0gcm91bmRlZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zaXplKCkpOwogICAgICAgICBJbnRSZWN0IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJS
ZWN0KCk7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OkRpZFJlbmRlckZyYW1lKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2Nh
dGlvbigpLCBjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KSk7CisKKyAgICAgICAgRW5jb2RlckFk
YXB0ZXIgb3BlcmF0aW9uc0VuY29kZXJBZGFwdGVyOworICAgICAgICBtX29wZXJhdGlvbnMuZW5j
b2RlKG9wZXJhdGlvbnNFbmNvZGVyQWRhcHRlcik7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25zKG9wZXJhdGlvbnNFbmNvZGVyQWRhcHRlci5kYXRhUmVmZXJlbmNl
KCksIG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpLCBjb250ZW50c1NpemUsIGNvdmVy
ZWRSZWN0KSk7CisKKyAgICAgICAgbV9vcGVyYXRpb25zLmNsZWFyKCk7CiAgICAgICAgIG1fd2Fp
dGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFs
c2U7CiAgICAgfSBlbHNlCiAgICAgICAgIHVubG9ja0FuaW1hdGlvbnMoKTsKIApAQCAtMzE5LDkg
KzMyMiw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVDb21wb3NpdGlu
Z0xheWVycygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVDb21wb3NpdGluZ0xheWVy
cyhtX2xheWVyc1RvQ3JlYXRlKSk7CisgICAgZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZShtX2xheWVyc1RvQ3JlYXRlKSk7CiAgICAgbV9s
YXllcnNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0K
IAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJz
KCkKQEAgLTMzNCw5ICszMzYsOCBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVs
ZXRlQ29tcG9zaXRpbmdMYXllcnMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVs
ZXRlQ29tcG9zaXRpbmdMYXllcnMobV9sYXllcnNUb0RlbGV0ZSkpOworICAgIGVucXVldWUoQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzOjpjcmVhdGUobV9sYXllcnNU
b0RlbGV0ZSkpOwogICAgIG1fbGF5ZXJzVG9EZWxldGUuY2xlYXIoKTsKLSAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0
aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCkBAIC0zNDQsNjUgKzM0NSwxMCBA
QCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGlu
Z0xheWVySWZOZWVkZWQoKQogICAgIGlmIChtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7CisgICAg
ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OmNyZWF0
ZSh0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsK
ICAgICBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllciA9IHRydWU7Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRl
ZExheWVySW5mbyYgaW5mbykKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQs
IGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKLXsKLSAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlk
LCBjaGlsZHJlbikpOwotfQotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
UGxhdGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKLXsKLSAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBjYW52YXNQbGF0
Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIEludFNpemUgY2FudmFzU2l6
ZSA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7Ci0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRl
Q2FudmFzKGlkLCBjYW52YXNTaXplLCB0b2tlbikpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5
ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OwotICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRv
R3JhcGhpY3NTdXJmYWNlKCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6U3luY0NhbnZhcyhpZCwgZnJvbnRCdWZmZXIpKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0
ZWRMYXllcklEIGlkKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlc3Ryb3lDYW52YXMoaWQpKTsK
LX0KLSNlbmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJSZXBh
aW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0TGF5
ZXJSZXBhaW50Q291bnQoaWQsIHZhbHVlKSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyRmlsdGVycyhDb29yZGlu
YXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBj
aGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGZpbHRlcnMpOwotI2VuZGlmCi0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0
Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCiAjaWYg
RU5BQkxFKENTU19TSEFERVJTKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNr
Q3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVy
cykKIHsKQEAgLTQzMSw3ICszNzcsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVyYQogICAgICAg
ICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkpIHsKICAgICAgICAgICAg
IGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+c2V0Q2xpZW50KHRoaXMpOwogICAgICAgICAgICAg
bV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5hZGQoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LmdldCgp
KTsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFs
aWRhdGVkUHJvZ3JhbUluZm8oKSkpOworICAgICAgICAgICAgZW5xdWV1ZShDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dy
YW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gSWYgdGhlIGNsaWVudCB3YXMgbm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29v
cmRpbmF0b3IgbXVzdCBiZSB0aGUgY2xpZW50IGZvciBpdC4KICAgICAgICAgICAgIEFTU0VSVChj
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpID09IHRoaXMpOwpAQCAtNDQ0LDcgKzM5
MCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvCiAgICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBz
aGFkZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0
IGFuZAogICAgIC8vIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBvdGhlciBwcm9jZXNzIHRvIGRlbGV0
ZSBpdC4KICAgICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLnJlbW92ZShjdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHkpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5LT5pZCgpKSk7CisgICAgZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5LT5pZCgpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaXNj
b25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQpAQCAtNjA4LDQwICs1NTQsNiBAQCBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNy
ZWF0ZUltYWdlQmFja2luZwogICAgIHJldHVybiBpbWFnZUJhY2tpbmc7CiB9CiAKLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpDcmVhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkpOwotfQotCi1ib29sIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFj
ZSkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRl
ZFN1cmZhY2UqPihjb29yZGluYXRlZFN1cmZhY2UuZ2V0KCkpOwotICAgIFdlYkNvb3JkaW5hdGVk
U3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKLSAgICBpZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJ
bWFnZUJhY2tpbmcoaW1hZ2VJRCwgaGFuZGxlKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFn
ZUlEKSk7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1faW1hZ2VCYWNraW5n
cy5yZW1vdmUoaW1hZ2VJRCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKLX0K
LQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2lu
Z0NoYW5nZXMoKQogewogICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFn
ZUJhY2tpbmdzLmVuZCgpOwpAQCAtNzA0LDQxICs2MTYsNDkgQEAgYm9vbCBMYXllclRyZWVIb3N0
OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExh
eWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17
Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihs
YXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklE
LCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJ
RCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRp
bGVJRCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjplbnF1ZXVlKFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IG9wZXJhdGlvbikKIHsKICAgICBpZiAo
bV9pc1B1cmdpbmcpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwotfQogCi1ib29s
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRs
YXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkK
LXsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0
YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFjZSo+KGNvb3JkaW5hdGVkU3VyZmFjZS5nZXQo
KSk7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOwotICAgIGlmICgh
d2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OkNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIGhhbmRsZSkpOwotICAg
IHJldHVybiB0cnVlOworICAgIHdpbGxFbnF1ZXVlT3BlcmF0aW9uKG9wZXJhdGlvbi5nZXQoKSk7
CisgICAgbV9vcGVyYXRpb25zLmFwcGVuZChvcGVyYXRpb24pOwogfQogCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp3aWxsRW5xdWV1ZU9wZXJhdGlvbihDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZSogb3BlcmF0aW9uKQogewotICAgIGlmIChtX2lzUHVy
Z2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpKTsK
KyAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgY2FzZSBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6UmVtb3ZlSW1hZ2VCYWNraW5nVHlwZToK
KyAgICAgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhzdGF0aWNfY2FzdDxjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVJbWFnZUJhY2tpbmcqPihvcGVy
YXRpb24pLT5hcmd1bWVudHMxKSk7CisgICAgICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VC
YWNraW5nKj4ob3BlcmF0aW9uKS0+YXJndW1lbnRzMSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlNldExheWVyQW5pbWF0aW9uc1R5
cGU6IHsKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zKj4ob3BlcmF0aW9uKS0+YXJndW1lbnRz
MjsKKyAgICAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9IGFu
aW1hdGlvbnMuZ2V0QWN0aXZlQW5pbWF0aW9ucygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYW5pbWF0aW9ucy5h
bmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7CisgICAgICAgICAgICBpZiAoa2V5ZnJhbWVz
LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJh
bWVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9u
VmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFs
dWUqPihrZXlmcmFtZXMuYXQoaSkpOworICAgICAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3hpZXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBzdGF0aWNfY2FzdDxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRMYXllckFuaW1hdGlvbnMqPihvcGVyYXRpb24pLT5hcmd1bWVudHMyID0gYWN0aXZlQW5p
bWF0aW9uczsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICB9CisjaWYgRU5BQkxFKENTU19G
SUxURVJTKQorICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlNldExh
eWVyRmlsdGVyc1R5cGU6CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBjaGVja0N1
c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlNldExheWVyRmlsdGVycyo+KG9wZXJhdGlvbiktPmFyZ3VtZW50czIpOworI2Vu
ZGlmCisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQogfQogCiBXZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKQEAgLTc0NywyNCArNjY3LDYgQEAgV2ViQ29y
ZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dmlzaWJsZUNvbnRlbnRzUmVj
dCgpIGNvbnN0CiB9CiAKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVy
QW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OwotICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRp
b25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXpl
KCk7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0g
YW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7Ci0gICAgICAgIGlmIChr
ZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJh
bWVzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1
ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+
KGtleWZyYW1lcy5hdChpKSk7Ci0gICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Q
cm94aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYWN0aXZlQW5pbWF0aW9ucykpOwotfQot
CiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3Ip
CiB7CiAgICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMg
YWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4KQEAgLTgwNCw3ICs3MDYsNyBA
QCBHcmFwaGljc0xheWVyRmFjdG9yeSogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpncmFwaGlj
c0xheWVyRmFjdG9yeSgpCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIHsKLSAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAgZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6OmNyZWF0ZSgpKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQpAQCAtODg3LDcg
Kzc4OSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVB
dGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9y
KQogewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OlNldEJhY2tncm91bmRDb2xvcihjb2xvcikpOworICAgIGVucXVldWUoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yOjpjcmVhdGUoY29sb3Ip
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGNmNzgyNDYuLjVhZTYy
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5o
IgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NMYXllckZhY3RvcnkuaD4KQEAgLTQ2LDggKzQ3LDcgQEAgY2xhc3MgV2ViUGFnZTsK
IAogY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IDogcHVibGljIExheWVyVHJlZUhvc3Qs
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpVcGRh
dGVBdGxhc0NsaWVudAorICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlF1ZXVlCiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rv
cnkKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgLCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFt
UHJveHlDbGllbnQKQEAgLTc5LDQwICs3OSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
dm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVM
YXllckZsdXNoKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJ
bWFnZSopIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5n
ZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1
cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlEKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAgIHZpcnR1
YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jik7CisKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VE
ZWNvZGVyJik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3Jh
cGhpY3NMYXllckZhY3RvcnkoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5
ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1h
dGlvbnMmKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckZpbHRlcnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwg
V2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5j
Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXll
ciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
TGF5ZXJSZXBhaW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBpbnQpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCk7Ci0KLSAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRl
bnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpOwotCi0g
ICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlVXBkYXRlQXRs
YXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZh
Y2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMy
X3QgYXRsYXNJRCk7Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAg
dmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgT1ZFUlJJREU7CiAjZW5kaWYKQEAgLTEz
MSwxNCArMTA1LDIyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvcigpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgZmxvYXQgcGFnZVNjYWxlRmFjdG9y
KCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29v
cmRpbmF0b3IKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5n
KFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotCiAgICAgdm9p
ZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CiAKKyAgICAvLyBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hh
bmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsg
fQorICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdl
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4
ZWRMYXllcnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBX
ZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqIG9wZXJhdGlvblF1ZXVlKCkgeyByZXR1cm4g
dGhpczsgfTsKKworICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlCisg
ICAgdmlydHVhbCB2b2lkIGVucXVldWUoUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uQmFzZT4pIE9WRVJSSURFOworCisgICAgdm9pZCB3aWxsRW5xdWV1ZU9w
ZXJhdGlvbihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZSopOworCiAg
ICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2xpZW50KikgT1ZFUlJJREU7CiAKQEAgLTE4MSw2ICsxNjMsOCBAQCBwcml2YXRlOgogICAg
IC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBh
Z2Ugb3ZlcmxheS4KICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3Zl
cmxheUxheWVyOwogCisgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMg
bV9vcGVyYXRpb25zOworCiAgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRD4gbV9sYXllcnNUb0NyZWF0ZTsKICAgICBWZWN0b3I8V2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwpAQCAtMjAzLDcgKzE4Nyw2IEBAIHByaXZh
dGU6CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKIAogICAg
IExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OwotICAgIGJvb2wgbV9zaG91bGRT
eW5jRnJhbWU7CiAgICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsK
ICAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVz
aFRpbWVyOwogICAgIFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9y
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7Ci0tIAoxLjguMS5yYzEuMS5nNmRhYWUxMQoK
</data>
<flag name="review"
          id="208343"
          type_id="1"
          status="-"
          setter="yoon"
    />
    <flag name="commit-queue"
          id="208344"
          type_id="3"
          status="-"
          setter="yoon"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189296</attachid>
            <date>2013-02-20 05:37:23 -0800</date>
            <delta_ts>2013-03-04 03:53:21 -0800</delta_ts>
            <desc>WIP. discussion for APIs for CoordinatedGraphicsOperation</desc>
            <filename>0001-Coordinated-Graphics-CoordinatedGraphicsLayer-makes-.patch</filename>
            <type>text/plain</type>
            <size>231615</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">RnJvbSA2ZmE1ZTM1ODI1ZGI3NjhmNDdlZWE0ZDExNDAwNGI0NzA2ZjExYWFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IEZyaSwgMTggSmFuIDIwMTMgMTU6MzM6MDAgKzA5MDAKU3ViamVjdDogW1BBVENI
XSBDb29yZGluYXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzCiBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcGVyZm9ybSB2aWEgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbi4KIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgyOTQK
CkkgcHVycG9zZSBzZXZlcmFsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaC4KCkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb24gc2hvdWxkIGJlIGVuY29kZWQgcmlnaHQgYWZ0ZXIgdGhlIG9wZXJhdGlv
bgppcyBjcmVhdGVkLgpCZWNhdXNlIFNoYXJlZGFibGVTdXJmYWNlOjpIYW5kbGUgaXMgbm9uIGNv
cHlhYmxlLgoKQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpUaWxlVXBkYXRlIGNvdWxkIGJlIHJl
bW92ZWQsIFN1cmZhY2VVcGRhdGVJbmZvCmNhbiBiZSB1c2VkIGluc3RlYWQgb2YgaXQuCgpCeSBp
bXBsZW1lbnQgb3ZlcnJpZGVkIGV4ZWN1dGUgbWV0aG9kIGluIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25bMC01XSwKd2UgY2FuIHJlbW92ZSBhbm5veWluZyBjb2RlcyBpbiBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uLmNwcC4KClRvIHN1cHBvcnQgdGhpcywgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6W09wZXJhdGlvbl0gc2hvdWxkIGJlCm1hdGNoZWQgd2l0aCBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OlttZXRob2RdLiBXZSBuZWVkIHRvIG1vZGlmeSB0eXBlcwpvZiBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmcsIENyZWF0ZUNh
bnZhcywKQ3JlYXRlVXBkYXRlQXRsYXMsIGFuZCBDcmVhdGVUaWxlLgoKSSBuZWVkIGpvYnMgdG8g
ZG8gYmVmb3JlIGNvbXBsZXRlIHRoaXMgYnVnLgoKMS4gQ29vcmRpbmF0ZWRTdXJmYWNlIGFuZCBH
cmFwaGljc1N1cmZhY2Ugc2hvdWxkIHByb3ZpZGUgZW5jb2RlL2RlY29kZQptZXRob2RzLgoKMi4g
Q3VycmVudCBjb2RlIG9mIENvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcnMuY3BwIGluIHRoaXMgcGF0Y2gpIGlzIGEg
bGl0dGxlIGJpdCBtZXNzeSwKYmVjYXVzZSBpdCBoYXMgNjAwIGxpbmVzIG9mIGNvZGUgY2FyZXMg
YWJvdXQgRmlsdGVyT3BlcmF0aW9ucywKVHJhbnNmb3JtT3BlcmF0aW9ucywgYW5kIFRpbWluZ0Z1
bmN0aW9uLgoKVG8gcmVtb3ZlIGJ1bmNoIG9mIGNvZGVzIGluIENvb3JkaW5hdGVkR3JhcGhpY3NB
cmd1bWVudENvZGVycywgd2hpY2ggaXMKbmVlZGVkIHRvIFtlbnxkZV1jb2RlIEdyYXBoaWNzTGF5
ZXJBbmltYXRpb24uIFdlIG5lZWQgdG8gYWRkIFtlbnxkZV1jb2RlCm1ldGhvZCB0byB0aGVzZSBj
bGFzc2VzLgoKVGhpcyBtZXNzeSB3aWxsIGJlIGNsZWFuIHVwIGluIHNlcGVyYXRlZCBidWcuCi0t
LQogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgfCAg
IDMgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAxOTggKysrKysKIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAzICsKIC4uLi9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwICAgICAgIHwgIDI3ICstCiAuLi4vdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5oICB8ICAyNCArLQogLi4uL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb24uaCAgICAgfCAzOTggKysrKysrKysrCiAuLi4vY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2UuaCB8IDUzOCArKysrKysrKysrKysKIC4uLi9Db29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXIuaCAgICAgICAgICAgIHwgIDU0ICsrCiAuLi4v
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVycy5jcHAgICAgICAgICB8IDkxMCArKysr
KysrKysrKysrKysrKysrKysKIC4uLi9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXJz
LmggICAgICAgICAgIHwgMTc2ICsrKysKIC4uLi9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
RGVjb2Rlci5oICAgICAgICAgIHwgIDc2ICsrCiAuLi4vQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkVuY29kZXIuaCAgICAgICAgICB8ICA3OCArKwogLi4uL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25zLmNwcCAgfCAgODEgKysKIC4uLi9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oICAgIHwgIDc4ICsrCiAuLi4vY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCAgICAgICB8ICAxMiArLQogLi4uL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCAgfCAgNjggKy0KIC4uLi90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwIHwgIDIwICstCiAuLi4v
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggICB8ICAxNSArLQog
Li4uL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuaCAgICAgICAgfCAgIDUg
KwogLi4uL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oICAgICAgICAgfCAg
IDMgLQogLi4uL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAgICAg
fCAgMTUgKy0KIC4uLi9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaCAg
ICAgIHwgIDExICstCiBTb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMSAtCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICA0NiArKwogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVy
cy5jcHAgICAgICAgICAgfCA4NDAgLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5oICAgICAgICAgICAgfCAxMjQgLS0tCiAuLi4vQ29vcmRp
bmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuY3BwICB8ICA0NiArLQogLi4uL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmggICAgfCAgIDggKy0KIC4u
Li9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgICAgICAgICAgICAgIHwgMTQzICst
LS0KIC4uLi9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oICAgICAgICAgICAgICAgIHwg
IDUyICstCiAuLi4vQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gICAg
ICB8ICAzOCArLQogLi4uL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgICAgICAgICAgICAg
ICAgICAgfCAyMDQgKystLS0KIC4uLi9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5oIHwgIDU1ICstCiAzMyBmaWxlcyBjaGFuZ2VkLCAyODU2IGluc2VydGlvbnMo
KyksIDE0OTQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb24uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFz
ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2Rlci5oCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcnMuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcnMuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2Rlci5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25zLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2Rl
cnMuY3BwCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IGJkMjMzYjkuLjBjYjBkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC0xOTkyLDYgKzE5OTIsOSBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU3BvdExpZ2h0U291cmNlLmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcnMuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25zLmNwcAorCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0FyZWFBbGxvY2F0b3IuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggOGUzN2NjNS4uYjc2NGY4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwMSBAQAorMjAxMy0w
Mi0wNCAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAg
ICBDb29yZGluYXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA4Mjk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgaGFzIHNvIG1hbnkgSVBDIG1lc3NhZ2VzIChl
LmcuIFN5bmNDYW52YXMgYW5kCisgICAgICAgIENyZWF0ZVRpbGUpLCBhbmQgdGhlcmUgaXMgYSBs
b25nIGZ1bmN0aW9uIGNoYWluIGZyb20gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIHRvCisgICAg
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSAoNCBjbGFzc2VzKS4KKyAgICAgICAgSWYgd2Ug
d2FudCB0byBhZGQgYSBuZXcgbWVzc2FnZSwgd2UgbmVlZCB0byBhZGQgc2ltaWxhciBmdW5jdGlv
bnMgaW50byA0IGNsYXNzZXMuCisKKyAgICAgICAgTm93IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBoYXMgb25seSBvbmUgSVBDIG1lc3NhZ2U6IENvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25zLgorICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lIHJ1biBhcyBmb2xsb3dzOgorICAgICAgICAxLiBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIgbWFrZXMgYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uIChlLmcuIENy
ZWF0ZVRpbGUpLgorICAgICAgICAyLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgc3RvcmVzIGFs
bCBvcGVyYXRpb25zLgorICAgICAgICAzLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qgc2VuZHMg
YWxsIG9wZXJhdGlvbnMgdG8gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkKKyAgICAgICAg
YXQgdGhlIG1vbWVudCBvZiBmbHVzaGluZyB2aWEgQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbnMgbWVzc2FnZS4KKyAgICAgICAgNC4gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIGV4
ZWN1dGVzIGFsbCBvcGVyYXRpb25zLgorCisgICAgICAgIFRoZXJlIGlzIG9uZSBiaWcgYmVoYXZp
b3IgY2hhbmdlLiBBbGwgb3BlcmF0aW9ucyAoZS5nLiBDcmVhdGVMYXllcnMgYW5kCisgICAgICAg
IFN5bmNDYW52YXMpIGFyZSBwZXJmb3JtZWQgYXQgdGhlIHNhbWUgdGltZSwgd2hlbgorICAgICAg
ICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25zIGlzIGNhbGxlZC4KKworICAgICAgICBJZiB5b3Ugd2FudCB0byBhZGQgYSBuZXcgb3Bl
cmF0aW9uLCBhZGQgY29kZSBhcyBmb2xsb3dzOgorICAgICAgICAxLiBDcmVhdGUgYSBuZXcgb3Bl
cmF0aW9uIHN1YmNsYXNzIGluIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaAorICAgICAg
ICAyLiBPdmVycmlkZSBPcGVyYXRpb25CYXNlOjpleGVjdXRlKCkgdG8gZXhlY3V0ZSB3aGF0IHRo
ZSBvcGVyYXRpb24gc2hvdWxkIGRvLgorICAgICAgICAzLiBJbXBsZW1lbnQgZW5jb2RlL2RlY29k
ZSBpbiBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuCisKKyAgICAgICAgQ292ZXJl
ZCBieSBleGlzdGluZyBjb21wb3NpdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmND
YW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0
cm95Q2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpjcmVhdGVDYW52YXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlTGF5ZXJzOjpl
eGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OkRlbGV0ZUxheWVyczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6ZXhlY3V0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXll
ckNoaWxkcmVuOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OkNyZWF0ZVRpbGU6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6ZXhlY3V0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpleGVj
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNy
ZWF0ZVVwZGF0ZUF0bGFzOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVVwZGF0ZUF0bGFzOjpleGVjdXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2lu
Zzo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpVcGRhdGVJbWFnZUJhY2tpbmc6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6ZXhl
Y3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpS
ZW1vdmVJbWFnZUJhY2tpbmc6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zOjpleGVjdXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlcXVlc3RBbmltYXRp
b25GcmFtZTo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVDYW52YXM6OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6ZXhlY3V0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpl
eGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlNldExheWVyRmlsdGVyczo6ZXhlY3V0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpleGVjdXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW06OmV4ZWN1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OmV4ZWN1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3Vu
ZENvbG9yOjpleGVjdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uOjpleGVjdXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbik6CisgICAgICAgIChPcGVyYXRpb25CYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246Ok9wZXJhdGlvbkJhc2U6On5P
cGVyYXRpb25CYXNlKToKKyAgICAgICAgKE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpPcGVyYXRpb246On5PcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6T3BlcmF0aW9uOjpn
ZXRPcGVyYXRpb25UeXBlKToKKyAgICAgICAgKENyZWF0ZUxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVM
YXllcnM6OkNyZWF0ZUxheWVycyk6CisgICAgICAgIChEZWxldGVMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVsZXRlTGF5ZXJzOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVs
ZXRlTGF5ZXJzOjpEZWxldGVMYXllcnMpOgorICAgICAgICAoU2V0Um9vdExheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldFJvb3RMYXllcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlNldFJvb3RMYXllcjo6U2V0Um9vdExheWVyKToKKyAgICAgICAgKFNldExheWVyU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJT
dGF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyU3RhdGU6OlNldExheWVyU3RhdGUpOgorICAgICAgICAoU2V0TGF5ZXJD
aGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpTZXRMYXllckNoaWxkcmVuOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJDaGlsZHJlbjo6U2V0TGF5ZXJDaGlsZHJlbik6
CisgICAgICAgIChDcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OkNyZWF0ZVRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlOjpDcmVhdGVUaWxlKToKKyAg
ICAgICAgKFVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OlVwZGF0ZVRpbGUpOgorICAgICAg
ICAoUmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpSZW1vdmVUaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZTo6UmVtb3ZlVGlsZSk6CisgICAgICAgIChD
cmVhdGVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZVVwZGF0ZUF0bGFzOjpDcmVhdGVV
cGRhdGVBdGxhcyk6CisgICAgICAgIChSZW1vdmVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVVcGRhdGVBdGxhczo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJl
bW92ZVVwZGF0ZUF0bGFzOjpSZW1vdmVVcGRhdGVBdGxhcyk6CisgICAgICAgIChDcmVhdGVJbWFn
ZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6Q3JlYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nOjpDcmVhdGVJbWFnZUJh
Y2tpbmcpOgorICAgICAgICAoVXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdlQmFja2luZzo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0
ZUltYWdlQmFja2luZzo6VXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKENsZWFySW1hZ2VC
YWNraW5nQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHM6OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgorICAgICAgICAoUmVtb3ZlSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlJlbW92ZUltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6UmVtb3ZlSW1hZ2VCYWNr
aW5nKToKKyAgICAgICAgKFNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXll
ckFuaW1hdGlvbnM6OlNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAgIChSZXF1ZXN0QW5pbWF0
aW9uRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOjpSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoQ3JlYXRlQ2FudmFzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNh
bnZhczo6Q3JlYXRlQ2FudmFzKToKKyAgICAgICAgKFN5bmNDYW52YXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmNDYW52
YXM6OlN5bmNDYW52YXMpOgorICAgICAgICAoRGVzdHJveUNhbnZhcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpEZXN0cm95Q2FudmFzOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJv
eUNhbnZhczo6RGVzdHJveUNhbnZhcyk6CisgICAgICAgIChTZXRMYXllckZpbHRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0
ZXJzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6U2V0TGF5ZXJGaWx0ZXJzOjpTZXRMYXllckZpbHRlcnMpOgorICAgICAgICAoQ3JlYXRl
Q3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ3VzdG9tRmls
dGVyUHJvZ3JhbTo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChSZW1vdmVD
dXN0b21GaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFNldExheWVy
UmVwYWludENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb246OlNldExheWVyUmVwYWludENvdW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJSZXBhaW50Q291bnQ6OlNldExh
eWVyUmVwYWludENvdW50KToKKyAgICAgICAgKFNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRCYWNrZ3JvdW5kQ29s
b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uOjpTZXRCYWNrZ3JvdW5kQ29sb3I6OlNldEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChE
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRpZENoYW5nZVNjcm9s
bFBvc2l0aW9uOjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChRdWV1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZTo6flF1
ZXVlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjphcHBlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjppc0VtcHR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjpzaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjphdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRp
ZENoYW5nZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgICAgIFJlbW92ZSBtX3BlbmRpbmdSZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gYmVjYXVzZQorICAgICAgICAgICAgZGlkQ2hhbmdl
U2Nyb2xsUG9zaXRpb24oKSBpcyBjYWxsZWQgYXQgdGhlIG1vbWVudCBvZiBmbHVzaGluZy4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0RHJhd3NCYWNrZ3JvdW5kKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OnJlbW92ZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OnVwZGF0ZSk6CisgICAgICAgICAgICBGSVhNRTogV2UgZG9uJ3QgZGVhbCB3aXRo
IHRoZSBjYXNlIHdoZW4gc2VuZGluZyBhbgorICAgICAgICAgICAgVXBkYXRlSW1hZ2VCYWNraW5n
IG9wZXJhdGlvbiBmYWlscyBiZWNhdXNlIGVucXVldWVpbmcgYW4gb3BlcmF0aW9uCisgICAgICAg
ICAgICBpcyBhc3luYy4KKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpjbGVhckNvbnRlbnRzVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg6CisgICAgICAgIChD
b29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyk6CisgICAgICAgICAgICBGSVhNRTogV2Ug
ZG9uJ3QgZGVhbCB3aXRoIHRoZSBjYXNlIHdoZW4gc2VuZGluZyBhIENyZWF0ZVVwZGF0ZUF0bGFz
CisgICAgICAgICAgICBvcGVyYXRpb24gZmFpbHMgYmVjYXVzZSBlbnF1ZXVlaW5nIGFuIG9wZXJh
dGlvbiBpcyBhc3luYy4KKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRs
YXMpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWls
YWJsZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL1VwZGF0ZUF0bGFzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFVwZGF0ZUF0
bGFzKToKKwogMjAxMy0wMi0wNSAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAw
Lm5ldD4KIAogICAgICAgICBDb29yZGluYXRlZCBHcmFwaGljczogTWFrZSBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUgbm90IGtub3cgY29udGVudHMgc2l6ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGU4ZjZm
YzEuLmRjYWU1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMjI0OCw2ICsyMjQ4LDggQEAgSEVBREVSUyAr
PSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5o
IFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbi5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkTGF5ZXJJbmZvLmggXApAQCAtMjg5Myw2ICsyODk1LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCAzNzM2ZjI2
Li5jNzhmM2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4oKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKICAgICAgICAgY2hpbGRJRHMuYXBwZW5kKHRvQ29vcmRp
bmF0ZWRMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNM
YXllckNoaWxkcmVuKG1faWQsIGNoaWxkSURzKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRp
b25RdWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVy
Q2hpbGRyZW46OmNyZWF0ZShtX2lkLCBjaGlsZElEcykpOwogfQogCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQpAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzeW5jRmlsdGVycygpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOwotICAgIG1fY29vcmRpbmF0
b3ItPnN5bmNMYXllckZpbHRlcnMobV9pZCwgZmlsdGVycygpKTsKKyAgICBtX2Nvb3JkaW5hdG9y
LT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246
OlNldExheWVyRmlsdGVyczo6Y3JlYXRlKG1faWQsIGZpbHRlcnMoKSkpOwogfQogI2VuZGlmCiAK
QEAgLTU3MCw3ICs1NzAsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xh
eWVyU3RhdGUoKQogICAgICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKICAgICBtX2xheWVy
SW5mby5zaG93UmVwYWludENvdW50ZXIgPSBpc1Nob3dpbmdSZXBhaW50Q291bnRlcigpOwogCi0g
ICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyU3RhdGUobV9pZCwgbV9sYXllckluZm8pOworICAg
IG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZTo6Y3JlYXRlKG1faWQsIG1fbGF5ZXJJbmZvKSk7
CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREZWJ1Z0JvcmRlcihjb25z
dCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoKQpAQCAtNTg3LDcgKzU4Nyw3IEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCiAKICAgICBtX3Nob3VsZFN5
bmNBbmltYXRpb25zID0gZmFsc2U7CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5zZXRMYXllckFuaW1h
dGlvbnMobV9pZCwgbV9hbmltYXRpb25zKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25R
dWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQW5p
bWF0aW9uczo6Y3JlYXRlKG1faWQsIG1fYW5pbWF0aW9ucykpOwogfQogCiAjaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCkBAIC02MDQsNyArNjA0LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnN5bmNDYW52YXMoKQogICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxh
dGZvcm1MYXllcik7CisgICAgQVNTRVJUKG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgdWlu
dDMyX3QgZnJvbnRCdWZmZXIgPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNz
U3VyZmFjZSgpOworICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVldWUo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhczo6Y3JlYXRlKG1faWQsIGZy
b250QnVmZmVyKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95
Q2FudmFzSWZOZWVkZWQoKQpAQCAtNjEzLDcgKzYxNSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQoKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAobV9pc1ZhbGlkQ2FudmFzKSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3ItPmRlc3Ryb3lD
YW52YXMobV9pZCk7CisgICAgICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVu
cXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVzdHJveUNhbnZhczo6Y3JlYXRl
KG1faWQpKTsKICAgICAgICAgbV9pc1ZhbGlkQ2FudmFzID0gZmFsc2U7CiAgICAgfQogCkBAIC02
MjcsNyArNjI5LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUNhbnZh
c0lmTmVlZGVkKCkKIAogICAgIEFTU0VSVChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOwogICAgIGlm
ICghbV9pc1ZhbGlkQ2FudmFzKSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZUNhbnZh
cyhtX2lkLCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOworICAgICAgICBJbnRTaXplIGNhbnZhc1Np
emUgPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7CisgICAgICAg
IEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5ncmFw
aGljc1N1cmZhY2VUb2tlbigpOworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1
ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUNhbnZhczo6
Y3JlYXRlKG1faWQsIGNhbnZhc1NpemUsIHRva2VuKSk7CiAgICAgICAgIG1faXNWYWxpZENhbnZh
cyA9IHRydWU7CiAgICAgfQogCkBAIC03MzYsNyArNzQwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFp
bnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCiB7CiAgICAgaWYgKGlz
U2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgJiYgIXVwZGF0ZWRSZWN0cy5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fY29vcmRpbmF0b3ItPnNldExheWVyUmVwYWludENvdW50KGlkKCksIGluY3JlbWVudFJl
cGFpbnRDb3VudCgpKTsKKyAgICAgICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUoKS0+
ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclJlcGFpbnRDb3Vu
dDo6Y3JlYXRlKGlkKCksIGluY3JlbWVudFJlcGFpbnRDb3VudCgpKSk7CiB9CiAKIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUhhc1BlbmRpbmdUaWxlQ3Jl
YXRpb24oKQpAQCAtNzk1LDIxICs3OTksMjIgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OmNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW4KIHsK
ICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlz
Rmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0gICAgbV9jb29yZGluYXRvci0+Y3JlYXRlVGlsZShp
ZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5v
cGVyYXRpb25RdWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNy
ZWF0ZVRpbGU6OmNyZWF0ZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsK
KyAgICBtX2Nvb3JkaW5hdG9yLT5vcGVyYXRpb25RdWV1ZSgpLT5lbnF1ZXVlKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZVRpbGU6OmNyZWF0ZShpZCgpLCB0aWxlSUQsIHRpbGVS
ZWN0LCB1cGRhdGVJbmZvKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1
cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8sIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5h
dG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygp
KTsKLSAgICBtX2Nvb3JkaW5hdG9yLT51cGRhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5m
bywgdGlsZVJlY3QpOworICAgIG1fY29vcmRpbmF0b3ItPm9wZXJhdGlvblF1ZXVlKCktPmVucXVl
dWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZTo6Y3JlYXRlKGlkKCks
IHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKQogewogICAgIEFTU0VSVCht
X2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVy
Q2hhbmdlcygpIHx8IG1faXNQdXJnaW5nKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5yZW1vdmVUaWxl
KGlkKCksIHRpbGVJRCk7CisgICAgbV9jb29yZGluYXRvci0+b3BlcmF0aW9uUXVldWUoKS0+ZW5x
dWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVUaWxlOjpjcmVhdGUoaWQo
KSwgdGlsZUlEKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVD
b250ZW50QnVmZmVycygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggYTU1MWQzNS4uNTE0ZjQ2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAtMjEsNiAr
MjEsNyBAQAogI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAogI2RlZmluZSBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbi5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCiAjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIK
QEAgLTQzLDM3ICs0NCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI7Ci1jbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsKIAogY2xh
c3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0ID0gMDsKLQotICAgIC8vIENvb3Jk
aW5hdGVkVGlsZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVk
TGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0
IEludFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRM
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3Qg
SW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCkgPSAwOwotCiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgdmlz
aWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5j
TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRl
ZExheWVySUQ+JikgPSAwOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmKSA9IDA7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgUGxhdGZvcm1MYXllciop
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFBs
YXRmb3JtTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRp
bmF0ZWRMYXllcklEKSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJl
cGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQsIGludCkgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zJikgPSAwOwotCiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVk
TGF5ZXJzKCkgPSAwOwogICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJl
Z2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFn
cywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JikgPSAwOworICAgIHZpcnR1YWwgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqIG9wZXJhdGlvblF1ZXVlKCkgPSAwOwogfTsK
IAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NDUwODEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oCkBAIC0wLDAgKzEsMzk4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbl9oCisjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25faAorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbkJhc2UuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCIKKyNp
bmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3Vy
ZmFjZS5oIgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQ
cm9ncmFtSW5mby5oIgorI2VuZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorI2luY2x1ZGUg
IkZpbHRlck9wZXJhdGlvbnMuaCIKKyNlbmRpZgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmlt
YXRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2VUb2tlbi5oIgorI2luY2x1ZGUgIlN1
cmZhY2VVcGRhdGVJbmZvLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitjbGFzcyBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnMgOiBwdWJsaWMgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OkNy
ZWF0ZUxheWVyc1R5cGUsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jj4geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25C
YXNlPiBjcmVhdGUoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGxheWVySURzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVMYXllcnMobGF5ZXJJRHMp
KTsKKyAgICB9CisgICAgc3RhdGljIFNjZW5lRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKCkgeyByZXR1
cm4gJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlTGF5ZXJzOyB9CisgICAgdHlwZWRl
ZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMTxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uQmFzZTo6Q3JlYXRlTGF5ZXJzVHlwZSwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJ
RD4mPiBCYXNlVHlwZTsKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ3JlYXRlTGF5ZXJzKGNvbnN0
IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCisgICAgICAgIDogQmFzZVR5cGUoaWRz
KQorICAgIHsgfQorfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVs
ZXRlTGF5ZXJzIDogcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24xPENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpEZWxldGVMYXllcnNUeXBlLCBjb25zdCBWZWN0b3I8
Q29vcmRpbmF0ZWRMYXllcklEPiY+ICB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q29v
cmRpbmF0ZWRMYXllcklEPiYgbGF5ZXJJRHMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IERlbGV0ZUxheWVycyhsYXllcklEcykpOworICAgIH0KKyAgICBzdGF0aWMgU2NlbmVG
dW5jdGlvblR5cGUgZnVuY3Rpb24oKSB7IHJldHVybiAmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpkZWxldGVMYXllcnM7IH0KKyAgICB0eXBlZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b24xPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpEZWxldGVMYXllcnNUeXBlLCBj
b25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiY+IEJhc2VUeXBlOworcHJpdmF0ZToKKyAg
ICBleHBsaWNpdCBEZWxldGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4m
IGlkcykKKyAgICAgICAgOiBCYXNlVHlwZShpZHMpCisgICAgeyB9Cit9OworCitjbGFzcyBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRSb290TGF5ZXIgOiBwdWJsaWMgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlNl
dFJvb3RMYXllclR5cGUsIENvb3JkaW5hdGVkTGF5ZXJJRD4geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlPiBjcmVhdGUoQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNldFJvb3RMYXllcihsYXllcklEKSk7CisgICAgfQorICAgIHN0YXRpYyBTY2VuZUZ1bmN0
aW9uVHlwZSBmdW5jdGlvbigpIHsgcmV0dXJuICZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNl
dFJvb3RMYXllcjsgfQorICAgIHR5cGVkZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlNldFJvb3RMYXllclR5cGUsIENvb3Jk
aW5hdGVkTGF5ZXJJRD4gQmFzZVR5cGU7Citwcml2YXRlOgorICAgIGV4cGxpY2l0IFNldFJvb3RM
YXllcihDb29yZGluYXRlZExheWVySUQgaWQpCisgICAgICAgIDogQmFzZVR5cGUoaWQpCisgICAg
eyB9Cit9OworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllclN0
YXRlIDogcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25CYXNlOjpTZXRMYXllclN0YXRlVHlwZSwgQ29vcmRpbmF0ZWRMYXllcklE
LCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyY+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gY3JlYXRlKENvb3JkaW5h
dGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgbGF5ZXJJbmZv
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllclN0YXRlKGxheWVy
SUQsIGxheWVySW5mbykpOworICAgIH0KKyAgICBzdGF0aWMgU2NlbmVGdW5jdGlvblR5cGUgZnVu
Y3Rpb24oKSB7IHJldHVybiAmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRl
OyB9CisgICAgdHlwZWRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMjxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6U2V0TGF5ZXJTdGF0ZVR5cGUsIENvb3JkaW5hdGVkTGF5
ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mPiBCYXNlVHlwZTsKK3ByaXZhdGU6Cisg
ICAgU2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVk
TGF5ZXJJbmZvJiBpbmZvKQorICAgICAgICA6IEJhc2VUeXBlKGlkLCBpbmZvKQorICAgIHsgfQor
fTsKKworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckNoaWxk
cmVuIDogcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25CYXNlOjpTZXRMYXllckNoaWxkcmVuVHlwZSwgQ29vcmRpbmF0ZWRMYXll
cklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiY+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gY3JlYXRl
KENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYgY2hpbGRyZW4pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldExh
eWVyQ2hpbGRyZW4obGF5ZXJJRCwgY2hpbGRyZW4pKTsKKyAgICB9CisgICAgc3RhdGljIFNjZW5l
RnVuY3Rpb25UeXBlIGZ1bmN0aW9uKCkgeyByZXR1cm4gJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6c2V0TGF5ZXJDaGlsZHJlbjsgfQorICAgIHR5cGVkZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlNldExheWVyQ2hpbGRy
ZW5UeXBlLCBDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVy
SUQ+Jj4gQmFzZVR5cGU7Citwcml2YXRlOgorICAgIFNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0
ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW5W
ZWN0b3IpCisgICAgICAgIDogQmFzZVR5cGUoaWQsIGNoaWxkcmVuVmVjdG9yKQorICAgIHsgfQor
fTsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVGlsZSA6IHB1
YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMzxDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uQmFzZTo6Q3JlYXRlVGlsZVR5cGUsIENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3Qs
IGZsb2F0PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlELCBmbG9hdCBzY2FsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ3JlYXRlVGlsZShsYXllcklELCB0aWxlSUQsIHNjYWxlKSk7CisgICAgfQorICAgIHN0
YXRpYyBTY2VuZUZ1bmN0aW9uVHlwZSBmdW5jdGlvbigpIHsgcmV0dXJuICZDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmNyZWF0ZVRpbGU7IH0KKyAgICB0eXBlZGVmIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb24zPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpDcmVhdGVUaWxl
VHlwZSwgQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCwgZmxvYXQ+IEJhc2VUeXBlOworcHJp
dmF0ZToKKyAgICBDcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgdGls
ZSwgZmxvYXQgc2NhbGUpCisgICAgICAgIDogQmFzZVR5cGUoaWQsIHRpbGUsIHNjYWxlKQorICAg
IHsgfQorfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGls
ZSA6IHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uNDxDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uQmFzZTo6VXBkYXRlVGlsZVR5cGUsIENvb3JkaW5hdGVkTGF5ZXJJRCwgdWlu
dDMyX3QsIGNvbnN0IEludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyY+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFz
ZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNv
bnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVXBkYXRlVGlsZShsYXllcklE
LCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CisgICAgfQorICAgIHN0YXRpYyBTY2Vu
ZUZ1bmN0aW9uVHlwZSBmdW5jdGlvbigpIHsgcmV0dXJuICZDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnVwZGF0ZVRpbGU7IH0KKyAgICB0eXBlZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b240PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpVcGRhdGVUaWxlVHlwZSwgQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IFN1cmZhY2VV
cGRhdGVJbmZvJj4gQmFzZVR5cGU7Citwcml2YXRlOgorICAgIFVwZGF0ZVRpbGUoQ29vcmRpbmF0
ZWRMYXllcklEIGlkLCB1aW50MzJfdCB0aWxlLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCisgICAgICAgIDogQmFzZVR5cGUoaWQs
IHRpbGUsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKQorICAgIHsgfQorfTsKKworY2xhc3MgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlVGlsZSA6IHB1YmxpYyBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uMjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6UmVtb3Zl
VGlsZVR5cGUsIENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3Q+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gY3JlYXRl
KENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZVRpbGUobGF5ZXJJRCwgdGlsZUlEKSk7Cisg
ICAgfQorICAgIHN0YXRpYyBTY2VuZUZ1bmN0aW9uVHlwZSBmdW5jdGlvbigpIHsgcmV0dXJuICZD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVRpbGU7IH0KKyAgICB0eXBlZGVmIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNl
OjpSZW1vdmVUaWxlVHlwZSwgQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdD4gQmFzZVR5cGU7
Citwcml2YXRlOgorICAgIFJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJf
dCB0aWxlKQorICAgICAgICA6IEJhc2VUeXBlKGlkLCB0aWxlKQorICAgIHsgfQorfTsKKworY2xh
c3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlVXBkYXRlQXRsYXMgOiBwdWJs
aWMgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkJhc2U6OkNyZWF0ZVVwZGF0ZUF0bGFzVHlwZSwgdWludDMyX3QsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPiA+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gY3JlYXRlKHVpbnQzMl90IGF0bGFzSUQsIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBzdXJmYWNlKSk7Cisg
ICAgfQorICAgIHN0YXRpYyBTY2VuZUZ1bmN0aW9uVHlwZSBmdW5jdGlvbigpIHsgcmV0dXJuICZD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0bGFzOyB9CisgICAgdHlwZWRl
ZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uQmFzZTo6Q3JlYXRlVXBkYXRlQXRsYXNUeXBlLCB1aW50MzJfdCwgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZFN1cmZhY2U+ID4gQmFzZVR5cGU7Citwcml2YXRlOgorICAgIENyZWF0ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGlkLCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0
ZWRTdXJmYWNlKQorICAgICAgICA6IEJhc2VUeXBlKGlkLCBjb29yZGluYXRlZFN1cmZhY2UpCisg
ICAgeyB9Cit9OworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVV
cGRhdGVBdGxhcyA6IHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMTxDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6UmVtb3ZlVXBkYXRlQXRsYXNUeXBlLCB1aW50MzJf
dD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25CYXNlPiBjcmVhdGUodWludDMyX3QgYXRsYXNJRCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgUmVtb3ZlVXBkYXRlQXRsYXMoYXRsYXNJRCkpOworICAgIH0KKyAg
ICBzdGF0aWMgU2NlbmVGdW5jdGlvblR5cGUgZnVuY3Rpb24oKSB7IHJldHVybiAmQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVVcGRhdGVBdGxhczsgfQorICAgIHR5cGVkZWYgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6
OlJlbW92ZVVwZGF0ZUF0bGFzVHlwZSwgdWludDMyX3Q+IEJhc2VUeXBlOworcHJpdmF0ZToKKyAg
ICBleHBsaWNpdCBSZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBpZCkKKyAgICAgICAgOiBCYXNl
VHlwZShpZCkKKyAgICB7IH0KK307CisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b246OkNyZWF0ZUltYWdlQmFja2luZyA6IHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uMTxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6Q3JlYXRlSW1hZ2VCYWNraW5n
VHlwZSwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlPiBjcmVhdGUoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlQmFja2luZ0lEKSk7CisgICAg
fQorICAgIHN0YXRpYyBTY2VuZUZ1bmN0aW9uVHlwZSBmdW5jdGlvbigpIHsgcmV0dXJuICZDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUltYWdlQmFja2luZzsgfQorICAgIHR5cGVkZWYg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bkJhc2U6OkNyZWF0ZUltYWdlQmFja2luZ1R5cGUsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ+
IEJhc2VUeXBlOworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDcmVhdGVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCkKKyAgICAgICAgOiBCYXNlVHlwZShpZCkKKyAgICB7
IH0KK307CisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlVwZGF0ZUltYWdl
QmFja2luZyA6IHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMjxDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6VXBkYXRlSW1hZ2VCYWNraW5nVHlwZSwgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+ID4geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25C
YXNlPiBjcmVhdGUoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUJhY2tpbmdJRCwgUGFz
c1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFVwZGF0ZUltYWdlQmFja2luZyhpbWFnZUJhY2tpbmdJRCwgc3VyZmFj
ZSkpOworICAgIH0KKyAgICBzdGF0aWMgU2NlbmVGdW5jdGlvblR5cGUgZnVuY3Rpb24oKSB7IHJl
dHVybiAmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVJbWFnZUJhY2tpbmc7IH0KKyAg
ICB0eXBlZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25CYXNlOjpVcGRhdGVJbWFnZUJhY2tpbmdUeXBlLCBDb29yZGluYXRlZEltYWdl
QmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gPiBCYXNlVHlwZTsKK3By
aXZhdGU6CisgICAgVXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aWQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQorICAgICAgICA6IEJh
c2VUeXBlKGlkLCBzdXJmYWNlKQorICAgIHsgfQorfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyA6IHB1YmxpYyBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uMTxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6
Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50c1R5cGUsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uQmFzZT4gY3JlYXRlKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VCYWNraW5n
SUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsZWFySW1hZ2VCYWNraW5n
Q29udGVudHMoaW1hZ2VCYWNraW5nSUQpKTsKKyAgICB9CisgICAgc3RhdGljIFNjZW5lRnVuY3Rp
b25UeXBlIGZ1bmN0aW9uKCkgeyByZXR1cm4gJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50czsgfQorICAgIHR5cGVkZWYgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OkNsZWFySW1hZ2VC
YWNraW5nQ29udGVudHNUeXBlLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEPiBCYXNlVHlwZTsK
K3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGlkKQorICAgICAgICA6IEJhc2VUeXBlKGlkKQorICAgIHsgfQor
fTsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNr
aW5nIDogcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24xPENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25CYXNlOjpSZW1vdmVJbWFnZUJhY2tpbmdUeXBlLCBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlQmFja2luZ0lEKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1v
dmVJbWFnZUJhY2tpbmcoaW1hZ2VCYWNraW5nSUQpKTsKKyAgICB9CisgICAgc3RhdGljIFNjZW5l
RnVuY3Rpb25UeXBlIGZ1bmN0aW9uKCkgeyByZXR1cm4gJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6cmVtb3ZlSW1hZ2VCYWNraW5nOyB9CisgICAgdHlwZWRlZiBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uMTxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6UmVtb3ZlSW1hZ2VC
YWNraW5nVHlwZSwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4gQmFzZVR5cGU7Citwcml2YXRl
OgorICAgIGV4cGxpY2l0IFJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGlkKQorICAgICAgICA6IEJhc2VUeXBlKGlkKQorICAgIHsgfQorfTsKKworY2xhc3MgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRpb25zIDogcHVibGljIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25C
YXNlOjpTZXRMYXllckFuaW1hdGlvbnNUeXBlLCBDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zJj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlPiBjcmVhdGUoQ29vcmRpbmF0ZWRMYXll
cklEIGxheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXRMYXllckFuaW1hdGlvbnMobGF5
ZXJJRCwgYW5pbWF0aW9ucykpOworICAgIH0KKyAgICBzdGF0aWMgU2NlbmVGdW5jdGlvblR5cGUg
ZnVuY3Rpb24oKSB7IHJldHVybiAmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFu
aW1hdGlvbnM7IH0KKyAgICB0eXBlZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpTZXRMYXllckFuaW1hdGlvbnNUeXBlLCBD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJj4gQmFzZVR5
cGU7Citwcml2YXRlOgorICAgIFNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQg
aWQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBsYXllckFuaW1hdGlvbnMpCisgICAg
ICAgIDogQmFzZVR5cGUoaWQsIGxheWVyQW5pbWF0aW9ucykKKyAgICB7IH0KK307CisKKyNpZiBF
TkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgOiBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjA8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlJlcXVlc3RB
bmltYXRpb25GcmFtZVR5cGU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkpOworICAgIH0KKworICAg
IHN0YXRpYyBTY2VuZUZ1bmN0aW9uVHlwZSBmdW5jdGlvbigpIHsgcmV0dXJuICZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnJlcXVlc3RBbmltYXRpb25GcmFtZTsgfQorICAgIHR5cGVkZWYgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjA8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJh
c2U6OlJlcXVlc3RBbmltYXRpb25GcmFtZVR5cGU+IEJhc2VUeXBlOworcHJpdmF0ZToKKyAgICBS
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQorICAgICAgICA6IEJhc2VUeXBlKCkKKyAgICB7IH0KK307
CisjZW5kaWYKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorY2xhc3MgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzIDogcHVibGljIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb24zPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpDcmVhdGVDYW52
YXNUeXBlLCBDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEdy
YXBoaWNzU3VyZmFjZT4gPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5
ZXJJRCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZh
Y2U+IHN1cmZhY2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUNh
bnZhcyhsYXllcklELCBjYW52YXNTaXplLCBzdXJmYWNlKSk7CisgICAgfQorICAgIHN0YXRpYyBT
Y2VuZUZ1bmN0aW9uVHlwZSBmdW5jdGlvbigpIHsgcmV0dXJuICZDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OmNyZWF0ZUNhbnZhczsgfQorICAgIHR5cGVkZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjM8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OkNyZWF0ZUNhbnZhc1R5
cGUsIENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhp
Y3NTdXJmYWNlPiA+IEJhc2VUeXBlOworcHJpdmF0ZToKKyAgICBDcmVhdGVDYW52YXMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBzaXplLCBQYXNzUmVmUHRyPEdyYXBoaWNz
U3VyZmFjZT4gc3VyZmFjZSkKKyAgICAgICAgOiBCYXNlVHlwZShpZCwgc2l6ZSwgc3VyZmFjZSkK
KyAgICB7IH0KK307CisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlN5bmND
YW52YXMgOiBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjI8Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkJhc2U6OlN5bmNDYW52YXNUeXBlLCBDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwg
dWludDMyX3QgZnJvbnRCdWZmZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFN5bmNDYW52YXMobGF5ZXJJRCwgZnJvbnRCdWZmZXIpKTsKKyAgICB9CisgICAgc3RhdGljIFNj
ZW5lRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKCkgeyByZXR1cm4gJkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6c3luY0NhbnZhczsgfQorICAgIHR5cGVkZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlN5bmNDYW52YXNUeXBlLCBD
b29yZGluYXRlZExheWVySUQsIHVpbnQzMl90PiBCYXNlVHlwZTsKK3ByaXZhdGU6CisgICAgU3lu
Y0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVySGFuZGxl
KQorICAgICAgICA6IEJhc2VUeXBlKGlkLCBmcm9udEJ1ZmZlckhhbmRsZSkKKyAgICB7IH0KK307
CisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXMgOiBw
dWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbkJhc2U6OkRlc3Ryb3lDYW52YXNUeXBlLCBDb29yZGluYXRlZExheWVySUQ+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
QmFzZT4gY3JlYXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEZXN0cm95Q2FudmFzKGxheWVySUQpKTsKKyAgICB9CisgICAg
c3RhdGljIFNjZW5lRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKCkgeyByZXR1cm4gJkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6ZGVzdHJveUNhbnZhczsgfQorICAgIHR5cGVkZWYgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjE8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OkRlc3Ry
b3lDYW52YXNUeXBlLCBDb29yZGluYXRlZExheWVySUQ+IEJhc2VUeXBlOworcHJpdmF0ZToKKyAg
ICBleHBsaWNpdCBEZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKKyAgICAgICAg
OiBCYXNlVHlwZShpZCkKKyAgICB7IH0KK307CisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVy
cyA6IHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMjxDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uQmFzZTo6U2V0TGF5ZXJGaWx0ZXJzVHlwZSwgQ29vcmRpbmF0ZWRMYXllcklE
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlPiBjcmVhdGUoQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldExheWVyRmlsdGVycyhsYXllcklELCBmaWx0
ZXJzKSk7CisgICAgfQorICAgIHN0YXRpYyBTY2VuZUZ1bmN0aW9uVHlwZSBmdW5jdGlvbigpIHsg
cmV0dXJuICZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyRmlsdGVyczsgfQorICAg
IHR5cGVkZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjI8Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbkJhc2U6OlNldExheWVyRmlsdGVyc1R5cGUsIENvb3JkaW5hdGVkTGF5ZXJJRCwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+IEJhc2VUeXBlOworcHJpdmF0ZToKKyAgICBTZXRMYXll
ckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJPcGVyYXRpb25zKQorICAgICAgICA6IEJhc2VUeXBlKGlkLCBmaWx0ZXJPcGVyYXRpb25z
KQorICAgIHsgfQorfTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKK2NsYXNzIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0gOiBwdWJsaWMg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bkJhc2U6OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlLCBpbnQsIGNvbnN0IEN1c3RvbUZp
bHRlclByb2dyYW1JbmZvJj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dy
YW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1
c3RvbUZpbHRlclByb2dyYW1JRCwgcHJvZ3JhbUluZm8pKTsKKyAgICB9CisgICAgc3RhdGljIFNj
ZW5lRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKCkgeyByZXR1cm4gJkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbTsgfQorICAgIHR5cGVkZWYgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OkNy
ZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlLCBpbnQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dy
YW1JbmZvJj4gQmFzZVR5cGU7Citwcml2YXRlOgorICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dy
YW0oaW50IHByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIGluZm8pCisg
ICAgICAgIDogQmFzZVR5cGUocHJvZ3JhbUlELCBpbmZvKQorICAgIHsgfQorfTsKKworY2xhc3Mg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSA6
IHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMTxDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uQmFzZTo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUsIGludD4geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25C
YXNlPiBjcmVhdGUoaW50IGN1c3RvbUZpbHRlclByb2dyYW1JRCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShjdXN0b21GaWx0ZXJQ
cm9ncmFtSUQpKTsKKyAgICB9CisgICAgc3RhdGljIFNjZW5lRnVuY3Rpb25UeXBlIGZ1bmN0aW9u
KCkgeyByZXR1cm4gJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbTsgfQorICAgIHR5cGVkZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW1U
eXBlLCBpbnQ+IEJhc2VUeXBlOworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBSZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtKGludCBwcm9ncmFtSUQpCisgICAgICAgIDogQmFzZVR5cGUocHJvZ3JhbUlE
KQorICAgIHsgfQorfTsKKyNlbmRpZgorI2VuZGlmCisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb246OlNldExheWVyUmVwYWludENvdW50IDogcHVibGljIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb24yPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpTZXRMYXll
clJlcGFpbnRDb3VudFR5cGUsIENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50PiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IGNy
ZWF0ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgaW50IHJlcGFpbnRDb3VudCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2V0TGF5ZXJSZXBhaW50Q291bnQobGF5ZXJJ
RCwgcmVwYWludENvdW50KSk7CisgICAgfQorICAgIHN0YXRpYyBTY2VuZUZ1bmN0aW9uVHlwZSBm
dW5jdGlvbigpIHsgcmV0dXJuICZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUmVw
YWludENvdW50OyB9CisgICAgdHlwZWRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMjxD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6U2V0TGF5ZXJSZXBhaW50Q291bnRUeXBl
LCBDb29yZGluYXRlZExheWVySUQsIGludD4gQmFzZVR5cGU7Citwcml2YXRlOgorICAgIFNldExh
eWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IGNvdW50KQorICAgICAg
ICA6IEJhc2VUeXBlKGlkLCBjb3VudCkKKyAgICB7IH0KK307CisKK2NsYXNzIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlNldEJhY2tncm91bmRDb2xvciA6IHB1YmxpYyBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uMTxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZTo6U2V0
QmFja2dyb3VuZENvbG9yVHlwZSwgY29uc3QgQ29sb3ImPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IGNyZWF0ZShjb25z
dCBDb2xvciYgY29sb3IpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNldEJh
Y2tncm91bmRDb2xvcihjb2xvcikpOworICAgIH0KKyAgICBzdGF0aWMgU2NlbmVGdW5jdGlvblR5
cGUgZnVuY3Rpb24oKSB7IHJldHVybiAmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRCYWNr
Z3JvdW5kQ29sb3I7IH0KKyAgICB0eXBlZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24x
PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpTZXRCYWNrZ3JvdW5kQ29sb3JUeXBl
LCBjb25zdCBDb2xvciY+IEJhc2VUeXBlOworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTZXRCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IEJhc2VUeXBlKGNvbG9y
KQorICAgIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmCisKKyNlbmRp
ZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzU1NWY5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlLmgKQEAgLTAsMCArMSw1MzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFz
ZV9oCisjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlX2gKKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25Db2RlcnMuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgY2xhc3MgQ3JlYXRlTGF5ZXJzOworICAgIGNsYXNz
IERlbGV0ZUxheWVyczsKKyAgICBjbGFzcyBTZXRSb290TGF5ZXI7CisgICAgY2xhc3MgU2V0TGF5
ZXJTdGF0ZTsKKyAgICBjbGFzcyBTZXRMYXllckNoaWxkcmVuOworICAgIGNsYXNzIENyZWF0ZVRp
bGU7CisgICAgY2xhc3MgVXBkYXRlVGlsZTsKKyAgICBjbGFzcyBSZW1vdmVUaWxlOworICAgIGNs
YXNzIENyZWF0ZVVwZGF0ZUF0bGFzOworICAgIGNsYXNzIFJlbW92ZVVwZGF0ZUF0bGFzOworICAg
IGNsYXNzIENyZWF0ZUltYWdlQmFja2luZzsKKyAgICBjbGFzcyBVcGRhdGVJbWFnZUJhY2tpbmc7
CisgICAgY2xhc3MgQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50czsKKyAgICBjbGFzcyBSZW1vdmVJ
bWFnZUJhY2tpbmc7CisgICAgY2xhc3MgU2V0TGF5ZXJBbmltYXRpb25zOworI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICBjbGFzcyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7
CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBjbGFzcyBDcmVhdGVDYW52
YXM7CisgICAgY2xhc3MgU3luY0NhbnZhczsKKyAgICBjbGFzcyBEZXN0cm95Q2FudmFzOworI2Vu
ZGlmCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGNsYXNzIFNldExheWVyRmlsdGVyczsK
KyNlbmRpZgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBjbGFzcyBDcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtOworICAgIGNsYXNzIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW07CisjZW5k
aWYKKyAgICBjbGFzcyBTZXRMYXllclJlcGFpbnRDb3VudDsKKyAgICBjbGFzcyBTZXRCYWNrZ3Jv
dW5kQ29sb3I7CisKK307IC8vIGNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24KKwor
Y2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2UgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+IHsKK3B1YmxpYzoK
KworICAgIGVudW0gT3BlcmF0aW9uVHlwZSB7CisgICAgICAgIENyZWF0ZUxheWVyc1R5cGUsCisg
ICAgICAgIERlbGV0ZUxheWVyc1R5cGUsCisgICAgICAgIFNldFJvb3RMYXllclR5cGUsCisgICAg
ICAgIFNldExheWVyU3RhdGVUeXBlLAorICAgICAgICBTZXRMYXllckNoaWxkcmVuVHlwZSwKKyAg
ICAgICAgQ3JlYXRlVGlsZVR5cGUsCisgICAgICAgIFVwZGF0ZVRpbGVUeXBlLAorICAgICAgICBS
ZW1vdmVUaWxlVHlwZSwKKyAgICAgICAgQ3JlYXRlVXBkYXRlQXRsYXNUeXBlLAorICAgICAgICBS
ZW1vdmVVcGRhdGVBdGxhc1R5cGUsCisgICAgICAgIENyZWF0ZUltYWdlQmFja2luZ1R5cGUsCisg
ICAgICAgIFVwZGF0ZUltYWdlQmFja2luZ1R5cGUsCisgICAgICAgIENsZWFySW1hZ2VCYWNraW5n
Q29udGVudHNUeXBlLAorICAgICAgICBSZW1vdmVJbWFnZUJhY2tpbmdUeXBlLAorICAgICAgICBT
ZXRMYXllckFuaW1hdGlvbnNUeXBlLAorICAgICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCisgICAgICAgIFJlcXVlc3RBbmltYXRpb25GcmFtZVR5cGUsCisgICAgI2VuZGlmCisg
ICAgI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICBDcmVhdGVDYW52YXNUeXBlLAor
ICAgICAgICBTeW5jQ2FudmFzVHlwZSwKKyAgICAgICAgRGVzdHJveUNhbnZhc1R5cGUsCisgICAg
I2VuZGlmCisgICAgI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICAgICAgU2V0TGF5ZXJGaWx0
ZXJzVHlwZSwKKyAgICAjZW5kaWYKKyAgICAjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAg
ICBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSwKKyAgICAgICAgUmVtb3ZlQ3VzdG9tRmls
dGVyUHJvZ3JhbVR5cGUsCisgICAgI2VuZGlmCisgICAgICAgIFNldExheWVyUmVwYWludENvdW50
VHlwZSwKKyAgICAgICAgU2V0QmFja2dyb3VuZENvbG9yVHlwZSwKKyAgICB9OworCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+ICBkZWNvZGUo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImIGRlY29kZXIpIHsKKyAgICAgICAg
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJhdGlvblR5cGUgb3BlcmF0aW9u
VHlwZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ob3BlcmF0aW9uVHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsK
KyAgICAgICAgY2FzZSBDcmVhdGVMYXllcnNUeXBlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29k
ZU9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM+KGRl
Y29kZXIpOworICAgICAgICBjYXNlIERlbGV0ZUxheWVyc1R5cGU6CisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlT3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlbGV0ZUxh
eWVycz4oZGVjb2Rlcik7CisgICAgICAgIGNhc2UgU2V0Um9vdExheWVyVHlwZToKKyAgICAgICAg
ICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6
U2V0Um9vdExheWVyPihkZWNvZGVyKTsKKyAgICAgICAgY2FzZSBTZXRMYXllclN0YXRlVHlwZToK
KyAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbjo6U2V0TGF5ZXJTdGF0ZT4oZGVjb2Rlcik7CisgICAgICAgIGNhc2UgU2V0TGF5ZXJD
aGlsZHJlblR5cGU6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlT3BlcmF0aW9uPENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyQ2hpbGRyZW4+KGRlY29kZXIpOworICAgICAg
ICBjYXNlIENyZWF0ZVRpbGVUeXBlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZU9wZXJhdGlv
bjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVUaWxlPihkZWNvZGVyKTsKKyAg
ICAgICAgY2FzZSBVcGRhdGVUaWxlVHlwZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcGVy
YXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRlVGlsZT4oZGVjb2Rlcik7
CisgICAgICAgIGNhc2UgUmVtb3ZlVGlsZVR5cGU6CisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
T3BlcmF0aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlJlbW92ZVRpbGU+KGRlY29k
ZXIpOworICAgICAgICBjYXNlIENyZWF0ZVVwZGF0ZUF0bGFzVHlwZToKKyAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRl
VXBkYXRlQXRsYXM+KGRlY29kZXIpOworICAgICAgICBjYXNlIFJlbW92ZVVwZGF0ZUF0bGFzVHlw
ZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM+KGRlY29kZXIpOworICAgICAgICBjYXNlIENy
ZWF0ZUltYWdlQmFja2luZ1R5cGU6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlT3BlcmF0aW9u
PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkNyZWF0ZUltYWdlQmFja2luZz4oZGVjb2Rl
cik7CisgICAgICAgIGNhc2UgVXBkYXRlSW1hZ2VCYWNraW5nVHlwZToKKyAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBkYXRl
SW1hZ2VCYWNraW5nPihkZWNvZGVyKTsKKyAgICAgICAgY2FzZSBDbGVhckltYWdlQmFja2luZ0Nv
bnRlbnRzVHlwZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cz4oZGVjb2Rlcik7
CisgICAgICAgIGNhc2UgUmVtb3ZlSW1hZ2VCYWNraW5nVHlwZToKKyAgICAgICAgICAgIHJldHVy
biBkZWNvZGVPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UmVtb3ZlSW1h
Z2VCYWNraW5nPihkZWNvZGVyKTsKKyAgICAgICAgY2FzZSBTZXRMYXllckFuaW1hdGlvbnNUeXBl
OgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZU9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnM+KGRlY29kZXIpOworICAgICNpZiBFTkFCTEUo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgICAgIGNhc2UgUmVxdWVzdEFuaW1hdGlvbkZy
YW1lVHlwZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248Q29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lPihkZWNvZGVyKTsKKyAgICAj
ZW5kaWYKKyAgICAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgIGNhc2UgQ3JlYXRl
Q2FudmFzVHlwZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlQ2FudmFzPihkZWNvZGVyKTsKKyAgICAgICAgY2Fz
ZSBTeW5jQ2FudmFzVHlwZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U3luY0NhbnZhcz4oZGVjb2Rlcik7CisgICAgICAg
IGNhc2UgRGVzdHJveUNhbnZhc1R5cGU6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlT3BlcmF0
aW9uPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OkRlc3Ryb3lDYW52YXM+KGRlY29kZXIp
OworICAgICNlbmRpZgorICAgICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgIGNhc2Ug
U2V0TGF5ZXJGaWx0ZXJzVHlwZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJGaWx0ZXJzPihkZWNvZGVyKTsK
KyAgICAjZW5kaWYKKyAgICAjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICBjYXNlIENy
ZWF0ZUN1c3RvbUZpbHRlclByb2dyYW1UeXBlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZU9w
ZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21GaWx0ZXJQ
cm9ncmFtPihkZWNvZGVyKTsKKyAgICAgICAgY2FzZSBSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
VHlwZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248Q29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbT4oZGVjb2Rlcik7CisgICAg
I2VuZGlmCisgICAgICAgIGNhc2UgU2V0TGF5ZXJSZXBhaW50Q291bnRUeXBlOgorICAgICAgICAg
ICAgcmV0dXJuIGRlY29kZU9wZXJhdGlvbjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpT
ZXRMYXllclJlcGFpbnRDb3VudD4oZGVjb2Rlcik7CisgICAgICAgIGNhc2UgU2V0QmFja2dyb3Vu
ZENvbG9yVHlwZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFja2dyb3VuZENvbG9yPihkZWNvZGVyKTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIGJhc2UgZGVjb2RlT3BlcmF0aW9u
IGZvciB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wZXJh
dGlvbkNsYXNzPgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25CYXNlPiBkZWNvZGVPcGVyYXRpb24oQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRl
Y29kZXImIGRlY29kZXIpIHsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBPcGVyYXRpb25DbGFz
czo6QmFzZVR5cGU6OkRlY29kZWRUeXBlIERlY29kZWRUeXBlOworCisgICAgICAgIFJlZlB0cjxE
ZWNvZGVkVHlwZT4gb3BlcmF0aW9uID0gYWRvcHRSZWYobmV3IERlY29kZWRUeXBlKE9wZXJhdGlv
bkNsYXNzOjpmdW5jdGlvbigpKSk7CisgICAgICAgIGlmICghRGVjb2RlZFR5cGU6OmRlY29kZShk
ZWNvZGVyLCAqb3BlcmF0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gb3BlcmF0aW9uLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuY29k
ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYpIGNvbnN0ID0gMDsKKworfTsg
Ly8gY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2UKKwordGVtcGxhdGU8Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJhdGlvblR5cGUgb3BUeXBlLCB0eXBl
bmFtZSBNRlR5cGUgPSB2b2lkIChDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OiopKCk+CitzdHJ1
Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjAgOiBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uQmFzZSB7CisgICAgdHlwZWRlZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMDxv
cFR5cGU+IERlY29kZWRUeXBlOworICAgIHR5cGVkZWYgTUZUeXBlIFNjZW5lRnVuY3Rpb25UeXBl
OworCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjAoTUZUeXBlIGZ1bmN0aW9uKSA6
IG1fZnVuY3Rpb24oZnVuY3Rpb24pIHsgfQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b24wKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25FbmNvZGVyJiBjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGNvZGVyLmVuY29k
ZUVudW0ob3BUeXBlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImLCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
MCYpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKSBPVkVSUklERQorICAg
IHsKKyAgICAgICAgKHNjZW5lLT4qbV9mdW5jdGlvbikoKTsKKyAgICB9CisKKyAgICBNRlR5cGUg
bV9mdW5jdGlvbjsKK307CisKK3RlbXBsYXRlPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25C
YXNlOjpPcGVyYXRpb25UeXBlIG9wVHlwZSwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIE1GVHlwZSA9
IHZvaWQgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6KikoVDEpPgorc3RydWN0IENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb24xIDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2Ug
eworICAgIHR5cGVkZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjE8b3BUeXBlLAorICAg
ICAgICB0eXBlbmFtZSBXVEY6OlJlbW92ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVtb3ZlUmVmZXJl
bmNlPFQxPjo6VHlwZT46OlR5cGUsCisgICAgICAgIHZvaWQgKENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6KikoVDEpPiBEZWNvZGVkVHlwZTsKKyAgICB0eXBlZGVmIE1GVHlwZSBTY2VuZUZ1bmN0
aW9uVHlwZTsKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24xKE1GVHlwZSBmdW5j
dGlvbikgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKSB7IH0KKyAgICBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uMShUMSB0MSkKKyAgICAgICAgOiBhcmd1bWVudHMxKHQxKQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25F
bmNvZGVyJiBjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGNvZGVyLmVuY29kZUVudW0ob3BU
eXBlKTsKKyAgICAgICAgY29kZXIuZW5jb2RlKGFyZ3VtZW50czEpOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgY29k
ZXIsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24xJiByZXN1bHQpCisgICAgeworICAgICAg
ICByZXR1cm4gY29kZXIuZGVjb2RlKHJlc3VsdC5hcmd1bWVudHMxKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKSBPVkVS
UklERQorICAgIHsKKyAgICAgICAgKHNjZW5lLT4qbV9mdW5jdGlvbikoYXJndW1lbnRzMSk7Cisg
ICAgfQorCisgICAgTUZUeXBlIG1fZnVuY3Rpb247CisKKyAgICBUMSBhcmd1bWVudHMxOworfTsK
KwordGVtcGxhdGU8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJhdGlvblR5
cGUgb3BUeXBlLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIE1GVHlwZSA9IHZv
aWQgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6KikoVDEsIFQyKT4KK3N0cnVjdCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uMiA6IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNl
IHsKKyAgICB0eXBlZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24yPG9wVHlwZSwKKyAg
ICAgICAgdHlwZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0eXBlbmFtZSBXVEY6OlJlbW92ZVJlZmVy
ZW5jZTxUMT46OlR5cGU+OjpUeXBlLAorICAgICAgICB0eXBlbmFtZSBXVEY6OlJlbW92ZUNvbnN0
PHR5cGVuYW1lIFdURjo6UmVtb3ZlUmVmZXJlbmNlPFQyPjo6VHlwZT46OlR5cGUsCisgICAgICAg
IHZvaWQgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6KikoVDEsIFQyKT4gRGVjb2RlZFR5cGU7
CisgICAgdHlwZWRlZiBNRlR5cGUgU2NlbmVGdW5jdGlvblR5cGU7CisKKyAgICBDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uMihNRlR5cGUgZnVuY3Rpb24pIDogbV9mdW5jdGlvbihmdW5jdGlv
bikgeyB9CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjIoVDEgdDEsIFQyIHQyKQor
ICAgICAgICA6IGFyZ3VtZW50czEodDEpCisgICAgICAgICwgYXJndW1lbnRzMih0MikKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uRW5jb2RlciYgY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBjb2Rlci5lbmNvZGVF
bnVtKG9wVHlwZSk7CisgICAgICAgIGNvZGVyLmVuY29kZShhcmd1bWVudHMxKTsKKyAgICAgICAg
Y29kZXIuZW5jb2RlKGFyZ3VtZW50czIpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29k
ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgY29kZXIsIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb24yJiByZXN1bHQpCisgICAgeworICAgICAgICBpZiAoIWNvZGVyLmRl
Y29kZShyZXN1bHQuYXJndW1lbnRzMSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgcmV0dXJuIGNvZGVyLmRlY29kZShyZXN1bHQuYXJndW1lbnRzMik7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkg
T1ZFUlJJREUKKyAgICB7CisgICAgICAgIChzY2VuZS0+Km1fZnVuY3Rpb24pKGFyZ3VtZW50czEs
IGFyZ3VtZW50czIpOworICAgIH0KKworICAgIE1GVHlwZSBtX2Z1bmN0aW9uOworCisgICAgVDEg
YXJndW1lbnRzMTsKKyAgICBUMiBhcmd1bWVudHMyOworfTsKKwordGVtcGxhdGU8Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJhdGlvblR5cGUgb3BUeXBlLCB0eXBlbmFtZSBU
MSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBNRlR5cGUgPSB2b2lkIChDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OiopKFQxLCBUMiwgVDMpPgorc3RydWN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb24zIDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2Ugewor
ICAgIHR5cGVkZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjM8b3BUeXBlLAorICAgICAg
ICB0eXBlbmFtZSBXVEY6OlJlbW92ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVtb3ZlUmVmZXJlbmNl
PFQxPjo6VHlwZT46OlR5cGUsCisgICAgICAgIHR5cGVuYW1lIFdURjo6UmVtb3ZlQ29uc3Q8dHlw
ZW5hbWUgV1RGOjpSZW1vdmVSZWZlcmVuY2U8VDI+OjpUeXBlPjo6VHlwZSwKKyAgICAgICAgdHlw
ZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0eXBlbmFtZSBXVEY6OlJlbW92ZVJlZmVyZW5jZTxUMz46
OlR5cGU+OjpUeXBlLAorICAgICAgICB2b2lkIChDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6Oiop
KFQxLCBUMiwgVDMpPiBEZWNvZGVkVHlwZTsKKyAgICB0eXBlZGVmIE1GVHlwZSBTY2VuZUZ1bmN0
aW9uVHlwZTsKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24zKE1GVHlwZSBmdW5j
dGlvbikgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKSB7IH0KKyAgICBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uMyhUMSB0MSwgVDIgdDIsIFQzIHQzKQorICAgICAgICA6IGFyZ3VtZW50czEodDEp
CisgICAgICAgICwgYXJndW1lbnRzMih0MikKKyAgICAgICAgLCBhcmd1bWVudHMzKHQzKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25FbmNvZGVyJiBjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGNvZGVyLmVuY29k
ZUVudW0ob3BUeXBlKTsKKyAgICAgICAgY29kZXIuZW5jb2RlKGFyZ3VtZW50czEpOworICAgICAg
ICBjb2Rlci5lbmNvZGUoYXJndW1lbnRzMik7CisgICAgICAgIGNvZGVyLmVuY29kZShhcmd1bWVu
dHMzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbkRlY29kZXImIGNvZGVyLCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uMyYg
cmVzdWx0KQorICAgIHsKKyAgICAgICAgaWYgKCFjb2Rlci5kZWNvZGUocmVzdWx0LmFyZ3VtZW50
czEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghY29kZXIuZGVj
b2RlKHJlc3VsdC5hcmd1bWVudHMyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICByZXR1cm4gY29kZXIuZGVjb2RlKHJlc3VsdC5hcmd1bWVudHMzKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKSBP
VkVSUklERQorICAgIHsKKyAgICAgICAgKHNjZW5lLT4qbV9mdW5jdGlvbikoYXJndW1lbnRzMSwg
YXJndW1lbnRzMiwgYXJndW1lbnRzMyk7CisgICAgfQorCisgICAgTUZUeXBlIG1fZnVuY3Rpb247
CisKKyAgICBUMSBhcmd1bWVudHMxOworICAgIFQyIGFyZ3VtZW50czI7CisgICAgVDMgYXJndW1l
bnRzMzsKK307CisKK3RlbXBsYXRlPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlOjpP
cGVyYXRpb25UeXBlIG9wVHlwZSwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBU
MywgdHlwZW5hbWUgVDQsIHR5cGVuYW1lIE1GVHlwZSA9IHZvaWQgKENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6KikoVDEsIFQyLCBUMywgVDQpPgorc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb240IDogQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2UgeworICAgIHR5cGVk
ZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjQ8b3BUeXBlLAorICAgICAgICB0eXBlbmFt
ZSBXVEY6OlJlbW92ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVtb3ZlUmVmZXJlbmNlPFQxPjo6VHlw
ZT46OlR5cGUsCisgICAgICAgIHR5cGVuYW1lIFdURjo6UmVtb3ZlQ29uc3Q8dHlwZW5hbWUgV1RG
OjpSZW1vdmVSZWZlcmVuY2U8VDI+OjpUeXBlPjo6VHlwZSwKKyAgICAgICAgdHlwZW5hbWUgV1RG
OjpSZW1vdmVDb25zdDx0eXBlbmFtZSBXVEY6OlJlbW92ZVJlZmVyZW5jZTxUMz46OlR5cGU+OjpU
eXBlLAorICAgICAgICB0eXBlbmFtZSBXVEY6OlJlbW92ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVt
b3ZlUmVmZXJlbmNlPFQ0Pjo6VHlwZT46OlR5cGUsCisgICAgICAgIHZvaWQgKENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6KikoVDEsIFQyLCBUMywgVDQpPiBEZWNvZGVkVHlwZTsKKyAgICB0eXBl
ZGVmIE1GVHlwZSBTY2VuZUZ1bmN0aW9uVHlwZTsKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb240KE1GVHlwZSBmdW5jdGlvbikgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKSB7IH0KKyAg
ICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uNChUMSB0MSwgVDIgdDIsIFQzIHQzLCBUNCB0
NCkKKyAgICAgICAgOiBhcmd1bWVudHMxKHQxKQorICAgICAgICAsIGFyZ3VtZW50czIodDIpCisg
ICAgICAgICwgYXJndW1lbnRzMyh0MykKKyAgICAgICAgLCBhcmd1bWVudHM0KHQ0KQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25FbmNvZGVyJiBjb2RlcikgY29uc3QKKyAgICB7CisgICAgICAgIGNvZGVyLmVuY29kZUVu
dW0ob3BUeXBlKTsKKyAgICAgICAgY29kZXIuZW5jb2RlKGFyZ3VtZW50czEpOworICAgICAgICBj
b2Rlci5lbmNvZGUoYXJndW1lbnRzMik7CisgICAgICAgIGNvZGVyLmVuY29kZShhcmd1bWVudHMz
KTsKKyAgICAgICAgY29kZXIuZW5jb2RlKGFyZ3VtZW50czQpOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgY29kZXIs
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb240JiByZXN1bHQpCisgICAgeworICAgICAgICBp
ZiAoIWNvZGVyLmRlY29kZShyZXN1bHQuYXJndW1lbnRzMSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgaWYgKCFjb2Rlci5kZWNvZGUocmVzdWx0LmFyZ3VtZW50czIpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghY29kZXIuZGVjb2RlKHJl
c3VsdC5hcmd1bWVudHMzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBy
ZXR1cm4gY29kZXIuZGVjb2RlKHJlc3VsdC5hcmd1bWVudHM0KTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lKSBPVkVSUklE
RQorICAgIHsKKyAgICAgICAgKHNjZW5lLT4qbV9mdW5jdGlvbikoYXJndW1lbnRzMSwgYXJndW1l
bnRzMiwgYXJndW1lbnRzMywgYXJndW1lbnRzNCk7CisgICAgfQorCisgICAgTUZUeXBlIG1fZnVu
Y3Rpb247CisKKyAgICBUMSBhcmd1bWVudHMxOworICAgIFQyIGFyZ3VtZW50czI7CisgICAgVDMg
YXJndW1lbnRzMzsKKyAgICBUNCBhcmd1bWVudHM0OworfTsKKwordGVtcGxhdGU8Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJhdGlvblR5cGUgb3BUeXBlLCB0eXBlbmFtZSBU
MSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUsIHR5
cGVuYW1lIE1GVHlwZSA9IHZvaWQgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6KikoVDEsIFQy
LCBUMywgVDQsIFQ1KT4KK3N0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uNSA6IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlIHsKKyAgICB0eXBlZGVmIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb241PG9wVHlwZSwKKyAgICAgICAgdHlwZW5hbWUgV1RGOjpSZW1vdmVD
b25zdDx0eXBlbmFtZSBXVEY6OlJlbW92ZVJlZmVyZW5jZTxUMT46OlR5cGU+OjpUeXBlLAorICAg
ICAgICB0eXBlbmFtZSBXVEY6OlJlbW92ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVtb3ZlUmVmZXJl
bmNlPFQyPjo6VHlwZT46OlR5cGUsCisgICAgICAgIHR5cGVuYW1lIFdURjo6UmVtb3ZlQ29uc3Q8
dHlwZW5hbWUgV1RGOjpSZW1vdmVSZWZlcmVuY2U8VDM+OjpUeXBlPjo6VHlwZSwKKyAgICAgICAg
dHlwZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0eXBlbmFtZSBXVEY6OlJlbW92ZVJlZmVyZW5jZTxU
ND46OlR5cGU+OjpUeXBlLAorICAgICAgICB0eXBlbmFtZSBXVEY6OlJlbW92ZUNvbnN0PHR5cGVu
YW1lIFdURjo6UmVtb3ZlUmVmZXJlbmNlPFQ1Pjo6VHlwZT46OlR5cGUsCisgICAgICAgIHZvaWQg
KENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6KikoVDEsIFQyLCBUMywgVDQsIFQ1KT4gRGVjb2Rl
ZFR5cGU7CisgICAgdHlwZWRlZiBNRlR5cGUgU2NlbmVGdW5jdGlvblR5cGU7CisKKyAgICBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uNShNRlR5cGUgZnVuY3Rpb24pIDogbV9mdW5jdGlvbihm
dW5jdGlvbikgeyB9CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjUoVDEgdDEsIFQy
IHQyLCBUMyB0MywgVDQgdDQsIFQ1IHQ1KQorICAgICAgICA6IGFyZ3VtZW50czEodDEpCisgICAg
ICAgICwgYXJndW1lbnRzMih0MikKKyAgICAgICAgLCBhcmd1bWVudHMzKHQzKQorICAgICAgICAs
IGFyZ3VtZW50czQodDQpCisgICAgICAgICwgYXJndW1lbnRzNSh0NSkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5j
b2RlciYgY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBjb2Rlci5lbmNvZGVFbnVtKG9wVHlw
ZSk7CisgICAgICAgIGNvZGVyLmVuY29kZShhcmd1bWVudHMxKTsKKyAgICAgICAgY29kZXIuZW5j
b2RlKGFyZ3VtZW50czIpOworICAgICAgICBjb2Rlci5lbmNvZGUoYXJndW1lbnRzMyk7CisgICAg
ICAgIGNvZGVyLmVuY29kZShhcmd1bWVudHM0KTsKKyAgICAgICAgY29kZXIuZW5jb2RlKGFyZ3Vt
ZW50czUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uRGVjb2RlciYgY29kZXIsIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb241
JiByZXN1bHQpCisgICAgeworICAgICAgICBpZiAoIWNvZGVyLmRlY29kZShyZXN1bHQuYXJndW1l
bnRzMSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFjb2Rlci5k
ZWNvZGUocmVzdWx0LmFyZ3VtZW50czIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGlmICghY29kZXIuZGVjb2RlKHJlc3VsdC5hcmd1bWVudHMzKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIWNvZGVyLmRlY29kZShyZXN1bHQuYXJndW1l
bnRzNCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIGNvZGVy
LmRlY29kZShyZXN1bHQuYXJndW1lbnRzNSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSkgT1ZFUlJJREUKKyAgICB7Cisg
ICAgICAgIChzY2VuZS0+Km1fZnVuY3Rpb24pKGFyZ3VtZW50czEsIGFyZ3VtZW50czIsIGFyZ3Vt
ZW50czMsIGFyZ3VtZW50czQsIGFyZ3VtZW50czUpOworICAgIH0KKworICAgIE1GVHlwZSBtX2Z1
bmN0aW9uOworCisgICAgVDEgYXJndW1lbnRzMTsKKyAgICBUMiBhcmd1bWVudHMyOworICAgIFQz
IGFyZ3VtZW50czM7CisgICAgVDQgYXJndW1lbnRzNDsKKyAgICBUNSBhcmd1bWVudHM1OworfTsK
KwordGVtcGxhdGU8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U6Ok9wZXJhdGlvblR5
cGUgb3BUeXBlLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFt
ZSBUNCwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBNRlR5cGUgPSB2b2lkIChD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OiopKFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYpPgorc3Ry
dWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb242IDogQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbkJhc2UgeworICAgIHR5cGVkZWYgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjY8
b3BUeXBlLAorICAgICAgICB0eXBlbmFtZSBXVEY6OlJlbW92ZUNvbnN0PHR5cGVuYW1lIFdURjo6
UmVtb3ZlUmVmZXJlbmNlPFQxPjo6VHlwZT46OlR5cGUsCisgICAgICAgIHR5cGVuYW1lIFdURjo6
UmVtb3ZlQ29uc3Q8dHlwZW5hbWUgV1RGOjpSZW1vdmVSZWZlcmVuY2U8VDI+OjpUeXBlPjo6VHlw
ZSwKKyAgICAgICAgdHlwZW5hbWUgV1RGOjpSZW1vdmVDb25zdDx0eXBlbmFtZSBXVEY6OlJlbW92
ZVJlZmVyZW5jZTxUMz46OlR5cGU+OjpUeXBlLAorICAgICAgICB0eXBlbmFtZSBXVEY6OlJlbW92
ZUNvbnN0PHR5cGVuYW1lIFdURjo6UmVtb3ZlUmVmZXJlbmNlPFQ0Pjo6VHlwZT46OlR5cGUsCisg
ICAgICAgIHR5cGVuYW1lIFdURjo6UmVtb3ZlQ29uc3Q8dHlwZW5hbWUgV1RGOjpSZW1vdmVSZWZl
cmVuY2U8VDU+OjpUeXBlPjo6VHlwZSwKKyAgICAgICAgdHlwZW5hbWUgV1RGOjpSZW1vdmVDb25z
dDx0eXBlbmFtZSBXVEY6OlJlbW92ZVJlZmVyZW5jZTxUNj46OlR5cGU+OjpUeXBlLAorICAgICAg
ICB2b2lkIChDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OiopKFQxLCBUMiwgVDMsIFQ0LCBUNSwg
VDYpPiBEZWNvZGVkVHlwZTsKKyAgICB0eXBlZGVmIE1GVHlwZSBTY2VuZUZ1bmN0aW9uVHlwZTsK
KworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb242KE1GVHlwZSBmdW5jdGlvbikgOiBt
X2Z1bmN0aW9uKGZ1bmN0aW9uKSB7IH0KKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
NihUMSB0MSwgVDIgdDIsIFQzIHQzLCBUNCB0NCwgVDUgdDUsIFQ2IHQ2KQorICAgICAgICA6IGFy
Z3VtZW50czEodDEpCisgICAgICAgICwgYXJndW1lbnRzMih0MikKKyAgICAgICAgLCBhcmd1bWVu
dHMzKHQzKQorICAgICAgICAsIGFyZ3VtZW50czQodDQpCisgICAgICAgICwgYXJndW1lbnRzNSh0
NSkKKyAgICAgICAgLCBhcmd1bWVudHM2KHQ2KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBjb2Rlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIGNvZGVyLmVuY29kZUVudW0ob3BUeXBlKTsKKyAgICAgICAg
Y29kZXIuZW5jb2RlKGFyZ3VtZW50czEpOworICAgICAgICBjb2Rlci5lbmNvZGUoYXJndW1lbnRz
Mik7CisgICAgICAgIGNvZGVyLmVuY29kZShhcmd1bWVudHMzKTsKKyAgICAgICAgY29kZXIuZW5j
b2RlKGFyZ3VtZW50czQpOworICAgICAgICBjb2Rlci5lbmNvZGUoYXJndW1lbnRzNSk7CisgICAg
ICAgIGNvZGVyLmVuY29kZShhcmd1bWVudHM2KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImIGNvZGVyLCBDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uNiYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgaWYgKCFjb2Rl
ci5kZWNvZGUocmVzdWx0LmFyZ3VtZW50czEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGlmICghY29kZXIuZGVjb2RlKHJlc3VsdC5hcmd1bWVudHMyKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIWNvZGVyLmRlY29kZShyZXN1bHQuYXJn
dW1lbnRzMykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFjb2Rl
ci5kZWNvZGUocmVzdWx0LmFyZ3VtZW50czQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGlmICghY29kZXIuZGVjb2RlKHJlc3VsdC5hcmd1bWVudHM1KSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gY29kZXIuZGVjb2RlKHJlc3VsdC5h
cmd1bWVudHM2KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUqIHNjZW5lKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgKHNjZW5lLT4q
bV9mdW5jdGlvbikoYXJndW1lbnRzMSwgYXJndW1lbnRzMiwgYXJndW1lbnRzMywgYXJndW1lbnRz
NCwgYXJndW1lbnRzNSwgYXJndW1lbnRzNik7CisgICAgfQorCisgICAgTUZUeXBlIG1fZnVuY3Rp
b247CisKKyAgICBUMSBhcmd1bWVudHMxOworICAgIFQyIGFyZ3VtZW50czI7CisgICAgVDMgYXJn
dW1lbnRzMzsKKyAgICBUNCBhcmd1bWVudHM0OworICAgIFQ1IGFyZ3VtZW50czU7CisgICAgVDYg
YXJndW1lbnRzNjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25CYXNlX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2Rl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmJlYmY0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbkNvZGVyLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2Rlcl9oCisjZGVmaW5lIENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2Rlcl9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uRW5jb2RlcjsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25E
ZWNvZGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbkNvZGVyIHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkVuY29kZXImIGVuY29kZXIsIGNvbnN0IFQmIHQpCisgICAgeworICAgICAg
ICB0LmVuY29kZShlbmNvZGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImIGRlY29kZXIsIFQmIHQpCisgICAgewor
ICAgICAgICByZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOworICAgIH0KKworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uQ29kZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
NWNiNGUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcnMu
Y3BwCkBAIC0wLDAgKzEsOTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkg
MTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXJzLmgiCisK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJBbmltYXRpb24uaCIK
KyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25zLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKKyNpbmNsdWRlICJGbG9h
dFBvaW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQW5pbWF0aW9uLmgiCisjaW5jbHVk
ZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
LmgiCisjaW5jbHVkZSAiTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJSb3RhdGVUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKKyNpbmNsdWRlICJTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1
ZGUgIlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5m
by5oIgorI2luY2x1ZGUgIlRpbWluZ0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKKyNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKwor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCisj
ZW5kaWYKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEN1
c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQ3VzdG9tRmlsdGVy
UHJvZ3JhbS5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyLmgiCisjaW5j
bHVkZSAiQ3VzdG9tRmlsdGVyQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyTnVt
YmVyUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisjaW5j
bHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dy
YW1JbmZvLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyLmgiCisj
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgorI2luY2x1ZGUgIlZhbGlk
YXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorI2VuZGlmCisKKyNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIEFuIGFyZ3VtZW50IGNvZGVyIHdvcmtzIG9uIFBPRCB0eXBlcwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFNpbXBsZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25Db2RlciB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25FbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQorICAgIHsKKyAgICAgICAgZW5j
b2Rlci5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oJnQpLCBzaXplb2Yo
VCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uRGVjb2RlciYgZGVjb2RlciwgVCYgdCkKKyAgICB7CisgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1lbWNweSgmdCwgZGF0YS5kYXRhKCksIHNp
emVvZihUKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPENvbG9yPjo6ZW5jb2RlKENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25FbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb2xvciYgY29sb3IpCit7Cisg
ICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGUoZmFsc2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5jb2Rlci5lbmNvZGUodHJ1ZSk7Cisg
ICAgZW5jb2Rlci5lbmNvZGUoY29sb3IucmdiKCkpOworfQorCitib29sIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25Db2RlcjxDb2xvcj46OmRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uRGVjb2RlciYgZGVjb2RlciwgQ29sb3ImIGNvbG9yKQoreworICAgIGJvb2wgaXNWYWxp
ZDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIWlzVmFsaWQpIHsKKyAgICAgICAgY29sb3IgPSBDb2xvcigpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBSR0JBMzIgcmdiYTsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJnYmEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb2xvciA9
IENvbG9yKHJnYmEpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25Db2RlcjxJbnRTaXplPjo6ZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25FbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJbnRTaXplJiBpbnRTaXplKQoreworICAg
IFNpbXBsZUNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxJbnRTaXplPjo6ZW5jb2Rl
KGVuY29kZXIsIGludFNpemUpOworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25Db2RlcjxJbnRTaXplPjo6ZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNv
ZGVyJiBkZWNvZGVyLCBJbnRTaXplJiBpbnRTaXplKQoreworICAgIHJldHVybiBTaW1wbGVDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8SW50U2l6ZT46OmRlY29kZShkZWNvZGVyLCBp
bnRTaXplKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8SW50
UmVjdD46OmVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgSW50UmVjdCYgaW50UmVjdCkKK3sKKyAgICBTaW1wbGVDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uQ29kZXI8SW50UmVjdD46OmVuY29kZShlbmNvZGVyLCBpbnRSZWN0KTsKK30K
KworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8SW50UmVjdD46OmRlY29k
ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgZGVjb2RlciwgSW50UmVjdCYg
aW50UmVjdCkKK3sKKyAgICByZXR1cm4gU2ltcGxlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bkNvZGVyPEludFJlY3Q+OjpkZWNvZGUoZGVjb2RlciwgaW50UmVjdCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYgZW5jb2RlciwgY29uc3QgRmxvYXRQb2lu
dDNEJiBmbG9hdFBvaW50M0QpCit7CisgICAgU2ltcGxlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkNvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50M0QpOwor
fQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxGbG9hdFBvaW50M0Q+
OjpkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImIGRlY29kZXIsIEZs
b2F0UG9pbnQzRCYgZmxvYXRQb2ludDNEKQoreworICAgIHJldHVybiBTaW1wbGVDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8RmxvYXRQb2ludDNEPjo6ZGVjb2RlKGRlY29kZXIsIGZs
b2F0UG9pbnQzRCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVy
PExlbmd0aD46OmVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgTGVuZ3RoJiBsZW5ndGgpCit7CisgICAgU2ltcGxlQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkNvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBsZW5ndGgpOworfQor
Citib29sIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxMZW5ndGg+OjpkZWNvZGUo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImIGRlY29kZXIsIExlbmd0aCYgbGVu
Z3RoKQoreworICAgIHJldHVybiBTaW1wbGVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29k
ZXI8TGVuZ3RoPjo6ZGVjb2RlKGRlY29kZXIsIGxlbmd0aCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZW5jb2RlKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtYXRpb25NYXRyaXgpCit7CisgICAgU2ltcGxlQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZW5jb2Rl
KGVuY29kZXIsIHRyYW5zZm9ybWF0aW9uTWF0cml4KTsKK30KKworYm9vbCBDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uQ29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpkZWNvZGUoQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImIGRlY29kZXIsIFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm1hdGlvbk1hdHJpeCkKK3sKKyAgICByZXR1cm4gU2ltcGxlQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZGVjb2RlKGRl
Y29kZXIsIHRyYW5zZm9ybWF0aW9uTWF0cml4KTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPEZpbHRlck9wZXJhdGlv
bnM+OjplbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImIGVuY29kZXIs
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oZmlsdGVycy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRp
b24qIGZpbHRlciA9IGZpbHRlcnMuYXQoaSk7CisgICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlID0gZmlsdGVyLT5nZXRPcGVyYXRpb25UeXBlKCk7CisgICAgICAgIGVu
Y29kZXIuZW5jb2RlRW51bSh0eXBlKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpTRVBJQToKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyKS0+YW1vdW50KCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6Q09OVFJBU1Q6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgor
ICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxkb3VibGU+KHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXIpLT5hbW91
bnQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkJMVVI6CisgICAgICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8TGVu
Z3RoPjo6ZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRp
b24qPihmaWx0ZXIpLT5zdGREZXZpYXRpb24oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7CisgICAgICAgICAgICBjb25z
dCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKiBzaGFkb3cgPSBzdGF0aWNfY2FzdDxjb25zdCBE
cm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyKTsKKyAgICAgICAgICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxJbnRQb2ludD46OmVuY29kZShlbmNvZGVyLCBzaGFk
b3ctPmxvY2F0aW9uKCkpOworICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxpbnQz
Ml90PihzaGFkb3ctPnN0ZERldmlhdGlvbigpKTsKKyAgICAgICAgICAgIENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25Db2RlcjxDb2xvcj46OmVuY29kZShlbmNvZGVyLCBzaGFkb3ctPmNvbG9y
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006CisgICAgICAgICAgICAv
LyBDdXN0b20gRmlsdGVycyBhcmUgY29udmVydGVkIHRvIFZBTElEQVRFRF9DVVNUT00gYmVmb3Jl
IHJlYWNoaW5nIHRoaXMgcG9pbnQuCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6VkFMSURB
VEVEX0NVU1RPTTogeworICAgICAgICAgICAgY29uc3QgVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uKiBjdXN0b21PcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxjb25zdCBWYWxpZGF0ZWRDdXN0
b21GaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXIpOworICAgICAgICAgICAgQVNTRVJUKGN1c3RvbU9w
ZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxDdXN0b21G
aWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiBwcm9ncmFtID0gY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0
ZWRQcm9ncmFtKCk7CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbS0+aXNJbml0aWFsaXplZCgp
KTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtLT5wbGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbSgp
KTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtLT5wbGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbSgp
LT5jbGllbnQoKSk7CisgICAgICAgICAgICBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqIGN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eSA9IHN0YXRpY19jYXN0PFdlYkN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eSo+KHByb2dyYW0tPnBsYXRmb3JtQ29tcGlsZWRQcm9ncmFtKCktPmNsaWVudCgpKTsK
KyAgICAgICAgICAgIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbyA9
IHByb2dyYW0tPnByb2dyYW1JbmZvKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogQ3VzdG9tRmls
dGVyT3BlcmF0aW9uIHNob3VsZCBub3QgbmVlZCB0aGUgbWVzaFR5cGUsIGl0IHNob3VsZCBqdXN0
IGJlIGVuY29kZWQgaW4gdGhlIHByb2dyYW0gaXRzZWxmLgorICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjUyOQorICAgICAgICAgICAgZW5j
b2Rlci5lbmNvZGVFbnVtKHByb2dyYW1JbmZvLm1lc2hUeXBlKCkpOworICAgICAgICAgICAgZW5j
b2RlciA8PCBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCk7CisgICAgICAgICAgICBDdXN0
b21GaWx0ZXJQYXJhbWV0ZXJMaXN0IHBhcmFtZXRlcnMgPSBjdXN0b21PcGVyYXRpb24tPnBhcmFt
ZXRlcnMoKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHBh
cmFtZXRlcnMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFy
YW1ldGVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcmFtZXRlcnNbaV07CisgICAgICAgICAgICAgICAg
ZW5jb2RlciA8PCBwYXJhbWV0ZXItPm5hbWUoKTsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLmVu
Y29kZUVudW0ocGFyYW1ldGVyLT5wYXJhbWV0ZXJUeXBlKCkpOworCisgICAgICAgICAgICAgICAg
c3dpdGNoIChwYXJhbWV0ZXItPnBhcmFtZXRlclR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNh
c2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpBUlJBWTogeworICAgICAgICAgICAgICAgICAgICBD
dXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlciogYXJyYXlQYXJhbWV0ZXIgPSBzdGF0aWNfY2FzdDxD
dXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcio+KHBhcmFtZXRlci5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFycmF5UGFyYW1ldGVy
LT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGFy
cmF5UGFyYW1ldGVyLT5zaXplKCk7ICsraikKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuY29k
ZXIgPDwgYXJyYXlQYXJhbWV0ZXItPnZhbHVlQXQoaik7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIEN1c3RvbUZpbHRl
clBhcmFtZXRlcjo6TlVNQkVSOiB7CisgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpbHRlck51
bWJlclBhcmFtZXRlciogbnVibWVyUGFyYW1ldGVyID0gc3RhdGljX2Nhc3Q8Q3VzdG9tRmlsdGVy
TnVtYmVyUGFyYW1ldGVyKj4ocGFyYW1ldGVyLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVibWVyUGFyYW1ldGVyLT5zaXplKCkp
OworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG51Ym1lclBhcmFt
ZXRlci0+c2l6ZSgpOyArK2opCisgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIDw8IG51
Ym1lclBhcmFtZXRlci0+dmFsdWVBdChqKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyOjpUUkFOU0ZPUk06IHsKKyAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmlsdGVyVHJhbnNm
b3JtUGFyYW1ldGVyKiB0cmFuc2Zvcm1QYXJhbWV0ZXIgPSBzdGF0aWNfY2FzdDxDdXN0b21GaWx0
ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqPihwYXJhbWV0ZXIuZ2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8VHJhbnNmb3JtT3BlcmF0aW9u
cz46OmVuY29kZShlbmNvZGVyLCB0cmFuc2Zvcm1QYXJhbWV0ZXItPm9wZXJhdGlvbnMoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuY29kZXIgPDwgY3VzdG9tT3Bl
cmF0aW9uLT5tZXNoUm93cygpOworICAgICAgICAgICAgZW5jb2RlciA8PCBjdXN0b21PcGVyYXRp
b24tPm1lc2hDb2x1bW5zKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlm
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
K30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8RmlsdGVyT3BlcmF0
aW9ucz46OmRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgZGVjb2Rl
ciwgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICB1aW50MzJfdCBzaXplOworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiA+JiBvcGVyYXRpb25zID0gZmlsdGVycy5v
cGVyYXRpb25zKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZTsKKyAgICAgICAgUmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gZmlsdGVyOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
RW51bSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNFUElBOgorICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0FUVVJBVEU6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRF
OiB7CisgICAgICAgICAgICBkb3VibGUgdmFsdWU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBmaWx0ZXIgPSBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUodmFsdWUs
IHR5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OklOVkVSVDoKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdI
VE5FU1M6CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKKyAgICAgICAgICAgIGRvdWJsZSB2YWx1
ZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZpbHRlciA9IEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSh2YWx1ZSwgdHlwZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewor
ICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aDsKKyAgICAgICAgICAgIGlmICghQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkNvZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCBsZW5ndGgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZpbHRlciA9IEJsdXJG
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsZW5ndGgsIHR5cGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7
CisgICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbjsKKyAgICAgICAgICAgIGludDMyX3Qgc3Rk
RGV2aWF0aW9uOworICAgICAgICAgICAgQ29sb3IgY29sb3I7CisgICAgICAgICAgICBpZiAoIUNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxJbnRQb2ludD46OmRlY29kZShkZWNvZGVy
LCBsb2NhdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShzdGREZXZpYXRpb24pKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGlmICghQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNv
ZGVyPENvbG9yPjo6ZGVjb2RlKGRlY29kZXIsIGNvbG9yKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBmaWx0ZXIgPSBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9u
OjpjcmVhdGUobG9jYXRpb24sIHN0ZERldmlhdGlvbiwgY29sb3IsIHR5cGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006CisgICAgICAgICAgICAvLyBDdXN0b20gRmlsdGVy
cyBhcmUgY29udmVydGVkIHRvIFZBTElEQVRFRF9DVVNUT00gYmVmb3JlIHJlYWNoaW5nIHRoaXMg
cG9pbnQuCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6VkFMSURBVEVEX0NVU1RPTTogewor
ICAgICAgICAgICAgLy8gRklYTUU6IEN1c3RvbUZpbHRlck9wZXJhdGlvbiBzaG91bGQgbm90IG5l
ZWQgdGhlIG1lc2hUeXBlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMjUyOQorICAgICAgICAgICAgQ3VzdG9tRmlsdGVyTWVzaFR5cGUg
bWVzaFR5cGU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShtZXNoVHlwZSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaW50IHByb2dyYW1J
RCA9IDA7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHByb2dyYW1JRCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICB1aW50MzJfdCBwYXJhbWV0
ZXJzU2l6ZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVyc1NpemUp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgQ3VzdG9tRmls
dGVyUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJzKHBhcmFtZXRlcnNTaXplKTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyc1NpemU7ICsraSkgeworICAgICAgICAg
ICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICAgICAgICAgIEN1c3RvbUZpbHRlclBhcmFtZXRl
cjo6UGFyYW1ldGVyVHlwZSBwYXJhbWV0ZXJUeXBlOworICAgICAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUobmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShwYXJhbWV0ZXJUeXBlKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgc3dpdGNo
IChwYXJhbWV0ZXJUeXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJh
bWV0ZXI6OkFSUkFZOiB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJB
cnJheVBhcmFtZXRlcj4gYXJyYXlQYXJhbWV0ZXIgPSBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRl
cjo6Y3JlYXRlKG5hbWUpOworICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcnJheVBhcmFt
ZXRlclNpemU7CisgICAgICAgICAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJyYXlQ
YXJhbWV0ZXJTaXplKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIGFycmF5UGFyYW1ldGVyVmFsdWU7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgYXJyYXlQYXJhbWV0ZXJTaXplOyArK2op
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJyYXlQYXJh
bWV0ZXJWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlQYXJhbWV0ZXItPmFkZFZhbHVlKGFycmF5UGFy
YW1ldGVyVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHBhcmFtZXRlcnNbaV0gPSBhcnJheVBhcmFtZXRlci5yZWxlYXNlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIEN1
c3RvbUZpbHRlclBhcmFtZXRlcjo6TlVNQkVSOiB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0
cjxDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI+IG51bWJlclBhcmFtZXRlciA9IEN1c3RvbUZp
bHRlck51bWJlclBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOworICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBudW1iZXJQYXJhbWV0ZXJTaXplOworICAgICAgICAgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKG51bWJlclBhcmFtZXRlclNpemUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgbnVtYmVyUGFyYW1l
dGVyVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbnVt
YmVyUGFyYW1ldGVyU2l6ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKG51bWJlclBhcmFtZXRlclZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJQYXJh
bWV0ZXItPmFkZFZhbHVlKG51bWJlclBhcmFtZXRlclZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gbnVtYmVyUGFyYW1ldGVy
LnJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpUUkFOU0ZPUk06
IHsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFt
ZXRlcj4gdHJhbnNmb3JtUGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVy
OjpjcmVhdGUobmFtZSk7CisgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uQ29kZXI8VHJhbnNmb3JtT3BlcmF0aW9ucz46OmRlY29kZShkZWNvZGVyLCBvcGVy
YXRpb25zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5zZXRPcGVyYXRpb25zKG9wZXJhdGlvbnMp
OworICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gdHJhbnNmb3JtUGFyYW1ldGVy
LnJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdW5zaWdu
ZWQgbWVzaFJvd3M7CisgICAgICAgICAgICB1bnNpZ25lZCBtZXNoQ29sdW1uczsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWVzaFJvd3MpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWVzaENvbHVtbnMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCB0aGUgU2hhZGVycyBhcmUgYWxyZWFkeSB2YWxpZGF0ZWQsIHNvIHdlIGp1c3QgdXNlIFdl
YkN1c3RvbUZpbHRlck9wZXJhdGlvbiBmb3IgdHJhbnNwb3J0YXRpb24uCisgICAgICAgICAgICBm
aWx0ZXIgPSBDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAsIHByb2dy
YW1JRCwgcGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNoVHlwZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaWx0ZXIpCisgICAgICAg
ICAgICBvcGVyYXRpb25zLmFwcGVuZChmaWx0ZXIpOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25Db2RlcjxDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbz46OmVuY29kZShD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ3VzdG9t
RmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQoreworICAgIGVuY29kZXIgPDwgcHJvZ3Jh
bUluZm8udmVydGV4U2hhZGVyU3RyaW5nKCk7CisgICAgZW5jb2RlciA8PCBwcm9ncmFtSW5mby5m
cmFnbWVudFNoYWRlclN0cmluZygpOworICAgIGVuY29kZXIuZW5jb2RlRW51bShwcm9ncmFtSW5m
by5wcm9ncmFtVHlwZSgpKTsKKyAgICBlbmNvZGVyLmVuY29kZUVudW0ocHJvZ3JhbUluZm8ubWVz
aFR5cGUoKSk7CisgICAgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbU1peFNldHRpbmdzJiBtaXhT
ZXR0aW5ncyA9IHByb2dyYW1JbmZvLm1peFNldHRpbmdzKCk7CisgICAgZW5jb2Rlci5lbmNvZGVF
bnVtKG1peFNldHRpbmdzLmJsZW5kTW9kZSk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVtKG1peFNl
dHRpbmdzLmNvbXBvc2l0ZU9wZXJhdG9yKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uQ29kZXI8Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8+OjpkZWNvZGUoQ29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImIGRlY29kZXIsIEN1c3RvbUZpbHRlclByb2dyYW1J
bmZvJiBwcm9ncmFtSW5mbykKK3sKKyAgICBTdHJpbmcgdmVydGV4U2hhZGVyU3RyaW5nOworICAg
IFN0cmluZyBmcmFnbWVudFNoYWRlclN0cmluZzsKKyAgICBDdXN0b21GaWx0ZXJQcm9ncmFtVHlw
ZSBwcm9ncmFtVHlwZTsKKyAgICBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZTsKKyAgICBD
dXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3M7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh2ZXJ0ZXhTaGFkZXJTdHJpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShmcmFnbWVudFNoYWRlclN0cmluZykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShwcm9ncmFtVHlwZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShtZXNoVHlw
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bSht
aXhTZXR0aW5ncy5ibGVuZE1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUVudW0obWl4U2V0dGluZ3MuY29tcG9zaXRlT3BlcmF0b3IpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcHJvZ3JhbUluZm8gPSBDdXN0b21GaWx0ZXJQcm9ncmFtSW5m
byh2ZXJ0ZXhTaGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nLCBwcm9ncmFtVHlwZSwg
bWl4U2V0dGluZ3MsIG1lc2hUeXBlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZiAvLyBF
TkFCTEUoQ1NTX1NIQURFUlMpCisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNv
ZGVyPFRyYW5zZm9ybU9wZXJhdGlvbnM+OjplbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRyYW5zZm9y
bU9wZXJhdGlvbnMpCit7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odHJh
bnNmb3JtT3BlcmF0aW9ucy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJh
bnNmb3JtT3BlcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24qIG9wZXJhdGlvbiA9IHRyYW5zZm9ybU9wZXJhdGlvbnMuYXQoaSk7CisgICAgICAg
IGVuY29kZXIuZW5jb2RlRW51bShvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSk7CisKKyAg
ICAgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkgeworICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlNDQUxFX1k6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FM
RToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6CisgICAgICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDoKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT54
KCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eSgpOworICAgICAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnoo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
WToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURToKKyAgICAgICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgorICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgorICAgICAgICAgICAgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkNvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxj
b25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT54KCkpOworICAg
ICAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPExlbmd0aD46OmVuY29k
ZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24q
PihvcGVyYXRpb24pLT55KCkpOworICAgICAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkNvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxjb25zdCBUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT56KCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU6CisgICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlJPVEFURV9ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
Uk9UQVRFXzNEOgorICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT54KCk7CisgICAgICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJh
dGlvbiktPnkoKTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eigpOworICAgICAgICAgICAgZW5j
b2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVy
YXRpb24pLT5hbmdsZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpTS0VXX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpT
S0VXX1k6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXOgorICAgICAgICAg
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4o
b3BlcmF0aW9uKS0+YW5nbGVYKCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0
PGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT5hbmdsZVkoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklY
OgorICAgICAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPFRyYW5zZm9y
bWF0aW9uTWF0cml4Pjo6ZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1hdHJpeCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOgorICAgICAg
ICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPFRyYW5zZm9ybWF0aW9uTWF0
cml4Pjo6ZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+bWF0cml4KCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRToKKyAgICAgICAgICAg
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rl
ciwgc3RhdGljX2Nhc3Q8Y29uc3QgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVy
YXRpb24pLT5wZXJzcGVjdGl2ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJVFk6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCiti
b29sIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25z
Pjo6ZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiBkZWNvZGVyLCBU
cmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFuc2Zvcm1PcGVyYXRpb25zKQoreworICAgIHVpbnQzMl90
IG9wZXJhdGlvbnNTaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUob3BlcmF0aW9uc1NpemUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9w
ZXJhdGlvbnNTaXplOyArK2kpIHsKKyAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIG9wZXJhdGlvblR5cGU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKG9w
ZXJhdGlvblR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRj
aCAob3BlcmF0aW9uVHlwZSkgeworICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEVfWDoKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6CisgICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlNDQUxFX1o6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FM
RV8zRDogeworICAgICAgICAgICAgZG91YmxlIHgsIHksIHo7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh6KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBvcGVyYXRp
b25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpUUkFOU0xBVEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgor
ICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOiB7CisgICAgICAg
ICAgICBMZW5ndGggeCwgeSwgejsKKyAgICAgICAgICAgIGlmICghQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbkNvZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCB4KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIUNvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25Db2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgeSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uQ29kZXI8TGVuZ3RoPjo6ZGVjb2RlKGRlY29kZXIsIHopKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBv
cGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Uk9UQVRFX1g6CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RB
VEVfWToKKyAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDogeworICAg
ICAgICAgICAgZG91YmxlIHgsIHksIHosIGFuZ2xlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZSh4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhbmdsZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHks
IHosIGFuZ2xlLCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOgorICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19ZOgorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6U0tFVzogeworICAgICAgICAgICAgZG91YmxlIGFuZ2xlWCwgYW5nbGVZOworICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhbmdsZVgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYW5nbGVZKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xl
WCwgYW5nbGVZLCBvcGVyYXRpb25UeXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYOiB7CisgICAgICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgICAgICAgICBpZiAoIUNvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmRlY29kZShk
ZWNvZGVyLCBtYXRyaXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShtYXRyaXgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVhfM0Q6IHsKKyAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAgICAgICAgICAgIGlmICghQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZGVj
b2RlKGRlY29kZXIsIG1hdHJpeCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4KSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6
IHsKKyAgICAgICAgICAgIExlbmd0aCBwZXJzcGVjdGl2ZTsKKyAgICAgICAgICAgIGlmICghQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCBw
ZXJzcGVjdGl2ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
dHJhbnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFBlcnNwZWN0aXZlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUocGVyc3BlY3RpdmUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWToKKyAg
ICAgICAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChJZGVudGl0
eVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlVGltaW5nRnVuY3Rpb24oQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRpbWluZ0Z1bmN0
aW9uKiB0aW1pbmdGdW5jdGlvbikKK3sKKyAgICBpZiAoIXRpbWluZ0Z1bmN0aW9uKSB7CisgICAg
ICAgIGVuY29kZXIuZW5jb2RlRW51bShUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25UeXBl
KC0xKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBUaW1pbmdGdW5jdGlvbjo6VGlt
aW5nRnVuY3Rpb25UeXBlIHR5cGUgPSB0aW1pbmdGdW5jdGlvbiA/IHRpbWluZ0Z1bmN0aW9uLT50
eXBlKCkgOiBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb247CisgICAgZW5jb2Rlci5lbmNv
ZGVFbnVtKHR5cGUpOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVGltaW5nRnVuY3Rp
b246OkxpbmVhckZ1bmN0aW9uOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFRpbWluZ0Z1bmN0
aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOiB7CisgICAgICAgIGNvbnN0IEN1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb24qIGN1YmljID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKKyAgICAgICAgQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbjo6VGltaW5nRnVuY3Rpb25QcmVzZXQgYmV6aWVyUHJlc2V0ID0gY3ViaWMtPnRpbWluZ0Z1
bmN0aW9uUHJlc2V0KCk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRW51bShiZXppZXJQcmVzZXQp
OworICAgICAgICBpZiAoYmV6aWVyUHJlc2V0ID09IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246
OkN1c3RvbSkgeworICAgICAgICAgICAgZW5jb2RlciA8PCBjdWJpYy0+eDEoKTsKKyAgICAgICAg
ICAgIGVuY29kZXIgPDwgY3ViaWMtPnkxKCk7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGN1Ymlj
LT54MigpOworICAgICAgICAgICAgZW5jb2RlciA8PCBjdWJpYy0+eTIoKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3RlcHNGdW5j
dGlvbjogeworICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKiBzdGVwcyA9IHN0YXRp
Y19jYXN0PGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7CisgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0ZXBzLT5udW1iZXJPZlN0ZXBz
KCkpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZXBzLT5zdGVwQXRTdGFydCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgfQorfQorCitib29sIGRlY29kZVRpbWluZ0Z1bmN0aW9uKENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiBkZWNvZGVyLCBSZWZQdHI8VGltaW5nRnVu
Y3Rpb24+JiB0aW1pbmdGdW5jdGlvbikKK3sKKyAgICBUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVu
Y3Rpb25UeXBlIHR5cGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0odHlwZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0eXBlID09IFRpbWluZ0Z1bmN0aW9uOjpUaW1p
bmdGdW5jdGlvblR5cGUoLTEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkxpbmVhckZ1bmN0aW9uOgorICAgICAg
ICB0aW1pbmdGdW5jdGlvbiA9IExpbmVhclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5j
dGlvbjogeworICAgICAgICBkb3VibGUgeDEsIHkxLCB4MiwgeTI7CisgICAgICAgIEN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uUHJlc2V0IGJlemllclByZXNldDsKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0oYmV6aWVyUHJlc2V0KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGJlemllclByZXNldCAhPSBDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uOjpDdXN0b20pIHsKKyAgICAgICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gQ3Vi
aWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKGJlemllclByZXNldCk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHgx
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZSh5MSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoeDIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHkyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB0aW1p
bmdGdW5jdGlvbiA9IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgy
LCB5Mik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFRpbWluZ0Z1bmN0
aW9uOjpTdGVwc0Z1bmN0aW9uOiB7CisgICAgICAgIHVpbnQzMl90IG51bWJlck9mU3RlcHM7Cisg
ICAgICAgIGJvb2wgc3RlcEF0U3RhcnQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobnVt
YmVyT2ZTdGVwcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoc3RlcEF0U3RhcnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKG51bWJl
ck9mU3RlcHMsIHN0ZXBBdFN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uQ29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbj46OmVuY29kZShDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uRW5jb2RlciYgZW5jb2RlciwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1h
dGlvbiYgYW5pbWF0aW9uKQoreworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLm5hbWUoKTsKKyAg
ICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5ib3hTaXplKCk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVt
KGFuaW1hdGlvbi5zdGF0ZSgpKTsKKyAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5zdGFydFRpbWUo
KTsKKyAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbi5wYXVzZVRpbWUoKTsKKyAgICBlbmNvZGVyIDw8
IGFuaW1hdGlvbi5saXN0c01hdGNoKCk7CisKKyAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRp
b25PYmplY3QgPSBhbmltYXRpb24uYW5pbWF0aW9uKCk7CisgICAgZW5jb2Rlci5lbmNvZGVFbnVt
KGFuaW1hdGlvbk9iamVjdC0+ZGlyZWN0aW9uKCkpOworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGFuaW1hdGlvbk9iamVjdC0+ZmlsbE1vZGUoKSk7CisgICAgZW5jb2RlciA8
PCBhbmltYXRpb25PYmplY3QtPmR1cmF0aW9uKCk7CisgICAgZW5jb2RlciA8PCBhbmltYXRpb25P
YmplY3QtPml0ZXJhdGlvbkNvdW50KCk7CisgICAgZW5jb2RlVGltaW5nRnVuY3Rpb24oZW5jb2Rl
ciwgYW5pbWF0aW9uT2JqZWN0LT50aW1pbmdGdW5jdGlvbigpLmdldCgpKTsKKworICAgIGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb24ua2V5ZnJhbWVzKCk7Cisg
ICAgZW5jb2Rlci5lbmNvZGVFbnVtKGtleWZyYW1lcy5wcm9wZXJ0eSgpKTsKKyAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihrZXlmcmFtZXMuc2l6ZSgpKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBB
bmltYXRpb25WYWx1ZSogdmFsdWUgPSBrZXlmcmFtZXMuYXQoaSk7CisgICAgICAgIGVuY29kZXIg
PDwgdmFsdWUtPmtleVRpbWUoKTsKKyAgICAgICAgZW5jb2RlVGltaW5nRnVuY3Rpb24oZW5jb2Rl
ciwgdmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpOworICAgICAgICBzd2l0Y2ggKGtleWZyYW1lcy5w
cm9wZXJ0eSgpKSB7CisgICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6CisgICAg
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUq
Pih2YWx1ZSktPnZhbHVlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBbmlt
YXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgorICAgICAgICAgICAgZW5jb2RlciA8PCAqc3Rh
dGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPih2YWx1ZSktPnZhbHVlKCk7
CisgICAgICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgICAgIGNh
c2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcjoKKyAgICAgICAgICAgIGVuY29kZXIgPDwg
KnN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4odmFsdWUpLT52YWx1ZSgp
OworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25Db2RlcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPjo6ZGVjb2RlKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiBkZWNvZGVyLCBHcmFwaGljc0xheWVyQW5pbWF0
aW9uJiBhbmltYXRpb24pCit7CisgICAgU3RyaW5nIG5hbWU7CisgICAgSW50U2l6ZSBib3hTaXpl
OworICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb246OkFuaW1hdGlvblN0YXRlIHN0YXRlOworICAg
IGRvdWJsZSBzdGFydFRpbWU7CisgICAgZG91YmxlIHBhdXNlVGltZTsKKyAgICBib29sIGxpc3Rz
TWF0Y2g7CisKKyAgICBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb247Cisg
ICAgdW5zaWduZWQgZmlsbE1vZGU7CisgICAgZG91YmxlIGR1cmF0aW9uOworICAgIGRvdWJsZSBp
dGVyYXRpb25Db3VudDsKKyAgICBSZWZQdHI8VGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9u
OworICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbk9iamVjdDsKKworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUobmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGJveFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUVudW0oc3RhdGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShzdGFydFRpbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShwYXVzZVRpbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShsaXN0c01hdGNoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKGRpcmVjdGlvbikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZpbGxNb2RlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZHVyYXRpb24pKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpdGVyYXRpb25Db3VudCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZVRpbWluZ0Z1bmN0aW9uKGRlY29kZXIs
IHRpbWluZ0Z1bmN0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYW5pbWF0aW9u
T2JqZWN0ID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKKyAgICBhbmltYXRpb25PYmplY3QtPnNldERp
cmVjdGlvbihkaXJlY3Rpb24pOworICAgIGFuaW1hdGlvbk9iamVjdC0+c2V0RmlsbE1vZGUoZmls
bE1vZGUpOworICAgIGFuaW1hdGlvbk9iamVjdC0+c2V0RHVyYXRpb24oZHVyYXRpb24pOworICAg
IGFuaW1hdGlvbk9iamVjdC0+c2V0SXRlcmF0aW9uQ291bnQoaXRlcmF0aW9uQ291bnQpOworICAg
IGlmICh0aW1pbmdGdW5jdGlvbikKKyAgICAgICAgYW5pbWF0aW9uT2JqZWN0LT5zZXRUaW1pbmdG
dW5jdGlvbih0aW1pbmdGdW5jdGlvbik7CisKKyAgICBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVy
dHk7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocHJvcGVydHkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgS2V5ZnJhbWVWYWx1ZUxpc3Qga2V5ZnJhbWVzKHByb3BlcnR5KTsKKyAg
ICB1bnNpZ25lZCBrZXlmcmFtZXNTaXplOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoa2V5ZnJh
bWVzU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwga2V5ZnJhbWVzU2l6ZTsgKytpKSB7CisgICAgICAgIGZsb2F0IGtleVRpbWU7CisgICAg
ICAgIFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb247CisgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoa2V5VGltZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmICghZGVjb2RlVGltaW5nRnVuY3Rpb24oZGVjb2RlciwgdGltaW5nRnVuY3Rpb24pKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHsK
KyAgICAgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eTogeworICAgICAgICAgICAgZmxv
YXQgdmFsdWU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBrZXlmcmFtZXMuaW5zZXJ0KG5l
dyBGbG9hdEFuaW1hdGlvblZhbHVlKGtleVRpbWUsIHZhbHVlLCB0aW1pbmdGdW5jdGlvbikpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBbmltYXRlZFByb3Bl
cnR5V2Via2l0VHJhbnNmb3JtOiB7CisgICAgICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIHRy
YW5zZm9ybTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodHJhbnNmb3JtKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBrZXlmcmFtZXMuaW5zZXJ0
KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShrZXlUaW1lLCAmdHJhbnNmb3JtLCB0aW1pbmdG
dW5jdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcjogewor
ICAgICAgICAgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXI7CisgICAgICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGZpbHRlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAga2V5ZnJhbWVzLmluc2VydChuZXcgRmlsdGVyQW5pbWF0aW9uVmFsdWUoa2V5VGlt
ZSwgJmZpbHRlciwgdGltaW5nRnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgYW5pbWF0aW9uID0gR3JhcGhpY3NMYXllckFuaW1hdGlvbihuYW1l
LCBrZXlmcmFtZXMsIGJveFNpemUsIGFuaW1hdGlvbk9iamVjdC5nZXQoKSwgc3RhcnRUaW1lLCBs
aXN0c01hdGNoKTsKKyAgICBhbmltYXRpb24uc2V0U3RhdGUoc3RhdGUsIHBhdXNlVGltZSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
Q29kZXI8R3JhcGhpY3NMYXllckFuaW1hdGlvbnM+OjplbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbkVuY29kZXImIGVuY29kZXIsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25z
JiBhbmltYXRpb25zKQoreworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9ucy5hbmltYXRpb25zKCk7
Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPEdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zPjo6ZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVy
JiBkZWNvZGVyLCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKK3sKKyAgICBy
ZXR1cm4gZGVjb2Rlci5kZWNvZGUoYW5pbWF0aW9ucy5hbmltYXRpb25zKCkpOworfQorCisjaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25D
b2RlcjxHcmFwaGljc1N1cmZhY2VUb2tlbj46OmVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uRW5jb2RlciYgZW5jb2RlciwgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2Vu
KQoreworI2lmIE9TKERBUldJTikKKyAgICBlbmNvZGVyIDw8IEF0dGFjaG1lbnQodG9rZW4uZnJv
bnRCdWZmZXJIYW5kbGUsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKTsKKyAgICBlbmNvZGVyIDw8
IEF0dGFjaG1lbnQodG9rZW4uYmFja0J1ZmZlckhhbmRsZSwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NF
TkQpOworI2VsaWYgT1MoV0lORE9XUykKKyAgICBlbmNvZGVyIDw8IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDY0X3Q+KHRva2VuLmZyb250QnVmZmVySGFuZGxlKTsKKyAgICBlbmNvZGVyIDw8IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDY0X3Q+KHRva2VuLmJhY2tCdWZmZXJIYW5kbGUpOworI2VsaWYgT1Mo
TElOVVgpCisgICAgZW5jb2RlciA8PCB0b2tlbi5mcm9udEJ1ZmZlckhhbmRsZTsKKyNlbmRpZgor
fQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxHcmFwaGljc1N1cmZh
Y2VUb2tlbj46OmRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgZGVj
b2RlciwgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQoreworI2lmIE9TKFdJTkRPV1MpCisg
ICAgdWludDY0X3QgZnJvbnRCdWZmZXJIYW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShm
cm9udEJ1ZmZlckhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB0b2tlbi5mcm9u
dEJ1ZmZlckhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JhcGhpY3NTdXJmYWNlVG9rZW46OkJ1
ZmZlckhhbmRsZT4oZnJvbnRCdWZmZXJIYW5kbGUpOworICAgIHVpbnQ2NF90IGJhY2tCdWZmZXJI
YW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShiYWNrQnVmZmVySGFuZGxlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHRva2VuLmJhY2tCdWZmZXJIYW5kbGUgPSByZWludGVycHJl
dF9jYXN0PEdyYXBoaWNzU3VyZmFjZVRva2VuOjpCdWZmZXJIYW5kbGU+KGJhY2tCdWZmZXJIYW5k
bGUpOworI2VsaWYgT1MoREFSV0lOKQorICAgIEF0dGFjaG1lbnQgZnJvbnRBdHRhY2htZW50LCBi
YWNrQXR0YWNobWVudDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZyb250QXR0YWNobWVudCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJhY2tBdHRh
Y2htZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdG9rZW4gPSBHcmFwaGljc1N1
cmZhY2VUb2tlbihmcm9udEF0dGFjaG1lbnQucG9ydCgpLCBiYWNrQXR0YWNobWVudC5wb3J0KCkp
OworI2VsaWYgT1MoTElOVVgpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0b2tlbi5mcm9udEJ1
ZmZlckhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIHJldHVybiB0
cnVlOworfQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVy
PENvb3JkaW5hdGVkTGF5ZXJJbmZvPjo6ZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25FbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgY29vcmRpbmF0
ZWRMYXllckluZm8pCit7CisgICAgU2ltcGxlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNv
ZGVyPENvb3JkaW5hdGVkTGF5ZXJJbmZvPjo6ZW5jb2RlKGVuY29kZXIsIGNvb3JkaW5hdGVkTGF5
ZXJJbmZvKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8Q29v
cmRpbmF0ZWRMYXllckluZm8+OjpkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRl
Y29kZXImIGRlY29kZXIsIENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBjb29yZGluYXRlZExheWVySW5m
bykKK3sKKyAgICByZXR1cm4gU2ltcGxlQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVy
PENvb3JkaW5hdGVkTGF5ZXJJbmZvPjo6ZGVjb2RlKGRlY29kZXIsIGNvb3JkaW5hdGVkTGF5ZXJJ
bmZvKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8U3VyZmFj
ZVVwZGF0ZUluZm8+OjplbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiBzdXJmYWNlVXBkYXRlSW5mbykKK3sK
KyAgICBTaW1wbGVDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8U3VyZmFjZVVwZGF0
ZUluZm8+OjplbmNvZGUoZW5jb2Rlciwgc3VyZmFjZVVwZGF0ZUluZm8pOworfQorCitib29sIENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmRlY29k
ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYgZGVjb2RlciwgU3VyZmFjZVVw
ZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvKQoreworICAgIHJldHVybiBTaW1wbGVDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUoZGVj
b2Rlciwgc3VyZmFjZVVwZGF0ZUluZm8pOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25Db2RlcjxDb29yZGluYXRlZFN1cmZhY2U+OjplbmNvZGUoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvb3JkaW5hdGVkU3VyZmFjZSYg
Y29vcmRpbmF0ZWRTdXJmYWNlKQoreworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25Db2RlcjxDb29yZGluYXRlZFN1cmZhY2U+OjpkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbkRlY29kZXImIGRlY29kZXIsIENvb3JkaW5hdGVkU3VyZmFjZSYgY29vcmRpbmF0
ZWRTdXJmYWNlKQoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVycy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25D
b2RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTg2ZmRiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcnMuaApAQCAtMCwwICsx
LDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25Db2RlcnNfaAorI2RlZmluZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29k
ZXJzX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkVuY29kZXIuaCIKKyNpbmNsdWRlICJ3dGYvVmVjdG9yLmgiCisKKyNp
bmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOwor
Y2xhc3MgSW50U2l6ZTsKK2NsYXNzIEludFJlY3Q7CisKK2NsYXNzIENvb3JkaW5hdGVkU3VyZmFj
ZTsKKworY2xhc3MgRmxvYXRQb2ludDNEOworY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbjsK
K2NsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87
CitjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKK2NsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7
CitzdHJ1Y3QgQ29vcmRpbmF0ZWRMYXllckluZm87CitzdHJ1Y3QgTGVuZ3RoOworCisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQorY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKKyNlbmRpZgorCisjaWYg
RU5BQkxFKENTU19TSEFERVJTKQorY2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm87CisjZW5k
aWYKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorc3RydWN0IEdyYXBoaWNzU3VyZmFjZVRv
a2VuOworI2VuZGlmCisKK3RlbXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25Db2RlcjxDb2xvcj4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uRW5jb2RlciYsIGNvbnN0IENvbG9yJik7CisgICAgc3RhdGljIGJvb2wg
ZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiwgQ29sb3ImKTsKK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxJ
bnRTaXplPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25FbmNvZGVyJiwgY29uc3QgSW50U2l6ZSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYsIEludFNpemUmKTsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxJbnRSZWN0
PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25F
bmNvZGVyJiwgY29uc3QgSW50UmVjdCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShDb29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYsIEludFJlY3QmKTsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8VmVj
dG9yPFQ+ID4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3IpCisgICAgewor
ICAgICAgICBwcmludGYoIiVzICVsdVxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgdmVjdG9yLnNp
emUoKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0
b3Iuc2l6ZSgpKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbkRlY29kZXImIGRlY29kZXIsIFZlY3RvcjxUPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAg
dWludDY0X3Qgc2l6ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBWZWN0b3I8dWludDhfdD4gdGVtcDsKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0ZW1wKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICB2ZWN0b3IucmVzaXplKHNpemUpOworICAgICAgICBtZW1jcHkodmVjdG9y
LmRhdGEoKSwgdGVtcC5kYXRhKCksIHNpemUgKiBzaXplb2YoVCkpOworCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25Db2RlcjxGbG9hdFBvaW50M0Q+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImLCBjb25zdCBGbG9hdFBvaW50M0Qm
KTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRl
Y29kZXImLCBGbG9hdFBvaW50M0QmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxMZW5ndGg+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImLCBjb25zdCBMZW5ndGgmKTsK
KyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29k
ZXImLCBMZW5ndGgmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25Db2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4geworICAgIHN0YXRpYyB2b2lk
IGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4Jik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb25EZWNvZGVyJiwgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKK307CisKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9uQ29kZXI8RmlsdGVyT3BlcmF0aW9ucz4geworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09w
ZXJhdGlvbkRlY29kZXImLCBGaWx0ZXJPcGVyYXRpb25zJik7Cit9OworI2VuZGlmCisKKyNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uQ29kZXI8Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8+IHsKKyAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImLCBjb25zdCBDdXN0
b21GaWx0ZXJQcm9ncmFtSW5mbyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYsIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7Cit9
OworI2VuZGlmCisKK3RlbXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25Db2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9ucyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uRGVjb2RlciYsIFRyYW5zZm9ybU9wZXJhdGlvbnMmKTsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxHcmFwaGljc0xheWVyQW5pbWF0
aW9ucz4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uRW5jb2RlciYsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CisgICAgc3RhdGlj
IGJvb2wgZGVjb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiwgR3JhcGhp
Y3NMYXllckFuaW1hdGlvbnMmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb25Db2RlcjxHcmFwaGljc0xheWVyQW5pbWF0aW9uPiB7CisgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiwgY29u
c3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbiYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYsIEdyYXBoaWNzTGF5ZXJBbmltYXRpb24m
KTsKK307CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3RlbXBsYXRlPD4gc3RydWN0IENv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2RlcjxHcmFwaGljc1N1cmZhY2VUb2tlbj4gewor
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2Rl
ciYsIGNvbnN0IEdyYXBoaWNzU3VyZmFjZVRva2VuJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyJiwgR3JhcGhpY3NTdXJmYWNlVG9r
ZW4mKTsKK307CisjZW5kaWYKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbkNvZGVyPENvb3JkaW5hdGVkTGF5ZXJJbmZvPiB7CisgICAgc3RhdGljIHZvaWQg
ZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiwgY29uc3QgQ29vcmRp
bmF0ZWRMYXllckluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkRlY29kZXImLCBDb29yZGluYXRlZExheWVySW5mbyYpOworfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyPFN1cmZhY2VV
cGRhdGVJbmZvPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25FbmNvZGVyJiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImLCBTdXJmYWNl
VXBkYXRlSW5mbyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbkNvZGVyPENvb3JkaW5hdGVkU3VyZmFjZT4geworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYsIGNvbnN0IENvb3JkaW5h
dGVkU3VyZmFjZSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uRGVjb2RlciYsIENvb3JkaW5hdGVkU3VyZmFjZSYpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisj
ZW5kaWYgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkNvZGVyc19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDNhMmMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXIuaApAQCAt
MCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbkRlY29kZXJfaAorI2RlZmluZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uRGVjb2Rlcl9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRl
ICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvRGVjb2Rlci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyIHsKK3B1
YmxpYzoKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlcihXVEY6OkRlY29k
ZXIqIGRlY29kZXIpIDogbV9kZWNvZGVyKGRlY29kZXIpIHt9CisKKyAgICBib29sIGRlY29kZShW
ZWN0b3I8dWludDhfdD4mIGJ5dGVzKSB7IHJldHVybiBtX2RlY29kZXItPmRlY29kZUJ5dGVzKGJ5
dGVzKTsgfQorICAgIGJvb2wgZGVjb2RlKGJvb2wmIHZhbHVlKSB7IHJldHVybiBtX2RlY29kZXIt
PmRlY29kZUJvb2wodmFsdWUpOyB9CisgICAgYm9vbCBkZWNvZGUodWludDMyX3QmIHZhbHVlKSB7
IHJldHVybiBtX2RlY29kZXItPmRlY29kZVVJbnQzMih2YWx1ZSk7IH0KKyAgICBib29sIGRlY29k
ZSh1aW50NjRfdCYgdmFsdWUpIHsgcmV0dXJuIG1fZGVjb2Rlci0+ZGVjb2RlVUludDY0KHZhbHVl
KTsgfQorICAgIGJvb2wgZGVjb2RlKGludDMyX3QmIHZhbHVlKSB7IHJldHVybiBtX2RlY29kZXIt
PmRlY29kZUludDMyKHZhbHVlKTsgfQorICAgIGJvb2wgZGVjb2RlKGludDY0X3QmIHZhbHVlKSB7
IHJldHVybiBtX2RlY29kZXItPmRlY29kZUludDY0KHZhbHVlKTsgfQorICAgIGJvb2wgZGVjb2Rl
KGZsb2F0JiB2YWx1ZSkgeyByZXR1cm4gbV9kZWNvZGVyLT5kZWNvZGVGbG9hdCh2YWx1ZSk7IH0K
KyAgICBib29sIGRlY29kZShkb3VibGUmIHZhbHVlKSB7IHJldHVybiBtX2RlY29kZXItPmRlY29k
ZURvdWJsZSh2YWx1ZSk7IH0KKyAgICBib29sIGRlY29kZShTdHJpbmcmIHN0cmluZykgeyByZXR1
cm4gbV9kZWNvZGVyLT5kZWNvZGVTdHJpbmcoc3RyaW5nKTsgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4gYm9vbCBkZWNvZGUoVHlwZSYgdCkKKyAgICB7CisgICAgICAgIHJldHVybiBD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8VHlwZT46OmRlY29kZSgqdGhpcywgdCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gYm9vbCBkZWNvZGVFbnVtKFR5
cGUmIHJlc3VsdCkKKyAgICB7CisgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlKSA8
PSBzaXplb2YodWludDY0X3QpLCBlbnVtX3R5cGVfbXVzdF9ub3RfYmVfbGFyZ2VyX3RoYW5fNjRf
Yml0cyk7CisKKyAgICAgICAgdWludDY0X3QgdmFsdWU7CisgICAgICAgIGlmICghZGVjb2RlKHZh
bHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXN1bHQgPSBzdGF0
aWNfY2FzdDxUeXBlPih2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBXVEY6OkRlY29kZXIqIG1fZGVjb2RlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlm
IC8vIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25F
bmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3MTgwMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2Rlci5oCkBAIC0wLDAg
KzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uRW5jb2Rlcl9oCisjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25F
bmNvZGVyX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25Db2Rlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9FbmNvZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXIgeworcHVibGlj
OgorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyKFdURjo6RW5jb2Rlciog
ZW5jb2RlcikgOiBtX2VuY29kZXIoZW5jb2RlcikgeyB9CisKKyAgICB2b2lkIGVuY29kZShjb25z
dCB1aW50OF90KiB2YWx1ZSwgc2l6ZV90IHNpemUpIHsgbV9lbmNvZGVyLT5lbmNvZGVCeXRlcyh2
YWx1ZSwgc2l6ZSk7IH0KKyAgICB2b2lkIGVuY29kZShib29sIHZhbHVlKSB7IG1fZW5jb2Rlci0+
ZW5jb2RlQm9vbCh2YWx1ZSk7IH0KKyAgICB2b2lkIGVuY29kZSh1aW50MzJfdCB2YWx1ZSkgeyBt
X2VuY29kZXItPmVuY29kZVVJbnQzMih2YWx1ZSk7IH0KKyAgICB2b2lkIGVuY29kZSh1aW50NjRf
dCB2YWx1ZSkgeyBtX2VuY29kZXItPmVuY29kZVVJbnQ2NCh2YWx1ZSk7IH0KKyAgICB2b2lkIGVu
Y29kZShpbnQzMl90IHZhbHVlKSB7IG1fZW5jb2Rlci0+ZW5jb2RlSW50MzIodmFsdWUpOyB9Cisg
ICAgdm9pZCBlbmNvZGUoaW50NjRfdCB2YWx1ZSkgeyBtX2VuY29kZXItPmVuY29kZUludDY0KHZh
bHVlKTsgfQorICAgIHZvaWQgZW5jb2RlKGZsb2F0IHZhbHVlKSB7IG1fZW5jb2Rlci0+ZW5jb2Rl
RmxvYXQodmFsdWUpOyB9CisgICAgdm9pZCBlbmNvZGUoZG91YmxlIHZhbHVlKSB7IG1fZW5jb2Rl
ci0+ZW5jb2RlRG91YmxlKHZhbHVlKTsgfQorICAgIHZvaWQgZW5jb2RlKGNvbnN0IFN0cmluZyYg
c3RyaW5nKSB7IG1fZW5jb2Rlci0+ZW5jb2RlU3RyaW5nKHN0cmluZyk7IH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+IHZvaWQgZW5jb2RlKGNvbnN0IFR5cGUmIHQpCisgICAgeworICAg
ICAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29kZXI8VHlwZT46OmVuY29kZSgqdGhp
cywgdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVHlwZSYgdCkKKyAgICB7
CisgICAgICAgIGVuY29kZSh0KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IHZvaWQgZW5jb2RlRW51bShUeXBlIHQpCisgICAgewor
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVHlwZSkgPD0gc2l6ZW9mKHVpbnQ2NF90KSwg
ZW51bV90eXBlX211c3Rfbm90X2JlX2xhcmdlcl90aGFuXzY0X2JpdHMpOworCisgICAgICAgIGVu
Y29kZShzdGF0aWNfY2FzdDx1aW50NjRfdD4odCkpOworICAgIH0KKworCitwcml2YXRlOgorICAg
IFdURjo6RW5jb2RlciogbV9lbmNvZGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3YjYxYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaCIKKworI2luY2x1
ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25EZWNvZGVyLmgiCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVjb2Rl
ci5oPgorI2luY2x1ZGUgPHd0Zi9FbmNvZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9ucz4gQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6OmNyZWF0ZSgpCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucygpKTsKK30K
KworUGFzc093blB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucz4gQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbnM6OmRlY29kZShXVEY6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhkZWNvZGVy
KSk7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjpDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9ucygpCisgICAgOiBtX21vZGUoRW5jb2RpbmcpCit7Cit9CisKK0Nvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25zOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhXVEY6
OkRlY29kZXImIGRlY29kZXIpCisgICAgOiBtX21vZGUoRGVjb2RpbmcpCit7CisgICAgQ29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXIgb3BlcmF0aW9uRGVjb2RlcigmZGVjb2Rlcik7
CisgICAgUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24+IG9wZXJhdGlvbjsKKyAg
ICB3aGlsZSAoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6ZGVjb2RlKG9wZXJhdGlvbkRl
Y29kZXIsIG9wZXJhdGlvbi5nZXQoKSkpCisgICAgICAgIG1fb3BlcmF0aW9ucy5hcHBlbmQob3Bl
cmF0aW9uKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM6
OmFwcGVuZChQYXNzUmVmUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNlPiBvcGVy
YXRpb24sIFdURjo6RW5jb2RlciYgZW5jb2RlcikKK3sKKyAgICBBU1NFUlQobV9tb2RlID09IEVu
Y29kaW5nKTsKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyIG9wZXJh
dGlvbkVuY29kZXIoJmVuY29kZXIpOworICAgIG9wZXJhdGlvbi0+ZW5jb2RlKG9wZXJhdGlvbkVu
Y29kZXIpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjpjbGVhcigp
Cit7CisgICAgQVNTRVJUKG1fbW9kZSA9PSBFbmNvZGluZyk7CisgICAgbV9vcGVyYXRpb25zLmNs
ZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMThlNTQxMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9ucy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFu
eSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29y
ZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uc19oCisjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25zX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUg
IkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdURiB7CitjbGFzcyBFbmNvZGVyOworY2xhc3MgRGVjb2RlcjsKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7IFdURl9NQUtFX05PTkNPUFlBQkxFKENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25zKTsKK3B1YmxpYzoKKyAgICBlbnVtIE1vZGUgeworICAgICAg
ICBFbmNvZGluZywKKyAgICAgICAgRGVjb2RpbmcKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NP
d25QdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnM+IGNyZWF0ZSgpOworICAgIHN0YXRp
YyBQYXNzT3duUHRyPENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zPiBkZWNvZGUoV1RGOjpE
ZWNvZGVyJiBkZWNvZGVyKTsKKworICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbkJhc2U+LCBXVEY6OkVuY29kZXImIGVuY29kZXIpOworICAgIHZv
aWQgY2xlYXIoKTsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0
aW9ucy5pc0VtcHR5KCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bl
cmF0aW9ucy5zaXplKCk7IH0KKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25CYXNl
KiBhdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBt
X29wZXJhdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW9ucy5hdChpbmRl
eCkuZ2V0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25zKCk7CisgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMoV1RG
OjpEZWNvZGVyJik7CisKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uczo6TW9kZSBt
X21vZGU7CisgICAgVmVjdG9yPFJlZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFz
ZT4gPiBtX29wZXJhdGlvbnM7Cit9OworCit9CisjZW5kaWYKKworI2VuZGlmIC8vIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25zX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCAxZWEzY2JmLi40M2Q4N2E5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZS5oIgogCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRl
ICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKQEAgLTQ0MCwxNiArNDQxLDE2IEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklELCB1aW50MzJfdCB0CiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
LmFkZChiYWNraW5nU3RvcmUpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
dXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBj
b25zdCBUaWxlVXBkYXRlJiB1cGRhdGUpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
dXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBj
b25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUlu
Zm8pCiB7CiAgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CiAg
ICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tp
bmdTdG9yZXMuZ2V0KGxheWVyKTsKICAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKIAotICAgIFN1
cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHVwZGF0ZS5hdGxhc0lEKTsK
KyAgICBTdXJmYWNlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZXMuZmluZCh1cGRhdGVJbmZv
LmF0bGFzSUQpOwogICAgIEFTU0VSVChpdCAhPSBtX3N1cmZhY2VzLmVuZCgpKTsKIAotICAgIGJh
Y2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0LCB1cGRhdGUu
dGlsZVJlY3QsIGl0LT52YWx1ZSwgdXBkYXRlLm9mZnNldCk7CisgICAgYmFja2luZ1N0b3JlLT51
cGRhdGVUaWxlKHRpbGVJRCwgdXBkYXRlSW5mby51cGRhdGVSZWN0LCB0aWxlUmVjdCwgaXQtPnZh
bHVlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpOwogICAgIHJlc2V0QmFja2luZ1N0b3JlU2l6
ZVRvTGF5ZXJTaXplKGxheWVyKTsKICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZl
cnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CkBAIC01MzIsOCArNTMzLDExIEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygp
CiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CiB9CiAKLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpmbHVzaExheWVyQ2hhbmdlcyhjb25zdCBGbG9h
dFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpj
b21taXRDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9ucyhjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRp
b24pCiB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcGVyYXRpb25zLnNpemUoKTsgaSsr
KQorICAgICAgICBvcGVyYXRpb25zLmF0KGkpLT5leGVjdXRlKHRoaXMpOworCiAgICAgbV9yZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKIAogICAgIC8vIFNp
bmNlIHRoZSBmcmFtZSBoYXMgbm93IGJlZW4gcmVuZGVyZWQsIHdlIGNhbiBzYWZlbHkgdW5sb2Nr
IHRoZSBhbmltYXRpb25zIHVudGlsIHRoZSBuZXh0IGxheW91dC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAppbmRleCA3N2M2MTg5Li4y
ODIwZGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5oCkBAIC0yMSw2ICsyMSw3IEBACiAjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZV9oCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJ
bmZvLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCkBAIC00Miw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU7CiBjbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsK
K2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOwogY2xhc3MgQ3VzdG9tRmlsdGVy
UHJvZ3JhbTsKIGNsYXNzIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvOwogY2xhc3MgVGV4dHVyZU1h
cHBlckxheWVyOwpAQCAtNTksMTkgKzYxLDcgQEAgcHVibGljOgogCiBjbGFzcyBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lPiwgcHVibGljIEdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgotICAg
IHN0cnVjdCBUaWxlVXBkYXRlIHsKLSAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0OwotICAgICAg
ICBJbnRSZWN0IHRpbGVSZWN0OwotICAgICAgICB1aW50MzJfdCBhdGxhc0lEOwotICAgICAgICBJ
bnRQb2ludCBvZmZzZXQ7Ci0gICAgICAgIFRpbGVVcGRhdGUoY29uc3QgSW50UmVjdCYgc291cmNl
LCBjb25zdCBJbnRSZWN0JiB0aWxlLCB1aW50MzJfdCBhdGxhcywgY29uc3QgSW50UG9pbnQmIG5l
d09mZnNldCkKLSAgICAgICAgICAgIDogc291cmNlUmVjdChzb3VyY2UpCi0gICAgICAgICAgICAs
IHRpbGVSZWN0KHRpbGUpCi0gICAgICAgICAgICAsIGF0bGFzSUQoYXRsYXMpCi0gICAgICAgICAg
ICAsIG9mZnNldChuZXdPZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07CisKICAg
ICBleHBsaWNpdCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CiAg
ICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGZsb2F0LCBjb25zdCBGbG9hdFJlY3QmLCBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzID0g
MCk7CkBAIC04MSwxMiArNzEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFRvR3JhcGhpY3ND
b250ZXh0KGNhaXJvX3QqKTsKICNlbmRpZgogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZvaWQgY3Jl
YXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8
R3JhcGhpY3NTdXJmYWNlPik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgdWludDMyX3QgZnJvbnRCdWZmZXIpOwotICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGlu
YXRlZExheWVySUQpOwotI2VuZGlmCi0gICAgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChDb29y
ZGluYXRlZExheWVySUQsIGludCB2YWx1ZSk7CiAKICAgICB2b2lkIGRldGFjaCgpOwogICAgIHZv
aWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKQEAgLTk2LDM4ICs4MCw0
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRB
Y3RpdmUoYm9vbCk7CiAKKyAgICB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRp
b25zKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zJiwgY29uc3QgRmxvYXRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24pOworICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsK
KworICAgIC8vIEJlZ2luIG9wZXJhdGlvbiBleGVjdXRpb25zLgogICAgIHZvaWQgY3JlYXRlTGF5
ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7CiAgICAgdm9pZCBkZWxldGVM
YXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIHNldFJv
b3RMYXllcklEKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAgdm9pZCBzZXRMYXllckNoaWxkcmVu
KENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsK
KyAgICB2b2lkIHNldFJvb3RMYXllcihDb29yZGluYXRlZExheWVySUQpOwogICAgIHZvaWQgc2V0
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZv
Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENv
b3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0jaWYg
RU5BQkxFKENTU19TSEFERVJTKQotICAgIHZvaWQgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJv
Z3JhbXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgY29uc3Q7Ci0gICAgdm9pZCBj
cmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKLSNl
bmRpZgotCisgICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKICAgICB2b2lkIGNyZWF0ZVRpbGUoQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKTsKKyAgICB2b2lk
IHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IElu
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwogICAgIHZvaWQgcmVt
b3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7Ci0gICAgdm9pZCB1
cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxl
VXBkYXRlJik7CiAgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOwogICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRs
YXModWludDMyX3QgYXRsYXNJRCk7Ci0gICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcyhjb25zdCBG
bG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CiAgICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+
KTsKICAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCk7CiAgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCk7CiAgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklE
LCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwotICAgIHZvaWQgc2V0QW5pbWF0aW9u
c0xvY2tlZChib29sKTsKLSAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYp
OwotICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7IG1fc2V0RHJhd3NC
YWNrZ3JvdW5kID0gZW5hYmxlOyB9Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCiAgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKICNlbmRpZgorI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorICAgIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPik7CisgICAgdm9p
ZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZmZXIpOwor
ICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpOworI2VuZGlmCisjaWYg
RU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisjaWYgRU5BQkxFKENT
U19TSEFERVJTKQorICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNv
bnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7CisgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtKGludCBpZCk7CisjZW5kaWYKKyAgICB2b2lkIHNldExheWVyUmVwYWludENvdW50
KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKKyAgICB2b2lkIHNldEJhY2tncm91bmRD
b2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24pOworICAgIC8vIEVuZCBvcGVyYXRpb24gZXhlY3V0aW9u
cy4KKworICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7IG1fc2V0RHJh
d3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9CiAKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NMYXllciog
bGF5ZXJCeUlEKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKQEAgLTE2OCw2ICsxNjAsMTAgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIq
KTsKICAgICB2b2lkIHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKEdyYXBoaWNzTGF5
ZXIqKTsKIAorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICB2b2lkIGluamVjdENhY2hlZEN1
c3RvbUZpbHRlclByb2dyYW1zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0
OworI2VuZGlmCisKICAgICAvLyBSZW5kZXIgcXVldWUgY2FuIGJlIGFjY2Vzc2VkIG9ueSBmcm9t
IG1haW4gdGhyZWFkIG9yIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIQogICAgIFZlY3RvcjxG
dW5jdGlvbjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1ZTsKICAgICBNdXRleCBtX3JlbmRlclF1ZXVl
TXV0ZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nLmNwcAppbmRleCAxMjhiYWJlLi40NTlkOGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKQEAgLTI4LDYgKzI4LDcg
QEAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmcuaCIKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24u
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzgsMTMgKzM5LDEzIEBAIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoCiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4oaW1hZ2UpOwogfQogCi1Q
YXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Y3JlYXRlKENvb3JkaW5hdG9yKiBjbGllbnQsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQor
UGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc6OmNyZWF0ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSogcXVldWUsIFBh
c3NSZWZQdHI8SW1hZ2U+IGltYWdlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcoY2xpZW50LCBpbWFnZSkpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcocXVldWUsIGltYWdlKSk7CiB9CiAKLUNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciogY2xp
ZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKLSAgICA6IG1fY29vcmRpbmF0b3IoY2xpZW50
KQorQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiBxdWV1ZSwgUGFzc1JlZlB0cjxJbWFnZT4g
aW1hZ2UpCisgICAgOiBtX29wZXJhdGlvblF1ZXVlKHF1ZXVlKQogICAgICwgbV9pbWFnZShpbWFn
ZSkKICAgICAsIG1faWQoZ2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChtX2ltYWdlLmdldCgp
KSkKICAgICAsIG1fY2xlYXJDb250ZW50c1RpbWVyKHRoaXMsICZDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQpCkBAIC01NCw3ICs1NSw3IEBAIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciogY2xp
ZW50LCBQYXNzUmVmUHRyCiAgICAgLy8gRklYTUU6IFdlIHdvdWxkIG5lZWQgdG8gZGVjb2RlIGEg
c21hbGwgaW1hZ2UgZGlyZWN0bHkgaW50byBhIEdyYXBoaWNzU3VyZmFjZS4KICAgICAvLyBodHRw
Oi8vd2Via2l0Lm9yZy9iLzEwMTQyNgogCi0gICAgbV9jb29yZGluYXRvci0+Y3JlYXRlSW1hZ2VC
YWNraW5nKGlkKCkpOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWUoQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbjo6Q3JlYXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQoKSkpOwogfQog
CiBDb29yZGluYXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCkKQEAg
LTc0LDcgKzc1LDcgQEAgdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVtb3ZlSG9zdChI
b3N0KiBob3N0KQogICAgIG1faG9zdHMucmVtb3ZlKHBvc2l0aW9uKTsKIAogICAgIGlmIChtX2hv
c3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+cmVtb3ZlSW1hZ2VCYWNraW5n
KGlkKCkpOworICAgICAgICBtX29wZXJhdGlvblF1ZXVlLT5lbnF1ZXVlKENvb3JkaW5hdGVkR3Jh
cGhpY3NPcGVyYXRpb246OlJlbW92ZUltYWdlQmFja2luZzo6Y3JlYXRlKGlkKCkpKTsKIH0KIAog
dm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6bWFya0RpcnR5KCkKQEAgLTExMyw5ICsxMTQs
OCBAQCB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1cGRhdGUoKQogCiAgICAgbV9uYXRp
dmVJbWFnZVB0ciA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKLSAg
ICAvLyBJZiBzZW5kaW5nIHRoZSBtZXNzYWdlIGZhaWxzLCB0cnkgYWdhaW4gaW4gdGhlIG5leHQg
dXBkYXRlLgotICAgIGJvb2wgc3VjY2VzcyA9IG1fY29vcmRpbmF0b3ItPnVwZGF0ZUltYWdlQmFj
a2luZyhpZCgpLCBtX3N1cmZhY2UpOwotICAgIG1faXNEaXJ0eSA9ICFzdWNjZXNzOworICAgIG1f
b3BlcmF0aW9uUXVldWUtPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6VXBk
YXRlSW1hZ2VCYWNraW5nOjpjcmVhdGUoaWQoKSwgKm1fc3VyZmFjZSkpOworICAgIG1faXNEaXJ0
eSA9IGZhbHNlOwogfQogCiB2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZWxlYXNlU3Vy
ZmFjZUlmTmVlZGVkKCkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOjp1cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoYm9vbCYgY2hhbmdlZFRvVmlzaWJsZSkK
IAogdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQo
VGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+KikKIHsKLSAgICBtX2Nvb3JkaW5hdG9yLT5j
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGlkKCkpOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVu
cXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6Q2xlYXJJbWFnZUJhY2tpbmdDb250
ZW50czo6Y3JlYXRlKGlkKCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAppbmRleCA1
YjViNTdhLi44YmY0ZGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBDb29yZGluYXRl
ZEltYWdlQmFja2luZ19oCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVk
TGF5ZXJJbmZvLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAi
SW1hZ2UuaCIKQEAgLTM5LDIwICs0MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIDogcHVibGljIFJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc+IHsKIHB1YmxpYzoKLSAgICBjbGFzcyBDb29yZGluYXRvciB7Ci0gICAgcHVi
bGljOgotICAgICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUltYWdlQmFj
a2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3Vy
ZmFjZT4pID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVu
dHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKLSAgICB9
OwotCiAgICAgY2xhc3MgSG9zdCB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIGJvb2wg
aW1hZ2VCYWNraW5nVmlzaWJsZSgpID0gMDsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRvciosIFBhc3NSZWZQ
dHI8SW1hZ2U+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2lu
Zz4gY3JlYXRlKENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiwgUGFzc1JlZlB0
cjxJbWFnZT4pOwogICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCk7CiAKICAg
ICBzdGF0aWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBnZXRDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKEltYWdlKik7CkBAIC02OCwxMyArNjEsMTMgQEAgcHVibGljOgogICAgIHZvaWQgdXBk
YXRlKCk7CiAKIHByaXZhdGU6Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
b3IqLCBQYXNzUmVmUHRyPEltYWdlPik7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUqLCBQYXNzUmVmUHRyPEltYWdlPik7CiAK
ICAgICB2b2lkIHJlbGVhc2VTdXJmYWNlSWZOZWVkZWQoKTsKICAgICB2b2lkIHVwZGF0ZVZpc2li
aWxpdHlJZk5lZWRlZChib29sJiBjaGFuZ2VkVG9WaXNpYmxlKTsKICAgICB2b2lkIGNsZWFyQ29u
dGVudHNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiopOwogCi0gICAg
Q29vcmRpbmF0b3IqIG1fY29vcmRpbmF0b3I7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJh
dGlvbjo6UXVldWUqIG1fb3BlcmF0aW9uUXVldWU7CiAgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdl
OwogICAgIE5hdGl2ZUltYWdlUHRyIG1fbmF0aXZlSW1hZ2VQdHI7CiAgICAgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCBtX2lkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
U3VyZmFjZS5oCmluZGV4IDMwNzdjM2MuLmQ3M2M2YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZh
Y2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmgKQEAgLTMwLDYgKzMwLDggQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEJpdG1hcFRleHR1cmU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Citj
bGFzcyBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlcjsKK2NsYXNzIENvb3JkaW5h
dGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyOwogCiBjbGFzcyBDb29yZGluYXRlZFN1cmZhY2Ug
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRTdXJmYWNlPiB7CiBwdWJs
aWM6CkBAIC01NSw2ICs1Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29weVRvVGV4
dHVyZShQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+LCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNv
bnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQpID0gMDsKICNlbmRpZgogCisgICAgdmlydHVhbCB2
b2lkIGVuY29kZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uRW5jb2RlciYpID0gMDsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGRlY29kZShDb29yZGluYXRl
ZEdyYXBoaWNzT3BlcmF0aW9uRGVjb2RlciYpOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBG
bGFncyBmbGFncygpIGNvbnN0ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFj
ZVVwZGF0ZUluZm8uaAppbmRleCA2YWIzODRhLi5lYThiMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0
ZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaApAQCAtMjMsMTMgKzIzLDEwIEBACiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN1cmZh
Y2VVcGRhdGVJbmZvIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdXJmYWNlVXBkYXRlSW5m
byk7Ci0KIHB1YmxpYzoKICAgICBTdXJmYWNlVXBkYXRlSW5mbygpIHsgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBk
YXRlQXRsYXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcAppbmRleCAzNjRmMDY4Li4yYjcxMDhlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
VXBkYXRlQXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKQEAgLTIzLDE0ICsyMywxNSBAQAogCiAj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCogY2xp
ZW50LCBpbnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQotICAg
IDogbV9jbGllbnQoY2xpZW50KQorVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlKiBxdWV1ZSwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0
ZWRTdXJmYWNlOjpGbGFncyBmbGFncykKKyAgICA6IG1fb3BlcmF0aW9uUXVldWUocXVldWUpCiAg
ICAgLCBtX2luYWN0aXZpdHlJblNlY29uZHMoMCkKIHsKICAgICBzdGF0aWMgdWludDMyX3QgbmV4
dElEID0gMDsKQEAgLTM4LDE1ICszOSwxMiBAQCBVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoVXBk
YXRlQXRsYXNDbGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdQogICAg
IEludFNpemUgc2l6ZSA9IG5leHRQb3dlck9mVHdvKEludFNpemUoZGltZW5zaW9uLCBkaW1lbnNp
b24pKTsKICAgICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShzaXplLCBm
bGFncyk7CiAKLSAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBpZiBzZW5kaW5nIHRoZSBtZXNzYWdl
IGZhaWxzLCBVcGRhdGVBdGxhcyBnaXZlcyB1cCBkcmF3aW5nIGFueXRoaW5nIGltcGxpY2l0bHku
Ci0gICAgaWYgKCFtX2NsaWVudC0+Y3JlYXRlVXBkYXRlQXRsYXMobV9JRCwgbV9zdXJmYWNlKSkK
LSAgICAgICAgbV9zdXJmYWNlLmNsZWFyKCk7CisgICAgbV9vcGVyYXRpb25RdWV1ZS0+ZW5xdWV1
ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVVcGRhdGVBdGxhczo6Y3JlYXRl
KG1fSUQsICptX3N1cmZhY2UpKTsKIH0KIAogVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCiB7
Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgbV9jbGllbnQtPnJlbW92ZVVwZGF0ZUF0bGFz
KG1fSUQpOworICAgIG1fb3BlcmF0aW9uUXVldWUtPmVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGlj
c09wZXJhdGlvbjo6UmVtb3ZlVXBkYXRlQXRsYXM6OmNyZWF0ZShtX0lEKSk7CiB9CiAKIHZvaWQg
VXBkYXRlQXRsYXM6OmJ1aWxkTGF5b3V0SWZOZWVkZWQoKQpAQCAtNzIsOSArNzAsNiBAQCBQYXNz
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gVXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWls
YWJsZUJ1ZmZlcih1aW50MzJfdAogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PigpOwogCi0gICAgaWYgKCFtX3N1cmZhY2Up
Ci0gICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKLQogICAgIGF0
bGFzSUQgPSBtX0lEOwogCiAgICAgLy8gRklYTUU6IFVzZSB0cmktc3RhdGUgYnVmZmVycywgdG8g
YWxsb3cgZmFzdGVyIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5oCmlu
ZGV4IDQ4YTZiZjguLjE2MzEzOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5o
CkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIFVwZGF0ZUF0bGFzX2gKIAogI2luY2x1ZGUgIkFy
ZWFBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLmgi
CiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgog
CkBAIC0zMSwxNiArMzIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwogY2xhc3MgSW50UG9pbnQ7CiAKLWNsYXNzIFVwZGF0ZUF0bGFzQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJ
RCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpID0gMDsKLX07Ci0KIGNsYXNzIFVw
ZGF0ZUF0bGFzIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGVBdGxhcyk7CiBwdWJs
aWM6Ci0gICAgVXBkYXRlQXRsYXMoVXBkYXRlQXRsYXNDbGllbnQqLCBpbnQgZGltZW5zaW9uLCBD
b29yZGluYXRlZFN1cmZhY2U6OkZsYWdzKTsKKyAgICBVcGRhdGVBdGxhcyhDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uOjpRdWV1ZSosIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVkU3VyZmFj
ZTo6RmxhZ3MpOwogICAgIH5VcGRhdGVBdGxhcygpOwogCiAgICAgaW5saW5lIEludFNpemUgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgpOyB9CkBAIC02Niw3ICs2MSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBidWlsZExheW91dElmTmVlZGVkKCk7CiAKIHByaXZhdGU6Ci0g
ICAgVXBkYXRlQXRsYXNDbGllbnQqIG1fY2xpZW50OworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb246OlF1ZXVlKiBtX29wZXJhdGlvblF1ZXVlOwogICAgIE93blB0cjxHZW5lcmFsQXJl
YUFsbG9jYXRvcj4gbV9hcmVhQWxsb2NhdG9yOwogICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZh
Y2U+IG1fc3VyZmFjZTsKICAgICBkb3VibGUgbV9pbmFjdGl2aXR5SW5TZWNvbmRzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFr
ZUxpc3RzLnR4dAppbmRleCBhZjZiMTQxLi43MzA5YTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApA
QCAtMjE5LDcgKzIxOSw2IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvQVBJL2Mv
V0tVUkxSZXNwb25zZS5jcHAKICAgICBTaGFyZWQvQVBJL2MvV0tVc2VyQ29udGVudFVSTFBhdHRl
cm4uY3BwCiAKLSAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzQXJndW1lbnRDb2RlcnMuY3BwCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlLmNwcAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dl
YkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDU2NmZiM2IuLjA1
MDU0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OSBAQAorMjAxMy0wMi0wNCAgSHVhbmcgRG9u
Z3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29yZGluYXRlZCBH
cmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBj
aGFuZ2VzIGluIFdLMi4KKyAgICAgICAgMS4gQ2hhbmdlIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5IHRvIHVzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uLgorICAgICAgICAyLiBB
ZGQgZW5jb2RlL2RlY29kZSBvZiBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uIGluCisgICAg
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy4KKworICAgICAgICAqIFNoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5j
cHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgICAgICBFbmNvZGluZyBV
cGRhdGVJbWFnZUJhY2tpbmcgYW5kIENyZWF0ZVVwZGF0ZUF0bGFzIGNhbiBmYWlsIHdoZW4KKyAg
ICAgICAgICAgIGVuY29kaW5nIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGZhaWxzLCBi
dXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIHJlY292ZXIgaW4gdGhlIGNhc2UuCisgICAgICAgIChD
b3JlSVBDKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NP
cGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnNldEFuaW1hdGlvbnNMb2NrZWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRpbmdMYXllcnMpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXplUm9v
dENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpl
bnF1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp3aWxs
RW5xdWV1ZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpvcGVyYXRpb25RdWV1ZSk6
CisKIDIwMTMtMDItMDUgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+
CiAKICAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IE1ha2UgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lIG5vdCBrbm93IGNvbnRlbnRzIHNpemUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRD
b2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNWEwNmQxMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsODQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0
IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKLQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
Q29sb3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50M0QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXJBbmltYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aXR5VHJhbnNmb3JtT3Bl
cmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvTGVuZ3RoLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9T
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2tld1RyYW5zZm9y
bU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVwZGF0ZUluZm8uaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1RpbWluZ0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0jaW5jbHVkZSA8V2ViQ29y
ZS9GaWx0ZXJPcGVyYXRpb25zLmg+Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
LSNpbmNsdWRlICJXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0N1
c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DdXN0b21GaWx0
ZXJDb25zdGFudHMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0N1c3RvbUZpbHRlck51bWJlclBhcmFt
ZXRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9DdXN0b21GaWx0ZXJQcm9ncmFtLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9D
dXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ3VzdG9tRmlsdGVy
VHJhbnNmb3JtUGFyYW1ldGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DdXN0b21GaWx0ZXJWYWxp
ZGF0ZWRQcm9ncmFtLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9WYWxpZGF0ZWRDdXN0b21GaWx0ZXJP
cGVyYXRpb24uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwotI2VuZGlmCi0KLW5hbWVzcGFjZSBDb3JlSVBDIHsKLQotdm9pZCBBcmd1bWVudENvZGVyPEZs
b2F0UG9pbnQzRD46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEZsb2F0
UG9pbnQzRCYgZmxvYXRQb2ludDNEKQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQ
b2ludDNEPjo6ZW5jb2RlKGVuY29kZXIsIGZsb2F0UG9pbnQzRCk7Ci19Ci0KLWJvb2wgQXJndW1l
bnRDb2RlcjxGbG9hdFBvaW50M0Q+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBG
bG9hdFBvaW50M0QmIGZsb2F0UG9pbnQzRCkKLXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRD
b2RlcjxGbG9hdFBvaW50M0Q+OjpkZWNvZGUoZGVjb2RlciwgZmxvYXRQb2ludDNEKTsKLX0KLQot
dm9pZCBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IExlbmd0aCYgbGVuZ3RoKQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8TGVu
Z3RoPjo6ZW5jb2RlKGVuY29kZXIsIGxlbmd0aCk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxM
ZW5ndGg+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBMZW5ndGgmIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2Rl
ciwgbGVuZ3RoKTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4
Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybWF0aW9uTWF0cml4KQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8
VHJhbnNmb3JtYXRpb25NYXRyaXg+OjplbmNvZGUoZW5jb2RlciwgdHJhbnNmb3JtYXRpb25NYXRy
aXgpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpkZWNv
ZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtYXRpb25NYXRyaXgpCi17Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8VHJhbnNm
b3JtYXRpb25NYXRyaXg+OjpkZWNvZGUoZGVjb2RlciwgdHJhbnNmb3JtYXRpb25NYXRyaXgpOwot
fQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6
OkZpbHRlck9wZXJhdGlvbnM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIGVuY29kZXIgPDwg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpbHRlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRmlsdGVyT3Bl
cmF0aW9uKiBmaWx0ZXIgPSBmaWx0ZXJzLmF0KGkpOwotICAgICAgICBGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgdHlwZSA9IGZpbHRlci0+Z2V0T3BlcmF0aW9uVHlwZSgpOwotICAgICAg
ICBlbmNvZGVyLmVuY29kZUVudW0odHlwZSk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFU
RToKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRlciktPmFtb3VudCgpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNPTlRSQVNUOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lU
WToKLSAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2Fz
dDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyKS0+
YW1vdW50KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpCTFVSOgotICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5j
b2Rlciwgc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbio+KGZpbHRlciktPnN0
ZERldmlhdGlvbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0
ZXJPcGVyYXRpb24qIHNoYWRvdyA9IHN0YXRpY19jYXN0PGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJP
cGVyYXRpb24qPihmaWx0ZXIpOwotICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxJbnRQb2ludD46
OmVuY29kZShlbmNvZGVyLCBzaGFkb3ctPmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxpbnQzMl90PihzaGFkb3ctPnN0ZERldmlhdGlvbigpKTsKLSAgICAg
ICAgICAgIEFyZ3VtZW50Q29kZXI8Q29sb3I+OjplbmNvZGUoZW5jb2Rlciwgc2hhZG93LT5jb2xv
cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKENTU19TSEFE
RVJTKQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NOgotICAgICAgICAgICAg
Ly8gQ3VzdG9tIEZpbHRlcnMgYXJlIGNvbnZlcnRlZCB0byBWQUxJREFURURfQ1VTVE9NIGJlZm9y
ZSByZWFjaGluZyB0aGlzIHBvaW50LgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlZBTElE
QVRFRF9DVVNUT006IHsKLSAgICAgICAgICAgIGNvbnN0IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9w
ZXJhdGlvbiogY3VzdG9tT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgVmFsaWRhdGVkQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyKTsKLSAgICAgICAgICAgIEFTU0VSVChjdXN0b21P
cGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKSk7Ci0gICAgICAgICAgICBSZWZQdHI8Q3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gcHJvZ3JhbSA9IGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRh
dGVkUHJvZ3JhbSgpOwotICAgICAgICAgICAgQVNTRVJUKHByb2dyYW0tPmlzSW5pdGlhbGl6ZWQo
KSk7Ci0gICAgICAgICAgICBBU1NFUlQocHJvZ3JhbS0+cGxhdGZvcm1Db21waWxlZFByb2dyYW0o
KSk7Ci0gICAgICAgICAgICBBU1NFUlQocHJvZ3JhbS0+cGxhdGZvcm1Db21waWxlZFByb2dyYW0o
KS0+Y2xpZW50KCkpOwotICAgICAgICAgICAgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KiBj
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJDdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHkqPihwcm9ncmFtLT5wbGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbSgpLT5jbGllbnQoKSk7
Ci0gICAgICAgICAgICBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8g
PSBwcm9ncmFtLT5wcm9ncmFtSW5mbygpOwotICAgICAgICAgICAgLy8gRklYTUU6IEN1c3RvbUZp
bHRlck9wZXJhdGlvbiBzaG91bGQgbm90IG5lZWQgdGhlIG1lc2hUeXBlLCBpdCBzaG91bGQganVz
dCBiZSBlbmNvZGVkIGluIHRoZSBwcm9ncmFtIGl0c2VsZi4KLSAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI1MjkKLSAgICAgICAgICAgIGVu
Y29kZXIuZW5jb2RlRW51bShwcm9ncmFtSW5mby5tZXNoVHlwZSgpKTsKLSAgICAgICAgICAgIGVu
Y29kZXIgPDwgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpOwotICAgICAgICAgICAgQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBwYXJhbWV0ZXJzID0gY3VzdG9tT3BlcmF0aW9uLT5wYXJh
bWV0ZXJzKCk7Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihw
YXJhbWV0ZXJzLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBh
cmFtZXRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmls
dGVyUGFyYW1ldGVyPiBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2ldOwotICAgICAgICAgICAgICAg
IGVuY29kZXIgPDwgcGFyYW1ldGVyLT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci5l
bmNvZGVFbnVtKHBhcmFtZXRlci0+cGFyYW1ldGVyVHlwZSgpKTsKLQotICAgICAgICAgICAgICAg
IHN3aXRjaCAocGFyYW1ldGVyLT5wYXJhbWV0ZXJUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6QVJSQVk6IHsKLSAgICAgICAgICAgICAgICAgICAg
Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIqIGFycmF5UGFyYW1ldGVyID0gc3RhdGljX2Nhc3Q8
Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIqPihwYXJhbWV0ZXIuZ2V0KCkpOwotICAgICAgICAg
ICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihhcnJheVBhcmFtZXRl
ci0+c2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBh
cnJheVBhcmFtZXRlci0+c2l6ZSgpOyArK2opCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmNv
ZGVyIDw8IGFycmF5UGFyYW1ldGVyLT52YWx1ZUF0KGopOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI6Ok5VTUJFUjogewotICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0ZXJO
dW1iZXJQYXJhbWV0ZXIqIG51Ym1lclBhcmFtZXRlciA9IHN0YXRpY19jYXN0PEN1c3RvbUZpbHRl
ck51bWJlclBhcmFtZXRlcio+KHBhcmFtZXRlci5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51Ym1lclBhcmFtZXRlci0+c2l6ZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBudWJtZXJQYXJh
bWV0ZXItPnNpemUoKTsgKytqKQotICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlciA8PCBu
dWJtZXJQYXJhbWV0ZXItPnZhbHVlQXQoaik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEN1c3RvbUZpbHRlclBhcmFt
ZXRlcjo6VFJBTlNGT1JNOiB7Ci0gICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpbHRlclRyYW5z
Zm9ybVBhcmFtZXRlciogdHJhbnNmb3JtUGFyYW1ldGVyID0gc3RhdGljX2Nhc3Q8Q3VzdG9tRmls
dGVyVHJhbnNmb3JtUGFyYW1ldGVyKj4ocGFyYW1ldGVyLmdldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZW5jb2RlKGVuY29kZXIs
IHRyYW5zZm9ybVBhcmFtZXRlci0+b3BlcmF0aW9ucygpKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZW5jb2RlciA8PCBjdXN0b21PcGVyYXRpb24tPm1lc2hSb3dzKCk7
Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IGN1c3RvbU9wZXJhdGlvbi0+bWVzaENvbHVtbnMoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucz46OmRlY29kZShBcmd1bWVudERlY29kZXIm
IGRlY29kZXIsIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgdWlu
dDMyX3Qgc2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgb3BlcmF0
aW9ucyA9IGZpbHRlcnMub3BlcmF0aW9ucygpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5
cGU7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlcjsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUVudW0odHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpH
UkFZU0NBTEU6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAgICAgZG91YmxlIHZhbHVlOwotICAgICAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgZmlsdGVyID0gQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bjo6Y3JlYXRlKHZhbHVlLCB0eXBlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09O
VFJBU1Q6Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAg
ICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVl
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBmaWx0ZXIgPSBC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUodmFsdWUsIHR5cGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkJMVVI6IHsKLSAgICAgICAgICAgIExlbmd0aCBsZW5ndGg7Ci0gICAgICAgICAgICBp
ZiAoIUFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZGVjb2RlKGRlY29kZXIsIGxlbmd0aCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZmlsdGVyID0gQmx1ckZpbHRl
ck9wZXJhdGlvbjo6Y3JlYXRlKGxlbmd0aCwgdHlwZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAg
ICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uOwotICAgICAgICAgICAgaW50MzJfdCBzdGREZXZp
YXRpb247Ci0gICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlmICghQXJndW1l
bnRDb2RlcjxJbnRQb2ludD46OmRlY29kZShkZWNvZGVyLCBsb2NhdGlvbikpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGRE
ZXZpYXRpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlm
ICghQXJndW1lbnRDb2RlcjxDb2xvcj46OmRlY29kZShkZWNvZGVyLCBjb2xvcikpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZmlsdGVyID0gRHJvcFNoYWRvd0Zp
bHRlck9wZXJhdGlvbjo6Y3JlYXRlKGxvY2F0aW9uLCBzdGREZXZpYXRpb24sIGNvbG9yLCB0eXBl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKENTU19TSEFERVJT
KQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NOgotICAgICAgICAgICAgLy8g
Q3VzdG9tIEZpbHRlcnMgYXJlIGNvbnZlcnRlZCB0byBWQUxJREFURURfQ1VTVE9NIGJlZm9yZSBy
ZWFjaGluZyB0aGlzIHBvaW50LgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlZBTElEQVRF
RF9DVVNUT006IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDdXN0b21GaWx0ZXJPcGVyYXRpb24g
c2hvdWxkIG5vdCBuZWVkIHRoZSBtZXNoVHlwZS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI1MjkKLSAgICAgICAgICAgIEN1c3RvbUZp
bHRlck1lc2hUeXBlIG1lc2hUeXBlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVu
dW0obWVzaFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGludCBwcm9ncmFtSUQgPSAwOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9n
cmFtSUQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgdWlu
dDMyX3QgcGFyYW1ldGVyc1NpemU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBh
cmFtZXRlcnNTaXplKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QgcGFyYW1ldGVycyhwYXJhbWV0ZXJzU2l6ZSk7
Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnNTaXplOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgICAgICAgICBDdXN0b21G
aWx0ZXJQYXJhbWV0ZXI6OlBhcmFtZXRlclR5cGUgcGFyYW1ldGVyVHlwZTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG5hbWUpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0ocGFyYW1l
dGVyVHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAg
ICAgICAgIHN3aXRjaCAocGFyYW1ldGVyVHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyOjpBUlJBWTogewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXI+IGFycmF5UGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVy
QXJyYXlQYXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgYXJyYXlQYXJhbWV0ZXJTaXplOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGFycmF5UGFyYW1ldGVyU2l6ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhcnJheVBhcmFtZXRlclZhbHVl
OwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGFycmF5UGFyYW1l
dGVyU2l6ZTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGFycmF5UGFyYW1ldGVyVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5UGFyYW1ldGVyLT5hZGRW
YWx1ZShhcnJheVBhcmFtZXRlclZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gYXJyYXlQYXJhbWV0ZXIucmVsZWFzZSgpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6Ok5VTUJFUjogewotICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyPiBudW1iZXJQYXJhbWV0
ZXIgPSBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI6OmNyZWF0ZShuYW1lKTsKLSAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgbnVtYmVyUGFyYW1ldGVyU2l6ZTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShudW1iZXJQYXJhbWV0ZXJTaXplKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZG91Ymxl
IG51bWJlclBhcmFtZXRlclZhbHVlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IG51bWJlclBhcmFtZXRlclNpemU7ICsraikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShudW1iZXJQYXJhbWV0ZXJWYWx1ZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtYmVyUGFyYW1ldGVyLT5hZGRWYWx1ZShudW1iZXJQYXJhbWV0ZXJWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tpXSA9IG51
bWJlclBhcmFtZXRlci5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRl
cjo6VFJBTlNGT1JNOiB7Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJU
cmFuc2Zvcm1QYXJhbWV0ZXI+IHRyYW5zZm9ybVBhcmFtZXRlciA9IEN1c3RvbUZpbHRlclRyYW5z
Zm9ybVBhcmFtZXRlcjo6Y3JlYXRlKG5hbWUpOwotICAgICAgICAgICAgICAgICAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghQXJndW1l
bnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZGVjb2RlKGRlY29kZXIsIG9wZXJhdGlvbnMp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPnNldE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7Ci0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNbaV0gPSB0cmFuc2Zvcm1QYXJhbWV0ZXIucmVsZWFz
ZSgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1bnNpZ25lZCBtZXNo
Um93czsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1lc2hDb2x1bW5zOwotICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShtZXNoUm93cykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXNoQ29sdW1ucykpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRo
ZSBTaGFkZXJzIGFyZSBhbHJlYWR5IHZhbGlkYXRlZCwgc28gd2UganVzdCB1c2UgV2ViQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uIGZvciB0cmFuc3BvcnRhdGlvbi4KLSAgICAgICAgICAgIGZpbHRlciA9
IENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoMCwgcHJvZ3JhbUlELCBw
YXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hUeXBlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZpbHRlcikKLSAgICAgICAgICAgIG9w
ZXJhdGlvbnMuYXBwZW5kKGZpbHRlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0j
ZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLXZvaWQgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKLXsKLSAg
ICBlbmNvZGVyIDw8IHByb2dyYW1JbmZvLnZlcnRleFNoYWRlclN0cmluZygpOwotICAgIGVuY29k
ZXIgPDwgcHJvZ3JhbUluZm8uZnJhZ21lbnRTaGFkZXJTdHJpbmcoKTsKLSAgICBlbmNvZGVyLmVu
Y29kZUVudW0ocHJvZ3JhbUluZm8ucHJvZ3JhbVR5cGUoKSk7Ci0gICAgZW5jb2Rlci5lbmNvZGVF
bnVtKHByb2dyYW1JbmZvLm1lc2hUeXBlKCkpOwotICAgIGNvbnN0IEN1c3RvbUZpbHRlclByb2dy
YW1NaXhTZXR0aW5ncyYgbWl4U2V0dGluZ3MgPSBwcm9ncmFtSW5mby5taXhTZXR0aW5ncygpOwot
ICAgIGVuY29kZXIuZW5jb2RlRW51bShtaXhTZXR0aW5ncy5ibGVuZE1vZGUpOwotICAgIGVuY29k
ZXIuZW5jb2RlRW51bShtaXhTZXR0aW5ncy5jb21wb3NpdGVPcGVyYXRvcik7Ci19Ci0KLWJvb2wg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbz46OmRlY29kZShB
cmd1bWVudERlY29kZXImIGRlY29kZXIsIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFt
SW5mbykKLXsKLSAgICBTdHJpbmcgdmVydGV4U2hhZGVyU3RyaW5nOwotICAgIFN0cmluZyBmcmFn
bWVudFNoYWRlclN0cmluZzsKLSAgICBDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSBwcm9ncmFtVHlw
ZTsKLSAgICBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZTsKLSAgICBDdXN0b21GaWx0ZXJQ
cm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3M7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2
ZXJ0ZXhTaGFkZXJTdHJpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShmcmFnbWVudFNoYWRlclN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShwcm9ncmFtVHlwZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShtZXNoVHlwZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShtaXhTZXR0aW5ncy5i
bGVuZE1vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUVudW0obWl4U2V0dGluZ3MuY29tcG9zaXRlT3BlcmF0b3IpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcHJvZ3JhbUluZm8gPSBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyh2ZXJ0ZXhTaGFk
ZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nLCBwcm9ncmFtVHlwZSwgbWl4U2V0dGluZ3Ms
IG1lc2hUeXBlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NI
QURFUlMpCi0KLXZvaWQgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJh
bnNmb3JtT3BlcmF0aW9ucykKLXsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
Pih0cmFuc2Zvcm1PcGVyYXRpb25zLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0cmFuc2Zvcm1PcGVyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogb3BlcmF0aW9uID0gdHJhbnNmb3JtT3BlcmF0aW9ucy5hdChpKTsKLSAg
ICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsK
LQotICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAg
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9YOgotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0NBTEVfWToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlNDQUxFOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWjoKLSAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgotICAgICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDxjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlv
biktPngoKTsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT55KCk7Ci0gICAgICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9u
KS0+eigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5T
TEFURV9ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOgotICAg
ICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1o6Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q6Ci0gICAgICAgICAgICBBcmd1bWVudENv
ZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT54KCkpOwotICAgICAgICAgICAgQXJndW1l
bnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3BlcmF0aW9uKS0+eSgpKTsKLSAgICAgICAgICAgIEFy
Z3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PGNvbnN0IFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPnooKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURToKLSAgICAg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgotICAgICAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpST1RBVEVfM0Q6Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPngoKTsKLSAgICAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4ob3Bl
cmF0aW9uKS0+eSgpOwotICAgICAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxjb25zdCBS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihvcGVyYXRpb24pLT56KCk7Ci0gICAgICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9w
ZXJhdGlvbiktPmFuZ2xlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlNLRVdfWToKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVc6Ci0gICAgICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24q
PihvcGVyYXRpb24pLT5hbmdsZVgoKTsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPmFuZ2xlWSgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRS
SVg6Ci0gICAgICAgICAgICBBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZW5j
b2RlKGVuY29kZXIsIHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+
KG9wZXJhdGlvbiktPm1hdHJpeCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOgotICAgICAgICAgICAgQXJndW1lbnRDb2Rl
cjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxjb25z
dCBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJhdGlvbiktPm1hdHJpeCgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BF
Q1RJVkU6Ci0gICAgICAgICAgICBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVy
LCBzdGF0aWNfY2FzdDxjb25zdCBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbio+KG9wZXJh
dGlvbiktPnBlcnNwZWN0aXZlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElUWToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJv
b2wgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdHJhbnNmb3JtT3BlcmF0aW9ucykK
LXsKLSAgICB1aW50MzJfdCBvcGVyYXRpb25zU2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KG9wZXJhdGlvbnNTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvcGVyYXRpb25zU2l6ZTsgKytpKSB7Ci0gICAgICAgIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlOwotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRW51bShvcGVyYXRpb25UeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKLSAgICAgICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlNDQUxFX1g6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpT
Q0FMRV9ZOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6Ci0gICAgICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgotICAgICAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0NBTEVfM0Q6IHsKLSAgICAgICAgICAgIGRvdWJsZSB4LCB5LCB6OwotICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh4KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeikpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdHJhbnNmb3JtT3BlcmF0
aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
eCwgeSwgeiwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgotICAgICAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEVfWjoKLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV8zRDogewotICAgICAgICAgICAgTGVuZ3RoIHgsIHksIHo7Ci0gICAgICAgICAgICBpZiAoIUFy
Z3VtZW50Q29kZXI8TGVuZ3RoPjo6ZGVjb2RlKGRlY29kZXIsIHgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxMZW5ndGg+Ojpk
ZWNvZGUoZGVjb2RlciwgeSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgaWYgKCFBcmd1bWVudENvZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCB6KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoeCwgeSwgeiwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURToKLSAgICAgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgotICAgICAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Uk9UQVRFX1k6Ci0gICAgICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RB
VEVfM0Q6IHsKLSAgICAgICAgICAgIGRvdWJsZSB4LCB5LCB6LCBhbmdsZTsKLSAgICAgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoeCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh5KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHopKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYW5n
bGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHRyYW5zZm9y
bU9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoK
LSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKLSAgICAgICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlNLRVc6IHsKLSAgICAgICAgICAgIGRvdWJsZSBhbmdsZVgsIGFu
Z2xlWTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYW5nbGVYKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFu
Z2xlWSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdHJhbnNm
b3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZShhbmdsZVgsIGFuZ2xlWSwgb3BlcmF0aW9uVHlwZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDog
ewotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgICAgICAgICAg
aWYgKCFBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZGVjb2RlKGRlY29kZXIs
IG1hdHJpeCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdHJh
bnNmb3JtT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKG1hdHJpeCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDogewotICAgICAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgICAgICAgICAgaWYgKCFBcmd1bWVudENv
ZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZGVjb2RlKGRlY29kZXIsIG1hdHJpeCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdHJhbnNmb3JtT3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
bWF0cml4KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRy
YW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6IHsKLSAgICAgICAgICAgIExlbmd0aCBwZXJz
cGVjdGl2ZTsKLSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUo
ZGVjb2RlciwgcGVyc3BlY3RpdmUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChQZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHBlcnNwZWN0aXZlKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6SURF
TlRJVFk6Ci0gICAgICAgICAgICB0cmFuc2Zvcm1PcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmQoSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuY29kZVRpbWluZ0Z1bmN0
aW9uKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWlu
Z0Z1bmN0aW9uKQotewotICAgIGlmICghdGltaW5nRnVuY3Rpb24pIHsKLSAgICAgICAgZW5jb2Rl
ci5lbmNvZGVFbnVtKFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlvblR5cGUoLTEpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlv
blR5cGUgdHlwZSA9IHRpbWluZ0Z1bmN0aW9uID8gdGltaW5nRnVuY3Rpb24tPnR5cGUoKSA6IFRp
bWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0odHlw
ZSk7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFy
RnVuY3Rpb246Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkN1Ymlj
QmV6aWVyRnVuY3Rpb246IHsKLSAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
biogY3ViaWMgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4o
dGltaW5nRnVuY3Rpb24pOwotICAgICAgICBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpUaW1p
bmdGdW5jdGlvblByZXNldCBiZXppZXJQcmVzZXQgPSBjdWJpYy0+dGltaW5nRnVuY3Rpb25QcmVz
ZXQoKTsKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVFbnVtKGJlemllclByZXNldCk7Ci0gICAgICAg
IGlmIChiZXppZXJQcmVzZXQgPT0gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Q3VzdG9tKSB7
Ci0gICAgICAgICAgICBlbmNvZGVyIDw8IGN1YmljLT54MSgpOwotICAgICAgICAgICAgZW5jb2Rl
ciA8PCBjdWJpYy0+eTEoKTsKLSAgICAgICAgICAgIGVuY29kZXIgPDwgY3ViaWMtPngyKCk7Ci0g
ICAgICAgICAgICBlbmNvZGVyIDw8IGN1YmljLT55MigpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1bmN0aW9uOiB7Ci0g
ICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZXBzID0gc3RhdGljX2Nhc3Q8Y29u
c3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RlcHMtPm51bWJlck9mU3RlcHMoKSk7Ci0gICAg
ICAgIGVuY29kZXIgPDwgc3RlcHMtPnN0ZXBBdFN0YXJ0KCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICB9Ci19Ci0KLWJvb2wgZGVjb2RlVGltaW5nRnVuY3Rpb24oQXJndW1lbnREZWNvZGVy
JiBkZWNvZGVyLCBSZWZQdHI8VGltaW5nRnVuY3Rpb24+JiB0aW1pbmdGdW5jdGlvbikKLXsKLSAg
ICBUaW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlIHR5cGU7Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZUVudW0odHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh0
eXBlID09IFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlvblR5cGUoLTEpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVGltaW5nRnVuY3Rp
b246OkxpbmVhckZ1bmN0aW9uOgotICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IExpbmVhclRpbWlu
Z0Z1bmN0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBUaW1p
bmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjogewotICAgICAgICBkb3VibGUgeDEsIHkx
LCB4MiwgeTI7Ci0gICAgICAgIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0
aW9uUHJlc2V0IGJlemllclByZXNldDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUVudW0o
YmV6aWVyUHJlc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGJl
emllclByZXNldCAhPSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpDdXN0b20pIHsKLSAgICAg
ICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRl
KGJlemllclByZXNldCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHgxKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh5MSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoeDIpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHkyKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IEN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5Mik7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1bmN0aW9uOiB7Ci0gICAgICAg
IHVpbnQzMl90IG51bWJlck9mU3RlcHM7Ci0gICAgICAgIGJvb2wgc3RlcEF0U3RhcnQ7Ci0gICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUobnVtYmVyT2ZTdGVwcykpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RlcEF0U3RhcnQpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHRpbWluZ0Z1bmN0aW9uID0gU3RlcHNU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKG51bWJlck9mU3RlcHMsIHN0ZXBBdFN0YXJ0KTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBBcmd1bWVudENvZGVyPEdyYXBoaWNzTGF5ZXJBbmltYXRpb24+OjplbmNvZGUoQXJndW1l
bnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9uJiBhbmltYXRp
b24pCi17Ci0gICAgZW5jb2RlciA8PCBhbmltYXRpb24ubmFtZSgpOwotICAgIGVuY29kZXIgPDwg
YW5pbWF0aW9uLmJveFNpemUoKTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0oYW5pbWF0aW9uLnN0
YXRlKCkpOwotICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLnN0YXJ0VGltZSgpOwotICAgIGVuY29k
ZXIgPDwgYW5pbWF0aW9uLnBhdXNlVGltZSgpOwotICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uLmxp
c3RzTWF0Y2goKTsKLQotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbk9iamVjdCA9IGFu
aW1hdGlvbi5hbmltYXRpb24oKTsKLSAgICBlbmNvZGVyLmVuY29kZUVudW0oYW5pbWF0aW9uT2Jq
ZWN0LT5kaXJlY3Rpb24oKSk7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
YW5pbWF0aW9uT2JqZWN0LT5maWxsTW9kZSgpKTsKLSAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbk9i
amVjdC0+ZHVyYXRpb24oKTsKLSAgICBlbmNvZGVyIDw8IGFuaW1hdGlvbk9iamVjdC0+aXRlcmF0
aW9uQ291bnQoKTsKLSAgICBlbmNvZGVUaW1pbmdGdW5jdGlvbihlbmNvZGVyLCBhbmltYXRpb25P
YmplY3QtPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCkpOwotCi0gICAgY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbi5rZXlmcmFtZXMoKTsKLSAgICBlbmNvZGVyLmVu
Y29kZUVudW0oa2V5ZnJhbWVzLnByb3BlcnR5KCkpOwotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGtleWZyYW1lcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvblZhbHVl
KiB2YWx1ZSA9IGtleWZyYW1lcy5hdChpKTsKLSAgICAgICAgZW5jb2RlciA8PCB2YWx1ZS0+a2V5
VGltZSgpOwotICAgICAgICBlbmNvZGVUaW1pbmdGdW5jdGlvbihlbmNvZGVyLCB2YWx1ZS0+dGlt
aW5nRnVuY3Rpb24oKSk7Ci0gICAgICAgIHN3aXRjaCAoa2V5ZnJhbWVzLnByb3BlcnR5KCkpIHsK
LSAgICAgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eToKLSAgICAgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KHZhbHVlKS0+dmFs
dWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlX
ZWJraXRUcmFuc2Zvcm06Ci0gICAgICAgICAgICBlbmNvZGVyIDw8ICpzdGF0aWNfY2FzdDxjb25z
dCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KHZhbHVlKS0+dmFsdWUoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICAgICAgY2FzZSBBbmltYXRlZFBy
b3BlcnR5V2Via2l0RmlsdGVyOgotICAgICAgICAgICAgZW5jb2RlciA8PCAqc3RhdGljX2Nhc3Q8
Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPih2YWx1ZSktPnZhbHVlKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSNlbmRpZgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xheWVyQW5p
bWF0aW9uPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgR3JhcGhpY3NMYXllckFu
aW1hdGlvbiYgYW5pbWF0aW9uKQotewotICAgIFN0cmluZyBuYW1lOwotICAgIEludFNpemUgYm94
U2l6ZTsKLSAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZSBzdGF0ZTsK
LSAgICBkb3VibGUgc3RhcnRUaW1lOwotICAgIGRvdWJsZSBwYXVzZVRpbWU7Ci0gICAgYm9vbCBs
aXN0c01hdGNoOwotCi0gICAgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9u
OwotICAgIHVuc2lnbmVkIGZpbGxNb2RlOwotICAgIGRvdWJsZSBkdXJhdGlvbjsKLSAgICBkb3Vi
bGUgaXRlcmF0aW9uQ291bnQ7Ci0gICAgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5j
dGlvbjsKLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb25PYmplY3Q7Ci0KLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKG5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShib3hTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVFbnVtKHN0YXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoc3RhcnRUaW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocGF1c2VUaW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGlzdHNNYXRjaCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlRW51bShkaXJlY3Rpb24pKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShmaWxsTW9kZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGR1cmF0aW9uKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXRlcmF0aW9uQ291bnQpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVUaW1pbmdGdW5jdGlvbihkZWNv
ZGVyLCB0aW1pbmdGdW5jdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGFuaW1h
dGlvbk9iamVjdCA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uT2JqZWN0LT5z
ZXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKLSAgICBhbmltYXRpb25PYmplY3QtPnNldEZpbGxNb2Rl
KGZpbGxNb2RlKTsKLSAgICBhbmltYXRpb25PYmplY3QtPnNldER1cmF0aW9uKGR1cmF0aW9uKTsK
LSAgICBhbmltYXRpb25PYmplY3QtPnNldEl0ZXJhdGlvbkNvdW50KGl0ZXJhdGlvbkNvdW50KTsK
LSAgICBpZiAodGltaW5nRnVuY3Rpb24pCi0gICAgICAgIGFuaW1hdGlvbk9iamVjdC0+c2V0VGlt
aW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24pOwotCi0gICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIHBy
b3BlcnR5OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGVFbnVtKHByb3BlcnR5KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIEtleWZyYW1lVmFsdWVMaXN0IGtleWZyYW1lcyhwcm9wZXJ0eSk7
Ci0gICAgdW5zaWduZWQga2V5ZnJhbWVzU2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGtl
eWZyYW1lc1NpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGtleWZyYW1lc1NpemU7ICsraSkgewotICAgICAgICBmbG9hdCBrZXlUaW1lOwot
ICAgICAgICBSZWZQdHI8VGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGtleVRpbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoIWRlY29kZVRpbWluZ0Z1bmN0aW9uKGRlY29kZXIsIHRpbWluZ0Z1bmN0aW9u
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzd2l0Y2ggKHByb3BlcnR5
KSB7Ci0gICAgICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6IHsKLSAgICAgICAgICAg
IGZsb2F0IHZhbHVlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAga2V5ZnJhbWVzLmluc2Vy
dChuZXcgRmxvYXRBbmltYXRpb25WYWx1ZShrZXlUaW1lLCB2YWx1ZSwgdGltaW5nRnVuY3Rpb24p
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQW5pbWF0ZWRQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogewotICAgICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9u
cyB0cmFuc2Zvcm07Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRyYW5zZm9ybSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAga2V5ZnJhbWVzLmlu
c2VydChuZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoa2V5VGltZSwgJnRyYW5zZm9ybSwgdGlt
aW5nRnVuY3Rpb24pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0jaWYgRU5BQkxF
KENTU19GSUxURVJTKQotICAgICAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXI6
IHsKLSAgICAgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyOwotICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShmaWx0ZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGtleWZyYW1lcy5pbnNlcnQobmV3IEZpbHRlckFuaW1hdGlvblZhbHVlKGtl
eVRpbWUsICZmaWx0ZXIsIHRpbWluZ0Z1bmN0aW9uKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotI2VuZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGFuaW1hdGlvbiA9IEdyYXBoaWNzTGF5ZXJBbmltYXRpb24o
bmFtZSwga2V5ZnJhbWVzLCBib3hTaXplLCBhbmltYXRpb25PYmplY3QuZ2V0KCksIHN0YXJ0VGlt
ZSwgbGlzdHNNYXRjaCk7Ci0gICAgYW5pbWF0aW9uLnNldFN0YXRlKHN0YXRlLCBwYXVzZVRpbWUp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xh
eWVyQW5pbWF0aW9ucz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIGVuY29kZXIgPDwgYW5p
bWF0aW9ucy5hbmltYXRpb25zKCk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxHcmFwaGljc0xh
eWVyQW5pbWF0aW9ucz46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIHJldHVybiBkZWNvZGVyLmRlY29k
ZShhbmltYXRpb25zLmFuaW1hdGlvbnMoKSk7Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLXZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbj46OmVu
Y29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3Vy
ZmFjZVRva2VuJiB0b2tlbikKLXsKLSNpZiBPUyhEQVJXSU4pCi0gICAgZW5jb2RlciA8PCBBdHRh
Y2htZW50KHRva2VuLmZyb250QnVmZmVySGFuZGxlLCBNQUNIX01TR19UWVBFX01PVkVfU0VORCk7
Ci0gICAgZW5jb2RlciA8PCBBdHRhY2htZW50KHRva2VuLmJhY2tCdWZmZXJIYW5kbGUsIE1BQ0hf
TVNHX1RZUEVfTU9WRV9TRU5EKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0gICAgZW5jb2RlciA8PCBy
ZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih0b2tlbi5mcm9udEJ1ZmZlckhhbmRsZSk7Ci0gICAg
ZW5jb2RlciA8PCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Pih0b2tlbi5iYWNrQnVmZmVySGFu
ZGxlKTsKLSNlbGlmIE9TKExJTlVYKQotICAgIGVuY29kZXIgPDwgdG9rZW4uZnJvbnRCdWZmZXJI
YW5kbGU7Ci0jZW5kaWYKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNz
U3VyZmFjZVRva2VuPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6
R3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQotewotI2lmIE9TKFdJTkRPV1MpCi0gICAgdWlu
dDY0X3QgZnJvbnRCdWZmZXJIYW5kbGU7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShmcm9udEJ1
ZmZlckhhbmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0b2tlbi5mcm9udEJ1ZmZl
ckhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JhcGhpY3NTdXJmYWNlVG9rZW46OkJ1ZmZlckhh
bmRsZT4oZnJvbnRCdWZmZXJIYW5kbGUpOwotICAgIHVpbnQ2NF90IGJhY2tCdWZmZXJIYW5kbGU7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShiYWNrQnVmZmVySGFuZGxlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHRva2VuLmJhY2tCdWZmZXJIYW5kbGUgPSByZWludGVycHJldF9jYXN0
PEdyYXBoaWNzU3VyZmFjZVRva2VuOjpCdWZmZXJIYW5kbGU+KGJhY2tCdWZmZXJIYW5kbGUpOwot
I2VsaWYgT1MoREFSV0lOKQotICAgIEF0dGFjaG1lbnQgZnJvbnRBdHRhY2htZW50LCBiYWNrQXR0
YWNobWVudDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGZyb250QXR0YWNobWVudCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJhY2tBdHRhY2htZW50
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdG9rZW4gPSBHcmFwaGljc1N1cmZhY2VU
b2tlbihmcm9udEF0dGFjaG1lbnQucG9ydCgpLCBiYWNrQXR0YWNobWVudC5wb3J0KCkpOwotI2Vs
aWYgT1MoTElOVVgpCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0b2tlbi5mcm9udEJ1ZmZlckhh
bmRsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotICAgIHJldHVybiB0cnVlOwot
fQotI2VuZGlmCi0KLXZvaWQgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZExheWVySW5mbz46OmVu
Y29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZv
JiBjb29yZGluYXRlZExheWVySW5mbykKLXsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPENvb3Jk
aW5hdGVkTGF5ZXJJbmZvPjo6ZW5jb2RlKGVuY29kZXIsIGNvb3JkaW5hdGVkTGF5ZXJJbmZvKTsK
LX0KLQotYm9vbCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkTGF5ZXJJbmZvPjo6ZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciYgZGVjb2RlciwgQ29vcmRpbmF0ZWRMYXllckluZm8mIGNvb3JkaW5hdGVk
TGF5ZXJJbmZvKQotewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPENvb3JkaW5hdGVk
TGF5ZXJJbmZvPjo6ZGVjb2RlKGRlY29kZXIsIGNvb3JkaW5hdGVkTGF5ZXJJbmZvKTsKLX0KLQot
dm9pZCBBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciYgZW5jb2RlciwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZv
KQotewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjplbmNvZGUo
ZW5jb2Rlciwgc3VyZmFjZVVwZGF0ZUluZm8pOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8U3Vy
ZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBTdXJmYWNl
VXBkYXRlSW5mbyYgc3VyZmFjZVVwZGF0ZUluZm8pCi17Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3Vt
ZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUoZGVjb2Rlciwgc3VyZmFjZVVwZGF0
ZUluZm8pOwotfQotCi19IC8vIG5hbWVzcGFjZSBDb3JlSVBDCi0KLSNlbmRpZiAvLyBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NBcmd1bWVudENvZGVycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTdkZWVm
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDEyIENv
bXBhbnkgMTAwLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzX2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
X2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJBcmd1bWVudENv
ZGVycy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBGbG9hdFBvaW50M0Q7Ci1jbGFz
cyBHcmFwaGljc0xheWVyQW5pbWF0aW9uOwotY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7
Ci1jbGFzcyBTdXJmYWNlVXBkYXRlSW5mbzsKLWNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4Owot
Y2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKLXN0cnVjdCBDb29yZGluYXRlZExheWVySW5mbzsK
LXN0cnVjdCBMZW5ndGg7Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1jbGFzcyBGaWx0ZXJP
cGVyYXRpb25zOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi1jbGFzcyBDdXN0
b21GaWx0ZXJQcm9ncmFtSW5mbzsKLSNlbmRpZgotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci1zdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlVG9rZW47Ci0jZW5kaWYKLX0KLQotbmFtZXNwYWNlIENv
cmVJUEMgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0
UG9pbnQzRD4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyJiwgV2ViQ29yZTo6RmxvYXRQb2ludDNEJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Okxlbmd0aD4gewotICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpMZW5ndGgmKTsKLSAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6TGVuZ3RoJik7Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci19Owot
Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKLSAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0
aW9ucyYpOwotfTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbz4g
ewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3Jl
OjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1
bWVudERlY29kZXImLCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwotfTsKLSNl
bmRpZgotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRyYW5zZm9y
bU9wZXJhdGlvbnM+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwg
Y29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9ucyYpOwotICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zJik7Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYs
IGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7Ci0gICAgc3RhdGljIGJv
b2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRp
b25zJik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJBbmltYXRpb24+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRF
bmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbiYpOwotICAgIHN0
YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
QW5pbWF0aW9uJik7Ci19OwotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuPiB7Ci0g
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzU3VyZmFjZVRva2VuJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciYsIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJik7Ci19OwotI2VuZGlmCi0KLXRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklu
Zm8+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29y
ZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyJiwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIENvcmVJUEMKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2Vu
ZGlmIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVyc19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1
cmZhY2UuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlLmNwcAppbmRleCA1MmI3ZjZkLi43ZjhmMzBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRl
ZFN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5jcHAKQEAgLTIyLDkgKzIyLDEwIEBACiAjaW5jbHVk
ZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCisjaW5j
bHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQ29k
ZXJzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2VUb2tlbi5oPgogCiAjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKQpAQCAtMzMsMTMgKzM0LDI2IEBACiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRTdXJmYWNlPiBDb29yZGluYXRlZFN1cmZhY2U6OmRlY29kZShDb29yZGluYXRlZEdyYXBoaWNz
T3BlcmF0aW9uRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBXZWJLaXQ6OldlYkNvb3JkaW5hdGVk
U3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKKyAgICBpZiAoIVdlYktpdDo6V2ViQ29vcmRpbmF0ZWRT
dXJmYWNlOjpIYW5kbGU6OmRlY29kZShkZWNvZGVyLCBoYW5kbGUpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhh
bmRsZSk7Cit9CisKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6SGFuZGxlOjpIYW5kbGUoKQogewogfQogCi12b2lkIFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZTo6SGFuZGxlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAordm9pZCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZTo6ZW5jb2RlKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAg
IGVuY29kZXIgPDwgbV9zaXplIDw8IG1fZmxhZ3M7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CkBAIC00NywxMCArNjEsMTMgQEAgdm9pZCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZTo6
ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY28KICAgICBpZiAobV9n
cmFwaGljc1N1cmZhY2VUb2tlbi5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgot
ICAgIGVuY29kZXIgPDwgbV9iaXRtYXBIYW5kbGU7CisgICAgT3duUHRyPENvcmVJUEM6OkFyZ3Vt
ZW50RW5jb2Rlcj4gaGFuZGxlRW5jb2RlcjsKKyAgICBtX2JpdG1hcEhhbmRsZS5lbmNvZGUoKmhh
bmRsZUVuY29kZXIpOworICAgIGVuY29kZXIuZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90Piho
YW5kbGVFbmNvZGVyLT5idWZmZXJTaXplKCkpKTsKKyAgICBlbmNvZGVyLmVuY29kZShoYW5kbGVF
bmNvZGVyLT5idWZmZXIoKSwgaGFuZGxlRW5jb2Rlci0+YnVmZmVyU2l6ZSgpKTsKIH0KIAotYm9v
bCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciYgZGVjb2RlciwgSGFuZGxlJiBoYW5kbGUpCitib29sIFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6SGFuZGxlOjpkZWNvZGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bkRlY29kZXImIGRlY29kZXIsIEhhbmRsZSYgaGFuZGxlKQogewogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaGFuZGxlLm1fc2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYyLDEyICs3
OSwyOSBAQCBib29sIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBIYQogICAgIGlmIChoYW5kbGUubV9ncmFwaGlj
c1N1cmZhY2VUb2tlbi5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0g
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUubV9iaXRtYXBIYW5kbGUpKQorICAgIHVpbnQ2
NF90IGhhbmRsZVNpemUgPSAwOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlU2l6ZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShidWZmZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBPd25QdHI8Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyPiBoYW5kbGVEZWNvZGVyID0gQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyOjpjcmVhdGUoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSk7CisKKyAgICBpZiAoIVNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlOjpkZWNvZGUoKmhhbmRsZURl
Y29kZXIsIGhhbmRsZS5tX2JpdG1hcEhhbmRsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6ZW5jb2Rl
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyJiBlbmNvZGVyKQor
eworICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKKyAgICBjcmVhdGVI
YW5kbGUoaGFuZGxlKTsKKyAgICBoYW5kbGUuZW5jb2RlKGVuY29kZXIpOworfQorCiBQYXNzUmVm
UHRyPFdlYkNvb3JkaW5hdGVkU3VyZmFjZT4gV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncykKIHsK
ICAgICBSZWZQdHI8V2ViQ29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJD
b29yZGluYXRlZFN1cmZhY2UuaAppbmRleCA1Mzg2YTkxLi5jYzMzYjM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1
cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9X
ZWJDb29yZGluYXRlZFN1cmZhY2UuaApAQCAtMzIsNiArMzIsOCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQml0bWFwVGV4dHVyZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNz
IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25FbmNvZGVyOworY2xhc3MgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkRlY29kZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDMs
OCArNDUsOCBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBIYW5kbGUoKTsKIAotICAg
ICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKLSAgICAg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYsIEhhbmRsZSYp
OworICAgICAgICB2b2lkIGVuY29kZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9uRW5jb2RlciYpIGNvbnN0OworICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkRlY29kZXImLCBIYW5kbGUmKTsKIAogI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQogICAgICAgICBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tl
biBncmFwaGljc1N1cmZhY2VUb2tlbigpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGhpY3NTdXJmYWNl
VG9rZW47IH0KQEAgLTYwLDYgKzYyLDggQEAgcHVibGljOgogICAgICAgICBXZWJDb3JlOjpDb29y
ZGluYXRlZFN1cmZhY2U6OkZsYWdzIG1fZmxhZ3M7CiAgICAgfTsKIAorICAgIHZpcnR1YWwgdm9p
ZCBlbmNvZGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkVuY29kZXImKSBP
VkVSUklERTsKKwogICAgIC8vIENyZWF0ZSBhIG5ldyBXZWJDb29yZGluYXRlZFN1cmZhY2UsIGFu
ZCBhbGxvY2F0ZSBlaXRoZXIgYSBHcmFwaGljc1N1cmZhY2Ugb3IgYSBTaGFyZWFibGVCaXRtYXAg
YXMgYmFja2luZy4KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb29yZGluYXRlZFN1cmZhY2U+
IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgRmxhZ3MpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKaW5kZXggZjliZGI4
Mi4uYmYyN2E2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5LmNwcApAQCAtMjMsMTYgKzIzLDEyIEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKIAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdE1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5j
bHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRMYXll
ckluZm8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5j
bHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCIKLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC01OSw3OCArNTUsMTIgQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3QKICAgICBtX3NjZW5lLT5hcHBlbmRVcGRhdGUoZnVuY3Rp
b24pOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxl
Rm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Y3JlYXRlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnNj
YWxlRmFjdG9yKSk7Ci0gICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGls
ZVJlY3QsIHVwZGF0ZUluZm8pOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlE
LCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVS
ZWN0LCB0aWxlUmVjdCwgdXBkYXRlSW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZz
ZXQpKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRp
bGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQot
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVt
b3ZlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0
bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVV
cGRhdGVBdGxhcywgbV9zY2VuZS5nZXQoKSwgYXRsYXNJRCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
OjpjcmVhdGUoaGFuZGxlKSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpyZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVXBkYXRlQXRsYXMs
IG1fc2NlbmUuZ2V0KCksIGF0bGFzSUQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6Y3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5h
dGVkTGF5ZXJJRD4mIGlkcykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUxheWVycywgbV9zY2VuZS5nZXQoKSwgaWRzKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5
ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCi17Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcnMsIG1f
c2NlbmUuZ2V0KCksIGlkcykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRSb290
TGF5ZXJJRCwgbV9zY2VuZS5nZXQoKSwgaWQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGluZm8pCi17Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRlLCBtX3Nj
ZW5lLmdldCgpLCBpZCwgaW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxk
cmVuLCBtX3NjZW5lLmdldCgpLCBpZCwgY2hpbGRyZW4pKTsKLX0KLQotI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0
aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnNldExheWVyRmlsdGVycywgbV9zY2VuZS5nZXQoKSwgaWQsIGZpbHRlcnMp
KTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCi17
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1v
dmVDdXN0b21GaWx0ZXJQcm9ncmFtLCBtX3NjZW5lLmdldCgpLCBpZCkpOwotfQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQg
aWQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKK3ZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVy
YXRpb25zKGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIG9wZXJhdGlvbnNEYXRhLCBjb25z
dCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXpl
LCBjb25zdCBJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0sIG1f
c2NlbmUuZ2V0KCksIGlkLCBwcm9ncmFtSW5mbykpOwotfQotI2VuZGlmCisgICAgRGVjb2RlckFk
YXB0ZXIgb3BlcmF0aW9uRGVjb2RlckFkYXB0ZXIob3BlcmF0aW9uc0RhdGEuZGF0YSgpLCBvcGVy
YXRpb25zRGF0YS5zaXplKCkpOworICAgIE93blB0cjxDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0
aW9ucz4gb3BlcmF0aW9ucyA9IENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zOjpjcmVhdGUo
b3BlcmF0aW9uRGVjb2RlckFkYXB0ZXIpOwogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwg
Y29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRSZWN0JiBjb3ZlcmVkUmVjdCkK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZs
dXNoTGF5ZXJDaGFuZ2VzLCBtX3NjZW5lLmdldCgpLCBzY3JvbGxQb3NpdGlvbikpOworICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0Q29vcmRp
bmF0ZWRHcmFwaGljc09wZXJhdGlvbnMsIG1fc2NlbmUuZ2V0KCksIG9wZXJhdGlvbnMsIHNjcm9s
bFBvc2l0aW9uKSk7CiAgICAgdXBkYXRlVmlld3BvcnQoKTsKICNpZiBVU0UoVElMRURfQkFDS0lO
R19TVE9SRSkKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+ZGlkUmVuZGVyRnJhbWUo
Y29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7CkBAIC0xNDAsMzEgKzcwLDYgQEAgdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgRmxvYXRQb2lu
dCYgc2Nyb2xsUG9zaXQKICNlbmRpZgogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFn
ZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6Y3JlYXRlSW1hZ2VCYWNraW5nLCBtX3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVJbWFnZUJhY2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdl
SUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRz
LCBtX3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpyZW1vdmVJbWFnZUJhY2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQpKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJBbmltYXRpb25z
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFu
aW1hdGlvbnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnMsIG1fc2NlbmUuZ2V0KCksIGlkLCBhbmltYXRpb25z
KSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlv
bnNMb2NrZWQoYm9vbCBsb2NrZWQpCiB7CiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBbmltYXRpb25zTG9ja2VkLCBtX3NjZW5lLmdldCgpLCBs
b2NrZWQpKTsKQEAgLTE4OSw1MCArOTQsMTYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6cmVuZGVyTmV4dEZyYW1lKCkKIH0KIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1B
VElPTl9GUkFNRSkKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlcXVlc3RB
bmltYXRpb25GcmFtZSgpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIG1fc2NlbmUuZ2V0KCkpKTsKLSAg
ICB1cGRhdGVWaWV3cG9ydCgpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjphbmltYXRpb25GcmFtZVJlYWR5KCkKIHsKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBh
Z2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OkFuaW1hdGlvbkZyYW1lUmVhZHkoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJ
RCgpKTsKIH0KICNlbmRpZgogCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tl
biYgdG9rZW4pCi17Ci0gICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBH
cmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6
U3VwcG9ydHNTaGFyaW5nOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzLCBtX3NjZW5lLmdldCgpLCBpZCwgY2FudmFzU2l6ZSwg
R3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFzU2l6ZSwgc3VyZmFjZUZsYWdzLCB0b2tlbikp
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c3luY0NhbnZhcyhD
b29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVyKQotewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY0NhbnZhcywgbV9z
Y2VuZS5nZXQoKSwgaWQsIGZyb250QnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQotewot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVzdHJv
eUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQpKTsKLX0KLSNlbmRpZgotCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExh
eWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUmVwYWludENvdW50LCBtX3NjZW5lLmdldCgpLCBp
ZCwgdmFsdWUpKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cHVy
Z2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJv
Y2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OlB1cmdlQmFj
a2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwogfQog
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6c2V0QmFja2dyb3VuZENvbG9yLCBtX3NjZW5lLmdldCgpLCBjb2xv
cikpOwotfQotCiB9CiAjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggYTg2
MDBkOC4uNDVkMDM1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eS5oCkBAIC0yMywyOCArMjMsMjAgQEAKICNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCiAKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5
LmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29vcmRpbmF0ZWRMYXll
ckluZm87CiBjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbzsKIH0KIAorbmFtZXNwYWNlIENvcmVJUEMg
eworY2xhc3MgRGF0YVJlZmVyZW5jZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IDogcHVibGljIFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZUNsaWVudCB7CkBAIC01Myw0MyArNDUsMTEgQEAgY2xhc3MgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lQ2wKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eShEcmF3aW5nQXJlYVByb3h5Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkoKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
bmZvJik7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklE
PiYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5
ZXJGaWx0ZXJzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Rmls
dGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIHZv
aWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvJik7Ci0gICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
KGludCBpZCk7Ci0jZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVD
b21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklE
PiYpOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklEKTsKKyAgICB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25z
KGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCk7CisgICAgdm9pZCBzZXRBbmltYXRp
b25zTG9ja2VkKGJvb2wpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5
VmVjdG9yKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsKLSAgICB2b2lkIGNyZWF0ZVRp
bGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZv
Jik7Ci0gICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKLSAgICB2b2lkIGNy
ZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6SGFuZGxlJik7Ci0gICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxh
c0lEKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRs
ZSYpOwotICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhXZWJDb3Jl
OjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2b2lkIGRpZFJlY2VpdmVDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJ
UEM6Ok1lc3NhZ2VEZWNvZGVyJik7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9p
ZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKLSAgICB2
b2lkIHN5bmNDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9u
dEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExheWVyUmVwYWludENvdW50KFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKICAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NlbmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJDb3JlOjpDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7
Ci0gICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwotI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOwotI2Vu
ZGlmCi0gICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsK
IAogICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCBNZXRob2RzLgogI2lmIEVO
QUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KaW5kZXggMTg4
OGFkYi4uMDdjZDYxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KQEAgLTE5LDQzICsxOSw3IEBACiAK
ICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiBtZXNzYWdlcyAtPiBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eSBMZWdhY3lSZWNlaXZlciB7Ci0gICAgU2V0Q29tcG9zaXRpbmdMYXll
clN0YXRlKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbyBsYXllcklu
Zm8pCi0gICAgU2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8
dWludDMyX3Q+IGNoaWxkcmVuKQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBTZXRDb21w
b3NpdGluZ0xheWVyRmlsdGVycyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cyBmaWx0ZXJzKQotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIENyZWF0ZUN1
c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5m
byBwcm9ncmFtSW5mbykKLSAgICBSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKLSNl
bmRpZgotICAgIFNldFJvb3RDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQotICAgIENyZWF0
ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRzKQotICAgIERlbGV0ZUNvbXBv
c2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRzKQotICAgIENyZWF0ZVRpbGVGb3JMYXll
cih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGls
ZVJlY3QsIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgVXBkYXRl
VGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6
SW50UmVjdCB0aWxlUmVjdCwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykK
LSAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
KQotICAgIENyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFdlYktpdDo6V2ViQ29v
cmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQotICAgIFJlbW92ZVVwZGF0ZUF0bGFzKHVp
bnQzMl90IGF0bGFzSUQpCi0gICAgQ3JlYXRlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQp
Ci0gICAgVXBkYXRlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQsIFdlYktpdDo6V2ViQ29v
cmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQotICAgIENsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHModWludDY0X3QgaW1hZ2VJRCkKLSAgICBSZW1vdmVJbWFnZUJhY2tpbmcodWludDY0X3Qg
aW1hZ2VJRCkKLSAgICBEaWRSZW5kZXJGcmFtZShXZWJDb3JlOjpGbG9hdFBvaW50IHNjcm9sbFBv
c2l0aW9uLCBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50UmVjdCBj
b3ZlcmVkUmVjdCkKLSAgICBTZXRMYXllckFuaW1hdGlvbnModWludDMyX3QgaWQsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnMpCisgICAgQ29tbWl0Q29vcmRpbmF0
ZWRHcmFwaGljc09wZXJhdGlvbnMoQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBvcGVyYXRpb25zRGF0
YSwgV2ViQ29yZTo6RmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbiwgV2ViQ29yZTo6SW50U2l6ZSBj
b250ZW50c1NpemUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCiAgICAgU2V0QW5pbWF0
aW9uc0xvY2tlZChib29sIGxvY2tlZCkKLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKLSAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQotI2VuZGlmCi0KLSNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLSAgICBDcmVhdGVDYW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6Oklu
dFNpemUgY2FudmFzU2l6ZSwgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4pCi0g
ICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCi0gICAgRGVz
dHJveUNhbnZhcyh1aW50MzJfdCBpZCkKLSNlbmRpZgotCi0gICAgU2V0TGF5ZXJSZXBhaW50Q291
bnQodWludDMyX3QgbGF5ZXJJRCwgaW50IHZhbHVlKQotCi0gICAgU2V0QmFja2dyb3VuZENvbG9y
KFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCA4NmJlNWVl
Li43YWU3ZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMwLDE3ICszMCwxOCBAQAogI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIK
IAotI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogI2luY2x1
ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJE
cmF3aW5nQXJlYUltcGwuaCIKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAi
RW5jb2RlckFkYXB0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb24uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgpAQCAtNDgsNyArNDksNiBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFu
Z2UuaD4KIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKQEAgLTg1LDcgKzg1LDYgQEAgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSogd2Vi
UGFnZSkKICAgICAsIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcyhmYWxzZSkKICAgICAsIG1fd2Fp
dGluZ0ZvclVJUHJvY2Vzcyh0cnVlKQogICAgICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKLSAgICAs
IG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQogICAgICwgbV9kaWRJbml0aWFsaXplUm9vdENvbXBv
c2l0aW5nTGF5ZXIoZmFsc2UpCiAgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAmQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKICAgICAsIG1fcmVsZWFz
ZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJl
bGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQpAQCAtMjg2LDE0ICsyODUsMTggQEAgYm9v
bCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCiAK
ICAgICBkZWxldGVDb21wb3NpdGluZ0xheWVycygpOwogCi0gICAgaWYgKG1fc2hvdWxkU3luY0Zy
YW1lKSB7CisgICAgaWYgKCFtX29wZXJhdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRpZFN5
bmMgPSB0cnVlOwogCiAgICAgICAgIEludFNpemUgY29udGVudHNTaXplID0gcm91bmRlZEludFNp
emUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwogICAgICAgICBJbnRSZWN0
IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRpZFJlbmRlckZyYW1l
KG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpLCBjb250ZW50c1NpemUsIGNvdmVyZWRS
ZWN0KSk7CisKKyAgICAgICAgRW5jb2RlckFkYXB0ZXIgb3BlcmF0aW9uc0VuY29kZXJBZGFwdGVy
OworICAgICAgICBtX29wZXJhdGlvbnMuZW5jb2RlKG9wZXJhdGlvbnNFbmNvZGVyQWRhcHRlcik7
CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zKG9wZXJhdGlvbnNF
bmNvZGVyQWRhcHRlci5kYXRhUmVmZXJlbmNlKCksIG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2Nh
dGlvbigpLCBjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KSk7CisKKyAgICAgICAgbV9vcGVyYXRp
b25zLmNsZWFyKCk7CiAgICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7Ci0gICAg
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CiAgICAgfSBlbHNlCiAgICAgICAgIHVubG9j
a0FuaW1hdGlvbnMoKTsKIApAQCAtMzE5LDkgKzMyMiw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpjcmVhdGVDb21wb3NpdGluZ0xheWVycygpCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpDcmVhdGVDb21wb3NpdGluZ0xheWVycyhtX2xheWVyc1RvQ3JlYXRlKSk7CisgICAgZW5x
dWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVMYXllcnM6OmNyZWF0ZSht
X2xheWVyc1RvQ3JlYXRlKSk7CiAgICAgbV9sYXllcnNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKCkKQEAgLTMzNCw5ICszMzYsOCBAQCB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcnMobV9sYXllcnNU
b0RlbGV0ZSkpOworICAgIGVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6RGVs
ZXRlTGF5ZXJzOjpjcmVhdGUobV9sYXllcnNUb0RlbGV0ZSkpOwogICAgIG1fbGF5ZXJzVG9EZWxl
dGUuY2xlYXIoKTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CiB9CiAKIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5l
ZWRlZCgpCkBAIC0zNDQsNjUgKzM0NSwxMCBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQogICAgIGlmIChtX2Rp
ZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290
TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7CisgICAgZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3Bl
cmF0aW9uOjpTZXRSb290TGF5ZXI6OmNyZWF0ZSh0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciht
X3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKICAgICBtX2RpZEluaXRpYWxpemVSb290Q29tcG9z
aXRpbmdMYXllciA9IHRydWU7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotfQotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKLXsKLSAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBp
bmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJDaGls
ZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVy
SUQ+JiBjaGlsZHJlbikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0
Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBjaGlsZHJlbikpOwotfQotCi0jaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ2Fu
dmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1M
YXllcikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgR3JhcGhpY3NTdXJm
YWNlVG9rZW4gdG9rZW4gPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tl
bigpOwotICAgIEludFNpemUgY2FudmFzU2l6ZSA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRm
b3JtTGF5ZXJTaXplKCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ2FudmFzKGlkLCBjYW52YXNTaXplLCB0b2tlbikp
OwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0NhbnZhcyhDb29yZGlu
YXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCi17Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0g
Y2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7Ci0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U3luY0Nh
bnZhcyhpZCwgZnJvbnRCdWZmZXIpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIGlmIChtX2lz
UHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OkRlc3Ryb3lDYW52YXMoaWQpKTsKLX0KLSNlbmRpZgotCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBpbnQgdmFsdWUpCi17Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6U2V0TGF5ZXJSZXBhaW50Q291bnQoaWQsIHZhbHVlKSk7Ci19
Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c3luY0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVz
KGZpbHRlcnMpOwotI2VuZGlmCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZp
bHRlcnMpKTsKLX0KLSNlbmRpZgotCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKIHsKQEAgLTQzMSw3ICszNzcsNyBAQCB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGll
cyhjb25zdCBGaWx0ZXJPcGVyYQogICAgICAgICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Qcm94
eS0+Y2xpZW50KCkpIHsKICAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+c2V0
Q2xpZW50KHRoaXMpOwogICAgICAgICAgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5hZGQoY3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5LmdldCgpKTsKLSAgICAgICAgICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUN1c3RvbUZp
bHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRp
b24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOworICAgICAg
ICAgICAgZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpDcmVhdGVDdXN0b21G
aWx0ZXJQcm9ncmFtOjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0
b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gSWYgdGhlIGNsaWVudCB3YXMgbm90
IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29vcmRpbmF0b3IgbXVzdCBiZSB0aGUgY2xpZW50IGZv
ciBpdC4KICAgICAgICAgICAgIEFTU0VSVChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVu
dCgpID09IHRoaXMpOwpAQCAtNDQ0LDcgKzM5MCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJv
CiAgICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBzaGFkZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBz
byB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0IGFuZAogICAgIC8vIHNlbmQgYSBtZXNzYWdlIHRv
IHRoZSBvdGhlciBwcm9jZXNzIHRvIGRlbGV0ZSBpdC4KICAgICBtX2N1c3RvbUZpbHRlclByb2dy
YW1zLnJlbW92ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOwotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZUN1c3RvbUZp
bHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKSk7CisgICAgZW5xdWV1
ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
OjpjcmVhdGUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKSk7CiB9CiAKIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQpA
QCAtNjA4LDQwICs1NTQsNiBAQCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZwogICAgIHJldHVybiBp
bWFnZUJhY2tpbmc7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCkp
OwotfQotCi1ib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2Ug
PSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihjb29yZGluYXRlZFN1cmZhY2Uu
Z2V0KCkpOwotICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKLSAgICBp
ZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCwgaGFuZGxlKSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJ
RCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50cyhpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQot
ewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1f
aW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOwotICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7Ci0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3Zl
SW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQogewogICAgIEltYWdlQmFja2lu
Z01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOwpAQCAtNzA0LDQxICs2
MTYsNDkgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRh
dGVJbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVUaWxl
KENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNv
cmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6VXBkYXRl
VGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjplbnF1ZXVlKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbkJh
c2U+IG9wZXJhdGlvbikKIHsKICAgICBpZiAobV9pc1B1cmdpbmcpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxh
eWVySUQsIHRpbGVJRCkpOwotfQogCi1ib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1
cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKLXsKLSAgICBXZWJDb29yZGluYXRlZFN1cmZhY2Uq
IHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZSo+KGNvb3JkaW5hdGVkU3VyZmFjZS5nZXQoKSk7Ci0gICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
OjpIYW5kbGUgaGFuZGxlOwotICAgIGlmICghd2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVI
YW5kbGUoaGFuZGxlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZVVwZGF0ZUF0
bGFzKGF0bGFzSUQsIGhhbmRsZSkpOwotICAgIHJldHVybiB0cnVlOworICAgIHdpbGxFbnF1ZXVl
T3BlcmF0aW9uKG9wZXJhdGlvbi5nZXQoKSk7CisgICAgbV9vcGVyYXRpb25zLmFwcGVuZChvcGVy
YXRpb24pOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlVXBkYXRl
QXRsYXModWludDMyX3QgYXRsYXNJRCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp3
aWxsRW5xdWV1ZU9wZXJhdGlvbihDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZSogb3Bl
cmF0aW9uKQogewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJl
bW92ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpKTsKKyAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+Z2V0T3Bl
cmF0aW9uVHlwZSgpKSB7CisgICAgY2FzZSBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFz
ZTo6UmVtb3ZlSW1hZ2VCYWNraW5nVHlwZToKKyAgICAgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5n
cy5jb250YWlucyhzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9u
OjpSZW1vdmVJbWFnZUJhY2tpbmcqPihvcGVyYXRpb24pLT5hcmd1bWVudHMxKSk7CisgICAgICAg
IG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRHcmFw
aGljc09wZXJhdGlvbjo6UmVtb3ZlSW1hZ2VCYWNraW5nKj4ob3BlcmF0aW9uKS0+YXJndW1lbnRz
MSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlv
bkJhc2U6OlNldExheWVyQW5pbWF0aW9uc1R5cGU6IHsKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zID0g
c3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0TGF5ZXJBbmltYXRp
b25zKj4ob3BlcmF0aW9uKS0+YXJndW1lbnRzMjsKKyAgICAgICAgR3JhcGhpY3NMYXllckFuaW1h
dGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnMuZ2V0QWN0aXZlQW5pbWF0aW9ucygp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0
aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYga2V5ZnJhbWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7
CisgICAgICAgICAgICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0
eVdlYmtpdEZpbHRlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nh
c3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPihrZXlmcmFtZXMuYXQoaSkpOworICAgICAg
ICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoKmZpbHRlclZhbHVlLT52
YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0aWNfY2FzdDxD
b29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpTZXRMYXllckFuaW1hdGlvbnMqPihvcGVyYXRp
b24pLT5hcmd1bWVudHMyID0gYWN0aXZlQW5pbWF0aW9uczsKKyNlbmRpZgorICAgICAgICBicmVh
azsKKyAgICB9CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGNhc2UgQ29vcmRpbmF0ZWRH
cmFwaGljc09wZXJhdGlvbkJhc2U6OlNldExheWVyRmlsdGVyc1R5cGU6CisjaWYgRU5BQkxFKENT
U19TSEFERVJTKQorICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKHN0YXRp
Y19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlNldExheWVyRmlsdGVycyo+KG9w
ZXJhdGlvbiktPmFyZ3VtZW50czIpOworI2VuZGlmCisgICAgICAgIGJyZWFrOworI2VuZGlmCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiBXZWJDb3JlOjpGbG9hdFJl
Y3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QK
QEAgLTc0NywyNCArNjY3LDYgQEAgV2ViQ29yZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0CiB9CiAKIAotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25z
IGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKLSNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVB
bmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBLZXlm
cmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSku
a2V5ZnJhbWVzKCk7Ci0gICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRl
ZFByb3BlcnR5V2Via2l0RmlsdGVyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAg
ICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxj
b25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7Ci0gICAgICAgICAg
ICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJ
RCwgYWN0aXZlQW5pbWF0aW9ucykpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7CiAgICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlW
ZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJl
cXVlc3RlZC4KQEAgLTgwNCw3ICs3MDYsNyBAQCBHcmFwaGljc0xheWVyRmFjdG9yeSogQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCiAjaWYgRU5BQkxFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNj
aGVkdWxlQW5pbWF0aW9uKCkKIHsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSk7CisgICAg
ZW5xdWV1ZShDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uOjpSZXF1ZXN0QW5pbWF0aW9uRnJh
bWU6OmNyZWF0ZSgpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmFuaW1h
dGlvbkZyYW1lUmVhZHkoKQpAQCAtODg3LDcgKzc4OSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb29yZGlu
YXRlCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldEJhY2tncm91bmRDb2xvcihj
b2xvcikpOworICAgIGVucXVldWUoQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6U2V0QmFj
a2dyb3VuZENvbG9yOjpjcmVhdGUoY29sb3IpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5oCmluZGV4IGNmNzgyNDYuLjVhZTYyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0Nvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29y
ZGluYXRlZEltYWdlQmFja2luZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNs
aWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KQEAgLTQ2
LDggKzQ3LDcgQEAgY2xhc3MgV2ViUGFnZTsKIAogY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0IDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQK
ICAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAg
ICAsIHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IK
LSAgICAsIHB1YmxpYyBXZWJDb3JlOjpVcGRhdGVBdGxhc0NsaWVudAorICAgICwgcHVibGljIFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlCiAgICAgLCBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAg
ICAgLCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHlDbGllbnQKQEAgLTc5LDQwICs3OSwxNCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVu
ZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNT
dXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFn
ZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOwogCi0gICAgdmlydHVh
bCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBt
X2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29y
ZTo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZs
b2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJl
bmRlck5leHRGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisKICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAgICAgdmlydHVhbCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBPVkVSUklERTsK
IAotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdmlydHVh
bCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TGF5ZXJBbmltYXRpb25zKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7Ci0j
ZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklELCBpbnQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hM
YXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc3luY0ZpeGVkTGF5ZXJzKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lE
LCBXZWJDb3JlOjpJbnRQb2ludCYpOwotCi0gICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKLSAgICB2
aXJ0dWFsIGJvb2wgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0KICNpZiBFTkFCTEUoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9u
KCkgT1ZFUlJJREU7CiAjZW5kaWYKQEAgLTEzMSwxNCArMTA1LDIyIEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IE9WRVJSSURFOwogICAgIHZp
cnR1YWwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yKCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICAvLyBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IKLSAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZh
Y2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50
cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpIE9WRVJSSURFOwotCiAgICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFu
Z2VzKCk7CiAKKyAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0
dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRS
ZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFj
a2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRh
dGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6
RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbjo6UXVldWUq
IG9wZXJhdGlvblF1ZXVlKCkgeyByZXR1cm4gdGhpczsgfTsKKworICAgIC8vIENvb3JkaW5hdGVk
R3JhcGhpY3NPcGVyYXRpb246OlF1ZXVlCisgICAgdmlydHVhbCB2b2lkIGVucXVldWUoUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzT3BlcmF0aW9uQmFzZT4pIE9WRVJSSURF
OworCisgICAgdm9pZCB3aWxsRW5xdWV1ZU9wZXJhdGlvbihXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzT3BlcmF0aW9uQmFzZSopOworCiAgICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhp
Y3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CiAKQEAgLTE4
MSw2ICsxNjMsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdp
bGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KICAgICBPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwogCisgICAgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbnMgbV9vcGVyYXRpb25zOworCiAgICAgSGFzaFNldDxX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAg
ICAgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0NyZWF0ZTsK
ICAgICBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvRGVsZXRl
OwpAQCAtMjAzLDcgKzE4Nyw2IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1f
dmlzaWJsZUNvbnRlbnRzUmVjdDsKIAogICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVD
b250ZXh0OwotICAgIGJvb2wgbV9zaG91bGRTeW5jRnJhbWU7CiAgICAgYm9vbCBtX2RpZEluaXRp
YWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKICAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVzaFRpbWVyOwogICAgIFdlYkNvcmU6OlRpbWVyPENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7Ci0t
IAoxLjguMS5yYzEuMS5nNmRhYWUxMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190515</attachid>
            <date>2013-02-27 07:18:03 -0800</date>
            <delta_ts>2013-03-04 03:53:27 -0800</delta_ts>
            <desc>WIP. discussion for APIs for CoordinatedGraphicsState</desc>
            <filename>0001-WIP-Unify-coordinated-graphic-s-messages-into-Coorid.patch</filename>
            <type>text/plain</type>
            <size>94240</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">RnJvbSBhOTRkZDg2ZjhkM2FlZTQyNGY1NzVmMzg0ZTY0NGY1YjM1Yzg2ZTJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHd2FuZyBZb29uIEh3YW5nIDxyeXVtaWVsQGNvbXBhbnkxMDAu
bmV0PgpEYXRlOiBXZWQsIDI3IEZlYiAyMDEzIDIzOjUxOjQwICswOTAwClN1YmplY3Q6IFtQQVRD
SF0gV0lQIDogVW5pZnkgY29vcmRpbmF0ZWQgZ3JhcGhpYydzIG1lc3NhZ2VzIGludG8KIENvb3Jp
ZGluYXRlZEdyYXBoaWNzU3RhdGUuCgpDaGFuZ2VMb2cgZm9yIFdJUC4KClJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgoKQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2gg
YXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRp
b25zIGJlbG93IChPT1BTISkuCgpXSVAgOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgQWN0b3Ig
bW9kZWwuCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KClN0YXR1cyA6IHdvcmtpbmcuClVz
ZSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSBpbnN0ZWFkIG9mIENvb3JkaW5hdGVkTGF5
ZXJJbmZvIHRvCnN5bmMgbGF5ZXIuCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KClN0YXRl
IDogTm90IHdvcmtpbmcuIGVuY29kZS9kZWNvZGUgZmFpbHVyZSBkdWUgdG8KQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyU3RhdGUudGlsZXNUb1VwZGF0ZQotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI1ICsrKwogLi4uL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgICAgICAgfCAxOTIgKysrKysrKysrKysrLS0t
LS0KIC4uLi90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggIHwg
IDI4ICstLQogLi4uL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgICAg
ICAgfCAyMzMgKysrKysrKysrKysrKystLS0tLS0tCiAuLi4vdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oICB8ICA0NCArKy0tCiAuLi4vdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oICB8IDE2NCArKysrKysrKysrKysrKysKIC4u
Li90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCAgIHwgICAzICst
CiAuLi4vdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggICAgICB8ICA4
NSAtLS0tLS0tLQogLi4uL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oICAg
ICAgICAgfCAgIDIgLQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMTggKysKIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdl
cy5weSAgICAgICAgIHwgICAyICstCiAuLi4vQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29k
ZXJzLmNwcCAgICAgICAgICB8IDIyMCArKysrKysrKysrKysrKysrKystCiAuLi4vQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggICAgICAgICAgICB8ICAyNCArKy0KIC4uLi9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgICAgICAgICAgICAgIHwgIDcyICstLS0tLS0K
IC4uLi9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oICAgICAgICAgICAgICAgIHwgIDM0
ICsrLQogLi4uL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluICAgICAg
fCAgMjggKy0tCiAuLi4vQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCAgICAgICAgICAgICAg
ICAgICB8IDEyMSArKysrLS0tLS0tLQogLi4uL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmggfCAgNTAgKystLS0KIDE4IGZpbGVzIGNoYW5nZWQsIDg0OSBpbnNl
cnRpb25zKCspLCA0OTYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmgKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggMDk4YTJkMS4uOTliMzExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisy
MDEzLTAyLTA0ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisg
ICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFr
ZXMgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIHBlcmZvcm0gdmlhIENvb3JkaW5hdGVkR3JhcGhp
Y3NPcGVyYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDgyOTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSBoYXMgc28gbWFueSBJUEMgbWVzc2Fn
ZXMgKGUuZy4gU3luY0NhbnZhcyBhbmQKKyAgICAgICAgQ3JlYXRlVGlsZSksIGFuZCB0aGVyZSBp
cyBhIGxvbmcgZnVuY3Rpb24gY2hhaW4gZnJvbSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgdG8K
KyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lICg0IGNsYXNzZXMpLgorICAgICAgICBJ
ZiB3ZSB3YW50IHRvIGFkZCBhIG5ldyBtZXNzYWdlLCB3ZSBuZWVkIHRvIGFkZCBzaW1pbGFyIGZ1
bmN0aW9ucyBpbnRvIDQgY2xhc3Nlcy4KKworICAgICAgICBOb3cgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0IGhhcyBvbmx5IG9uZSBJUEMgbWVzc2FnZTogQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlLgorICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lIHJ1biBhcyBmb2xsb3dzOgorICAgICAgICAxLiBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIgbWFrZXMgYSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZS4KKyAgICAg
ICAgMi4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHN0b3JlcyBhbGwgTGF5ZXJTdGF0ZXMuCisg
ICAgICAgIDMuIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBzZW5kcyBHcmFwaGljc1N0YXRlIGlu
Y2x1ZGVzIExheWVyU3RhdGVzIHRvIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5CisgICAg
ICAgIGF0IHRoZSBtb21lbnQgb2YgZmx1c2hpbmcgdmlhIENvbW1pdENvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZSBtZXNzYWdlLgorICAgICAgICA0LiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgZXhl
Y3V0ZXMgYWxsIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlcmUgaXMgb25lIGJpZyBiZWhhdmlv
ciBjaGFuZ2UuIEFsbCBzdGF0ZXMgY2hhbmdlcyAoZS5nLgorICAgICAgICBVcGRhdGVUaWxlcywg
U2V0TGF5ZXJDaGlsZHJlbiwgYW5kIGV0Yy4uKSBhcmUgcGVyZm9ybWVkIGF0IHRoZSBzYW1lIHRp
bWUsIHdoZW4KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRDb29yZGlu
YXRlZEdyYXBoaWNzU3RhdGUgaXMgY2FsbGVkLgorCisKIDIwMTMtMDItMjQgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIxNDM3OTcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDRjNDNhYTcuLjY1MWExOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
CkBAIC0xOSw3ICsxOSw2IEBACiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KICAqLwotCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCkBAIC0xOTIsNiArMTkxLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHApOworICAgIG1fbGF5ZXJTdGF0ZS5wb3Np
dGlvbkNoYW5nZWQgPSB0cnVlOwogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7CiB9CiAKQEAgLTIw
MSw2ICsyMDEsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9p
bnQoY29uc3QgRmxvYXRQb2ludDNEJiBwKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGlj
c0xheWVyOjpzZXRBbmNob3JQb2ludChwKTsKKyAgICBtX2xheWVyU3RhdGUuYW5jaG9yUG9pbnRD
aGFuZ2VkID0gdHJ1ZTsKICAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQogCkBAIC0yMTAsNiAr
MjExLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY29uc3QgRmxv
YXRTaXplJiBzaXplKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRT
aXplKHNpemUpOworICAgIG1fbGF5ZXJTdGF0ZS5zaXplQ2hhbmdlZCA9IHRydWU7CiAKICAgICBp
ZiAobWFza0xheWVyKCkpCiAgICAgICAgIG1hc2tMYXllcigpLT5zZXRTaXplKHNpemUpOwpAQCAt
MjIyLDYgKzIyNCw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh0KTsKKyAgICBtX2xheWVyU3RhdGUudHJhbnNm
b3JtQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQogCkBAIC0y
MzEsNiArMjM1LDggQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVu
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JgogICAgICAgICByZXR1cm47CiAK
ICAgICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSh0KTsKKyAgICBtX2xheWVy
U3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUdl
b21ldHJ5KCk7CiB9CiAKQEAgLTI0MCw2ICsyNDYsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0UHJlc2VydmVzM0QoYm9vbCBiKQogICAgICAgICByZXR1cm47CiAKICAgICBH
cmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChiKTsKKyAgICBtX2xheWVyU3RhdGUucHJlc2Vy
dmVzM0QgPSBiOworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworCiAgICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0KIApAQCAtMjQ4LDYgKzI1Nyw5IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKICAgICBpZiAobWFz
a3NUb0JvdW5kcygpID09IGIpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVyOjpz
ZXRNYXNrc1RvQm91bmRzKGIpOworICAgIG1fbGF5ZXJTdGF0ZS5tYXNrc1RvQm91bmRzID0gYjsK
KyAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUdl
b21ldHJ5KCk7CiB9CiAKQEAgLTI1Niw2ICsyNjgsOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgYikKICAgICBpZiAoZHJhd3NDb250ZW50KCkg
PT0gYikKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVu
dChiKTsKKyAgICBtX2xheWVyU3RhdGUuZHJhd3NDb250ZW50ID0gYjsKKyAgICBtX2xheWVyU3Rh
dGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKIAogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0K
QEAgLTI2NSw2ICsyNzksOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNWaXNpYmxlKGJvb2wgYikKICAgICBpZiAoY29udGVudHNBcmVWaXNpYmxlKCkgPT0gYikK
ICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShi
KTsKKyAgICBtX2xheWVyU3RhdGUuY29udGVudHNWaXNpYmxlID0gYjsKKyAgICBtX2xheWVyU3Rh
dGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGlmIChtYXNrTGF5ZXIoKSkKICAgICAgICAg
bWFza0xheWVyKCktPnNldENvbnRlbnRzVmlzaWJsZShiKTsKIApAQCAtMjc4LDYgKzI5NSw5IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIp
CiAgICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKICAgICAgICAgbV9tYWluQmFja2luZ1N0b3Jl
LT5zZXRTdXBwb3J0c0FscGhhKCFiKTsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09w
YXF1ZShiKTsKKyAgICBtX2xheWVyU3RhdGUuY29udGVudHNPcGFxdWUgPSBiOworICAgIG1fbGF5
ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OwogfQogCkBAIC0yODcsNiArMzA3LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdy
YXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShiKTsKKyAgICBtX2xheWVyU3RhdGUu
YmFja2ZhY2VWaXNpYmxlID0gYjsKKyAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1
ZTsKKwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtMjk2LDYgKzMxOSw5IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkob3BhY2l0
eSk7CisgICAgbV9sYXllclN0YXRlLm9wYWNpdHkgPSBvcGFjaXR5OworICAgIG1fbGF5ZXJTdGF0
ZS5vcGFjaXR5Q2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9
CiAKQEAgLTMwNSw2ICszMzEsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChyKTsKKyAgICBtX2xheWVyU3RhdGUuY29udGVu
dHNSZWN0ID0gcjsKKyAgICBtX2xheWVyU3RhdGUuY29udGVudHNSZWN0Q2hhbmdlZCA9IHRydWU7
CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTM1NiwxNiArMzg1LDI0IEBA
IGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIG5ld0ZpbHRlcnMpCiB7CiAgICAgaWYgKGZpbHRlcnMoKSA9PSBuZXdGaWx0ZXJz
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghR3JhcGhpY3NMYXllcjo6c2V0Rmls
dGVycyhuZXdGaWx0ZXJzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgZGlkQ2hhbmdl
RmlsdGVycygpOwotICAgIHJldHVybiBHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKG5ld0ZpbHRl
cnMpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIAogdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBpZiAobV9sYXllckluZm8uc29saWRDb2xvciA9PSBjb2xvcikKKyAgICBpZiAobV9s
YXllclN0YXRlLnNvbGlkQ29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2xh
eWVySW5mby5zb2xpZENvbG9yID0gY29sb3I7CisKKyAgICBtX2xheWVyU3RhdGUuc29saWRDb2xv
ciA9IGNvbG9yOworICAgIG1fbGF5ZXJTdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCA9IHRydWU7CisK
ICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTM3NSw2ICs0MTIsOSBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKGJvb2wgc2hvdykK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVy
KHNob3cpOworICAgIG1fbGF5ZXJTdGF0ZS5zaG93RGVidWdCb3JkZXJzID0gdHJ1ZTsKKyAgICBt
X2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxheWVyU3Rh
dGUoKTsKIH0KIApAQCAtMzg0LDYgKzQyNCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRTaG93UmVwYWludENvdW50ZXIoYm9vbCBzaG93KQogICAgICAgICByZXR1cm47CiAK
ICAgICBHcmFwaGljc0xheWVyOjpzZXRTaG93UmVwYWludENvdW50ZXIoc2hvdyk7CisgICAgbV9s
YXllclN0YXRlLnNob3dSZXBhaW50Q291bnRlciA9IHRydWU7CisgICAgbV9sYXllclN0YXRlLmZs
YWdzQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAg
LTQwNSw2ICs0NDgsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
VG9JbWFnZShpbWFnZSk7CiAgICAgZGlkQ2hhbmdlSW1hZ2VCYWNraW5nKCk7CisgICAgLy8gVE9E
TyBXSEFUPwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVy
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAtNDIxLDYgKzQ2NSwxMCBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAg
IGxheWVyLT5zZXRDb250ZW50c1Zpc2libGUoY29udGVudHNBcmVWaXNpYmxlKCkpOwogICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRMYXllciA9IHRvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKGxheWVyKTsKICAgICBjb29yZGluYXRlZExheWVyLT5kaWRDaGFuZ2VMYXll
clN0YXRlKCk7CisKKyAgICBtX2xheWVyU3RhdGUubWFzayA9IGNvb3JkaW5hdGVkTGF5ZXItPmlk
KCk7CisgICAgbV9sYXllclN0YXRlLm1hc2tDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5n
ZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtNDQyLDYgKzQ5MCw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5
ZXIobGF5ZXIpOworICAgIG1fbGF5ZXJTdGF0ZS5yZXBsaWNhID0gdG9Db29yZGluYXRlZExheWVy
SUQobGF5ZXIpOworICAgIG1fbGF5ZXJTdGF0ZS5yZXBsaWNhQ2hhbmdlZCA9IHRydWU7CiAgICAg
ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC00NzEsNiArNTIxLDkgQEAgdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9WaWV3cG9ydChib29sIGlzRml4ZWQpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsKKyAgICBt
X2xheWVyU3RhdGUuZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsKKyAgICBtX2xheWVyU3RhdGUu
ZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApA
QCAtNTA0LDExICs1NTcsMTAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmND
aGlsZHJlbigpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNDaGlsZHJlbikKICAgICAgICAgcmV0dXJu
OwogICAgIG1fc2hvdWxkU3luY0NoaWxkcmVuID0gZmFsc2U7Ci0gICAgVmVjdG9yPENvb3JkaW5h
dGVkTGF5ZXJJRD4gY2hpbGRJRHM7CisgICAgbV9sYXllclN0YXRlLmNoaWxkcmVuQ2hhbmdlZCA9
IHRydWU7CisgICAgbV9sYXllclN0YXRlLmNoaWxkcmVuLmNsZWFyKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQotICAgICAgICBjaGlsZElEcy5h
cHBlbmQodG9Db29yZGluYXRlZExheWVySUQoY2hpbGRyZW4oKVtpXSkpOwotCi0gICAgbV9jb29y
ZGluYXRvci0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hpbGRJRHMpOworICAgICAgICBtX2xh
eWVyU3RhdGUuY2hpbGRyZW4uYXBwZW5kKHRvQ29vcmRpbmF0ZWRMYXllcklEKGNoaWxkcmVuKClb
aV0pKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTUxNyw3ICs1NjksOSBAQCB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRlcnMoKQogICAgIGlmICghbV9z
aG91bGRTeW5jRmlsdGVycykKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2hvdWxkU3luY0ZpbHRl
cnMgPSBmYWxzZTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJGaWx0ZXJzKG1faWQsIGZp
bHRlcnMoKSk7CisKKyAgICBtX2xheWVyU3RhdGUuZmlsdGVycyA9IG5ld0ZpbHRlcnM7CisgICAg
bV9sYXllclN0YXRlLmZpbHRlcnNDaGFuZ2VkID0gdHJ1ZTsKIH0KICNlbmRpZgogCkBAIC01Mzgs
MTQgKzU5MiwxNSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ltYWdlQmFj
a2luZygpCiAgICAgICAgIGlmICghbV9jb29yZGluYXRlZEltYWdlQmFja2luZykgewogICAgICAg
ICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZyA9IG1fY29vcmRpbmF0b3ItPmNyZWF0ZUlt
YWdlQmFja2luZ0lmTmVlZGVkKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsKICAgICAgICAgICAg
IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmFkZEhvc3QodGhpcyk7Ci0gICAgICAgICAgICBt
X2xheWVySW5mby5pbWFnZUlEID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+aWQoKTsKKyAg
ICAgICAgICAgIG1fbGF5ZXJTdGF0ZS5pbWFnZUlEID0gbV9jb29yZGluYXRlZEltYWdlQmFja2lu
Zy0+aWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmct
Pm1hcmtEaXJ0eSgpOworICAgICAgICBtX2xheWVyU3RhdGUuaW1hZ2VDaGFuZ2VkID0gdHJ1ZTsK
ICAgICB9IGVsc2UKICAgICAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CiAKLSAg
ICAvLyBzeW5jSW1hZ2VCYWNraW5nKCkgY2hhbmdlZCBtX2xheWVySW5mby5pbWFnZUlELgorICAg
IC8vIHN5bmNJbWFnZUJhY2tpbmcoKSBjaGFuZ2VkIG1fbGF5ZXJTdGF0ZS5pbWFnZUlELgogICAg
IGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtNTU0LDM4ICs2MDksNDcgQEAgdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKCkKICAgICBpZiAoIW1fc2hv
dWxkU3luY0xheWVyU3RhdGUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Nob3VsZFN5bmNMYXll
clN0YXRlID0gZmFsc2U7Ci0gICAgbV9sYXllckluZm8uZml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWRU
b1ZpZXdwb3J0KCk7Ci0KLSAgICBtX2xheWVySW5mby5iYWNrZmFjZVZpc2libGUgPSBiYWNrZmFj
ZVZpc2liaWxpdHkoKTsKLSAgICBtX2xheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxk
cmVuVHJhbnNmb3JtKCk7Ci0gICAgbV9sYXllckluZm8uY29udGVudHNPcGFxdWUgPSBjb250ZW50
c09wYXF1ZSgpOwotICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgp
OwotICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpOwotICAgIG1f
bGF5ZXJJbmZvLmNvbnRlbnRzVmlzaWJsZSA9IGNvbnRlbnRzQXJlVmlzaWJsZSgpOwotICAgIG1f
bGF5ZXJJbmZvLm1hc2sgPSB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChtYXNrTGF5ZXIoKSk7Ci0gICAg
bV9sYXllckluZm8ubWFza3NUb0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsKLSAgICBtX2xheWVy
SW5mby5vcGFjaXR5ID0gb3BhY2l0eSgpOwotICAgIG1fbGF5ZXJJbmZvLnByZXNlcnZlczNEID0g
cHJlc2VydmVzM0QoKTsKLSAgICBtX2xheWVySW5mby5yZXBsaWNhID0gdG9Db29yZGluYXRlZExh
eWVySUQocmVwbGljYUxheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5z
Zm9ybSgpOwotCi0gICAgbV9sYXllckluZm8uYW5jaG9yUG9pbnQgPSBtX2FkanVzdGVkQW5jaG9y
UG9pbnQ7Ci0gICAgbV9sYXllckluZm8ucG9zID0gbV9hZGp1c3RlZFBvc2l0aW9uOwotICAgIG1f
bGF5ZXJJbmZvLnNpemUgPSBtX2FkanVzdGVkU2l6ZTsKLQotICAgIG1fbGF5ZXJJbmZvLnNob3dE
ZWJ1Z0JvcmRlcnMgPSBpc1Nob3dpbmdEZWJ1Z0JvcmRlcigpOwotICAgIGlmIChtX2xheWVySW5m
by5zaG93RGVidWdCb3JkZXJzKQorCisgICAgLy8gRmxhZ3MKKyAgICBtX2xheWVyU3RhdGUuY29u
dGVudHNPcGFxdWUgPSBjb250ZW50c09wYXF1ZSgpOworICAgIG1fbGF5ZXJTdGF0ZS5kcmF3c0Nv
bnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKyAgICBtX2xheWVyU3RhdGUuY29udGVudHNWaXNpYmxl
ID0gY29udGVudHNBcmVWaXNpYmxlKCk7CisgICAgbV9sYXllclN0YXRlLmJhY2tmYWNlVmlzaWJs
ZSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOworICAgIG1fbGF5ZXJTdGF0ZS5tYXNrc1RvQm91bmRz
ID0gbWFza3NUb0JvdW5kcygpOworICAgIG1fbGF5ZXJTdGF0ZS5wcmVzZXJ2ZXMzRCA9IHByZXNl
cnZlczNEKCk7CisKKyAgICBtX2xheWVyU3RhdGUuZml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWRUb1Zp
ZXdwb3J0KCk7CisgICAgbV9sYXllclN0YXRlLnNob3dEZWJ1Z0JvcmRlcnMgPSBpc1Nob3dpbmdE
ZWJ1Z0JvcmRlcigpOworICAgIGlmIChtX2xheWVyU3RhdGUuc2hvd0RlYnVnQm9yZGVycykKICAg
ICAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7Ci0gICAgbV9sYXllckluZm8uc2hvd1JlcGFp
bnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENvdW50ZXIoKTsKIAotICAgIG1fY29vcmRpbmF0
b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKKyAgICBtX2xheWVyU3RhdGUu
c2hvd1JlcGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENvdW50ZXIoKTsKKworICAgIC8v
IFN0YXRlIFByb3BlcnRpZXMKKyAgICBtX2xheWVyU3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0gPSBj
aGlsZHJlblRyYW5zZm9ybSgpOworICAgIG1fbGF5ZXJTdGF0ZS5jb250ZW50c1JlY3QgPSBjb250
ZW50c1JlY3QoKTsKKyAgICBtX2xheWVyU3RhdGUubWFzayA9IHRvQ29vcmRpbmF0ZWRMYXllcklE
KG1hc2tMYXllcigpKTsKKyAgICBtX2xheWVyU3RhdGUub3BhY2l0eSA9IG9wYWNpdHkoKTsKKyAg
ICBtX2xheWVyU3RhdGUucmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKHJlcGxpY2FMYXll
cigpKTsKKyAgICBtX2xheWVyU3RhdGUudHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CisKKyAgICBt
X2xheWVyU3RhdGUuYW5jaG9yUG9pbnQgPSBtX2FkanVzdGVkQW5jaG9yUG9pbnQ7CisgICAgbV9s
YXllclN0YXRlLnBvcyA9IG1fYWRqdXN0ZWRQb3NpdGlvbjsKKyAgICBtX2xheWVyU3RhdGUuc2l6
ZSA9IG1fYWRqdXN0ZWRTaXplOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0RGVidWdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCkKIHsKLSAgICBB
U1NFUlQobV9sYXllckluZm8uc2hvd0RlYnVnQm9yZGVycyk7Ci0gICAgbV9sYXllckluZm8uZGVi
dWdCb3JkZXJDb2xvciA9IGNvbG9yOwotICAgIG1fbGF5ZXJJbmZvLmRlYnVnQm9yZGVyV2lkdGgg
PSB3aWR0aDsKKyAgICBBU1NFUlQobV9sYXllclN0YXRlLnNob3dEZWJ1Z0JvcmRlcnMpOworICAg
IGlmIChtX2xheWVyU3RhdGUuZGVidWdCb3JkZXJDb2xvciAhPSBjb2xvcikgeworICAgICAgICBt
X2xheWVyU3RhdGUuZGVidWdCb3JkZXJDb2xvciA9IGNvbG9yOworICAgICAgICBtX2xheWVyU3Rh
dGUuZGVidWdCb3JkZXJDb2xvckNoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChtX2xh
eWVyU3RhdGUuZGVidWdCb3JkZXJXaWR0aCAhPSB3aWR0aCkgeworICAgICAgICBtX2xheWVyU3Rh
dGUuZGVidWdCb3JkZXJXaWR0aCA9IHdpZHRoOworICAgICAgICBtX2xheWVyU3RhdGUuZGVidWdC
b3JkZXJXaWR0aENoYW5nZWQgPSB0cnVlOworICAgIH0KIH0KIAogdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnN5bmNBbmltYXRpb25zKCkKQEAgLTU5NCw4ICs2NTgsOCBAQCB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMoKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX3Nob3VsZFN5bmNBbmltYXRpb25zID0gZmFsc2U7Ci0KLSAgICBtX2Nvb3JkaW5h
dG9yLT5zZXRMYXllckFuaW1hdGlvbnMobV9pZCwgbV9hbmltYXRpb25zKTsKKyAgICBtX2xheWVy
U3RhdGUuYW5pbWF0aW9ucyA9IG1fYW5pbWF0aW9uczsKKyAgICBtX2xheWVyU3RhdGUuYW5pbWF0
aW9uc0NoYW5nZWQgPSB0cnVlOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBAIC02
MTIsNyArNjc2LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMo
KQogICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Nv
b3JkaW5hdG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAg
QVNTRVJUKG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgbV9sYXllclN0YXRlLmNhbnZhc0Zy
b250QnVmZmVyID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2Uo
KTsKKyAgICBtX2xheWVyU3RhdGUuY2FudmFzU2hvdWxkU3dhcEJ1ZmZlcnMgPSB0cnVlOwogfQog
CiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNhbnZhc0lmTmVlZGVkKCkK
QEAgLTYyMSw4ICs2ODcsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJv
eUNhbnZhc0lmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1faXNWYWxpZENh
bnZhcykgewotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5kZXN0cm95Q2FudmFzKG1faWQpOwogICAg
ICAgICBtX2lzVmFsaWRDYW52YXMgPSBmYWxzZTsKKyAgICAgICAgbV9sYXllclN0YXRlLmNhbnZh
c1Rva2VuID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKKyAgICAgICAgbV9sYXllclN0YXRlLmNh
bnZhc0NoYW5nZWQgPSB0cnVlOwogICAgIH0KIAogICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlv
biAmPSB+RGVzdHJveUNhbnZhczsKQEAgLTYzNSw3ICs3MDIsOSBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQoKQogCiAgICAgQVNTRVJUKG1fY2Fu
dmFzUGxhdGZvcm1MYXllcik7CiAgICAgaWYgKCFtX2lzVmFsaWRDYW52YXMpIHsKLSAgICAgICAg
bV9jb29yZGluYXRvci0+Y3JlYXRlQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7
CisgICAgICAgIG1fbGF5ZXJTdGF0ZS5jYW52YXNTaXplID0gbV9jYW52YXNQbGF0Zm9ybUxheWVy
LT5wbGF0Zm9ybUxheWVyU2l6ZSgpOworICAgICAgICBtX2xheWVyU3RhdGUuY2FudmFzVG9rZW4g
PSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAgICAg
IG1fbGF5ZXJTdGF0ZS5jYW52YXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgbV9pc1ZhbGlkQ2Fu
dmFzID0gdHJ1ZTsKICAgICB9CiAKQEAgLTY2NywxMSArNzM2LDI0IEBAIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkK
ICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICBzeW5jQ2FudmFzKCk7CiAjZW5kaWYKKwor
ICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJTdGF0ZSk7Cisg
ICAgcmVzZXRMYXllclN0YXRlKCk7CisKICAgICAvLyBPbmx5IHVuc2V0IG1fbW92aW5nVmlzaWJs
ZVJlY3QgYWZ0ZXIgd2UgaGF2ZSB1cGRhdGVkIHRoZSB2aXNpYmxlIHJlY3QgYWZ0ZXIgdGhlIGFu
aW1hdGlvbiBzdG9wcGVkLgogICAgIGlmICghaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKQog
ICAgICAgICBtX21vdmluZ1Zpc2libGVSZWN0ID0gZmFsc2U7CiB9CiAKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpyZXNldExheWVyU3RhdGUoKQoreworICAgIG1fbGF5ZXJTdGF0ZS5j
aGFuZ2VNYXNrID0gMDsKKyAgICBtX2xheWVyU3RhdGUudGlsZXNUb0NyZWF0ZS5jbGVhcigpOwor
ICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvUmVtb3ZlLmNsZWFyKCk7CisgICAgbV9sYXllclN0YXRl
LnRpbGVzVG9VcGRhdGUuY2xlYXIoKTsKKyAgICAvLyBUT0RPIDogV2hhdCBhYm91dCBjYW52YXNT
dXJmYWNlPworfQorCiBib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aW1hZ2VCYWNraW5n
VmlzaWJsZSgpCiB7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOwpAQCAt
Njg2LDcgKzc2OCw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZWxlYXNlSW1h
Z2VCYWNraW5nSWZOZWVkZWQoKQogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBtX2Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5yZW1vdmVIb3N0KHRoaXMpOwogICAgIG1fY29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuY2xlYXIoKTsKLSAgICBtX2xheWVySW5mby5pbWFnZUlEID0gSW52YWxp
ZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7CisgICAgbV9sYXllclN0YXRlLmltYWdlSUQgPSBJ
bnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKKyAgICBtX2xheWVyU3RhdGUuaW1hZ2VD
aGFuZ2VkID0gdHJ1ZTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVk
QmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCkBAIC02OTUsNyArNzc4LDggQEAgdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCiAKIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3QpCiB7Ci0g
ICAgbV9sYXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jvb3Q7CisgICAgbV9sYXllclN0YXRlLmlz
Um9vdExheWVyID0gaXNSb290OworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVl
OwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtNzUxLDggKzgzNSwxMSBAQCB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0
aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJl
Y3RzKQogewotICAgIGlmIChpc1Nob3dpbmdSZXBhaW50Q291bnRlcigpICYmICF1cGRhdGVkUmVj
dHMuaXNFbXB0eSgpKQotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5zZXRMYXllclJlcGFpbnRDb3Vu
dChpZCgpLCBpbmNyZW1lbnRSZXBhaW50Q291bnQoKSk7CisgICAgaWYgKCFpc1Nob3dpbmdSZXBh
aW50Q291bnRlcigpIHx8IHVwZGF0ZWRSZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fbGF5ZXJTdGF0ZS5yZXBhaW50Q291bnQgPSBpbmNyZW1lbnRSZXBhaW50Q291bnQo
KTsKKyAgICBtX2xheWVyU3RhdGUucmVwYWludENvdW50Q2hhbmdlZCA9IHRydWU7CiB9CiAKIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUhhc1BlbmRpbmdU
aWxlQ3JlYXRpb24oKQpAQCAtODExLDIxICs4OTgsMjggQEAgdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRl
SW4KIHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0
b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0gICAgbV9jb29yZGluYXRvci0+Y3JlYXRl
VGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKworICAgIG1fbGF5ZXJT
dGF0ZS50aWxlc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih0aWxlSUQsIHVwZGF0ZUlu
Zm8uc2NhbGVGYWN0b3IpKTsKKyAgICB1cGRhdGVUaWxlKHRpbGVJRCwgdXBkYXRlSW5mbywgdGls
ZVJlY3QpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSh1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25z
dCBJbnRSZWN0JiB0aWxlUmVjdCkKIHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAg
QVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0gICAgbV9j
b29yZGluYXRvci0+dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRpbGVSZWN0
KTsKKworICAgIFRpbGVVcGRhdGVJbmZvIHRpbGVVcGRhdGVJbmZvOworICAgIHRpbGVVcGRhdGVJ
bmZvLnRpbGVJRCA9IHRpbGVJRDsKKyAgICB0aWxlVXBkYXRlSW5mby50aWxlUmVjdCA9IHRpbGVS
ZWN0OworICAgIHRpbGVVcGRhdGVJbmZvLnVwZGF0ZUluZm8gPSB1cGRhdGVJbmZvOworICAgIG1f
bGF5ZXJTdGF0ZS50aWxlc1RvVXBkYXRlLmFwcGVuZCh0aWxlVXBkYXRlSW5mbyk7CiB9CiAKIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCkK
IHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3It
PmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSB8fCBtX2lzUHVyZ2luZyk7Ci0gICAgbV9jb29yZGlu
YXRvci0+cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOworICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1Rv
UmVtb3ZlLmFwcGVuZCh0aWxlSUQpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IGU1YWE0N2EuLjc5MGZlOTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgK
QEAgLTIxLDggKzIxLDggQEAKICNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKICNk
ZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVk
R3JhcGhpY3NTdGF0ZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCi0j
aW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFRp
bGUuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVy
LmgiCkBAIC00OCwzMSArNDgsMTIgQEAgY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7CiBj
bGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgPSAwOwotCi0gICAgLy8gQ29v
cmRpbmF0ZWRUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0
ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29u
c3QgSW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRl
ZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25z
dCBJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVk
TGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKSA9IDA7Ci0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
b29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2Uq
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5
bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5h
dGVkTGF5ZXJJRD4mKSA9IDA7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwg
dm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYpID0gMDsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxheWVy
KikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwg
UGxhdGZvcm1MYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29y
ZGluYXRlZExheWVySUQpID0gMDsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVy
UmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50KSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhp
Y3NMYXllckFuaW1hdGlvbnMmKSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIo
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgUGFzc093blB0cjxH
cmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiwgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKSA9IDA7CiB9OwogCiBjbGFzcyBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgR3JhcGhpY3NMYXllcgpAQCAtMTkwLDYgKzE3MSw3IEBA
IHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lkIGRpZENoYW5nZUltYWdlQmFja2luZygpOwogCisg
ICAgdm9pZCByZXNldExheWVyU3RhdGUoKTsKICAgICB2b2lkIHN5bmNMYXllclN0YXRlKCk7CiAg
ICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwogICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7CkBAIC0y
MTYsNyArMTk4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZp
cmVkKFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4qKTsKIAogICAgIENvb3JkaW5hdGVk
TGF5ZXJJRCBtX2lkOwotICAgIENvb3JkaW5hdGVkTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOworICAg
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlIG1fbGF5ZXJTdGF0ZTsKICAgICBHcmFwaGlj
c0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV9jYWNoZWRJbnZlcnNlVHJhbnNmb3JtOwogICAgIEZsb2F0U2l6ZSBtX3BpeGVsQWxpZ25t
ZW50T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lLmNwcAppbmRleCA4NjI0NTEzLi5lMDBhMmVkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApAQCAtMTk2
LDU0ICsxOTYsNjMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFkanVzdFBvc2l0
aW9uRm9yRml4ZWRMYXllcnMoKQogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNl
KQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUNhbnZhc0lmTmVlZGVkKEdy
YXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotICAgIEFTU0VSVCghbV9zdXJmYWNlQmFja2luZ1N0
b3Jlcy5jb250YWlucyhpZCkpOworICAgIGlmICghc3RhdGUuY2FudmFzVG9rZW4uaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNr
aW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdT
dG9yZTo6Y3JlYXRlKCkpOwotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52
YXNCYWNraW5nU3RvcmUpOworICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGxheWVyLCBj
YW52YXNCYWNraW5nU3RvcmUpOwogCi0gICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGlj
c1N1cmZhY2Uoc3VyZmFjZSk7CisgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJmYWNlRmxh
Z3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBoaWNzU3Vy
ZmFjZTo6U3VwcG9ydHNTaGFyaW5nOworICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c2V0R3JhcGhp
Y3NTdXJmYWNlKEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN0YXRlLmNhbnZhc1NpemUsIHN1cmZh
Y2VGbGFncywgc3RhdGUuY2FudmFzVG9rZW4pKTsKICAgICBsYXllci0+c2V0Q29udGVudHNUb01l
ZGlhKGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJv
bnRCdWZmZXIpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY0NhbnZhc0lmTmVl
ZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJT
dGF0ZSYgc3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAgQVNTRVJU
KG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMoaWQpKTsKKyAgICBBU1NFUlQobV9zdXJm
YWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhsYXllcikpOwogCi0gICAgU3VyZmFjZUJhY2tpbmdT
dG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmZpbmQoaWQpOwot
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gY2FudmFzQmFja2lu
Z1N0b3JlID0gaXQtPnZhbHVlOworICAgIGlmIChzdGF0ZS5jYW52YXNDaGFuZ2VkKSB7CisgICAg
ICAgIGRlc3Ryb3lDYW52YXNJZk5lZWRlZChsYXllcixzdGF0ZSk7CisgICAgICAgIGNyZWF0ZUNh
bnZhc0lmTmVlZGVkKGxheWVyLCBzdGF0ZSk7CisgICAgfQogCi0gICAgY2FudmFzQmFja2luZ1N0
b3JlLT5zd2FwQnVmZmVyc0lmTmVlZGVkKGZyb250QnVmZmVyKTsKKyAgICBpZiAoc3RhdGUuY2Fu
dmFzU2hvdWxkU3dhcEJ1ZmZlcnMpIHsKKyAgICAgICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmZpbmQobGF5ZXIpOworICAgICAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdT
dG9yZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlLT5zd2FwQnVmZmVy
c0lmTmVlZGVkKHN0YXRlLmNhbnZhc0Zyb250QnVmZmVyKTsKKyAgICB9CiB9CiAKLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQo
R3JhcGhpY3NMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRl
JiBzdGF0ZSkKIHsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKLSAgICBHcmFwaGljc0xh
eWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Ci0gICAgQVNTRVJUKG1fc3VyZmFjZUJhY2tpbmdT
dG9yZXMuY29udGFpbnMoaWQpKTsKKyAgICBpZiAoc3RhdGUuY2FudmFzVG9rZW4uaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm47CiAKLSAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShp
ZCk7CisgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5yZW1vdmUobGF5ZXIpOwogICAgIGxheWVy
LT5zZXRDb250ZW50c1RvTWVkaWEoMCk7CiB9CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
aW50IHZhbHVlKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUmVwYWlu
dENvdW50SWZOZWVkZWQoR3JhcGhpY3NMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxh
eWVyQnlJRChpZCk7Ci0gICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihsYXllciktPnNl
dFJlcGFpbnRDb3VudCh2YWx1ZSk7CisgICAgaWYgKCFsYXllci0+aXNTaG93aW5nUmVwYWludENv
dW50ZXIoKSB8fCAhc3RhdGUucmVwYWludENvdW50Q2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihsYXllciktPnNldFJlcGFpbnRDb3Vu
dChzdGF0ZS5yZXBhaW50Q291bnQpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6c2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxD
b29yZGluYXRlZExheWVySUQ+JiBjaGlsZElEcykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzZXRMYXllckNoaWxkcmVuSWZOZWVkZWQoR3JhcGhpY3NMYXllciogbGF5ZXIsIGNvbnN0
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBHcmFwaGljc0xh
eWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7CisgICAgaWYgKCFzdGF0ZS5jaGlsZHJlbkNoYW5n
ZWQpCisgICAgICAgIHJldHVybjsKKwogICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRy
ZW47CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkSURzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBjaGlsZElEID0gY2hpbGRJRHNbaV07CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAg
ICAgICBDb29yZGluYXRlZExheWVySUQgY2hpbGRJRCA9IHN0YXRlLmNoaWxkcmVuW2ldOwogICAg
ICAgICBHcmFwaGljc0xheWVyKiBjaGlsZCA9IGxheWVyQnlJRChjaGlsZElEKTsKICAgICAgICAg
Y2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKICAgICB9CkBAIC0yNTEsMTQgKzI2MCwxNSBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExh
eWVySUQgaWQsIGNvbnN0IFZlYwogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVy
SUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQoR3JhcGhpY3NMYXllciogbGF5
ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBH
cmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7CisgICAgaWYgKCFzdGF0ZS5maWx0
ZXJzQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQot
ICAgIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKGZpbHRlcnMpOworICAgIGluamVj
dENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKHN0YXRlLmZpbHRlcnMpOwogI2VuZGlmCi0gICAg
bGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7CisgICAgbGF5ZXItPnNldEZpbHRlcnMoc3RhdGUu
ZmlsdGVycyk7CiB9CiAjZW5kaWYKIApAQCAtMjk0LDQzICszMDQsNzggQEAgdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQogfQog
I2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykKIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OnNldExheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGlu
YXRlZExheWVySW5mbyYgbGF5ZXJJbmZvKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnNldExheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJTdGF0ZSYgbGF5ZXJTdGF0ZSkKIHsKICAgICBBU1NFUlQobV9yb290TGF5ZXJJ
RCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKICAgICBHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyQnlJRChpZCk7CiAKLSAgICBsYXllci0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIoZ2V0
TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJJbmZvLnJlcGxpY2EpKTsKLSAgICBsYXllci0+c2V0TWFz
a0xheWVyKGdldExheWVyQnlJRElmRXhpc3RzKGxheWVySW5mby5tYXNrKSk7Ci0KLSAgICBsYXll
ci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJJbmZvLmFuY2hvclBvaW50KTsKLSAgICBsYXllci0+c2V0
UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7Ci0gICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNp
emUpOwotCi0gICAgbGF5ZXItPnNldFRyYW5zZm9ybShsYXllckluZm8udHJhbnNmb3JtKTsKLSAg
ICBsYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3Jt
KTsKLSAgICBsYXllci0+c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNrZmFjZVZp
c2libGUpOwotICAgIGxheWVyLT5zZXRDb250ZW50c09wYXF1ZShsYXllckluZm8uY29udGVudHNP
cGFxdWUpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVj
dCk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGxheWVySW5mby5zb2xpZENv
bG9yKTsKLSAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQp
OwotICAgIGxheWVyLT5zZXRDb250ZW50c1Zpc2libGUobGF5ZXJJbmZvLmNvbnRlbnRzVmlzaWJs
ZSk7Ci0gICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihsYXllciktPnNldEZpeGVkVG9W
aWV3cG9ydChsYXllckluZm8uZml4ZWRUb1ZpZXdwb3J0KTsKLSAgICBsYXllci0+c2V0U2hvd0Rl
YnVnQm9yZGVyKGxheWVySW5mby5zaG93RGVidWdCb3JkZXJzKTsKLSAgICBsYXllci0+c2V0RGVi
dWdCb3JkZXIobGF5ZXJJbmZvLmRlYnVnQm9yZGVyQ29sb3IsIGxheWVySW5mby5kZWJ1Z0JvcmRl
cldpZHRoKTsKLSAgICBsYXllci0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKGxheWVySW5mby5zaG93
UmVwYWludENvdW50ZXIpOwotCi0gICAgaWYgKGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpCisg
ICAgaWYgKGxheWVyU3RhdGUucG9zaXRpb25DaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0UG9z
aXRpb24obGF5ZXJTdGF0ZS5wb3MpOworCisgICAgaWYgKGxheWVyU3RhdGUuYW5jaG9yUG9pbnRD
aGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJTdGF0ZS5hbmNob3JQ
b2ludCk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5zaXplQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXIt
PnNldFNpemUobGF5ZXJTdGF0ZS5zaXplKTsKKworICAgIGlmIChsYXllclN0YXRlLnRyYW5zZm9y
bUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJTdGF0ZS50cmFuc2Zv
cm0pOworCisgICAgaWYgKGxheWVyU3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2VkKQorICAg
ICAgICBsYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0obGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5z
Zm9ybSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5jb250ZW50c1JlY3RDaGFuZ2VkKQorICAgICAg
ICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVyU3RhdGUuY29udGVudHNSZWN0KTsKKworICAg
IGlmIChsYXllclN0YXRlLm9wYWNpdHlDaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0T3BhY2l0
eShsYXllclN0YXRlLm9wYWNpdHkpOworCisgICAgaWYgKGxheWVyU3RhdGUuc29saWRDb2xvckNo
YW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RvU29saWRDb2xvcihsYXllclN0YXRl
LnNvbGlkQ29sb3IpOworCisgICAgaWYgKGxheWVyU3RhdGUuZGVidWdCb3JkZXJDb2xvckNoYW5n
ZWQgfHwgbGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlcldpZHRoQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXIt
PnNldERlYnVnQm9yZGVyKGxheWVyU3RhdGUuZGVidWdCb3JkZXJDb2xvciwgbGF5ZXJTdGF0ZS5k
ZWJ1Z0JvcmRlcldpZHRoKTsKKworICAgIGlmIChsYXllclN0YXRlLnJlcGxpY2FDaGFuZ2VkKQor
ICAgICAgICBsYXllci0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMo
bGF5ZXJTdGF0ZS5yZXBsaWNhKSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5tYXNrQ2hhbmdlZCkK
KyAgICAgICAgbGF5ZXItPnNldE1hc2tMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllclN0
YXRlLm1hc2spKTsKKworICAgIGlmIChsYXllclN0YXRlLmltYWdlQ2hhbmdlZCkKKyAgICAgICAg
YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihsYXllciwgbGF5ZXJTdGF0ZS5pbWFnZUlEKTsKKwor
ICAgIGlmIChsYXllclN0YXRlLmZsYWdzQ2hhbmdlZCkgeworICAgICAgICBsYXllci0+c2V0Q29u
dGVudHNPcGFxdWUobGF5ZXJTdGF0ZS5jb250ZW50c09wYXF1ZSk7CisgICAgICAgIGxheWVyLT5z
ZXREcmF3c0NvbnRlbnQobGF5ZXJTdGF0ZS5kcmF3c0NvbnRlbnQpOworICAgICAgICBsYXllci0+
c2V0Q29udGVudHNWaXNpYmxlKGxheWVyU3RhdGUuY29udGVudHNWaXNpYmxlKTsKKyAgICAgICAg
bGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllclN0YXRlLmJhY2tmYWNlVmlzaWJsZSk7
CisKKyAgICAgICAgLy8gTmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgorICAgICAgICBs
YXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllclN0YXRlLmlzUm9vdExheWVyID8gZmFsc2UgOiBs
YXllclN0YXRlLm1hc2tzVG9Cb3VuZHMpOworICAgICAgICBsYXllci0+c2V0UHJlc2VydmVzM0Qo
bGF5ZXJTdGF0ZS5wcmVzZXJ2ZXMzRCk7CisKKyAgICAgICAgdG9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcihsYXllciktPnNldEZpeGVkVG9WaWV3cG9ydChsYXllclN0YXRlLmZpeGVkVG9WaWV3
cG9ydCk7CisgICAgICAgIGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIobGF5ZXJTdGF0ZS5zaG93
RGVidWdCb3JkZXJzKTsKKyAgICAgICAgbGF5ZXItPnNldFNob3dSZXBhaW50Q291bnRlcihsYXll
clN0YXRlLnNob3dSZXBhaW50Q291bnRlcik7CisgICAgfQorCisgICAgaWYgKGxheWVyU3RhdGUu
Zml4ZWRUb1ZpZXdwb3J0KQogICAgICAgICBtX2ZpeGVkTGF5ZXJzLmFkZChpZCwgbGF5ZXIpOwog
ICAgIGVsc2UKICAgICAgICAgbV9maXhlZExheWVycy5yZW1vdmUoaWQpOwogCi0gICAgYXNzaWdu
SW1hZ2VCYWNraW5nVG9MYXllcihpZCwgbGF5ZXIsIGxheWVySW5mby5pbWFnZUlEKTsKICAgICBw
cmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShsYXllcik7CiAKLSAgICAvLyBOZXZlciBtYWtlIHRo
ZSByb290IGxheWVyIGNsaXAuCi0gICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZv
LmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7Ci0gICAgbGF5
ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOwotICAgIGxheWVyLT5zZXRQcmVzZXJ2
ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOworICAgIC8vIEFwcGx5IE9wZXJhdGlvbnMuCisg
ICAgc2V0TGF5ZXJDaGlsZHJlbklmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyAgICB1cGRh
dGVUaWxlc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCisgICAgc2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOworI2Vu
ZGlmCisgICAgc2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOwor
ICAgIHN5bmNDYW52YXNJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7CisgICAgc2V0TGF5ZXJS
ZXBhaW50Q291bnRJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7CiB9CiAKIEdyYXBoaWNzTGF5
ZXIqIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkKQpAQCAtMzY1LDcgKzQxMCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpkZWxldGVMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKICAgICBt
X2JhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKICAgICBtX2ZpeGVkTGF5ZXJzLnJl
bW92ZShsYXllcklEKTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX3N1cmZhY2VC
YWNraW5nU3RvcmVzLnJlbW92ZShsYXllcklEKTsKKyAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVz
LnJlbW92ZShsYXllci5nZXQoKSk7CiAjZW5kaWYKIH0KIApAQCAtNDE5LDM2ICs0NjQsNTYgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5
ZXJTaXplKEdyYXBoaWNzTGF5ZXIqIGcKICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1
ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGZsb2F0IHNjYWxlKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVRp
bGVzSWZOZWVkZWQoR3JhcGhpY3NMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVy
QnlJRChsYXllcklEKTsKKyAgICBpZiAoc3RhdGUudGlsZXNUb0NyZWF0ZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldChsYXllcik7CiAgICAgQVNTRVJUKGJhY2tp
bmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKHRpbGVJRCwgc2NhbGUpOwor
CisgICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50MzJfdCwgZmxvYXQ+ID46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHN0YXRlLnRpbGVzVG9DcmVhdGUuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8c3RkOjpw
YWlyPHVpbnQzMl90LCBmbG9hdD4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdGF0ZS50aWxlc1Rv
Q3JlYXRlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYmFja2luZ1N0b3JlLT5j
cmVhdGVUaWxlKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50
MzJfdCB0aWxlSUQpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZXNJ
Zk5lZWRlZChHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyU3RhdGUmIHN0YXRlKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlE
KGxheWVySUQpOworICAgIGlmIChzdGF0ZS50aWxlc1RvUmVtb3ZlLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKICAgICBpZiAoIWJhY2tpbmdTdG9y
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYmFja2luZ1N0b3JlLT5yZW1vdmVUaWxlKHRpbGVJ
RCk7CisgICAgVmVjdG9yPHVpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RhdGUudGls
ZXNUb1JlbW92ZS5lbmQoKTsKKyAgICBmb3IgKFZlY3Rvcjx1aW50MzJfdD46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gc3RhdGUudGlsZXNUb1JlbW92ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgIGJhY2tpbmdTdG9yZS0+cmVtb3ZlVGlsZSgqaXQpOworCiAgICAgbV9iYWNraW5nU3Rv
cmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwogfQogCi12b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRhdGUpCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiBs
YXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIGNyZWF0ZVRp
bGVzSWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsKKyAgICByZW1vdmVUaWxlc0lmTmVlZGVkKGxheWVy
LCBzdGF0ZSk7CisKKyAgICBpZiAoc3RhdGUudGlsZXNUb1VwZGF0ZS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldChsYXllcik7CiAgICAgQVNTRVJUKGJhY2tpbmdT
dG9yZSk7CiAKLSAgICBTdXJmYWNlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZXMuZmluZCh1
cGRhdGUuYXRsYXNJRCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fc3VyZmFjZXMuZW5kKCkpOworICAg
IFZlY3RvcjxUaWxlVXBkYXRlSW5mbz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0YXRlLnRpbGVz
VG9VcGRhdGUuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8VGlsZVVwZGF0ZUluZm8+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHN0YXRlLnRpbGVzVG9VcGRhdGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiBzdXJmYWNlVXBkYXRlSW5mbyA9
IGl0LT51cGRhdGVJbmZvOwogCi0gICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwg
dXBkYXRlLnNvdXJjZVJlY3QsIHVwZGF0ZS50aWxlUmVjdCwgaXQtPnZhbHVlLCB1cGRhdGUub2Zm
c2V0KTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdT
dG9yZSk7CisgICAgICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIHN1cmZhY2VJdCA9IG1fc3VyZmFj
ZXMuZmluZChzdXJmYWNlVXBkYXRlSW5mby5hdGxhc0lEKTsKKyAgICAgICAgQVNTRVJUKHN1cmZh
Y2VJdCAhPSBtX3N1cmZhY2VzLmVuZCgpKTsKKworICAgICAgICBiYWNraW5nU3RvcmUtPnVwZGF0
ZVRpbGUoaXQtPnRpbGVJRCwgc3VyZmFjZVVwZGF0ZUluZm8udXBkYXRlUmVjdCwgaXQtPnRpbGVS
ZWN0LCBzdXJmYWNlSXQtPnZhbHVlLCBzdXJmYWNlVXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KTsK
KyAgICAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3Rv
cmUpOworICAgIH0KIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVw
ZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiBzdXJmYWNlKQpAQCAtNTA0LDEwICs1NjksMTAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWcK
ICAgICBtX3JlbGVhc2VkSW1hZ2VCYWNraW5ncy5hcHBlbmQobV9pbWFnZUJhY2tpbmdzLnRha2Uo
aW1hZ2VJRCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YXNzaWduSW1h
Z2VCYWNraW5nVG9MYXllcihDb29yZGluYXRlZExheWVySUQgaWQsIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihHcmFwaGljc0xheWVyKiBs
YXllciwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQogewogI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQotICAgIGlmIChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGlk
KSkKKyAgICBpZiAobV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhsYXllcikpCiAgICAg
ICAgIHJldHVybjsKICNlbmRpZgogCkBAIC01MzQsMTMgKzU5OSwyNSBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKQog
ICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOwogfQogCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Zmx1c2hMYXllckNoYW5nZXMoY29uc3QgRmxvYXRQ
b2ludCYgc2Nyb2xsUG9zaXRpb24pCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Zmx1
c2hMYXllckNoYW5nZXMoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKIHsK
LSAgICBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwor
ICAgIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gc3RhdGUuc2Nyb2xsUG9zaXRp
b247CiAKICAgICAvLyBTaW5jZSB0aGUgZnJhbWUgaGFzIG5vdyBiZWVuIHJlbmRlcmVkLCB3ZSBj
YW4gc2FmZWx5IHVubG9jayB0aGUgYW5pbWF0aW9ucyB1bnRpbCB0aGUgbmV4dCBsYXlvdXQuCiAg
ICAgc2V0QW5pbWF0aW9uc0xvY2tlZChmYWxzZSk7CiAKKyAgICBpZiAoc3RhdGUucm9vdENvbXBv
c2l0aW5nTGF5ZXIgIT0gbV9yb290TGF5ZXJJRCkKKyAgICAgICAgc2V0Um9vdExheWVySUQoc3Rh
dGUucm9vdENvbXBvc2l0aW5nTGF5ZXIpOworCisgICAgaWYgKHN0YXRlLmJhY2tncm91bmRDb2xv
ciAhPSBtX2JhY2tncm91bmRDb2xvcikKKyAgICAgICAgc2V0QmFja2dyb3VuZENvbG9yKHN0YXRl
LmJhY2tncm91bmRDb2xvcik7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8Q29vcmRp
bmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZT4gPiBMYXllclVwZGF0
ZVBhaXJWZWN0b3I7CisgICAgTGF5ZXJVcGRhdGVQYWlyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBzdGF0ZS5sYXllcnNUb1VwZGF0ZS5lbmQoKTsKKyAgICBmb3IgKExheWVyVXBkYXRlUGFp
clZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0YXRlLmxheWVyc1RvVXBkYXRlLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgc2V0TGF5ZXJTdGF0ZShpdGVyLT5m
aXJzdCwgaXRlci0+c2Vjb25kKTsKKyAgICB9CisKICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21w
b3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKICAgICBjb21taXRQZW5kaW5nQmFja2luZ1N0b3Jl
T3BlcmF0aW9ucygpOwogICAgIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7
CkBAIC02MTYsMTIgKzY5MywxNiBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVy
Z2VCYWNraW5nU3RvcmVzKCkKICAgICAgICAgbV9jbGllbnQtPnB1cmdlQmFja2luZ1N0b3Jlcygp
OwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25z
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFu
aW1hdGlvbnMpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRp
b25zSWZOZWVkZWQoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyKiBsYXllciA9IHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXJCeUlEKGlk
KSk7CisgICAgaWYgKCFzdGF0ZS5hbmltYXRpb25zQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGxheWVyID0gdG9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcihncmFwaGljc0xheWVyKTsKKwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBh
bmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRlLmFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBzdGF0ZS5hbmlt
YXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKICAgICAgICAgaWYgKGtleWZy
YW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMu
c2l6ZSgpOyArK2opIHsKQEAgLTYzMCw3ICs3MTEsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3Qg
RwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgbGF5ZXItPnNldEFuaW1hdGlvbnMoYW5p
bWF0aW9ucyk7CisgICAgbGF5ZXItPnNldEFuaW1hdGlvbnMoc3RhdGUuYW5pbWF0aW9ucyk7CiB9
CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBbmltYXRpb25zTG9ja2VkKGJv
b2wgbG9ja2VkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5oCmluZGV4IDljOTIxYTcuLjg3MTUyYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzU2NlbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKQEAgLTIxLDcgKzIxLDcg
QEAKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lX2gKIAogI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1
ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3Vy
ZmFjZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXIuaCIKQEAgLTQ2LDcgKzQ2LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU7Ci1jbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKIGNs
YXNzIEN1c3RvbUZpbHRlclByb2dyYW07CiBjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbzsK
IGNsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKQEAgLTgyLDEzICs4MSw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiwgZmxvYXQsIGNvbnN0IEZsb2F0UmVjdCYsIFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgPSAw
KTsKICAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqKTsKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4pOwot
ICAgIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZyb250QnVm
ZmVyKTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSNlbmRp
ZgotICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklELCBpbnQg
dmFsdWUpOwotCiAgICAgdm9pZCBkZXRhY2goKTsKICAgICB2b2lkIGFwcGVuZFVwZGF0ZShjb25z
dCBGdW5jdGlvbjx2b2lkKCk+Jik7CiAKQEAgLTk3LDMxICs4OSwyNCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CiAKKyAg
ICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYp
OworCiAgICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJ
RD4mKTsKICAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYpOwogICAgIHZvaWQgc2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAg
ICB2b2lkIHNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8
Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0jaWYgRU5BQkxFKENTU19G
SUxURVJTKQotICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCisKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
CiAgICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKICAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclBy
b2dyYW0oaW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwogICAgIHZvaWQg
cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwogI2VuZGlmCiAKLSAgICB2b2lkIGNy
ZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxl
KTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxl
SUQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKICAgICB2b2lk
IHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1c2hMYXll
ckNoYW5nZXMoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogICAgIHZvaWQgY3Jl
YXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgdXBk
YXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPik7CiAgICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENv
b3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKICAgICB2
b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29s
b3IoY29uc3QgQ29sb3ImKTsKICAgICB2b2lkIHNldERyYXdzQmFja2dyb3VuZChib29sIGVuYWJs
ZSkgeyBtX3NldERyYXdzQmFja2dyb3VuZCA9IGVuYWJsZTsgfQpAQCAtMTMxLDYgKzExNiwyMyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICAvLyBSZWFsIE9wZXJhdGlvbnMKKyAg
ICB2b2lkIHNldExheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJlbklmTmVlZGVk
KEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwor
ICAgIHZvaWQgdXBkYXRlVGlsZXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVzSWZOZWVkZWQo
R3JhcGhpY3NMYXllciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Cisg
ICAgdm9pZCByZW1vdmVUaWxlc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2
b2lkIHNldExheWVyRmlsdGVyc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworI2VuZGlmCisgICAgdm9pZCBzZXRMYXllckFuaW1h
dGlvbnNJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyU3RhdGUmKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2b2lkIGNyZWF0ZUNh
bnZhc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSYpOworICAgIHZvaWQgc3luY0NhbnZhc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworICAgIHZvaWQgZGVzdHJveUNh
bnZhc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSYpOworI2VuZGlmCisgICAgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudElmTmVlZGVk
KEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwor
CiAgICAgR3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2xheWVycy5jb250YWlucyhpZCkpOwpAQCAtMTU5LDcgKzE2
MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVMYXllcihDb29yZGluYXRlZExheWVySUQp
OwogICAgIHZvaWQgZGVsZXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKIAotICAgIHZvaWQg
YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihDb29yZGluYXRlZExheWVySUQsIEdyYXBoaWNzTGF5
ZXIqLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIGFzc2lnbkltYWdlQmFj
a2luZ1RvTGF5ZXIoR3JhcGhpY3NMYXllciosIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwog
ICAgIHZvaWQgcmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKICAgICB2b2lk
IGVuc3VyZVJvb3RMYXllcigpOwogICAgIHZvaWQgY29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9w
ZXJhdGlvbnMoKTsKQEAgLTE4NSw3ICsxODcsNyBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8UmVm
UHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5n
QnVmZmVyczsKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHR5cGVkZWYgSGFzaE1h
cDxDb29yZGluYXRlZExheWVySUQsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdT
dG9yZT4gPiBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxHcmFw
aGljc0xheWVyKiwgUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiA+IFN1
cmZhY2VCYWNraW5nU3RvcmVNYXA7CiAgICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcCBtX3N1cmZh
Y2VCYWNraW5nU3RvcmVzOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3Rh
dGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43ZjlhNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5o
CkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEz
IENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNv
bG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRpb24uaCIK
KyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorCisjaWYgRU5BQkxFKENTU19GSUxURVJT
KQorI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKKyNlbmRpZgorCisjaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlVG9rZW4uaCIKKyNlbmRpZgor
CisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordHlwZWRlZiB1aW50MzJfdCBDb29yZGluYXRlZExheWVySUQ7CitlbnVtIHsgSW52YWxpZENv
b3JkaW5hdGVkTGF5ZXJJRCA9IDAgfTsKKwordHlwZWRlZiB1aW50NjRfdCBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEOworZW51bSB7IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEID0g
MCB9OworCitzdHJ1Y3QgVGlsZVVwZGF0ZUluZm8geworICAgIHVpbnQzMl90IHRpbGVJRDsKKyAg
ICBJbnRSZWN0IHRpbGVSZWN0OworICAgIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0
ZUluZm87Cit9OworCitzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUgeworICAg
IHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGJvb2wgcG9zaXRpb25DaGFu
Z2VkOiAxOworICAgICAgICAgICAgYm9vbCBhbmNob3JQb2ludENoYW5nZWQ6IDE7CisgICAgICAg
ICAgICBib29sIHNpemVDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCB0cmFuc2Zvcm1DaGFu
Z2VkOiAxOworICAgICAgICAgICAgYm9vbCBjaGlsZHJlblRyYW5zZm9ybUNoYW5nZWQ6IDE7Cisg
ICAgICAgICAgICBib29sIGNvbnRlbnRzUmVjdENoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29s
IG9wYWNpdHlDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBzb2xpZENvbG9yQ2hhbmdlZDog
MTsKKyAgICAgICAgICAgIGJvb2wgZGVidWdCb3JkZXJDb2xvckNoYW5nZWQ6IDE7CisgICAgICAg
ICAgICBib29sIGRlYnVnQm9yZGVyV2lkdGhDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBy
ZXBsaWNhQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgbWFza0NoYW5nZWQ6IDE7CisgICAg
ICAgICAgICBib29sIGltYWdlQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgZmxhZ3NDaGFu
Z2VkOiAxOworICAgICAgICAgICAgYm9vbCBhbmltYXRpb25zQ2hhbmdlZDogMTsKKyAgICAgICAg
ICAgIGJvb2wgZmlsdGVyc0NoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29sIGNoaWxkcmVuQ2hh
bmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgcmVwYWludENvdW50Q2hhbmdlZCA6IDE7CisgICAg
ICAgICAgICBib29sIGNhbnZhc0NoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29sIGNhbnZhc1No
b3VsZFN3YXBCdWZmZXJzOiAxOworICAgICAgICB9OworICAgICAgICB1bnNpZ25lZCBjaGFuZ2VN
YXNrOworICAgIH07CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAg
Ym9vbCBjb250ZW50c09wYXF1ZSA6IDE7CisgICAgICAgICAgICBib29sIGRyYXdzQ29udGVudCA6
IDE7CisgICAgICAgICAgICBib29sIGNvbnRlbnRzVmlzaWJsZSA6IDE7CisgICAgICAgICAgICBi
b29sIGJhY2tmYWNlVmlzaWJsZSA6IDE7CisgICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMg
OiAxOworICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRCA6IDE7CisgICAgICAgICAgICBib29s
IGlzUm9vdExheWVyOiAxOworICAgICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOwor
ICAgICAgICAgICAgYm9vbCBzaG93RGVidWdCb3JkZXJzIDogMTsKKyAgICAgICAgICAgIGJvb2wg
c2hvd1JlcGFpbnRDb3VudGVyIDogMTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5zaWduZWQgZmxh
Z3M7CisgICAgfTsKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlKCkKKyAgICAg
ICAgOiBjaGFuZ2VNYXNrKDApCisgICAgICAgICwgZmxhZ3MoMCkKKyAgICAgICAgLCBvcGFjaXR5
KDApCisgICAgICAgICwgZGVidWdCb3JkZXJXaWR0aCgwKQorICAgICAgICAsIHJlcGxpY2EoSW52
YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKKyAgICAgICAgLCBtYXNrKEludmFsaWRDb29yZGluYXRl
ZExheWVySUQpCisgICAgICAgICwgaW1hZ2VJRChJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCkKKyAgICAgICAgLCBjYW52YXNGcm9udEJ1ZmZlcigwKQorICAgIHsKKyAgICB9CisgICAg
RmxvYXRQb2ludCBwb3M7CisgICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OworICAgIEZsb2F0
U2l6ZSBzaXplOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKKyAgICBJbnRSZWN0IGNvbnRlbnRz
UmVjdDsKKyAgICBmbG9hdCBvcGFjaXR5OworICAgIENvbG9yIHNvbGlkQ29sb3I7CisgICAgQ29s
b3IgZGVidWdCb3JkZXJDb2xvcjsKKyAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOworI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisjZW5kaWYK
KyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRpb25zOworICAgIFZlY3Rvcjx1aW50
MzJfdD4gY2hpbGRyZW47CisgICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50MzJfdCAvKiB0aWxlSUQg
Ki8sIGZsb2F0IC8qIHNjYWxlICovPiA+IHRpbGVzVG9DcmVhdGU7CisgICAgVmVjdG9yPHVpbnQz
Ml90PiB0aWxlc1RvUmVtb3ZlOworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCByZXBsaWNhOworICAg
IENvb3JkaW5hdGVkTGF5ZXJJRCBtYXNrOworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRDsKKworICAgIHVuc2lnbmVkIHJlcGFpbnRDb3VudDsKKyAgICBWZWN0b3I8VGlsZVVw
ZGF0ZUluZm8+IHRpbGVzVG9VcGRhdGU7CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAg
ICBJbnRTaXplIGNhbnZhc1NpemU7CisgICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gY2FudmFzVG9r
ZW47CisgICAgdWludDMyX3QgY2FudmFzRnJvbnRCdWZmZXI7CisjZW5kaWYKK307CisKK3N0cnVj
dCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgeworICAgIHVpbnQzMl90IHJvb3RDb21wb3NpdGlu
Z0xheWVyOworICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKKyAgICBGbG9hdFBvaW50IHNjcm9s
bFBvc2l0aW9uOworICAgIEludFNpemUgY29udGVudHNTaXplOworICAgIEludFJlY3QgY292ZXJl
ZFJlY3Q7CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPENvb3JkaW5hdGVkTGF5ZXJJRCwgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGU+ID4gbGF5ZXJzVG9VcGRhdGU7CisgICAgVmVjdG9yPHN0
ZDo6cGFpcjxDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJm
YWNlPiA+ID4gaW1hZ2VzVG9VcGRhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBDb29yZGlu
YXRlZEdyYXBoaWNzU3RhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcuaAppbmRleCA1YjViNTdhLi43NzllMzI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaApAQCAtMjgsNyAr
MjgsNyBAQAogI2RlZmluZSBDb29yZGluYXRlZEltYWdlQmFja2luZ19oCiAKICNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKKyNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCIKICNpbmNsdWRlICJDb29yZGluYXRl
ZFN1cmZhY2UuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCkBAIC04
Niw3ICs4Niw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faXNEaXJ0eTsKICAgICBib29sIG1f
aXNWaXNpYmxlOwotCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRMYXllckluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwZmEyYTEyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllckluZm9faAotI2RlZmluZSBDb29yZGlu
YXRlZExheWVySW5mb19oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgdWludDMyX3QgQ29vcmRpbmF0
ZWRMYXllcklEOwotZW51bSB7IEludmFsaWRDb29yZGluYXRlZExheWVySUQgPSAwIH07Ci0KLXR5
cGVkZWYgdWludDY0X3QgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKLWVudW0geyBJbnZhbGlk
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCA9IDAgfTsKLQotLy8gTk9URTogQ29vcmRpbmF0ZWRM
YXllckluZm8gc2hvdWxkIG9ubHkgdXNlIFBPRCB0eXBlcywgYXMgdG8gbWFrZSBzZXJpYWxpemF0
aW9uIGZhc3Rlci4KLXN0cnVjdCBDb29yZGluYXRlZExheWVySW5mbyB7Ci0gICAgQ29vcmRpbmF0
ZWRMYXllckluZm8oKQotICAgICAgICA6IHJlcGxpY2EoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJ
RCkKLSAgICAgICAgLCBtYXNrKEludmFsaWRDb29yZGluYXRlZExheWVySUQpCi0gICAgICAgICwg
aW1hZ2VJRChJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkKLSAgICAgICAgLCBvcGFj
aXR5KDApCi0gICAgICAgICwgZGVidWdCb3JkZXJXaWR0aCgwKQotICAgICAgICAsIGZsYWdzKDAp
IHsgfQotCi0gICAgQ29vcmRpbmF0ZWRMYXllcklEIHJlcGxpY2E7Ci0gICAgQ29vcmRpbmF0ZWRM
YXllcklEIG1hc2s7Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEOwotCi0g
ICAgRmxvYXRQb2ludCBwb3M7Ci0gICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwotICAgIEZs
b2F0U2l6ZSBzaXplOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKLSAgICBJbnRSZWN0IGNvbnRl
bnRzUmVjdDsKLSAgICBmbG9hdCBvcGFjaXR5OwotICAgIENvbG9yIHNvbGlkQ29sb3I7Ci0gICAg
Q29sb3IgZGVidWdCb3JkZXJDb2xvcjsKLSAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOwotCi0g
ICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgYm9vbCBjb250ZW50c09w
YXF1ZSA6IDE7Ci0gICAgICAgICAgICBib29sIGRyYXdzQ29udGVudCA6IDE7Ci0gICAgICAgICAg
ICBib29sIGNvbnRlbnRzVmlzaWJsZSA6IDE7Ci0gICAgICAgICAgICBib29sIGJhY2tmYWNlVmlz
aWJsZSA6IDE7Ci0gICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwotICAgICAgICAg
ICAgYm9vbCBwcmVzZXJ2ZXMzRCA6IDE7Ci0gICAgICAgICAgICBib29sIGlzUm9vdExheWVyOiAx
OwotICAgICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOwotICAgICAgICAgICAgYm9v
bCBzaG93RGVidWdCb3JkZXJzIDogMTsKLSAgICAgICAgICAgIGJvb2wgc2hvd1JlcGFpbnRDb3Vu
dGVyIDogMTsKLSAgICAgICAgfTsKLSAgICAgICAgdW5zaWduZWQgZmxhZ3M7Ci0gICAgfTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJJbmZvX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJm
YWNlVXBkYXRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKaW5kZXggNmFiMzg0YS4uNWFmMDY5YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKQEAgLTIzLDEy
ICsyMywxMCBAQAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIklu
dFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU3VyZmFjZVVwZGF0ZUluZm8pOwogCiBwdWJsaWM6CiAgICAgU3VyZmFjZVVwZGF0ZUluZm8o
KSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCAyOWMwNDdhLi4wZTdlNjMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTMtMDItMDQgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEw
MC5uZXQ+CisKKyAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcGVyZm9ybSB2aWEgQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBjaGFuZ2VzIGluIFdLMi4KKyAgICAgICAgMS4gQ2hh
bmdlIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IHRvIHVzZSBDb29yZGluYXRlZEdyYXBo
aWNzU3RhdGUuCisgICAgICAgIDIuIEFkZCBlbmNvZGUvZGVjb2RlIG9mIENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZSBpbgorICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
CisKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOgorICAg
ICAgICAgICAgRW5jb2RpbmcgVXBkYXRlSW1hZ2VCYWNraW5nIGFuZCBDcmVhdGVVcGRhdGVBdGxh
cyBjYW4gZmFpbCB3aGVuCisgICAgICAgICAgICBlbmNvZGluZyBXZWJDb29yZGluYXRlZFN1cmZh
Y2U6OkhhbmRsZSBmYWlscywgYnV0IHdlIGRvbid0CisgICAgICAgICAgICByZWNvdmVyIGluIHRo
ZSBjYXNlLgorCiAyMDEzLTAyLTI0ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZWR1Y2UgaW5jbHVkZSBncmFwaCBvZiBKU0RPTUJpbmRpbmcuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5IGIvU291cmNl
L1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CmluZGV4IDQ2N2YzMzcuLjdiYmI0
MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5w
eQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKQEAgLTM5
OCw3ICszOTgsNyBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICBzcGVjaWFsX2Nh
c2VzID0gewogICAgICAgICAnV1RGOjpTdHJpbmcnOiBbJzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4n
XSwKICAgICAgICAgJ1dlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lJzogWyc8V2ViQ29yZS9F
ZGl0b3IuaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCc6IFsnPFdl
YkNvcmUvQ29vcmRpbmF0ZWRMYXllckluZm8uaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJzogWyc8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNz
U3RhdGUuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkdyYW1tYXJEZXRhaWwnOiBbJzxXZWJDb3Jl
L1RleHRDaGVja2VyQ2xpZW50Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpHcmFwaGljc0xheWVy
QW5pbWF0aW9ucyc6IFsnPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPiddLAogICAg
ICAgICAnV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QnOiBbJzxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXIuaD4nXSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1l
bnRDb2RlcnMuY3BwCmluZGV4IDVhMDZkMTEuLmEwMWU0MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1
bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApAQCAtMzAsOSArMzAs
MTAgQEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UG9pbnQzRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaD4KQEAgLTczLDkg
Kzc0LDcgQEAKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLSNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotI2VuZGlmCiAKIG5hbWVzcGFj
ZSBDb3JlSVBDIHsKIApAQCAtODE1LDI0ICs4MTQsMjIzIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbj46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRl
Y29kCiB9CiAjZW5kaWYKIAotdm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkTGF5ZXJJbmZv
Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29vcmRpbmF0ZWRMYXll
ckluZm8mIGNvb3JkaW5hdGVkTGF5ZXJJbmZvKQordm9pZCBBcmd1bWVudENvZGVyPFN1cmZhY2VV
cGRhdGVJbmZvPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3VyZmFj
ZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvKQogewotICAgIFNpbXBsZUFyZ3VtZW50Q29k
ZXI8Q29vcmRpbmF0ZWRMYXllckluZm8+OjplbmNvZGUoZW5jb2RlciwgY29vcmRpbmF0ZWRMYXll
ckluZm8pOworICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjplbmNv
ZGUoZW5jb2Rlciwgc3VyZmFjZVVwZGF0ZUluZm8pOwogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8
Q29vcmRpbmF0ZWRMYXllckluZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBD
b29yZGluYXRlZExheWVySW5mbyYgY29vcmRpbmF0ZWRMYXllckluZm8pCitib29sIEFyZ3VtZW50
Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVy
LCBTdXJmYWNlVXBkYXRlSW5mbyYgc3VyZmFjZVVwZGF0ZUluZm8pCiB7Ci0gICAgcmV0dXJuIFNp
bXBsZUFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRMYXllckluZm8+OjpkZWNvZGUoZGVjb2Rlciwg
Y29vcmRpbmF0ZWRMYXllckluZm8pOworICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFN1
cmZhY2VVcGRhdGVJbmZvPjo6ZGVjb2RlKGRlY29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsKIH0K
IAotdm9pZCBBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJ
bmZvKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgZW5jb2RlTGF5ZXJTdGF0ZUlm
TmVlZGVkKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdmFsdWUsIGJvb2wgaXNO
ZWVkZWQpCiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmVu
Y29kZShlbmNvZGVyLCBzdXJmYWNlVXBkYXRlSW5mbyk7CisgICAgaWYgKGlzTmVlZGVkKQorICAg
ICAgICBlbmNvZGVyIDw8IHZhbHVlOwogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8U3VyZmFjZVVw
ZGF0ZUluZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBTdXJmYWNlVXBkYXRl
SW5mbyYgc3VyZmFjZVVwZGF0ZUluZm8pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgYm9v
bCBkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBUJiB2
YWx1ZSwgYm9vbCBpc05lZWRlZCkKIHsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxT
dXJmYWNlVXBkYXRlSW5mbz46OmRlY29kZShkZWNvZGVyLCBzdXJmYWNlVXBkYXRlSW5mbyk7Cisg
ICAgaWYgKCFpc05lZWRlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGRlY29k
ZXIuZGVjb2RlKHZhbHVlKTsKK30KKwordm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllclN0YXRlPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQoreworICAgIGVuY29kZXIgPDwg
c3RhdGUuY2hhbmdlTWFzazsKKyAgICBlbmNvZGVMYXllclN0YXRlSWZOZWVkZWQoZW5jb2Rlciwg
c3RhdGUuZmxhZ3MsIHN0YXRlLmZsYWdzQ2hhbmdlZCk7CisgICAgZW5jb2RlTGF5ZXJTdGF0ZUlm
TmVlZGVkKGVuY29kZXIsIHN0YXRlLnBvcywgc3RhdGUucG9zaXRpb25DaGFuZ2VkKTsKKyAgICBl
bmNvZGVMYXllclN0YXRlSWZOZWVkZWQoZW5jb2Rlciwgc3RhdGUuYW5jaG9yUG9pbnQsIHN0YXRl
LmFuY2hvclBvaW50Q2hhbmdlZCk7CisgICAgZW5jb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGVuY29k
ZXIsIHN0YXRlLnNpemUsIHN0YXRlLnNpemVDaGFuZ2VkKTsKKyAgICBlbmNvZGVMYXllclN0YXRl
SWZOZWVkZWQoZW5jb2Rlciwgc3RhdGUudHJhbnNmb3JtLCBzdGF0ZS50cmFuc2Zvcm1DaGFuZ2Vk
KTsKKyAgICBlbmNvZGVMYXllclN0YXRlSWZOZWVkZWQoZW5jb2Rlciwgc3RhdGUuY2hpbGRyZW5U
cmFuc2Zvcm0sIHN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCk7CisgICAgZW5jb2RlTGF5
ZXJTdGF0ZUlmTmVlZGVkKGVuY29kZXIsIHN0YXRlLmNvbnRlbnRzUmVjdCwgc3RhdGUuY29udGVu
dHNSZWN0Q2hhbmdlZCk7CisgICAgZW5jb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGVuY29kZXIsIHN0
YXRlLm9wYWNpdHksIHN0YXRlLm9wYWNpdHlDaGFuZ2VkKTsKKyAgICBlbmNvZGVMYXllclN0YXRl
SWZOZWVkZWQoZW5jb2Rlciwgc3RhdGUuc29saWRDb2xvciwgc3RhdGUuc29saWRDb2xvckNoYW5n
ZWQpOworICAgIGVuY29kZUxheWVyU3RhdGVJZk5lZWRlZChlbmNvZGVyLCBzdGF0ZS5kZWJ1Z0Jv
cmRlckNvbG9yLCBzdGF0ZS5kZWJ1Z0JvcmRlckNvbG9yQ2hhbmdlZCk7CisgICAgZW5jb2RlTGF5
ZXJTdGF0ZUlmTmVlZGVkKGVuY29kZXIsIHN0YXRlLmRlYnVnQm9yZGVyV2lkdGgsIHN0YXRlLmRl
YnVnQm9yZGVyV2lkdGhDaGFuZ2VkKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgZW5j
b2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGVuY29kZXIsIHN0YXRlLmZpbHRlcnMsIHN0YXRlLmZpbHRl
cnNDaGFuZ2VkKTsKKyNlbmRpZgorICAgIGVuY29kZUxheWVyU3RhdGVJZk5lZWRlZChlbmNvZGVy
LCBzdGF0ZS5hbmltYXRpb25zLCBzdGF0ZS5hbmltYXRpb25zQ2hhbmdlZCk7CisgICAgZW5jb2Rl
TGF5ZXJTdGF0ZUlmTmVlZGVkKGVuY29kZXIsIHN0YXRlLmNoaWxkcmVuLCBzdGF0ZS5jaGlsZHJl
bkNoYW5nZWQpOworICAgIGVuY29kZXIgPDwgc3RhdGUudGlsZXNUb0NyZWF0ZTsKKyAgICBlbmNv
ZGVyIDw8IHN0YXRlLnRpbGVzVG9SZW1vdmU7CisgICAgZW5jb2RlTGF5ZXJTdGF0ZUlmTmVlZGVk
KGVuY29kZXIsIHN0YXRlLnJlcGxpY2EsIHN0YXRlLnJlcGxpY2FDaGFuZ2VkKTsKKyAgICBlbmNv
ZGVMYXllclN0YXRlSWZOZWVkZWQoZW5jb2Rlciwgc3RhdGUubWFzaywgc3RhdGUubWFza0NoYW5n
ZWQpOworICAgIGVuY29kZUxheWVyU3RhdGVJZk5lZWRlZChlbmNvZGVyLCBzdGF0ZS5pbWFnZUlE
LCBzdGF0ZS5pbWFnZUNoYW5nZWQpOworICAgIGVuY29kZUxheWVyU3RhdGVJZk5lZWRlZChlbmNv
ZGVyLCBzdGF0ZS5yZXBhaW50Q291bnQsIHN0YXRlLnJlcGFpbnRDb3VudENoYW5nZWQpOworICAg
IGVuY29kZXIgPDwgc3RhdGUudGlsZXNUb1VwZGF0ZTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKKyAgICBpZiAoc3RhdGUuY2FudmFzQ2hhbmdlZCkgeworICAgICAgICBlbmNvZGVyIDw8IHN0
YXRlLmNhbnZhc1NpemU7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuY2FudmFzVG9rZW47Cisg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuY2FudmFzRnJvbnRCdWZmZXI7CisgICAgfQorI2VuZGlm
Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZT46
OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNoYW5nZU1h
c2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZUxheWVyU3RhdGVJ
Zk5lZWRlZChkZWNvZGVyLCBzdGF0ZS5mbGFncywgc3RhdGUuZmxhZ3NDaGFuZ2VkKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVj
b2Rlciwgc3RhdGUucG9zLCBzdGF0ZS5wb3NpdGlvbkNoYW5nZWQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0
ZS5hbmNob3JQb2ludCwgc3RhdGUuYW5jaG9yUG9pbnRDaGFuZ2VkKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3Rh
dGUuc2l6ZSwgc3RhdGUuc2l6ZUNoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIWRlY29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0ZS50cmFuc2Zvcm0s
IHN0YXRlLnRyYW5zZm9ybUNoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIWRlY29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0ZS5jaGlsZHJlblRyYW5z
Zm9ybSwgc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2VkKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3RhdGUu
Y29udGVudHNSZWN0LCBzdGF0ZS5jb250ZW50c1JlY3RDaGFuZ2VkKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3Rh
dGUub3BhY2l0eSwgc3RhdGUub3BhY2l0eUNoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIWRlY29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0ZS5zb2xp
ZENvbG9yLCBzdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZGVjb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGRlY29kZXIsIHN0YXRlLmRlYnVn
Qm9yZGVyQ29sb3IsIHN0YXRlLmRlYnVnQm9yZGVyQ29sb3JDaGFuZ2VkKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwg
c3RhdGUuZGVidWdCb3JkZXJXaWR0aCwgc3RhdGUuZGVidWdCb3JkZXJXaWR0aENoYW5nZWQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgaWYg
KCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3RhdGUuZmlsdGVycywgc3RhdGUu
ZmlsdGVyc0NoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIGlm
ICghZGVjb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGRlY29kZXIsIHN0YXRlLmFuaW1hdGlvbnMsIHN0
YXRlLmFuaW1hdGlvbnNDaGFuZ2VkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3RhdGUuY2hpbGRyZW4sIHN0YXRl
LmNoaWxkcmVuQ2hhbmdlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoc3RhdGUudGlsZXNUb0NyZWF0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUudGlsZXNUb1JlbW92ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGRlY29k
ZXIsIHN0YXRlLnJlcGxpY2EsIHN0YXRlLnJlcGxpY2FDaGFuZ2VkKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3Rh
dGUubWFzaywgc3RhdGUubWFza0NoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIWRlY29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0ZS5pbWFnZUlELCBz
dGF0ZS5pbWFnZUNoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
Y29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0ZS5yZXBhaW50Q291bnQsIHN0YXRl
LnJlcGFpbnRDb3VudENoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHN0YXRlLnRpbGVzVG9VcGRhdGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHN0YXRlLmNhbnZhc1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHN0YXRlLmNhbnZhc1Rva2VuKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5jYW52YXNGcm9udEJ1ZmZlcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
QXJndW1lbnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFRpbGVVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIFNpbXBsZUFy
Z3VtZW50Q29kZXI8VGlsZVVwZGF0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgdXBkYXRlSW5mbyk7
Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmRlY29kZShBcmd1bWVu
dERlY29kZXImIGRlY29kZXIsIFRpbGVVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIHJl
dHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFRpbGVVcGRhdGVJbmZvPjo6ZGVjb2RlKGRlY29kZXIs
IHVwZGF0ZUluZm8pOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBlbmNvZGVyIDw8IHN0YXRlLnJvb3RDb21w
b3NpdGluZ0xheWVyOworICAgIGVuY29kZXIgPDwgc3RhdGUuYmFja2dyb3VuZENvbG9yOworICAg
IGVuY29kZXIgPDwgc3RhdGUuc2Nyb2xsUG9zaXRpb247CisgICAgZW5jb2RlciA8PCBzdGF0ZS5j
b250ZW50c1NpemU7CisgICAgZW5jb2RlciA8PCBzdGF0ZS5jb3ZlcmVkUmVjdDsKKyAgICBlbmNv
ZGVyIDw8IHN0YXRlLmxheWVyc1RvVXBkYXRlOworCisgICAgLy8gV2UgbmVlZCB0byBlbmNvZGUg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgcmlnaHQgYWZ0ZXIgaXQncyBjcmVhdGlvbi4K
KyAgICAvLyBUaGF0J3Mgd2h5IHdlIGNhbm5vdCB1c2Ugc2ltcGxlIHN0ZDo6cGFpciBlbmNvZGVy
LgorICAgIGVuY29kZXIgPDwgc3RhdGUuaW1hZ2VzVG9VcGRhdGUuc2l6ZSgpOworCisgICAgdHlw
ZWRlZiBWZWN0b3I8c3RkOjpwYWlyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+ID4gPiBTdXJmYWNlVXBkYXRlUGFpclZlY3RvcjsKKyAgICBTdXJm
YWNlVXBkYXRlUGFpclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RhdGUuaW1hZ2VzVG9V
cGRhdGUuZW5kKCk7CisgICAgZm9yIChTdXJmYWNlVXBkYXRlUGFpclZlY3Rvcjo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IHN0YXRlLmltYWdlc1RvVXBkYXRlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKKworICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVk
U3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFjZSo+KGl0ZXItPnNlY29u
ZC5nZXQoKSk7CisgICAgICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsK
KyAgICAgICAgaWYgKCF3ZWJDb29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGVuY29kZXIgPDwgaXRlci0+Zmlyc3Q7
CisgICAgICAgIGVuY29kZXIgPDwgaGFuZGxlOworICAgIH0KK30KKworYm9vbCBBcmd1bWVudENv
ZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZT46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRl
Y29kZXIsIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShzdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllcikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuYmFja2dyb3VuZENvbG9yKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5z
Y3JvbGxQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoc3RhdGUuY29udGVudHNTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5jb3ZlcmVkUmVjdCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUubGF5ZXJzVG9VcGRhdGUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzaXplX3Qgc2l6ZU9mSW1hZ2VzVG9VcGRh
dGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplT2ZJbWFnZXNUb1VwZGF0ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZU9mSW1h
Z2VzVG9VcGRhdGU7IGkrKykgeworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWdlSUQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1hZ2VJRCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUg
aGFuZGxlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3Vy
ZmFjZSA9IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSk7CisgICAgICAgIHN0
YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBzdXJmYWNl
LnJlbGVhc2UoKSkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBDb3JlSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1
bWVudENvZGVycy5oCmluZGV4IDhlN2RlZWYuLmU1YzI0NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1
bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCkBAIC0zMiwxMyArMzIsMTUg
QEAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Citz
dHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU7CitzdHJ1Y3QgQ29vcmRpbmF0ZWRH
cmFwaGljc1N0YXRlOwogY2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NMYXllckFu
aW1hdGlvbjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOwogY2xhc3MgU3VyZmFjZVVw
ZGF0ZUluZm87CitzdHJ1Y3QgVGlsZVVwZGF0ZUluZm87CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1h
dHJpeDsKIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7Ci1zdHJ1Y3QgQ29vcmRpbmF0ZWRMYXll
ckluZm87CiBzdHJ1Y3QgTGVuZ3RoOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtMTA3
LDE2ICsxMDksMjYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpH
cmFwaGljc1N1cmZhY2VUb2tlbj4gewogfTsKICNlbmRpZgogCi10ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvPiB7Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci19OwotCiB0ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvPiB7CiAgICAgc3RhdGljIHZv
aWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJ
bmZvJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6
OlN1cmZhY2VVcGRhdGVJbmZvJik7CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlPiB7CisgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRpbGVVcGRhdGVJbmZvPiB7
CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6
OlRpbGVVcGRhdGVJbmZvJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciYsIFdlYkNvcmU6OlRpbGVVcGRhdGVJbmZvJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZT4geworICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzU3RhdGUmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNv
ZGVyJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJik7Cit9OworCiB9IC8vIG5h
bWVzcGFjZSBDb3JlSVBDCiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAK
aW5kZXggYzVmN2U4Ny4uMzNiNDA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRM
YXllckluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TdXJmYWNlVXBkYXRlSW5mby5oPgogCkBAIC02MiwyMiArNjIsNiBAQCB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lk
KCk+JiBmdW5jdAogICAgIG1fc2NlbmUtPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CiB9CiAKLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihDb29y
ZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxlLCBt
X3NjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsK
LSAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRl
SW5mbyk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRp
bGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBj
b25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUlu
Zm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Ojp1cGRhdGVUaWxlLCBtX3NjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQsIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGVSZWN0
LCB1cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlLCBtX3Nj
ZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29uc3Qg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0bGFzLCBt
X3NjZW5lLmdldCgpLCBhdGxhc0lELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5k
bGUpKSk7CkBAIC0xMDMsMjMgKzg3LDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGkKICAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldFJvb3RMYXll
cklELCBtX3NjZW5lLmdldCgpLCBpZCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyU3RhdGUsIG1fc2NlbmUu
Z2V0KCksIGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKLXsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRyZW4s
IG1fc2NlbmUuZ2V0KCksIGlkLCBjaGlsZHJlbikpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxU
RVJTKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdM
YXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3NjZW5lLmdldCgpLCBpZCwgZmlsdGVycykpOwot
fQotI2VuZGlmCi0KICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKIHsKQEAg
LTEzMSwxNSArOTgsMTIgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3Jl
YXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3QKIH0KICNlbmRpZgogCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBG
bG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBj
b25zdCBJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgZ3Jh
cGhpY3NTdGF0ZSkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3NjZW5lLmdldCgpLCBzY3JvbGxQb3NpdGlv
bikpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Zmx1c2hMYXllckNoYW5nZXMsIG1fc2NlbmUuZ2V0KCksIGdyYXBoaWNzU3RhdGUpKTsKICAgICB1
cGRhdGVWaWV3cG9ydCgpOwogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIG1fZHJh
d2luZ0FyZWFQcm94eS0+cGFnZSgpLT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVy
ZWRSZWN0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRlbnRzU2l6ZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKGNvdmVyZWRSZWN0KTsKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
ZGlkUmVuZGVyRnJhbWUoZ3JhcGhpY3NTdGF0ZS5jb250ZW50c1NpemUsIGdyYXBoaWNzU3RhdGUu
Y292ZXJlZFJlY3QpOwogI2VuZGlmCiB9CiAKQEAgLTE2MywxMSArMTI3LDYgQEAgdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnJlbW92ZUltYWdlQmFja2luZywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCkpOwog
fQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllckFuaW1hdGlv
bnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYg
YW5pbWF0aW9ucykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnNldExheWVyQW5pbWF0aW9ucywgbV9zY2VuZS5nZXQoKSwgaWQsIGFuaW1hdGlv
bnMpKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QW5pbWF0
aW9uc0xvY2tlZChib29sIGxvY2tlZCkKIHsKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldEFuaW1hdGlvbnNMb2NrZWQsIG1fc2NlbmUuZ2V0KCks
IGxvY2tlZCkpOwpAQCAtMjA0LDI5ICsxNjMsNiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjphbmltYXRpb25GcmFtZVJlYWR5KCkKIH0KICNlbmRpZgogCi0jaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVh
dGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXpl
LCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tlbiYgdG9rZW4pCi17Ci0gICAgR3JhcGhpY3NTdXJm
YWNlOjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVy
ZVRhcmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzLCBtX3Nj
ZW5lLmdldCgpLCBpZCwgY2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFz
U2l6ZSwgc3VyZmFjZUZsYWdzLCB0b2tlbikpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90
IGZyb250QnVmZmVyKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6c3luY0NhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGZyb250QnVmZmVyKSk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVzdHJveUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQpKTsK
LX0KLSNlbmRpZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXll
clJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUmVw
YWludENvdW50LCBtX3NjZW5lLmdldCgpLCBpZCwgdmFsdWUpKTsKLX0KLQogdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJv
eHktPnBhZ2UoKS0+cGFnZUlEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggOTQ2YjM5OS4uZjc5ZjkyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCkBAIC00MSw3ICs0
MSw4IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlOworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlOwogY2xhc3MgU3VyZmFjZVVw
ZGF0ZUluZm87CiB9CiAKQEAgLTUzLDQzICs1NCwzMiBAQCBjbGFzcyBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVD
bAogcHVibGljOgogICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KERy
YXdpbmdBcmVhUHJveHkqKTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eSgpOwotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAg
ICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJDb3JlOjpDb29yZGluYXRlZExh
eWVySUQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0jaWYg
RU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zJik7Ci0jZW5kaWYKKworICAgIC8vIE1lc3NhZ2VzIEZyb20gQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQpOworICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvbXBv
c2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7
CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJv
Z3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7CiAg
ICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7CiAjZW5kaWYKLSAgICB2
b2lkIGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIHNl
dFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rvcik7Ci0gICAgdm9pZCBkaWRSZW5kZXJG
cmFtZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3Zl
cmVkUmVjdCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxh
eWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAg
ICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVp
bnQzMl90IHRpbGVJRCk7CiAgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxh
c0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOwogICAgIHZvaWQgcmVt
b3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7CiAgICAgdm9pZCBjcmVhdGVJbWFnZUJh
Y2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCB1cGRh
dGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3Qg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKICAgICB2b2lkIGNsZWFySW1hZ2VCYWNr
aW5nQ29udGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9p
ZCByZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7
Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKLSAgICB2b2lkIHN5bmNDYW52YXMoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBk
ZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2
b2lkIHNldExheWVyUmVwYWludENvdW50KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgaW50
IHZhbHVlKTsKLSAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NlbmUuZ2V0KCk7IH0KLSAgICB2
b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CisKKyAgICB2b2lkIGRpZFJlbmRl
ckZyYW1lKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOwogICAgIHZv
aWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCiAgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKICNlbmRpZgogICAg
IHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAKKyAgICB2
b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rvcik7CisgICAgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKSBjb25z
dCB7IHJldHVybiBtX3NjZW5lLmdldCgpOyB9CisKICAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmVDbGllbnQgTWV0aG9kcy4KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkZyYW1lUmVhZHkoKSBPVkVSUklERTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
bWVzc2FnZXMuaW4KaW5kZXggNWNlMTI4My4uYjY0YzMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4K
QEAgLTE5LDQzICsxOSwyOSBAQAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogbWVz
c2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgewotICAgIFNldENvbXBvc2l0
aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBpZCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8g
bGF5ZXJJbmZvKQotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbih1aW50MzJfdCBpZCwg
VmVjdG9yPHVpbnQzMl90PiBjaGlsZHJlbikKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAg
U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnModWludDMyX3QgaWQsIFdlYkNvcmU6OkZpbHRlck9w
ZXJhdGlvbnMgZmlsdGVycykKLSNlbmRpZgorCisgICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
dWludDMyX3QgaWQpCisgICAgQ3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoVmVjdG9yPHVpbnQzMl90
PiBpZHMpCisgICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoVmVjdG9yPHVpbnQzMl90PiBpZHMp
CisKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bShpbnQgaWQsIFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvIHByb2dyYW1JbmZvKQog
ICAgIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQogI2VuZGlmCi0gICAgU2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCi0gICAgQ3JlYXRlQ29tcG9zaXRpbmdMYXll
cnMoVmVjdG9yPHVpbnQzMl90PiBpZHMpCi0gICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoVmVj
dG9yPHVpbnQzMl90PiBpZHMpCi0gICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViQ29yZTo6
U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWlu
dDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0
LCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFJlbW92ZVRpbGVG
b3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCiAgICAgQ3JlYXRlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgV2ViS2l0OjpXZWJDb29yZGluYXRlZFN1cmZhY2U6
OkhhbmRsZSBoYW5kbGUpCiAgICAgUmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkK
ICAgICBDcmVhdGVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCkKICAgICBVcGRhdGVJbWFn
ZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCwgV2ViS2l0OjpXZWJDb29yZGluYXRlZFN1cmZhY2U6
OkhhbmRsZSBoYW5kbGUpCiAgICAgQ2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyh1aW50NjRfdCBp
bWFnZUlEKQogICAgIFJlbW92ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlEKQotICAgIERp
ZFJlbmRlckZyYW1lKFdlYkNvcmU6OkZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24sIFdlYkNvcmU6
OkludFNpemUgY29udGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQotICAg
IFNldExheWVyQW5pbWF0aW9ucyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFu
aW1hdGlvbnMgYW5pbWF0aW9ucykKKworICAgIERpZFJlbmRlckZyYW1lKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZSBzdGF0ZSkKICAgICBTZXRBbmltYXRpb25zTG9ja2VkKGJvb2wg
bG9ja2VkKQogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIFJlcXVl
c3RBbmltYXRpb25GcmFtZSgpCiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQot
ICAgIENyZWF0ZUNhbnZhcyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52YXNTaXpl
LCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbikKLSAgICBTeW5jQ2FudmFzKHVp
bnQzMl90IGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKLSAgICBEZXN0cm95Q2FudmFzKHVpbnQz
Ml90IGlkKQotI2VuZGlmCi0KLSAgICBTZXRMYXllclJlcGFpbnRDb3VudCh1aW50MzJfdCBsYXll
cklELCBpbnQgdmFsdWUpCi0KICAgICBTZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29yZTo6Q29sb3Ig
Y29sb3IpCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IDBkZDI4MTcuLjk2MDM0NTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmNwcApAQCAtMjk4LDkgKzI5OCwxNSBAQCBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKICAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUp
IHsKICAgICAgICAgZGlkU3luYyA9IHRydWU7CiAKLSAgICAgICAgSW50U2l6ZSBjb250ZW50c1Np
emUgPSByb3VuZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKSk7
Ci0gICAgICAgIEludFJlY3QgY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3ZlclJlY3QoKTsKLSAgICAg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6RGlkUmVuZGVyRnJhbWUobV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCksIGNvbnRl
bnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAgICAgICAgbV9zdGF0ZS5jb250ZW50c1NpemUgPSBy
b3VuZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKSk7CisgICAg
ICAgIG1fc3RhdGUuY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3ZlclJlY3QoKTsKKyAgICAgICAgbV9z
dGF0ZS5zY3JvbGxQb3NpdGlvbiA9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpOwor
CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OkRpZFJlbmRlckZyYW1lKG1fc3RhdGUpKTsKKworICAgICAgICBtX3N0YXRlLmxh
eWVyc1RvVXBkYXRlLmNsZWFyKCk7CisgICAgICAgIG1fc3RhdGUuaW1hZ2VzVG9VcGRhdGUuY2xl
YXIoKTsKKwogICAgICAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0cnVlOwogICAgICAgICBt
X3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOwogICAgIH0gZWxzZQpAQCAtMzUzLDY0ICszNTksNTQg
QEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRp
bmdMYXllcklmTmVlZGVkKCkKICAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5n
TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOworICAg
IG1fc3RhdGUucm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCk7CiAgICAgbV9kaWRJbml0aWFsaXplUm9vdENvbXBv
c2l0aW5nTGF5ZXIgPSB0cnVlOwogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0KIAot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVk
TGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGluZm8pCit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7CiAgICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykp
OworICAgIHByZXByb2Nlc3NTdGF0ZUNoYW5nZShzdGF0ZSk7CisgICAgbV9zdGF0ZS5sYXllcnNU
b1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaWQsIHN0YXRlKSk7CiB9CiAKLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVy
SUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwcmVwcm9jZXNzU3RhdGVDaGFuZ2UoQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0g
dHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQsIGNoaWxkcmVuKSk7Cisg
ICAgcHJlcHJvY2Vzc0FuaW1hdGlvblN0YXRlSWZOZWVkZWQoc3RhdGUpOworICAgIHByZXByb2Nl
c3NGaWx0ZXJPcGVyYXRpb25zSWZOZWVkZWQoc3RhdGUpOwogfQogCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ2FudmFzKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikK
K3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwcmVwcm9jZXNzQW5pbWF0aW9uU3RhdGVJ
Zk5lZWRlZChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0g
Y2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKLSAgICBJbnRTaXpl
IGNhbnZhc1NpemUgPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOwot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OkNyZWF0ZUNhbnZhcyhpZCwgY2FudmFzU2l6ZSwgdG9rZW4pKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQ
bGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxheWVyKQotewotICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKLSAgICB1aW50MzJfdCBmcm9udEJ1ZmZlciA9IGNhbnZhc1BsYXRmb3JtTGF5
ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlN5bmNDYW52YXMoaWQsIGZyb250QnVm
ZmVyKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXN0cm95Q2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgaWYg
KCFzdGF0ZS5hbmltYXRpb25zQ2hhbmdlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlc3Ryb3lDYW52YXMoaWQpKTsKLX0KKyAgICBXZWJD
b3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucyA9IHN0YXRlLmFuaW1hdGlv
bnM7CisgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9IGFuaW1h
dGlvbnMuZ2V0QWN0aXZlQW5pbWF0aW9ucygpOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMg
PSBhbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKKyAgICAgICAgaWYg
KGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlm
cmFtZXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZh
bHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVl
Kj4oa2V5ZnJhbWVzLmF0KGkpKTsKKyAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3hpZXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KICNlbmRp
ZgotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJSZXBhaW50Q291bnQo
Q29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0TGF5ZXJSZXBhaW50
Q291bnQoaWQsIHZhbHVlKSk7CisgICAgc3RhdGUuYW5pbWF0aW9ucyA9IGFjdGl2ZUFuaW1hdGlv
bnM7CiB9CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c3luY0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
cHJlcHJvY2Vzc0ZpbHRlck9wZXJhdGlvbnNJZk5lZWRlZChDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwogI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKLSAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGZp
bHRlcnMpOworICAgIGlmICghc3RhdGUuZmlsdGVyc0NoYW5nZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoc3RhdGUuZmlsdGVycyk7CiAj
ZW5kaWYKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhpZCwgZmlsdGVycykpOwogfQot
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKQpAQCAtNTgyLDcgKzU3OCw4IEBAIGJvb2wgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0Ojp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnCiAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOwogICAgIGlmICgh
d2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlVwZGF0ZUltYWdlQmFja2luZyhpbWFnZUlELCBoYW5kbGUpKTsKKwor
ICAgIG1fc3RhdGUuaW1hZ2VzVG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGltYWdlSUQs
IGNvb3JkaW5hdGVkU3VyZmFjZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC02NjUsMjYg
KzY2Miw2IEBAIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHRpbGVSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBk
YXRlSW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlVGls
ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJD
b3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgdGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0
ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVUaWxlKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5n
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJl
bW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKLX0KLQogYm9vbCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCiB7CiAgICAgV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxX
ZWJDb29yZGluYXRlZFN1cmZhY2UqPihjb29yZGluYXRlZFN1cmZhY2UuZ2V0KCkpOwpAQCAtNzA3
LDI1ICs2ODQsNiBAQCBXZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKICAgICByZXR1cm4gbV92aXNpYmxlQ29udGVu
dHNSZWN0OwogfQogCi0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRMYXllckFu
aW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJB
bmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25zID0gYW5pbWF0aW9u
cy5nZXRBY3RpdmVBbmltYXRpb25zKCk7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFu
aW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOwotICAgICAgICBpZiAoa2V5
ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1l
cy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUq
IGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPihr
ZXlmcmFtZXMuYXQoaSkpOwotICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJv
eGllcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6U2V0TGF5ZXJBbmltYXRpb25zKGxheWVySUQsIGFjdGl2ZUFuaW1hdGlvbnMpKTsKLX0KLQog
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQog
ewogICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVjdG9yIGluZGljYXRlcyB0aGF0IHRpbGVzIGFs
bCBhcm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1ZXN0ZWQuCkBAIC04NDgsNyArODA2LDggQEAg
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1l
ckZpcmVkKFRpbWVyPENvb3JkaW5hdGUKIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiB7Ci0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
U2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKSk7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OworICAgIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuaAppbmRleCA4NDQ2ZjZmLi5jMTlkMTI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJUaW1lci5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgpA
QCAtNDYsOCArNDcsOCBAQCBjbGFzcyBXZWJQYWdlOwogCiBjbGFzcyBDb29yZGluYXRlZExheWVy
VHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNs
aWVudAogICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dAotICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGlu
YXRvcgotICAgICwgcHVibGljIFdlYkNvcmU6OlVwZGF0ZUF0bGFzQ2xpZW50CisgICAgLCBwdWJs
aWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yIC8vIFRPRE8g
OiBSRU1PVkUgVEhJUworICAgICwgcHVibGljIFdlYkNvcmU6OlVwZGF0ZUF0bGFzQ2xpZW50IC8v
IFRPRE8gOiBSRU1PVkUgVEhJUwogICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJG
YWN0b3J5CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgICwgV2ViQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5Q2xpZW50CkBAIC04MCwzOSArODEsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KICAgICB2aXJ0
dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpD
b29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29y
ZTo6SW1hZ2UqKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJD
aGFuZ2VzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2Vz
OyB9Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3Jl
OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRz
UmVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKICAgICB2
aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYpOworCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNz
YWdlRGVjb2RlciYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rvcnkq
IGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJl
bihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29y
ZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJB
bmltYXRpb25zJik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJGaWx0ZXJzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVy
SUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
c3luY0NhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRmb3Jt
TGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySUQpIE9WRVJSSURFOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lk
IHNldExheWVyUmVwYWludENvdW50KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgaW50KSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBX
ZWJDb3JlOjpJbnRQb2ludCYpOwotCi0gICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKLSAgICB2aXJ0
dWFsIGJvb2wgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0KICNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkg
T1ZFUlJJREU7CiAjZW5kaWYKQEAgLTEzOSw2ICsxMTUsMTggQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwogCisgICAgLy8gQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNo
YW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7
IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNv
cmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3Jl
OjpJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRl
Jik7CisKKyAgICAvLyBVcGRhdGVBdGxhc0NsaWVudAorICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVV
cGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5h
dGVkU3VyZmFjZT4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxh
cyh1aW50MzJfdCBhdGxhc0lEKTsKKwogICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CiAgICAg
dmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwogCkBAIC0xNTYs
NiArMTQ0LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBsb2NrQW5pbWF0aW9ucygpOwogICAgIHZv
aWQgdW5sb2NrQW5pbWF0aW9ucygpOwogCisgICAgdm9pZCBwcmVwcm9jZXNzU3RhdGVDaGFuZ2Uo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHByZXBy
b2Nlc3NBbmltYXRpb25TdGF0ZUlmTmVlZGVkKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllclN0YXRlJik7CisgICAgdm9pZCBwcmVwcm9jZXNzRmlsdGVyT3BlcmF0aW9uc0lmTmVlZGVk
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisKICAgICB2b2lkIGxh
eWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dD4qKTsKIAogICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CkBAIC0x
ODEsNiArMTczLDggQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBX
aWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCiAgICAgT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKIAorICAgIFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBtX3N0YXRlOworCiAgICAgSGFzaFNldDxXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgVmVjdG9y
PFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0NyZWF0ZTsKICAgICBWZWN0
b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwotLSAKMS44
LjEucmMxLjEuZzZkYWFlMTEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191198</attachid>
            <date>2013-03-04 03:53:33 -0800</date>
            <delta_ts>2013-03-04 16:50:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108294-20130304204942.patch</filename>
            <type>text/plain</type>
            <size>100601</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NjEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTFmZmVhNzc4M2FjY2E1
ODdlOWEwYmZlMWIxZmI5M2ViZDMwMjA0Yy4uOTE5NDk0YmE4YzM3ZWViNTNkMTk4ZDM5NTBjYTE5
M2MyNjRkYmY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxMy0wMy0wNCAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUgcGVyZm9ybSB2aWEgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODI5NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5IGhhcyB0b28gbWFueSBJUEMgbWVzc2FnZXMgKGUuZy4gU3lu
Y0NhbnZhcyBhbmQKKyAgICAgICAgQ3JlYXRlVGlsZSksIGFuZCB0aGVyZSBpcyBhIGxvbmcgZnVu
Y3Rpb24gY2hhaW4gZnJvbSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgdG8KKyAgICAgICAgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lICg0IGNsYXNzZXMpLgorICAgICAgICBJZiB3ZSB3YW50IHRv
IGFkZCBhIG5ldyBtZXNzYWdlLCB3ZSBuZWVkIHRvIGFkZCBzaW1pbGFyIGZ1bmN0aW9ucyBpbnRv
IDQgY2xhc3Nlcy4KKworICAgICAgICBOb3cgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGhhcyBv
bmx5IG9uZSBJUEMgbWVzc2FnZSBmb3IgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOgorICAgICAg
ICBDb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUuCisgICAgICAgIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcnVuIGFzIGZvbGxvd3M6
CisgICAgICAgIDEuIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBhIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllclN0YXRlLgorICAgICAgICAyLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qg
c3RvcmVzIGFsbCBMYXllclN0YXRlcy4KKyAgICAgICAgMy4gQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0IHNlbmRzIEdyYXBoaWNzU3RhdGUgaW5jbHVkZXMgTGF5ZXJTdGF0ZXMgdG8gQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkKKyAgICAgICAgYXQgdGhlIG1vbWVudCBvZiBmbHVzaGluZyB2
aWEgQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlIG1lc3NhZ2UuCisgICAgICAgIDQuIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBhcHBsaWVzIGFsbCBzdGF0ZSBjaGFuZ2VzIHRvIGxheWVy
cy4KKworICAgICAgICBUaGVyZSBpcyBvbmUgYmlnIGJlaGF2aW9yIGNoYW5nZS4gQWxsIHN0YXRl
cyBjaGFuZ2VzIChlLmcuCisgICAgICAgIFVwZGF0ZVRpbGVzLCBTZXRMYXllckNoaWxkcmVuLCBh
bmQgZXRjLi4pIGFyZSBwZXJmb3JtZWQgYXQgdGhlIHNhbWUgdGltZSwgd2hlbgorICAgICAgICBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBp
cyBjYWxsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBiYXNlZCBvbiBEb25nc3VuZyBIdWFu
ZywgYW5kIE5vYW0ncyB3b3JrIGluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDgyOTQKKworICAgICAgICBObyBuZXcgdGVzdHMsIGFzIGl0IGlzIGEg
cmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hv
clBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0UHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNpYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZp
c2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0lt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFz
a0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRGaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNhbnZh
c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
Y3JlYXRlQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVzZXRMYXllclN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3Jl
YXRlQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpzeW5jQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3VudElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJD
aGlsZHJlbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6c2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxlc0lmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZXNJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZVRpbGVz
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjph
c3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6Zmx1c2hTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFRpbGVVcGRhdGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllclN0YXRlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSk6Cisg
ICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSk6CisgICAgICAgIChDb29yZGlu
YXRlZEdyYXBoaWNzU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5oOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJm
YWNlVXBkYXRlSW5mby5oOgorCiAyMDEzLTAzLTA0ICBNaWtlIFdlc3QgIDxta3dzdEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgWFNTQXVkaXRvciBzaG91bGQgc3RyaXAgZGFuZ2Vyb3VzIGF0dHJp
YnV0ZXMgZnJvbSBTTUlMIGFuaW1hdGlvbiBlbGVtZW50cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAxYWUyY2Rm
MTZmM2JlOTQwNTIyNGExMjFhNjgwOTE0YTFlOWViZDA3Li5iZDcyYTQ1YTE1YmE3ZDkzZTg5YTcy
NzExMTBiNjM1NTEyNTEzNDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTMtMDMt
MDQgIEd3YW5nIFlvb24gSHdhbmcgIDxyeXVtaWVsQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAg
IENvb3JkaW5hdGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lIHBlcmZvcm0gdmlhIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODI5
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJl
IGFyZSB0d28gY2hhbmdlcyBpbiBXSzIuCisgICAgICAgIDEuIENoYW5nZSBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eSB0byB1c2UgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLgorICAgICAg
ICAyLiBBZGQgZW5jb2RlL2RlY29kZSBvZiBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgaW4gQ29v
cmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMg
YmFzZWQgb24gRG9uZ3N1bmcgSHVhbmcsIGFuZCBOb2FtJ3Mgd29yayBpbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBhcyBpdCBpcyBhIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5OgorICAgICAgICAoaGVhZGVyc19mb3JfdHlwZSk6CisgICAgICAg
ICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50
Q29kZXJzLmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAgICAgIEVu
Y29kaW5nIFVwZGF0ZUltYWdlQmFja2luZyBhbmQgQ3JlYXRlVXBkYXRlQXRsYXMgY2FuIGZhaWwg
d2hlbgorICAgICAgICAgICAgZW5jb2RpbmcgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUg
ZmFpbHMsIGJ1dCB3ZSBkb24ndAorICAgICAgICAgICAgcmVjb3ZlciBpbiB0aGUgY2FzZS4KKyAg
ICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKENvcmVJUEM6OmVuY29kZUxheWVy
U3RhdGVJZk5lZWRlZCk6CisgICAgICAgIChDb3JlSVBDOjpkZWNvZGVMYXllclN0YXRlSWZOZWVk
ZWQpOgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXpl
Um9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnByZXByb2Nlc3NTdGF0ZUNoYW5nZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcHJvY2Vzc0FuaW1hdGlvblN0YXRl
SWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBy
ZXByb2Nlc3NGaWx0ZXJPcGVyYXRpb25zSWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisKIDIw
MTMtMDMtMDMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUERGUGx1Z2luOiBSZW5hbWUgZGVsZWdhdGUgbWV0aG9kIGZyb20gb3BlbldpdGhQcmV2aWV3
IHRvIG9wZW5XaXRoTmF0aXZlQXBwbGljYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDYwM2NkYmRiMjc4
NzQwNzVkZDRmYjExNmVjNDg1NjIyMWZiMmFlZTUuLjc1YjAwM2I0OTNlOTczMzEzNDViYjY5N2Zj
ZmNmMTlmZmFiMDY5MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysr
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNDExMCw4ICs0MTEwLDggQEAgdXNlPygz
RF9HUkFQSElDUykgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtLmggXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggXAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lLmggXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCi0gICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVy
SW5mby5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkU3VyZmFjZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmggXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCA0YzQz
YWE3ZTIzOGRmNWYyOGZiZWUzOTkzMGIzYTBjNTE5YmI2OWFhLi4wMmRkODM3MWZkMTYwYWIwZjc3
MzIyODZkZDM1ZDdjYWI1YmZlZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMTkyLDYgKzE5Miw3IEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBw
KQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwKTsK
KyAgICBtX2xheWVyU3RhdGUucG9zaXRpb25DaGFuZ2VkID0gdHJ1ZTsKICAgICBkaWRDaGFuZ2VH
ZW9tZXRyeSgpOwogfQogCkBAIC0yMDEsNiArMjAyLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7CisgICAgbV9s
YXllclN0YXRlLmFuY2hvclBvaW50Q2hhbmdlZCA9IHRydWU7CiAgICAgZGlkQ2hhbmdlR2VvbWV0
cnkoKTsKIH0KIApAQCAtMjEwLDYgKzIxMiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZShzaXplKTsKKyAgICBtX2xheWVyU3RhdGUuc2l6ZUNo
YW5nZWQgPSB0cnVlOwogCiAgICAgaWYgKG1hc2tMYXllcigpKQogICAgICAgICBtYXNrTGF5ZXIo
KS0+c2V0U2l6ZShzaXplKTsKQEAgLTIyMiw2ICsyMjUsOCBAQCB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQog
ICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7Cisg
ICAgbV9sYXllclN0YXRlLnRyYW5zZm9ybUNoYW5nZWQgPSB0cnVlOworCiAgICAgZGlkQ2hhbmdl
R2VvbWV0cnkoKTsKIH0KIApAQCAtMjMxLDYgKzIzNiw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFu
c2Zvcm0odCk7CisgICAgbV9sYXllclN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCA9IHRy
dWU7CisKICAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQogCkBAIC0yNDAsNiArMjQ3LDkgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGJvb2wgYikKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QoYik7Cisg
ICAgbV9sYXllclN0YXRlLnByZXNlcnZlczNEID0gYjsKKyAgICBtX2xheWVyU3RhdGUuZmxhZ3ND
aGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7CiB9CiAKQEAgLTI0OCw2
ICsyNTgsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5k
cyhib29sIGIpCiAgICAgaWYgKG1hc2tzVG9Cb3VuZHMoKSA9PSBiKQogICAgICAgICByZXR1cm47
CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhiKTsKKyAgICBtX2xheWVyU3Rh
dGUubWFza3NUb0JvdW5kcyA9IGI7CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRy
dWU7CisKICAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQogCkBAIC0yNTYsNiArMjY5LDggQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChib29sIGIpCiAg
ICAgaWYgKGRyYXdzQ29udGVudCgpID09IGIpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGlj
c0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYik7CisgICAgbV9sYXllclN0YXRlLmRyYXdzQ29udGVu
dCA9IGI7CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRydWU7CiAKICAgICBkaWRD
aGFuZ2VMYXllclN0YXRlKCk7CiB9CkBAIC0yNjUsNiArMjgwLDkgQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGIpCiAgICAgaWYgKGNvbnRl
bnRzQXJlVmlzaWJsZSgpID09IGIpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1Zpc2libGUoYik7CisgICAgbV9sYXllclN0YXRlLmNvbnRlbnRzVmlzaWJs
ZSA9IGI7CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRydWU7CisKICAgICBpZiAo
bWFza0xheWVyKCkpCiAgICAgICAgIG1hc2tMYXllcigpLT5zZXRDb250ZW50c1Zpc2libGUoYik7
CiAKQEAgLTI3OCw2ICsyOTYsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNPcGFxdWUoYm9vbCBiKQogICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCiAgICAg
ICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghYik7CiAgICAgR3JhcGhp
Y3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7CisgICAgbV9sYXllclN0YXRlLmNvbnRlbnRz
T3BhcXVlID0gYjsKKyAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwogICAg
IGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtMjg3LDYgKzMwOCw5IEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCBiKQogICAg
ICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHko
Yik7CisgICAgbV9sYXllclN0YXRlLmJhY2tmYWNlVmlzaWJsZSA9IGI7CisgICAgbV9sYXllclN0
YXRlLmZsYWdzQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9
CiAKQEAgLTI5Niw2ICszMjAsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
T3BhY2l0eShmbG9hdCBvcGFjaXR5KQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xh
eWVyOjpzZXRPcGFjaXR5KG9wYWNpdHkpOworICAgIG1fbGF5ZXJTdGF0ZS5vcGFjaXR5ID0gb3Bh
Y2l0eTsKKyAgICBtX2xheWVyU3RhdGUub3BhY2l0eUNoYW5nZWQgPSB0cnVlOworCiAgICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC0zMDUsNiArMzMyLDkgQEAgdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByKQogICAg
ICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3Qocik7Cisg
ICAgbV9sYXllclN0YXRlLmNvbnRlbnRzUmVjdCA9IHI7CisgICAgbV9sYXllclN0YXRlLmNvbnRl
bnRzUmVjdENoYW5nZWQgPSB0cnVlOworCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQog
CkBAIC0zNTYsMTYgKzM4NiwyMyBAQCBib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBuZXdGaWx0ZXJzKQogewogICAgIGlmIChm
aWx0ZXJzKCkgPT0gbmV3RmlsdGVycykKICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
IUdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMobmV3RmlsdGVycykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKwogICAgIGRpZENoYW5nZUZpbHRlcnMoKTsKLSAgICByZXR1cm4gR3JhcGhpY3NMYXll
cjo6c2V0RmlsdGVycyhuZXdGaWx0ZXJzKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRpZgog
CiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChtX2xheWVySW5mby5zb2xpZENvbG9yID09
IGNvbG9yKQorICAgIGlmIChtX2xheWVyU3RhdGUuc29saWRDb2xvciA9PSBjb2xvcikKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fbGF5ZXJJbmZvLnNvbGlkQ29sb3IgPSBjb2xvcjsKKworICAgIG1f
bGF5ZXJTdGF0ZS5zb2xpZENvbG9yID0gY29sb3I7CisgICAgbV9sYXllclN0YXRlLnNvbGlkQ29s
b3JDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAt
Mzc1LDYgKzQxMiw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG93RGVi
dWdCb3JkZXIoYm9vbCBzaG93KQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVy
OjpzZXRTaG93RGVidWdCb3JkZXIoc2hvdyk7CisgICAgbV9sYXllclN0YXRlLnNob3dEZWJ1Z0Jv
cmRlcnMgPSB0cnVlOworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworCiAg
ICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC0zODQsNiArNDI0LDkgQEAgdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50Q291bnRlcihib29sIHNob3cp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50Q291
bnRlcihzaG93KTsKKyAgICBtX2xheWVyU3RhdGUuc2hvd1JlcGFpbnRDb3VudGVyID0gdHJ1ZTsK
KyAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxh
eWVyU3RhdGUoKTsKIH0KIApAQCAtNDA1LDYgKzQ0OCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogCiAgICAgR3JhcGhp
Y3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKICAgICBkaWRDaGFuZ2VJbWFnZUJh
Y2tpbmcoKTsKKyAgICAvLyBUT0RPIFdIQVQ/CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC00MjEsNiArNDY1
LDEwIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhp
Y3NMYXllciogbGF5ZXIpCiAgICAgbGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZShjb250ZW50c0Fy
ZVZpc2libGUoKSk7CiAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb29yZGluYXRlZExh
eWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpOwogICAgIGNvb3JkaW5hdGVk
TGF5ZXItPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKKworICAgIG1fbGF5ZXJTdGF0ZS5tYXNrID0g
Y29vcmRpbmF0ZWRMYXllci0+aWQoKTsKKyAgICBtX2xheWVyU3RhdGUubWFza0NoYW5nZWQgPSB0
cnVlOworCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC00NDIsNiArNDkwLDgg
QEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVy
OjpzZXRSZXBsaWNhdGVkQnlMYXllcihsYXllcik7CisgICAgbV9sYXllclN0YXRlLnJlcGxpY2Eg
PSB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChsYXllcik7CisgICAgbV9sYXllclN0YXRlLnJlcGxpY2FD
aGFuZ2VkID0gdHJ1ZTsKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTQ3MSw2
ICs1MjEsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Rml4ZWRUb1ZpZXdw
b3J0KGJvb2wgaXNGaXhlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9maXhlZFRvVmlld3Bv
cnQgPSBpc0ZpeGVkOworICAgIG1fbGF5ZXJTdGF0ZS5maXhlZFRvVmlld3BvcnQgPSBpc0ZpeGVk
OworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworCiAgICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOwogfQogCkBAIC01MDQsMTEgKzU1NywxMCBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKCkKICAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxk
cmVuKQogICAgICAgICByZXR1cm47CiAgICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsK
LSAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBjaGlsZElEczsKKyAgICBtX2xheWVyU3Rh
dGUuY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKKyAgICBtX2xheWVyU3RhdGUuY2hpbGRyZW4uY2xl
YXIoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIGNoaWxkSURzLmFwcGVuZCh0b0Nvb3JkaW5hdGVkTGF5ZXJJRChjaGlsZHJlbigp
W2ldKSk7Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGls
ZElEcyk7CisgICAgICAgIG1fbGF5ZXJTdGF0ZS5jaGlsZHJlbi5hcHBlbmQodG9Db29yZGluYXRl
ZExheWVySUQoY2hpbGRyZW4oKVtpXSkpOwogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpA
QCAtNTE3LDcgKzU2OSw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmls
dGVycygpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOwotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNM
YXllckZpbHRlcnMobV9pZCwgZmlsdGVycygpKTsKKworICAgIG1fbGF5ZXJTdGF0ZS5maWx0ZXJz
ID0gR3JhcGhpY3NMYXllcjo6ZmlsdGVycygpOworICAgIG1fbGF5ZXJTdGF0ZS5maWx0ZXJzQ2hh
bmdlZCA9IHRydWU7CiB9CiAjZW5kaWYKIApAQCAtNTM4LDE0ICs1OTIsMTUgQEAgdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNJbWFnZUJhY2tpbmcoKQogICAgICAgICBpZiAoIW1f
Y29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpIHsKICAgICAgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcgPSBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChtX2Nv
bXBvc2l0ZWRJbWFnZS5nZXQoKSk7CiAgICAgICAgICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nLT5hZGRIb3N0KHRoaXMpOwotICAgICAgICAgICAgbV9sYXllckluZm8uaW1hZ2VJRCA9IG1f
Y29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmlkKCk7CisgICAgICAgICAgICBtX2xheWVyU3RhdGUu
aW1hZ2VJRCA9IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmlkKCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5tYXJrRGlydHkoKTsKKyAgICAgICAg
bV9sYXllclN0YXRlLmltYWdlQ2hhbmdlZCA9IHRydWU7CiAgICAgfSBlbHNlCiAgICAgICAgIHJl
bGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwogCi0gICAgLy8gc3luY0ltYWdlQmFja2luZygp
IGNoYW5nZWQgbV9sYXllckluZm8uaW1hZ2VJRC4KKyAgICAvLyBzeW5jSW1hZ2VCYWNraW5nKCkg
Y2hhbmdlZCBtX2xheWVyU3RhdGUuaW1hZ2VJRC4KICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7
CiB9CiAKQEAgLTU1NCwzOCArNjA5LDM1IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzeW5jTGF5ZXJTdGF0ZSgpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRlKQogICAg
ICAgICByZXR1cm47CiAgICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9IGZhbHNlOwotICAgIG1f
bGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCA9IGZpeGVkVG9WaWV3cG9ydCgpOwotCi0gICAgbV9s
YXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7Ci0gICAgbV9s
YXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOwotICAgIG1f
bGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsKLSAgICBtX2xheWVy
SW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVySW5mby5kcmF3
c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKLSAgICBtX2xheWVySW5mby5jb250ZW50c1Zpc2li
bGUgPSBjb250ZW50c0FyZVZpc2libGUoKTsKLSAgICBtX2xheWVySW5mby5tYXNrID0gdG9Db29y
ZGluYXRlZExheWVySUQobWFza0xheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3Vu
ZHMgPSBtYXNrc1RvQm91bmRzKCk7Ci0gICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHko
KTsKLSAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZlczNEKCk7Ci0gICAgbV9s
YXllckluZm8ucmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKHJlcGxpY2FMYXllcigpKTsK
LSAgICBtX2xheWVySW5mby50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKLQotICAgIG1fbGF5ZXJJ
bmZvLmFuY2hvclBvaW50ID0gbV9hZGp1c3RlZEFuY2hvclBvaW50OwotICAgIG1fbGF5ZXJJbmZv
LnBvcyA9IG1fYWRqdXN0ZWRQb3NpdGlvbjsKLSAgICBtX2xheWVySW5mby5zaXplID0gbV9hZGp1
c3RlZFNpemU7Ci0KLSAgICBtX2xheWVySW5mby5zaG93RGVidWdCb3JkZXJzID0gaXNTaG93aW5n
RGVidWdCb3JkZXIoKTsKLSAgICBpZiAobV9sYXllckluZm8uc2hvd0RlYnVnQm9yZGVycykKLSAg
ICAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7Ci0gICAgbV9sYXllckluZm8uc2hvd1JlcGFp
bnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENvdW50ZXIoKTsKIAotICAgIG1fY29vcmRpbmF0
b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKKyAgICAvLyBTdGF0ZSBQcm9w
ZXJ0aWVzCisgICAgbV9sYXllclN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtID0gY2hpbGRyZW5UcmFu
c2Zvcm0oKTsKKyAgICBtX2xheWVyU3RhdGUuY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7
CisgICAgbV9sYXllclN0YXRlLm1hc2sgPSB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChtYXNrTGF5ZXIo
KSk7CisgICAgbV9sYXllclN0YXRlLm9wYWNpdHkgPSBvcGFjaXR5KCk7CisgICAgbV9sYXllclN0
YXRlLnJlcGxpY2EgPSB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChyZXBsaWNhTGF5ZXIoKSk7CisgICAg
bV9sYXllclN0YXRlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOworCisgICAgbV9sYXllclN0YXRl
LmFuY2hvclBvaW50ID0gbV9hZGp1c3RlZEFuY2hvclBvaW50OworICAgIG1fbGF5ZXJTdGF0ZS5w
b3MgPSBtX2FkanVzdGVkUG9zaXRpb247CisgICAgbV9sYXllclN0YXRlLnNpemUgPSBtX2FkanVz
dGVkU2l6ZTsKKworICAgIGlmIChtX2xheWVyU3RhdGUuc2hvd0RlYnVnQm9yZGVycykKKyAgICAg
ICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoKQog
ewotICAgIEFTU0VSVChtX2xheWVySW5mby5zaG93RGVidWdCb3JkZXJzKTsKLSAgICBtX2xheWVy
SW5mby5kZWJ1Z0JvcmRlckNvbG9yID0gY29sb3I7Ci0gICAgbV9sYXllckluZm8uZGVidWdCb3Jk
ZXJXaWR0aCA9IHdpZHRoOworICAgIEFTU0VSVChtX2xheWVyU3RhdGUuc2hvd0RlYnVnQm9yZGVy
cyk7CisgICAgaWYgKG1fbGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNvbG9yICE9IGNvbG9yKSB7Cisg
ICAgICAgIG1fbGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNvbG9yID0gY29sb3I7CisgICAgICAgIG1f
bGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNvbG9yQ2hhbmdlZCA9IHRydWU7CisgICAgfQorCisgICAg
aWYgKG1fbGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlcldpZHRoICE9IHdpZHRoKSB7CisgICAgICAgIG1f
bGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlcldpZHRoID0gd2lkdGg7CisgICAgICAgIG1fbGF5ZXJTdGF0
ZS5kZWJ1Z0JvcmRlcldpZHRoQ2hhbmdlZCA9IHRydWU7CisgICAgfQogfQogCiB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMoKQpAQCAtNTk0LDggKzY0Niw4IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMgPSBmYWxzZTsKLQotICAgIG1f
Y29vcmRpbmF0b3ItPnNldExheWVyQW5pbWF0aW9ucyhtX2lkLCBtX2FuaW1hdGlvbnMpOworICAg
IG1fbGF5ZXJTdGF0ZS5hbmltYXRpb25zID0gbV9hbmltYXRpb25zOworICAgIG1fbGF5ZXJTdGF0
ZS5hbmltYXRpb25zQ2hhbmdlZCA9IHRydWU7CiB9CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKQEAgLTYxMiw3ICs2NjQsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3lu
Y0NhbnZhcygpCiAgICAgaWYgKCFtX2lzVmFsaWRDYW52YXMpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fY29vcmRpbmF0b3ItPnN5bmNDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVy
KTsKKyAgICBBU1NFUlQobV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICBtX2xheWVyU3RhdGUu
Y2FudmFzRnJvbnRCdWZmZXIgPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNz
U3VyZmFjZSgpOworICAgIG1fbGF5ZXJTdGF0ZS5jYW52YXNTaG91bGRTd2FwQnVmZmVycyA9IHRy
dWU7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZO
ZWVkZWQoKQpAQCAtNjIxLDggKzY3NSw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpkZXN0cm95Q2FudmFzSWZOZWVkZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9p
c1ZhbGlkQ2FudmFzKSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3ItPmRlc3Ryb3lDYW52YXMobV9p
ZCk7CiAgICAgICAgIG1faXNWYWxpZENhbnZhcyA9IGZhbHNlOworICAgICAgICBtX2xheWVyU3Rh
dGUuY2FudmFzVG9rZW4gPSBHcmFwaGljc1N1cmZhY2VUb2tlbigpOworICAgICAgICBtX2xheWVy
U3RhdGUuY2FudmFzQ2hhbmdlZCA9IHRydWU7CiAgICAgfQogCiAgICAgbV9wZW5kaW5nQ2FudmFz
T3BlcmF0aW9uICY9IH5EZXN0cm95Q2FudmFzOwpAQCAtNjM1LDcgKzY5MCw5IEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVDYW52YXNJZk5lZWRlZCgpCiAKICAgICBBU1NF
UlQobV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKICAgICBpZiAoIW1faXNWYWxpZENhbnZhcykgewot
ICAgICAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9y
bUxheWVyKTsKKyAgICAgICAgbV9sYXllclN0YXRlLmNhbnZhc1NpemUgPSBtX2NhbnZhc1BsYXRm
b3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7CisgICAgICAgIG1fbGF5ZXJTdGF0ZS5jYW52
YXNUb2tlbiA9IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsK
KyAgICAgICAgbV9sYXllclN0YXRlLmNhbnZhc0NoYW5nZWQgPSB0cnVlOwogICAgICAgICBtX2lz
VmFsaWRDYW52YXMgPSB0cnVlOwogICAgIH0KIApAQCAtNjY3LDExICs3MjQsMjMgQEAgdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXll
ck9ubHkoKQogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogICAgIHN5bmNDYW52YXMoKTsKICNl
bmRpZgorCisgICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyU3RhdGUobV9pZCwgbV9sYXllclN0
YXRlKTsKKyAgICByZXNldExheWVyU3RhdGUoKTsKKwogICAgIC8vIE9ubHkgdW5zZXQgbV9tb3Zp
bmdWaXNpYmxlUmVjdCBhZnRlciB3ZSBoYXZlIHVwZGF0ZWQgdGhlIHZpc2libGUgcmVjdCBhZnRl
ciB0aGUgYW5pbWF0aW9uIHN0b3BwZWQuCiAgICAgaWYgKCFoYXNBY3RpdmVUcmFuc2Zvcm1Bbmlt
YXRpb24pCiAgICAgICAgIG1fbW92aW5nVmlzaWJsZVJlY3QgPSBmYWxzZTsKIH0KIAordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlc2V0TGF5ZXJTdGF0ZSgpCit7CisgICAgbV9sYXll
clN0YXRlLmNoYW5nZU1hc2sgPSAwOworICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvQ3JlYXRlLmNs
ZWFyKCk7CisgICAgbV9sYXllclN0YXRlLnRpbGVzVG9SZW1vdmUuY2xlYXIoKTsKKyAgICBtX2xh
eWVyU3RhdGUudGlsZXNUb1VwZGF0ZS5jbGVhcigpOworfQorCiBib29sIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6aW1hZ2VCYWNraW5nVmlzaWJsZSgpCiB7CiAgICAgQVNTRVJUKG1fY29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcpOwpAQCAtNjg2LDcgKzc1NSw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKQogICAgIEFTU0VSVCht
X2Nvb3JkaW5hdG9yKTsKICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5yZW1vdmVIb3N0
KHRoaXMpOwogICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY2xlYXIoKTsKLSAgICBtX2xh
eWVySW5mby5pbWFnZUlEID0gSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7CisgICAg
bV9sYXllclN0YXRlLmltYWdlSUQgPSBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsK
KyAgICBtX2xheWVyU3RhdGUuaW1hZ2VDaGFuZ2VkID0gdHJ1ZTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCkBAIC02OTUs
NyArNzY1LDggQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0
b3JlUGFpbnRCZWdpbigpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSb290
TGF5ZXIoYm9vbCBpc1Jvb3QpCiB7Ci0gICAgbV9sYXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jv
b3Q7CisgICAgbV9sYXllclN0YXRlLmlzUm9vdExheWVyID0gaXNSb290OworICAgIG1fbGF5ZXJT
dGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0K
IApAQCAtNzUxLDggKzgyMiwxMSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGls
ZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAKIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZl
Y3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQogewotICAgIGlmIChpc1Nob3dpbmdSZXBhaW50
Q291bnRlcigpICYmICF1cGRhdGVkUmVjdHMuaXNFbXB0eSgpKQotICAgICAgICBtX2Nvb3JkaW5h
dG9yLT5zZXRMYXllclJlcGFpbnRDb3VudChpZCgpLCBpbmNyZW1lbnRSZXBhaW50Q291bnQoKSk7
CisgICAgaWYgKCFpc1Nob3dpbmdSZXBhaW50Q291bnRlcigpIHx8IHVwZGF0ZWRSZWN0cy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJTdGF0ZS5yZXBhaW50Q291bnQg
PSBpbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKKyAgICBtX2xheWVyU3RhdGUucmVwYWludENvdW50
Q2hhbmdlZCA9IHRydWU7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxl
ZEJhY2tpbmdTdG9yZUhhc1BlbmRpbmdUaWxlQ3JlYXRpb24oKQpAQCAtODExLDIxICs4ODUsMjgg
QEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUodWludDMyX3QgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW4KIHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7
CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0g
ICAgbV9jb29yZGluYXRvci0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRp
bGVSZWN0KTsKKworICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvQ3JlYXRlLmFwcGVuZChzdGQ6Om1h
a2VfcGFpcih0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKKyAgICB1cGRhdGVUaWxl
KHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3QpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6dXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKIHsKICAgICBBU1NF
UlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdM
YXllckNoYW5nZXMoKSk7Ci0gICAgbV9jb29yZGluYXRvci0+dXBkYXRlVGlsZShpZCgpLCB0aWxl
SUQsIHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKworICAgIFRpbGVVcGRhdGVJbmZvIHRpbGVVcGRh
dGVJbmZvOworICAgIHRpbGVVcGRhdGVJbmZvLnRpbGVJRCA9IHRpbGVJRDsKKyAgICB0aWxlVXBk
YXRlSW5mby50aWxlUmVjdCA9IHRpbGVSZWN0OworICAgIHRpbGVVcGRhdGVJbmZvLnVwZGF0ZUlu
Zm8gPSB1cGRhdGVJbmZvOworICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvVXBkYXRlLmFwcGVuZCh0
aWxlVXBkYXRlSW5mbyk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1v
dmVUaWxlKHVpbnQzMl90IHRpbGVJRCkKIHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAg
ICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSB8fCBtX2lz
UHVyZ2luZyk7Ci0gICAgbV9jb29yZGluYXRvci0+cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOwor
ICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvUmVtb3ZlLmFwcGVuZCh0aWxlSUQpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4
IGU1YWE0N2FmY2MwODAyMGUyMjU5MjkxMDVhOWFjMGE4ZTU5ZGQzMjcuLjc5MGZlOTZjOGEzNGVk
NTZmNzZlMDA0NmZjYzgyOTY3MWIyNzE4MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTIxLDggKzIxLDggQEAKICNpZm5k
ZWYgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyX2gKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oIgogI2luY2x1
ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXll
ckluZm8uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKICNpbmNsdWRlICJGbG9hdFBv
aW50M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCkBAIC00OCwzMSArNDgsMTIgQEAg
Y2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7CiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJD
aGFuZ2VzKCkgY29uc3QgPSAwOwotCi0gICAgLy8gQ29vcmRpbmF0ZWRUaWxlQ2xpZW50Ci0gICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0JikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
KSA9IDA7Ci0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4g
Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXll
ckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKSA9IDA7Ci0jaWYg
RU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKENv
b3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKLSNlbmRpZgot
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxheWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgUGxhdGZvcm1MYXllciopID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpID0gMDsKLSNl
bmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVk
TGF5ZXJJRCwgaW50KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25z
KENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKSA9IDA7
Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KikgPSAwOwogICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29u
dGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWlu
dDMyX3QmIGF0bGFzSUQsIEludFBvaW50JikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGUmKSA9IDA7CiB9OwogCiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMg
R3JhcGhpY3NMYXllcgpAQCAtMTkwLDYgKzE3MSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2
b2lkIGRpZENoYW5nZUltYWdlQmFja2luZygpOwogCisgICAgdm9pZCByZXNldExheWVyU3RhdGUo
KTsKICAgICB2b2lkIHN5bmNMYXllclN0YXRlKCk7CiAgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygp
OwogICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7CkBAIC0yMTYsNyArMTk4LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcj4qKTsKIAogICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtX2lkOwotICAgIENvb3Jk
aW5hdGVkTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlIG1fbGF5ZXJTdGF0ZTsKICAgICBHcmFwaGljc0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJU
cmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jYWNoZWRJbnZlcnNlVHJhbnNm
b3JtOwogICAgIEZsb2F0U2l6ZSBtX3BpeGVsQWxpZ25tZW50T2Zmc2V0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCA4
NjI0NTEzMDQ5MmQ5YmIxMDNiZTBkNDIzMzJiM2Y2MDA1MGNhMTU4Li5hMDcwOWI0MTE0ZDE2Mzdm
NGVjOTNmOWM4MzU3MTJjZWYzZDZjYWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApAQCAtMTk2LDU0ICsxOTYsNjMgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXll
cnMoKQogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50
U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlKQordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUNhbnZhc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAg
QVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXll
ckJ5SUQoaWQpOwotICAgIEFTU0VSVCghbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhp
ZCkpOworICAgIGlmICghc3RhdGUuY2FudmFzVG9rZW4uaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm47CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZh
c0JhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkp
OwotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52YXNCYWNraW5nU3RvcmUp
OworICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGxheWVyLCBjYW52YXNCYWNraW5nU3Rv
cmUpOwogCi0gICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2Uoc3VyZmFj
ZSk7CisgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1
cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNT
aGFyaW5nOworICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c2V0R3JhcGhpY3NTdXJmYWNlKEdyYXBo
aWNzU3VyZmFjZTo6Y3JlYXRlKHN0YXRlLmNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgc3RhdGUu
Y2FudmFzVG9rZW4pKTsKICAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGNhbnZhc0JhY2tp
bmdTdG9yZS5nZXQoKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5j
Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY0NhbnZhc0lmTmVlZGVkKEdyYXBoaWNzTGF5
ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7
CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAgQVNTRVJUKG1fc3VyZmFjZUJhY2tp
bmdTdG9yZXMuY29udGFpbnMoaWQpKTsKIAotICAgIFN1cmZhY2VCYWNraW5nU3RvcmVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5maW5kKGlkKTsKLSAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0
LT52YWx1ZTsKKyAgICBpZiAoc3RhdGUuY2FudmFzQ2hhbmdlZCkgeworICAgICAgICBkZXN0cm95
Q2FudmFzSWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsKKyAgICAgICAgY3JlYXRlQ2FudmFzSWZOZWVk
ZWQobGF5ZXIsIHN0YXRlKTsKKyAgICB9CiAKLSAgICBjYW52YXNCYWNraW5nU3RvcmUtPnN3YXBC
dWZmZXJzSWZOZWVkZWQoZnJvbnRCdWZmZXIpOworICAgIGlmIChzdGF0ZS5jYW52YXNTaG91bGRT
d2FwQnVmZmVycykgeworICAgICAgICBBU1NFUlQobV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250
YWlucyhsYXllcikpOworICAgICAgICBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBp
dCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZmluZChsYXllcik7CisgICAgICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gY2FudmFzQmFja2luZ1N0b3JlID0gaXQt
PnZhbHVlOworICAgICAgICBjYW52YXNCYWNraW5nU3RvcmUtPnN3YXBCdWZmZXJzSWZOZWVkZWQo
c3RhdGUuY2FudmFzRnJvbnRCdWZmZXIpOworICAgIH0KIH0KIAotdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZChHcmFwaGljc0xh
eWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQog
ewotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gbGF5ZXJCeUlEKGlkKTsKLSAgICBBU1NFUlQobV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250
YWlucyhpZCkpOworICAgIGlmIChzdGF0ZS5jYW52YXNUb2tlbi5pc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybjsKIAotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGlkKTsKKyAgICBt
X3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShsYXllcik7CiAgICAgbGF5ZXItPnNldENvbnRl
bnRzVG9NZWRpYSgwKTsKIH0KICNlbmRpZgogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUp
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJSZXBhaW50Q291bnRJZk5l
ZWRlZChHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
U3RhdGUmIHN0YXRlKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlk
KTsKLSAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+c2V0UmVwYWludENv
dW50KHZhbHVlKTsKKyAgICBpZiAoIWxheWVyLT5pc1Nob3dpbmdSZXBhaW50Q291bnRlcigpIHx8
ICFzdGF0ZS5yZXBhaW50Q291bnRDaGFuZ2VkKQorICAgICAgICByZXR1cm47CisKKyAgICB0b0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+c2V0UmVwYWludENvdW50KHN0YXRlLnJl
cGFpbnRDb3VudCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXll
ckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mIGNoaWxkSURzKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExh
eWVyQ2hpbGRyZW5JZk5lZWRlZChHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gbGF5ZXJCeUlEKGlkKTsKKyAgICBpZiAoIXN0YXRlLmNoaWxkcmVuQ2hhbmdlZCkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKIAotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRJRHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
Q29vcmRpbmF0ZWRMYXllcklEIGNoaWxkSUQgPSBjaGlsZElEc1tpXTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRlLmNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIENvb3Jk
aW5hdGVkTGF5ZXJJRCBjaGlsZElEID0gc3RhdGUuY2hpbGRyZW5baV07CiAgICAgICAgIEdyYXBo
aWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxkSUQpOwogICAgICAgICBjaGlsZHJlbi5h
cHBlbmQoY2hpbGQpOwogICAgIH0KQEAgLTI1MSwxNCArMjYwLDE1IEBAIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
Y29uc3QgVmVjCiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzZXRMYXllckZpbHRlcnNJZk5lZWRlZChHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAgICBpZiAoIXN0YXRlLmZpbHRlcnNDaGFuZ2Vk
KQorICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgaW5qZWN0
Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoZmlsdGVycyk7CisgICAgaW5qZWN0Q2FjaGVkQ3Vz
dG9tRmlsdGVyUHJvZ3JhbXMoc3RhdGUuZmlsdGVycyk7CiAjZW5kaWYKLSAgICBsYXllci0+c2V0
RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVycyhzdGF0ZS5maWx0ZXJzKTsK
IH0KICNlbmRpZgogCkBAIC0yOTQsNDMgKzMwNCw3OCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCiB9CiAjZW5kaWYgLy8g
RU5BQkxFKENTU19TSEFERVJTKQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJ
bmZvJiBsYXllckluZm8pCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJT
dGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlJiBsYXllclN0YXRlKQogewogICAgIEFTU0VSVChtX3Jvb3RMYXllcklEICE9IEludmFs
aWRDb29yZGluYXRlZExheWVySUQpOwogICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJC
eUlEKGlkKTsKIAotICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihnZXRMYXllckJ5SURJ
ZkV4aXN0cyhsYXllckluZm8ucmVwbGljYSkpOwotICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIoZ2V0
TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJJbmZvLm1hc2spKTsKLQotICAgIGxheWVyLT5zZXRBbmNo
b3JQb2ludChsYXllckluZm8uYW5jaG9yUG9pbnQpOwotICAgIGxheWVyLT5zZXRQb3NpdGlvbihs
YXllckluZm8ucG9zKTsKLSAgICBsYXllci0+c2V0U2l6ZShsYXllckluZm8uc2l6ZSk7Ci0KLSAg
ICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5mby50cmFuc2Zvcm0pOwotICAgIGxheWVyLT5z
ZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0pOwotICAgIGxh
eWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7Ci0g
ICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxheWVySW5mby5jb250ZW50c09wYXF1ZSk7Ci0g
ICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKLSAgICBs
YXllci0+c2V0Q29udGVudHNUb1NvbGlkQ29sb3IobGF5ZXJJbmZvLnNvbGlkQ29sb3IpOwotICAg
IGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7Ci0gICAgbGF5
ZXItPnNldENvbnRlbnRzVmlzaWJsZShsYXllckluZm8uY29udGVudHNWaXNpYmxlKTsKLSAgICB0
b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+c2V0Rml4ZWRUb1ZpZXdwb3J0KGxh
eWVySW5mby5maXhlZFRvVmlld3BvcnQpOwotICAgIGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIo
bGF5ZXJJbmZvLnNob3dEZWJ1Z0JvcmRlcnMpOwotICAgIGxheWVyLT5zZXREZWJ1Z0JvcmRlcihs
YXllckluZm8uZGVidWdCb3JkZXJDb2xvciwgbGF5ZXJJbmZvLmRlYnVnQm9yZGVyV2lkdGgpOwot
ICAgIGxheWVyLT5zZXRTaG93UmVwYWludENvdW50ZXIobGF5ZXJJbmZvLnNob3dSZXBhaW50Q291
bnRlcik7Ci0KLSAgICBpZiAobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCkKKyAgICBpZiAobGF5
ZXJTdGF0ZS5wb3NpdGlvbkNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXll
clN0YXRlLnBvcyk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5hbmNob3JQb2ludENoYW5nZWQpCisg
ICAgICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllclN0YXRlLmFuY2hvclBvaW50KTsKKwor
ICAgIGlmIChsYXllclN0YXRlLnNpemVDaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0U2l6ZShs
YXllclN0YXRlLnNpemUpOworCisgICAgaWYgKGxheWVyU3RhdGUudHJhbnNmb3JtQ2hhbmdlZCkK
KyAgICAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShsYXllclN0YXRlLnRyYW5zZm9ybSk7CisKKyAg
ICBpZiAobGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5zZm9ybUNoYW5nZWQpCisgICAgICAgIGxheWVy
LT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllclN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtKTsKKwor
ICAgIGlmIChsYXllclN0YXRlLmNvbnRlbnRzUmVjdENoYW5nZWQpCisgICAgICAgIGxheWVyLT5z
ZXRDb250ZW50c1JlY3QobGF5ZXJTdGF0ZS5jb250ZW50c1JlY3QpOworCisgICAgaWYgKGxheWVy
U3RhdGUub3BhY2l0eUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVyU3Rh
dGUub3BhY2l0eSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCkKKyAg
ICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGxheWVyU3RhdGUuc29saWRDb2xv
cik7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNvbG9yQ2hhbmdlZCB8fCBsYXll
clN0YXRlLmRlYnVnQm9yZGVyV2lkdGhDaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0RGVidWdC
b3JkZXIobGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNvbG9yLCBsYXllclN0YXRlLmRlYnVnQm9yZGVy
V2lkdGgpOworCisgICAgaWYgKGxheWVyU3RhdGUucmVwbGljYUNoYW5nZWQpCisgICAgICAgIGxh
eWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllclN0YXRl
LnJlcGxpY2EpKTsKKworICAgIGlmIChsYXllclN0YXRlLm1hc2tDaGFuZ2VkKQorICAgICAgICBs
YXllci0+c2V0TWFza0xheWVyKGdldExheWVyQnlJRElmRXhpc3RzKGxheWVyU3RhdGUubWFzaykp
OworCisgICAgaWYgKGxheWVyU3RhdGUuaW1hZ2VDaGFuZ2VkKQorICAgICAgICBhc3NpZ25JbWFn
ZUJhY2tpbmdUb0xheWVyKGxheWVyLCBsYXllclN0YXRlLmltYWdlSUQpOworCisgICAgaWYgKGxh
eWVyU3RhdGUuZmxhZ3NDaGFuZ2VkKSB7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c09wYXF1
ZShsYXllclN0YXRlLmNvbnRlbnRzT3BhcXVlKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29u
dGVudChsYXllclN0YXRlLmRyYXdzQ29udGVudCk7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50
c1Zpc2libGUobGF5ZXJTdGF0ZS5jb250ZW50c1Zpc2libGUpOworICAgICAgICBsYXllci0+c2V0
QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVyU3RhdGUuYmFja2ZhY2VWaXNpYmxlKTsKKworICAgICAg
ICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCisgICAgICAgIGxheWVyLT5zZXRN
YXNrc1RvQm91bmRzKGxheWVyU3RhdGUuaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVyU3RhdGUu
bWFza3NUb0JvdW5kcyk7CisgICAgICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXllclN0YXRl
LnByZXNlcnZlczNEKTsKKworICAgICAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxh
eWVyKS0+c2V0Rml4ZWRUb1ZpZXdwb3J0KGxheWVyU3RhdGUuZml4ZWRUb1ZpZXdwb3J0KTsKKyAg
ICAgICAgbGF5ZXItPnNldFNob3dEZWJ1Z0JvcmRlcihsYXllclN0YXRlLnNob3dEZWJ1Z0JvcmRl
cnMpOworICAgICAgICBsYXllci0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKGxheWVyU3RhdGUuc2hv
d1JlcGFpbnRDb3VudGVyKTsKKyAgICB9CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5maXhlZFRvVmll
d3BvcnQpCiAgICAgICAgIG1fZml4ZWRMYXllcnMuYWRkKGlkLCBsYXllcik7CiAgICAgZWxzZQog
ICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7CiAKLSAgICBhc3NpZ25JbWFnZUJhY2tp
bmdUb0xheWVyKGlkLCBsYXllciwgbGF5ZXJJbmZvLmltYWdlSUQpOwogICAgIHByZXBhcmVDb250
ZW50QmFja2luZ1N0b3JlKGxheWVyKTsKIAotICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5
ZXIgY2xpcC4KLSAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNSb290TGF5
ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKLSAgICBsYXllci0+c2V0T3Bh
Y2l0eShsYXllckluZm8ub3BhY2l0eSk7Ci0gICAgbGF5ZXItPnNldFByZXNlcnZlczNEKGxheWVy
SW5mby5wcmVzZXJ2ZXMzRCk7CisgICAgLy8gQXBwbHkgT3BlcmF0aW9ucy4KKyAgICBzZXRMYXll
ckNoaWxkcmVuSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOworICAgIHVwZGF0ZVRpbGVzSWZO
ZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBz
ZXRMYXllckZpbHRlcnNJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7CisjZW5kaWYKKyAgICBz
ZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7CisgICAgc3luY0Nh
bnZhc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyAgICBzZXRMYXllclJlcGFpbnRDb3Vu
dElmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKIH0KIAogR3JhcGhpY3NMYXllciogQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpnZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVy
SUQgaWQpCkBAIC0zNjUsNyArNDEwLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OmRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQogICAgIG1fYmFja2luZ1N0
b3Jlcy5yZW1vdmUobGF5ZXIuZ2V0KCkpOwogICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxheWVy
SUQpOwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9y
ZXMucmVtb3ZlKGxheWVySUQpOworICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGxh
eWVyLmdldCgpKTsKICNlbmRpZgogfQogCkBAIC00MTksMzYgKzQ2NCw1NiBAQCB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUoR3Jh
cGhpY3NMYXllciogZwogICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQo
YmFja2luZ1N0b3JlKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0
ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgZmxvYXQg
c2NhbGUpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVGlsZXNJZk5lZWRl
ZChHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGUmIHN0YXRlKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVy
SUQpOworICAgIGlmIChzdGF0ZS50aWxlc1RvQ3JlYXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUg
PSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKICAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsK
LSAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUodGlsZUlELCBzY2FsZSk7CisKKyAgICBWZWN0
b3I8c3RkOjpwYWlyPHVpbnQzMl90LCBmbG9hdD4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3Rh
dGUudGlsZXNUb0NyZWF0ZS5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxzdGQ6OnBhaXI8dWludDMy
X3QsIGZsb2F0PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0YXRlLnRpbGVzVG9DcmVhdGUuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUo
aXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlc0lmTmVlZGVkKEdy
YXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7
CisgICAgaWYgKHN0YXRlLnRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1f
YmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwogICAgIGlmICghYmFja2luZ1N0b3JlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBiYWNraW5nU3RvcmUtPnJlbW92ZVRpbGUodGlsZUlEKTsKKyAgICBW
ZWN0b3I8dWludDMyX3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdGF0ZS50aWxlc1RvUmVtb3Zl
LmVuZCgpOworICAgIGZvciAoVmVjdG9yPHVpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBz
dGF0ZS50aWxlc1RvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYmFj
a2luZ1N0b3JlLT5yZW1vdmVUaWxlKCppdCk7CisKICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVu
ZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjp1cGRhdGVUaWxlc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgY3JlYXRlVGlsZXNJZk5lZWRl
ZChsYXllciwgc3RhdGUpOworICAgIHJlbW92ZVRpbGVzSWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsK
KworICAgIGlmIChzdGF0ZS50aWxlc1RvVXBkYXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBt
X2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKICAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKIAot
ICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHVwZGF0ZS5hdGxh
c0lEKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7CisgICAgVmVjdG9yPFRp
bGVVcGRhdGVJbmZvPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RhdGUudGlsZXNUb1VwZGF0ZS5l
bmQoKTsKKyAgICBmb3IgKFZlY3RvcjxUaWxlVXBkYXRlSW5mbz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gc3RhdGUudGlsZXNUb1VwZGF0ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvID0gaXQtPnVwZGF0
ZUluZm87CiAKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGUuc291
cmNlUmVjdCwgdXBkYXRlLnRpbGVSZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZS5vZmZzZXQpOwotICAg
IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKKyAg
ICAgICAgU3VyZmFjZU1hcDo6aXRlcmF0b3Igc3VyZmFjZUl0ID0gbV9zdXJmYWNlcy5maW5kKHN1
cmZhY2VVcGRhdGVJbmZvLmF0bGFzSUQpOworICAgICAgICBBU1NFUlQoc3VyZmFjZUl0ICE9IG1f
c3VyZmFjZXMuZW5kKCkpOworCisgICAgICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZShpdC0+
dGlsZUlELCBzdXJmYWNlVXBkYXRlSW5mby51cGRhdGVSZWN0LCBpdC0+dGlsZVJlY3QsIHN1cmZh
Y2VJdC0+dmFsdWUsIHN1cmZhY2VVcGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpOworICAgICAgICBt
X2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CisgICAg
fQogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2Up
CkBAIC01MDQsMTAgKzU2OSwxMCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVt
b3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZwogICAgIG1fcmVs
ZWFzZWRJbWFnZUJhY2tpbmdzLmFwcGVuZChtX2ltYWdlQmFja2luZ3MudGFrZShpbWFnZUlEKSk7
CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphc3NpZ25JbWFnZUJhY2tpbmdU
b0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgR3JhcGhpY3NMYXllciogbGF5ZXIsIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjphc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCi0gICAgaWYgKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMoaWQpKQorICAgIGlm
IChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGxheWVyKSkKICAgICAgICAgcmV0dXJu
OwogI2VuZGlmCiAKQEAgLTUzNCwxMyArNTk5LDI0IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpCiAgICAgbV9iYWNr
aW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpmbHVzaExheWVyQ2hhbmdlcyhjb25zdCBGbG9hdFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpmbHVzaFN0YXRlQ2hh
bmdlcyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlKQogewotICAgIG1fcmVu
ZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CisgICAgbV9yZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBzdGF0ZS5zY3JvbGxQb3NpdGlvbjsKIAogICAg
IC8vIFNpbmNlIHRoZSBmcmFtZSBoYXMgbm93IGJlZW4gcmVuZGVyZWQsIHdlIGNhbiBzYWZlbHkg
dW5sb2NrIHRoZSBhbmltYXRpb25zIHVudGlsIHRoZSBuZXh0IGxheW91dC4KICAgICBzZXRBbmlt
YXRpb25zTG9ja2VkKGZhbHNlKTsKIAorICAgIGlmIChzdGF0ZS5yb290Q29tcG9zaXRpbmdMYXll
ciAhPSBtX3Jvb3RMYXllcklEKQorICAgICAgICBzZXRSb290TGF5ZXJJRChzdGF0ZS5yb290Q29t
cG9zaXRpbmdMYXllcik7CisKKyAgICBpZiAoc3RhdGUuYmFja2dyb3VuZENvbG9yICE9IG1fYmFj
a2dyb3VuZENvbG9yKQorICAgICAgICBzZXRCYWNrZ3JvdW5kQ29sb3Ioc3RhdGUuYmFja2dyb3Vu
ZENvbG9yKTsKKworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6cGFpcjxDb29yZGluYXRlZExheWVy
SUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlPiA+IExheWVyVXBkYXRlUGFpclZlY3Rv
cjsKKyAgICBMYXllclVwZGF0ZVBhaXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0YXRl
LmxheWVyc1RvVXBkYXRlLmVuZCgpOworICAgIGZvciAoTGF5ZXJVcGRhdGVQYWlyVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gc3RhdGUubGF5ZXJzVG9VcGRhdGUuYmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikKKyAgICAgICAgc2V0TGF5ZXJTdGF0ZShpdGVyLT5maXJzdCwgaXRlci0+
c2Vjb25kKTsKKwogICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUoRmxvYXRS
ZWN0KCkpOwogICAgIGNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7CiAgICAg
cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKQEAgLTYxNiwxMiArNjkyLDE2
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQog
ICAgICAgICBtX2NsaWVudC0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7CiB9CiAKLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZChHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGxheWVyID0gdG9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihsYXllckJ5SUQoaWQpKTsKKyAgICBpZiAoIXN0YXRl
LmFuaW1hdGlvbnNDaGFuZ2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlciogbGF5ZXIgPSB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBo
aWNzTGF5ZXIpOworCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9u
cygpLmF0KGkpLmtleWZyYW1lcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUu
YW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IHN0YXRlLmFuaW1hdGlvbnMuYW5pbWF0aW9ucygp
LmF0KGkpLmtleWZyYW1lcygpOwogICAgICAgICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0g
QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7ICsraikgewpAQCAt
NjMwLDcgKzcxMCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFu
aW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBHCiAgICAgICAgIH0KICAgICB9
CiAjZW5kaWYKLSAgICBsYXllci0+c2V0QW5pbWF0aW9ucyhhbmltYXRpb25zKTsKKyAgICBsYXll
ci0+c2V0QW5pbWF0aW9ucyhzdGF0ZS5hbmltYXRpb25zKTsKIH0KIAogdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKaW5kZXgg
OWM5MjFhNzRmNmMzZjBkODM3MWMwYjkyOWY3ODEyYjQ4OWNmZjVkMS4uMDFjNjY5ODZkYmQwMmFl
MTU2NzBhYzEzYmYwZDU0ZGZmYzVlOWNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaApAQCAtMjEsNyArMjEsNyBAQAogI2RlZmlu
ZSBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVfaAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgpA
QCAtNDYsNyArNDYsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZTsKLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOwogY2xhc3MgQ3VzdG9t
RmlsdGVyUHJvZ3JhbTsKIGNsYXNzIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvOwogY2xhc3MgVGV4
dHVyZU1hcHBlckxheWVyOwpAQCAtNjQsMzEgKzYzLDExIEBAIHB1YmxpYzoKIAogY2xhc3MgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZT4sIHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1Ymxp
YzoKLSAgICBzdHJ1Y3QgVGlsZVVwZGF0ZSB7Ci0gICAgICAgIEludFJlY3Qgc291cmNlUmVjdDsK
LSAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsKLSAgICAgICAgdWludDMyX3QgYXRsYXNJRDsKLSAg
ICAgICAgSW50UG9pbnQgb2Zmc2V0OwotICAgICAgICBUaWxlVXBkYXRlKGNvbnN0IEludFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW50UmVjdCYgdGlsZSwgdWludDMyX3QgYXRsYXMsIGNvbnN0IEludFBv
aW50JiBuZXdPZmZzZXQpCi0gICAgICAgICAgICA6IHNvdXJjZVJlY3Qoc291cmNlKQotICAgICAg
ICAgICAgLCB0aWxlUmVjdCh0aWxlKQotICAgICAgICAgICAgLCBhdGxhc0lEKGF0bGFzKQotICAg
ICAgICAgICAgLCBvZmZzZXQobmV3T2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9
OwogICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZShDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmVDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUo
KTsKICAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgZmxvYXQsIGNvbnN0IEZsb2F0UmVjdCYsIFRleHR1cmVNYXBwZXI6OlBhaW50Rmxh
Z3MgPSAwKTsKICAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQqKTsKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0ZUNhbnZhcyhDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFj
ZT4pOwotICAgIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZy
b250QnVmZmVyKTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKTsK
LSNlbmRpZgotICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklE
LCBpbnQgdmFsdWUpOwotCiAgICAgdm9pZCBkZXRhY2goKTsKICAgICB2b2lkIGFwcGVuZFVwZGF0
ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CiAKQEAgLTk3LDMxICs3NiwyMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7
CiAKKyAgICB2b2lkIGZsdXNoU3RhdGVDaGFuZ2VzKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZSYpOworCiAgICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mKTsKICAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0
ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklE
KTsKLSAgICB2b2lkIHNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBW
ZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0jaWYgRU5BQkxF
KENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCisKICNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCiAgICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKICAgICB2b2lkIGNyZWF0ZUN1c3RvbUZp
bHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwogICAg
IHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwogI2VuZGlmCiAKLSAgICB2
b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0
IHNjYWxlKTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJf
dCB0aWxlSUQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRs
YXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKICAg
ICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1
c2hMYXllckNoYW5nZXMoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogICAgIHZv
aWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZv
aWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQ
dHI8Q29vcmRpbmF0ZWRTdXJmYWNlPik7CiAgICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRl
bnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNr
aW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRp
b25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsK
ICAgICB2b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRCYWNrZ3Jv
dW5kQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICB2b2lkIHNldERyYXdzQmFja2dyb3VuZChib29s
IGVuYWJsZSkgeyBtX3NldERyYXdzQmFja2dyb3VuZCA9IGVuYWJsZTsgfQpAQCAtMTMxLDYgKzEw
MiwyNCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICAvLyBSZWFsIE9wZXJhdGlv
bnMgZm9yIGZsdXNoU3RhdGVDaGFuZ2VzCisgICAgdm9pZCBzZXRSb290TGF5ZXJJRChDb29yZGlu
YXRlZExheWVySUQpOworICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBzZXRMYXll
ckNoaWxkcmVuSWZOZWVkZWQoR3JhcGhpY3NMYXllciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllclN0YXRlJik7CisgICAgdm9pZCB1cGRhdGVUaWxlc0lmTmVlZGVkKEdyYXBoaWNzTGF5
ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworICAgIHZvaWQgY3Jl
YXRlVGlsZXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVzSWZOZWVkZWQoR3JhcGhpY3NMYXll
ciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisjaWYgRU5BQkxFKENT
U19GSUxURVJTKQorICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQoR3JhcGhpY3NMYXll
ciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisjZW5kaWYKKyAgICB2
b2lkIHNldExheWVyQW5pbWF0aW9uc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQor
ICAgIHZvaWQgY3JlYXRlQ2FudmFzSWZOZWVkZWQoR3JhcGhpY3NMYXllciosIGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBzeW5jQ2FudmFzSWZOZWVkZWQo
R3JhcGhpY3NMYXllciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Cisg
ICAgdm9pZCBkZXN0cm95Q2FudmFzSWZOZWVkZWQoR3JhcGhpY3NMYXllciosIGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisjZW5kaWYKKyAgICB2b2lkIHNldExheWVyUmVw
YWludENvdW50SWZOZWVkZWQoR3JhcGhpY3NMYXllciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllclN0YXRlJik7CisKICAgICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoQ29vcmRpbmF0
ZWRMYXllcklEIGlkKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbGF5ZXJzLmNvbnRhaW5zKGlk
KSk7CkBAIC0xNTksNyArMTQ4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZUxheWVyKENv
b3JkaW5hdGVkTGF5ZXJJRCk7CiAgICAgdm9pZCBkZWxldGVMYXllcihDb29yZGluYXRlZExheWVy
SUQpOwogCi0gICAgdm9pZCBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKENvb3JkaW5hdGVkTGF5
ZXJJRCwgR3JhcGhpY3NMYXllciosIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZv
aWQgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihHcmFwaGljc0xheWVyKiwgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCByZW1vdmVSZWxlYXNlZEltYWdlQmFja2luZ3NJZk5l
ZWRlZCgpOwogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CiAgICAgdm9pZCBjb21taXRQZW5k
aW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpOwpAQCAtMTg1LDcgKzE3NCw3IEBAIHByaXZhdGU6
CiAgICAgSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5n
U3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOwogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwgUmVmUHRyPFRleHR1cmVNYXBw
ZXJTdXJmYWNlQmFja2luZ1N0b3JlPiA+IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPEdyYXBoaWNzTGF5ZXIqLCBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VC
YWNraW5nU3RvcmU+ID4gU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDsKICAgICBTdXJmYWNlQmFja2lu
Z1N0b3JlTWFwIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXM7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjkyN2Y5YzhmODQwODdkMjY0NTY4MjMzZTJhYWMyYTg3NWU4M2M3MjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGVfaAor
I2RlZmluZSBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGVfaAorCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQW5pbWF0aW9u
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5o
IgorI2VuZGlmCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpbmNsdWRlICJHcmFwaGlj
c1N1cmZhY2VUb2tlbi5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2Uu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIHVpbnQzMl90IENvb3JkaW5hdGVk
TGF5ZXJJRDsKK2VudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEID0gMCB9OworCit0eXBl
ZGVmIHVpbnQ2NF90IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7CitlbnVtIHsgSW52YWxpZENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgPSAwIH07CisKK3N0cnVjdCBUaWxlVXBkYXRlSW5mbyB7
CisgICAgdWludDMyX3QgdGlsZUlEOworICAgIEludFJlY3QgdGlsZVJlY3Q7CisgICAgV2ViQ29y
ZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKK307CisKK3N0cnVjdCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJTdGF0ZSB7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAg
ICAgICAgICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29sIGFuY2hv
clBvaW50Q2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgc2l6ZUNoYW5nZWQ6IDE7CisgICAg
ICAgICAgICBib29sIHRyYW5zZm9ybUNoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29sIGNoaWxk
cmVuVHJhbnNmb3JtQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgY29udGVudHNSZWN0Q2hh
bmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgb3BhY2l0eUNoYW5nZWQ6IDE7CisgICAgICAgICAg
ICBib29sIHNvbGlkQ29sb3JDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBkZWJ1Z0JvcmRl
ckNvbG9yQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgZGVidWdCb3JkZXJXaWR0aENoYW5n
ZWQ6IDE7CisgICAgICAgICAgICBib29sIHJlcGxpY2FDaGFuZ2VkOiAxOworICAgICAgICAgICAg
Ym9vbCBtYXNrQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgaW1hZ2VDaGFuZ2VkOiAxOwor
ICAgICAgICAgICAgYm9vbCBmbGFnc0NoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29sIGFuaW1h
dGlvbnNDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBmaWx0ZXJzQ2hhbmdlZDogMTsKKyAg
ICAgICAgICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCByZXBh
aW50Q291bnRDaGFuZ2VkIDogMTsKKyAgICAgICAgICAgIGJvb2wgY2FudmFzQ2hhbmdlZDogMTsK
KyAgICAgICAgICAgIGJvb2wgY2FudmFzU2hvdWxkU3dhcEJ1ZmZlcnM6IDE7CisgICAgICAgIH07
CisgICAgICAgIHVuc2lnbmVkIGNoYW5nZU1hc2s7CisgICAgfTsKKyAgICB1bmlvbiB7CisgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDogMTsKKyAgICAg
ICAgICAgIGJvb2wgZHJhd3NDb250ZW50IDogMTsKKyAgICAgICAgICAgIGJvb2wgY29udGVudHNW
aXNpYmxlIDogMTsKKyAgICAgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmxlIDogMTsKKyAgICAg
ICAgICAgIGJvb2wgbWFza3NUb0JvdW5kcyA6IDE7CisgICAgICAgICAgICBib29sIHByZXNlcnZl
czNEIDogMTsKKyAgICAgICAgICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7CisgICAgICAgICAgICBi
b29sIGZpeGVkVG9WaWV3cG9ydCA6IDE7CisgICAgICAgICAgICBib29sIHNob3dEZWJ1Z0JvcmRl
cnMgOiAxOworICAgICAgICAgICAgYm9vbCBzaG93UmVwYWludENvdW50ZXIgOiAxOworICAgICAg
ICB9OworICAgICAgICB1bnNpZ25lZCBmbGFnczsKKyAgICB9OworCisgICAgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyU3RhdGUoKQorICAgICAgICA6IGNoYW5nZU1hc2soMCkKKyAgICAgICAgLCBj
b250ZW50c09wYXF1ZShmYWxzZSkKKyAgICAgICAgLCBkcmF3c0NvbnRlbnQoZmFsc2UpCisgICAg
ICAgICwgY29udGVudHNWaXNpYmxlKHRydWUpCisgICAgICAgICwgYmFja2ZhY2VWaXNpYmxlKHRy
dWUpCisgICAgICAgICwgbWFza3NUb0JvdW5kcyhmYWxzZSkKKyAgICAgICAgLCBwcmVzZXJ2ZXMz
RChmYWxzZSkKKyAgICAgICAgLCBpc1Jvb3RMYXllcihmYWxzZSkKKyAgICAgICAgLCBmaXhlZFRv
Vmlld3BvcnQoZmFsc2UpCisgICAgICAgICwgc2hvd0RlYnVnQm9yZGVycyhmYWxzZSkKKyAgICAg
ICAgLCBzaG93UmVwYWludENvdW50ZXIoZmFsc2UpCisgICAgICAgICwgb3BhY2l0eSgwKQorICAg
ICAgICAsIGRlYnVnQm9yZGVyV2lkdGgoMCkKKyAgICAgICAgLCByZXBsaWNhKEludmFsaWRDb29y
ZGluYXRlZExheWVySUQpCisgICAgICAgICwgbWFzayhJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklE
KQorICAgICAgICAsIGltYWdlSUQoSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpCisg
ICAgICAgICwgY2FudmFzRnJvbnRCdWZmZXIoMCkKKyAgICB7CisgICAgfQorICAgIEZsb2F0UG9p
bnQgcG9zOworICAgIEZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKKyAgICBGbG9hdFNpemUgc2l6
ZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07CisgICAgSW50UmVjdCBjb250ZW50c1JlY3Q7Cisg
ICAgZmxvYXQgb3BhY2l0eTsKKyAgICBDb2xvciBzb2xpZENvbG9yOworICAgIENvbG9yIGRlYnVn
Qm9yZGVyQ29sb3I7CisgICAgZmxvYXQgZGVidWdCb3JkZXJXaWR0aDsKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOworI2VuZGlmCisgICAgR3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMgYW5pbWF0aW9uczsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGNo
aWxkcmVuOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8dWludDMyX3QgLyogdGlsZUlEICovLCBmbG9h
dCAvKiBzY2FsZSAqLz4gPiB0aWxlc1RvQ3JlYXRlOworICAgIFZlY3Rvcjx1aW50MzJfdD4gdGls
ZXNUb1JlbW92ZTsKKyAgICBDb29yZGluYXRlZExheWVySUQgcmVwbGljYTsKKyAgICBDb29yZGlu
YXRlZExheWVySUQgbWFzazsKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQ7
CisKKyAgICB1bnNpZ25lZCByZXBhaW50Q291bnQ7CisgICAgVmVjdG9yPFRpbGVVcGRhdGVJbmZv
PiB0aWxlc1RvVXBkYXRlOworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgSW50U2l6
ZSBjYW52YXNTaXplOworICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIGNhbnZhc1Rva2VuOworICAg
IHVpbnQzMl90IGNhbnZhc0Zyb250QnVmZmVyOworI2VuZGlmCit9OworCitzdHJ1Y3QgQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlIHsKKyAgICB1aW50MzJfdCByb290Q29tcG9zaXRpbmdMYXllcjsK
KyAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisgICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlv
bjsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZTsKKyAgICBJbnRSZWN0IGNvdmVyZWRSZWN0Owor
CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb29yZGluYXRlZExheWVySUQsIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllclN0YXRlPiA+IGxheWVyc1RvVXBkYXRlOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gPiA+
IGltYWdlc1RvVXBkYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nLmgKaW5kZXggNWI1YjU3YTZlY2IxMDFlZjc1YjI5MTkxYjU3NTA3YmVkZGEyZjc2
NS4uMzY5ZTIzOWY5YjBhMjk4Y2Q5ZmNjZTQyM2RhNGQyZjFlNWEyMWE3NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKQEAgLTI4LDcg
KzI4LDcgQEAKICNkZWZpbmUgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfaAogCiAjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJUaW1lci5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMGZhMmExMmVkM2Y0NmMwODQyM2I0YjljNGRjOTE2NTY5ZjAz
OGI3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRMYXllckluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gQ29weXJp
Z2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIENvb3JkaW5hdGVkTGF5ZXJJbmZv
X2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWRMYXllckluZm9faAotCi0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVm
IHVpbnQzMl90IENvb3JkaW5hdGVkTGF5ZXJJRDsKLWVudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRM
YXllcklEID0gMCB9OwotCi10eXBlZGVmIHVpbnQ2NF90IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQ7Ci1lbnVtIHsgSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgPSAwIH07Ci0KLS8v
IE5PVEU6IENvb3JkaW5hdGVkTGF5ZXJJbmZvIHNob3VsZCBvbmx5IHVzZSBQT0QgdHlwZXMsIGFz
IHRvIG1ha2Ugc2VyaWFsaXphdGlvbiBmYXN0ZXIuCi1zdHJ1Y3QgQ29vcmRpbmF0ZWRMYXllcklu
Zm8gewotICAgIENvb3JkaW5hdGVkTGF5ZXJJbmZvKCkKLSAgICAgICAgOiByZXBsaWNhKEludmFs
aWRDb29yZGluYXRlZExheWVySUQpCi0gICAgICAgICwgbWFzayhJbnZhbGlkQ29vcmRpbmF0ZWRM
YXllcklEKQotICAgICAgICAsIGltYWdlSUQoSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpCi0gICAgICAgICwgb3BhY2l0eSgwKQotICAgICAgICAsIGRlYnVnQm9yZGVyV2lkdGgoMCkK
LSAgICAgICAgLCBmbGFncygwKSB7IH0KLQotICAgIENvb3JkaW5hdGVkTGF5ZXJJRCByZXBsaWNh
OwotICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtYXNrOwotICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRDsKLQotICAgIEZsb2F0UG9pbnQgcG9zOwotICAgIEZsb2F0UG9pbnQzRCBh
bmNob3JQb2ludDsKLSAgICBGbG9hdFNpemUgc2l6ZTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm07Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07
Ci0gICAgSW50UmVjdCBjb250ZW50c1JlY3Q7Ci0gICAgZmxvYXQgb3BhY2l0eTsKLSAgICBDb2xv
ciBzb2xpZENvbG9yOwotICAgIENvbG9yIGRlYnVnQm9yZGVyQ29sb3I7Ci0gICAgZmxvYXQgZGVi
dWdCb3JkZXJXaWR0aDsKLQotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgIGJvb2wgY29udGVudHNPcGFxdWUgOiAxOwotICAgICAgICAgICAgYm9vbCBkcmF3c0NvbnRl
bnQgOiAxOwotICAgICAgICAgICAgYm9vbCBjb250ZW50c1Zpc2libGUgOiAxOwotICAgICAgICAg
ICAgYm9vbCBiYWNrZmFjZVZpc2libGUgOiAxOwotICAgICAgICAgICAgYm9vbCBtYXNrc1RvQm91
bmRzIDogMTsKLSAgICAgICAgICAgIGJvb2wgcHJlc2VydmVzM0QgOiAxOwotICAgICAgICAgICAg
Ym9vbCBpc1Jvb3RMYXllcjogMTsKLSAgICAgICAgICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0IDog
MTsKLSAgICAgICAgICAgIGJvb2wgc2hvd0RlYnVnQm9yZGVycyA6IDE7Ci0gICAgICAgICAgICBi
b29sIHNob3dSZXBhaW50Q291bnRlciA6IDE7Ci0gICAgICAgIH07Ci0gICAgICAgIHVuc2lnbmVk
IGZsYWdzOwotICAgIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZExheWVy
SW5mb19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oCmluZGV4
IDZhYjM4NGExMWVhYTVlYTI1NDA4MTNjNzAyNWU1ZmM4YzE3ZDM5MTAuLjVhZjA2OWEyYmQ3YTdh
N2UyZWU3N2FjNWIwYzI5ODM4M2NjZWFiYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9T
dXJmYWNlVXBkYXRlSW5mby5oCkBAIC0yMywxMiArMjMsMTAgQEAKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU3VyZmFjZVVwZGF0ZUlu
Zm8gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1cmZhY2VVcGRhdGVJbmZvKTsKIAogcHVi
bGljOgogICAgIFN1cmZhY2VVcGRhdGVJbmZvKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRz
L3dlYmtpdDIvbWVzc2FnZXMucHkKaW5kZXggYjY5MGEwMTg5YmUxZjFiZWJlZTQxN2YwNWUyYjli
OGJkMzBhZmNjOC4uZjQ2NWM3ZjMwMWJiYzkxZDNkODM4YmJhNmU5NGUxYmFkOTU5NzhlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQpAQCAtMzk4LDcgKzM5
OCw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgIHNwZWNpYWxfY2FzZXMgPSB7
CiAgICAgICAgICdXVEY6OlN0cmluZyc6IFsnPHd0Zi90ZXh0L1dURlN0cmluZy5oPiddLAogICAg
ICAgICAnV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUnOiBbJzxXZWJDb3JlL0VkaXRvci5o
PiddLAotICAgICAgICAnV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEJzogWyc8V2ViQ29yZS9D
b29yZGluYXRlZExheWVySW5mby5oPiddLAorICAgICAgICAnV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyU3RhdGUnOiBbJzxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5o
PiddLAogICAgICAgICAnV2ViQ29yZTo6R3JhbW1hckRldGFpbCc6IFsnPFdlYkNvcmUvVGV4dENo
ZWNrZXJDbGllbnQuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRp
b25zJzogWyc8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+J10sCiAgICAgICAgICdX
ZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCc6IFsnPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPidd
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVy
cy5jcHAKaW5kZXggNWEwNmQxMTY4YzIyNzYwMmNhMjBjMWJjMjgwZDE3Njk3MjZhMDU4OC4uOTA4
YWZjYTMwMTQxMDJhMDA4ZWNlZWM5Y2EyMjQwYjFlMDNmYzRhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0yOSwxMCAr
MjksMTEgQEAKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIK
IAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJXZWJDb29yZGluYXRl
ZFN1cmZhY2UuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0FuaW1hdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9D
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQz
RC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaD4KQEAgLTczLDkgKzc0LDcg
QEAKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLSNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotI2VuZGlmCiAKIG5hbWVzcGFjZSBDb3Jl
SVBDIHsKIApAQCAtODE1LDI0ICs4MTQsMjIzIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2VUb2tlbj46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kCiB9
CiAjZW5kaWYKIAotdm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkTGF5ZXJJbmZvPjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8m
IGNvb3JkaW5hdGVkTGF5ZXJJbmZvKQordm9pZCBBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJ
bmZvPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgU3VyZmFjZVVwZGF0
ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvKQogewotICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8Q29v
cmRpbmF0ZWRMYXllckluZm8+OjplbmNvZGUoZW5jb2RlciwgY29vcmRpbmF0ZWRMYXllckluZm8p
OworICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjplbmNvZGUoZW5j
b2Rlciwgc3VyZmFjZVVwZGF0ZUluZm8pOwogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8Q29vcmRp
bmF0ZWRMYXllckluZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBDb29yZGlu
YXRlZExheWVySW5mbyYgY29vcmRpbmF0ZWRMYXllckluZm8pCitib29sIEFyZ3VtZW50Q29kZXI8
U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBTdXJm
YWNlVXBkYXRlSW5mbyYgc3VyZmFjZVVwZGF0ZUluZm8pCiB7Ci0gICAgcmV0dXJuIFNpbXBsZUFy
Z3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRMYXllckluZm8+OjpkZWNvZGUoZGVjb2RlciwgY29vcmRp
bmF0ZWRMYXllckluZm8pOworICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VV
cGRhdGVJbmZvPjo6ZGVjb2RlKGRlY29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsKIH0KIAotdm9p
ZCBBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvKQor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgZW5jb2RlTGF5ZXJTdGF0ZUlmTmVlZGVk
KEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVCYgdmFsdWUsIGJvb2wgaXNOZWVkZWQp
CiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmVuY29kZShl
bmNvZGVyLCBzdXJmYWNlVXBkYXRlSW5mbyk7CisgICAgaWYgKGlzTmVlZGVkKQorICAgICAgICBl
bmNvZGVyIDw8IHZhbHVlOwogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUlu
Zm8+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBTdXJmYWNlVXBkYXRlSW5mbyYg
c3VyZmFjZVVwZGF0ZUluZm8pCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgYm9vbCBkZWNv
ZGVMYXllclN0YXRlSWZOZWVkZWQoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBUJiB2YWx1ZSwg
Ym9vbCBpc05lZWRlZCkKIHsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxTdXJmYWNl
VXBkYXRlSW5mbz46OmRlY29kZShkZWNvZGVyLCBzdXJmYWNlVXBkYXRlSW5mbyk7CisgICAgaWYg
KCFpc05lZWRlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGRlY29kZXIuZGVj
b2RlKHZhbHVlKTsKK30KKwordm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllclN0YXRlPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQoreworICAgIGVuY29kZXIgPDwgc3RhdGUu
Y2hhbmdlTWFzazsKKyAgICBlbmNvZGVMYXllclN0YXRlSWZOZWVkZWQoZW5jb2Rlciwgc3RhdGUu
ZmxhZ3MsIHN0YXRlLmZsYWdzQ2hhbmdlZCk7CisgICAgZW5jb2RlTGF5ZXJTdGF0ZUlmTmVlZGVk
KGVuY29kZXIsIHN0YXRlLnBvcywgc3RhdGUucG9zaXRpb25DaGFuZ2VkKTsKKyAgICBlbmNvZGVM
YXllclN0YXRlSWZOZWVkZWQoZW5jb2Rlciwgc3RhdGUuYW5jaG9yUG9pbnQsIHN0YXRlLmFuY2hv
clBvaW50Q2hhbmdlZCk7CisgICAgZW5jb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGVuY29kZXIsIHN0
YXRlLnNpemUsIHN0YXRlLnNpemVDaGFuZ2VkKTsKKyAgICBlbmNvZGVMYXllclN0YXRlSWZOZWVk
ZWQoZW5jb2Rlciwgc3RhdGUudHJhbnNmb3JtLCBzdGF0ZS50cmFuc2Zvcm1DaGFuZ2VkKTsKKyAg
ICBlbmNvZGVMYXllclN0YXRlSWZOZWVkZWQoZW5jb2Rlciwgc3RhdGUuY2hpbGRyZW5UcmFuc2Zv
cm0sIHN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCk7CisgICAgZW5jb2RlTGF5ZXJTdGF0
ZUlmTmVlZGVkKGVuY29kZXIsIHN0YXRlLmNvbnRlbnRzUmVjdCwgc3RhdGUuY29udGVudHNSZWN0
Q2hhbmdlZCk7CisgICAgZW5jb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGVuY29kZXIsIHN0YXRlLm9w
YWNpdHksIHN0YXRlLm9wYWNpdHlDaGFuZ2VkKTsKKyAgICBlbmNvZGVMYXllclN0YXRlSWZOZWVk
ZWQoZW5jb2Rlciwgc3RhdGUuc29saWRDb2xvciwgc3RhdGUuc29saWRDb2xvckNoYW5nZWQpOwor
ICAgIGVuY29kZUxheWVyU3RhdGVJZk5lZWRlZChlbmNvZGVyLCBzdGF0ZS5kZWJ1Z0JvcmRlckNv
bG9yLCBzdGF0ZS5kZWJ1Z0JvcmRlckNvbG9yQ2hhbmdlZCk7CisgICAgZW5jb2RlTGF5ZXJTdGF0
ZUlmTmVlZGVkKGVuY29kZXIsIHN0YXRlLmRlYnVnQm9yZGVyV2lkdGgsIHN0YXRlLmRlYnVnQm9y
ZGVyV2lkdGhDaGFuZ2VkKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgZW5jb2RlTGF5
ZXJTdGF0ZUlmTmVlZGVkKGVuY29kZXIsIHN0YXRlLmZpbHRlcnMsIHN0YXRlLmZpbHRlcnNDaGFu
Z2VkKTsKKyNlbmRpZgorICAgIGVuY29kZUxheWVyU3RhdGVJZk5lZWRlZChlbmNvZGVyLCBzdGF0
ZS5hbmltYXRpb25zLCBzdGF0ZS5hbmltYXRpb25zQ2hhbmdlZCk7CisgICAgZW5jb2RlTGF5ZXJT
dGF0ZUlmTmVlZGVkKGVuY29kZXIsIHN0YXRlLmNoaWxkcmVuLCBzdGF0ZS5jaGlsZHJlbkNoYW5n
ZWQpOworICAgIGVuY29kZXIgPDwgc3RhdGUudGlsZXNUb0NyZWF0ZTsKKyAgICBlbmNvZGVyIDw8
IHN0YXRlLnRpbGVzVG9SZW1vdmU7CisgICAgZW5jb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGVuY29k
ZXIsIHN0YXRlLnJlcGxpY2EsIHN0YXRlLnJlcGxpY2FDaGFuZ2VkKTsKKyAgICBlbmNvZGVMYXll
clN0YXRlSWZOZWVkZWQoZW5jb2Rlciwgc3RhdGUubWFzaywgc3RhdGUubWFza0NoYW5nZWQpOwor
ICAgIGVuY29kZUxheWVyU3RhdGVJZk5lZWRlZChlbmNvZGVyLCBzdGF0ZS5pbWFnZUlELCBzdGF0
ZS5pbWFnZUNoYW5nZWQpOworICAgIGVuY29kZUxheWVyU3RhdGVJZk5lZWRlZChlbmNvZGVyLCBz
dGF0ZS5yZXBhaW50Q291bnQsIHN0YXRlLnJlcGFpbnRDb3VudENoYW5nZWQpOworICAgIGVuY29k
ZXIgPDwgc3RhdGUudGlsZXNUb1VwZGF0ZTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAg
ICBpZiAoc3RhdGUuY2FudmFzQ2hhbmdlZCkgeworICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNh
bnZhc1NpemU7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuY2FudmFzVG9rZW47CisgICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuY2FudmFzRnJvbnRCdWZmZXI7CisgICAgfQorI2VuZGlmCit9CisK
K2Jvb2wgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZT46OmRlY29k
ZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRl
JiBzdGF0ZSkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNoYW5nZU1hc2spKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZUxheWVyU3RhdGVJZk5lZWRl
ZChkZWNvZGVyLCBzdGF0ZS5mbGFncywgc3RhdGUuZmxhZ3NDaGFuZ2VkKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwg
c3RhdGUucG9zLCBzdGF0ZS5wb3NpdGlvbkNoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIWRlY29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0ZS5hbmNo
b3JQb2ludCwgc3RhdGUuYW5jaG9yUG9pbnRDaGFuZ2VkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3RhdGUuc2l6
ZSwgc3RhdGUuc2l6ZUNoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWRlY29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0ZS50cmFuc2Zvcm0sIHN0YXRl
LnRyYW5zZm9ybUNoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
Y29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSwg
c3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2VkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3RhdGUuY29udGVu
dHNSZWN0LCBzdGF0ZS5jb250ZW50c1JlY3RDaGFuZ2VkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3RhdGUub3Bh
Y2l0eSwgc3RhdGUub3BhY2l0eUNoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIWRlY29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0ZS5zb2xpZENvbG9y
LCBzdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghZGVjb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGRlY29kZXIsIHN0YXRlLmRlYnVnQm9yZGVy
Q29sb3IsIHN0YXRlLmRlYnVnQm9yZGVyQ29sb3JDaGFuZ2VkKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3RhdGUu
ZGVidWdCb3JkZXJXaWR0aCwgc3RhdGUuZGVidWdCb3JkZXJXaWR0aENoYW5nZWQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgaWYgKCFkZWNv
ZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3RhdGUuZmlsdGVycywgc3RhdGUuZmlsdGVy
c0NoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIGlmICghZGVj
b2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGRlY29kZXIsIHN0YXRlLmFuaW1hdGlvbnMsIHN0YXRlLmFu
aW1hdGlvbnNDaGFuZ2VkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNv
ZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3RhdGUuY2hpbGRyZW4sIHN0YXRlLmNoaWxk
cmVuQ2hhbmdlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoc3RhdGUudGlsZXNUb0NyZWF0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUudGlsZXNUb1JlbW92ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghZGVjb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKGRlY29kZXIsIHN0
YXRlLnJlcGxpY2EsIHN0YXRlLnJlcGxpY2FDaGFuZ2VkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQoZGVjb2Rlciwgc3RhdGUubWFz
aywgc3RhdGUubWFza0NoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWRlY29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0ZS5pbWFnZUlELCBzdGF0ZS5p
bWFnZUNoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZUxh
eWVyU3RhdGVJZk5lZWRlZChkZWNvZGVyLCBzdGF0ZS5yZXBhaW50Q291bnQsIHN0YXRlLnJlcGFp
bnRDb3VudENoYW5nZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHN0YXRlLnRpbGVzVG9VcGRhdGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBpZiAoIWRlY29kZUxheWVyU3RhdGVJZk5l
ZWRlZChkZWNvZGVyLCBzdGF0ZS5jYW52YXNTaXplLCBzdGF0ZS5jYW52YXNDaGFuZ2VkKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVMYXllclN0YXRlSWZOZWVkZWQo
ZGVjb2Rlciwgc3RhdGUuY2FudmFzVG9rZW4sIHN0YXRlLmNhbnZhc0NoYW5nZWQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZUxheWVyU3RhdGVJZk5lZWRlZChkZWNv
ZGVyLCBzdGF0ZS5jYW52YXNGcm9udEJ1ZmZlciwgc3RhdGUuY2FudmFzQ2hhbmdlZCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
QXJndW1lbnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFRpbGVVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIFNpbXBsZUFy
Z3VtZW50Q29kZXI8VGlsZVVwZGF0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgdXBkYXRlSW5mbyk7
Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmRlY29kZShBcmd1bWVu
dERlY29kZXImIGRlY29kZXIsIFRpbGVVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIHJl
dHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFRpbGVVcGRhdGVJbmZvPjo6ZGVjb2RlKGRlY29kZXIs
IHVwZGF0ZUluZm8pOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBlbmNvZGVyIDw8IHN0YXRlLnJvb3RDb21w
b3NpdGluZ0xheWVyOworICAgIGVuY29kZXIgPDwgc3RhdGUuYmFja2dyb3VuZENvbG9yOworICAg
IGVuY29kZXIgPDwgc3RhdGUuc2Nyb2xsUG9zaXRpb247CisgICAgZW5jb2RlciA8PCBzdGF0ZS5j
b250ZW50c1NpemU7CisgICAgZW5jb2RlciA8PCBzdGF0ZS5jb3ZlcmVkUmVjdDsKKyAgICBlbmNv
ZGVyIDw8IHN0YXRlLmxheWVyc1RvVXBkYXRlOworCisgICAgLy8gV2UgbmVlZCB0byBlbmNvZGUg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgcmlnaHQgYWZ0ZXIgaXQncyBjcmVhdGlvbi4K
KyAgICAvLyBUaGF0J3Mgd2h5IHdlIGNhbm5vdCB1c2Ugc2ltcGxlIHN0ZDo6cGFpciBlbmNvZGVy
LgorICAgIGVuY29kZXIgPDwgc3RhdGUuaW1hZ2VzVG9VcGRhdGUuc2l6ZSgpOworCisgICAgdHlw
ZWRlZiBWZWN0b3I8c3RkOjpwYWlyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+ID4gPiBTdXJmYWNlVXBkYXRlUGFpclZlY3RvcjsKKyAgICBTdXJm
YWNlVXBkYXRlUGFpclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RhdGUuaW1hZ2VzVG9V
cGRhdGUuZW5kKCk7CisgICAgZm9yIChTdXJmYWNlVXBkYXRlUGFpclZlY3Rvcjo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IHN0YXRlLmltYWdlc1RvVXBkYXRlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKKworICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVk
U3VyZmFjZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFjZSo+KGl0ZXItPnNlY29u
ZC5nZXQoKSk7CisgICAgICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsK
KyAgICAgICAgaWYgKCF3ZWJDb29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGVuY29kZXIgPDwgaXRlci0+Zmlyc3Q7
CisgICAgICAgIGVuY29kZXIgPDwgaGFuZGxlOworICAgIH0KK30KKworYm9vbCBBcmd1bWVudENv
ZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZT46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRl
Y29kZXIsIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShzdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllcikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuYmFja2dyb3VuZENvbG9yKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5z
Y3JvbGxQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoc3RhdGUuY29udGVudHNTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5jb3ZlcmVkUmVjdCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUubGF5ZXJzVG9VcGRhdGUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzaXplX3Qgc2l6ZU9mSW1hZ2VzVG9VcGRh
dGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplT2ZJbWFnZXNUb1VwZGF0ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZU9mSW1h
Z2VzVG9VcGRhdGU7IGkrKykgeworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWdlSUQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1hZ2VJRCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUg
aGFuZGxlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3Vy
ZmFjZSA9IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSk7CisgICAgICAgIHN0
YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBzdXJmYWNl
LnJlbGVhc2UoKSkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBDb3JlSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1
bWVudENvZGVycy5oCmluZGV4IDhlN2RlZWZiM2ZlYTE3Zjk4NWU1ODNlNzMxMDNlZjhiYWMyOTUx
MWUuLmU1YzI0NjYyNDUxZmM4MDY2ODMyNDQ1YzgyNGNkZDA4NzljYTU3YzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCkBAIC0zMiwx
MyArMzIsMTUgQEAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CitzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU7CitzdHJ1Y3QgQ29v
cmRpbmF0ZWRHcmFwaGljc1N0YXRlOwogY2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgR3JhcGhp
Y3NMYXllckFuaW1hdGlvbjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOwogY2xhc3Mg
U3VyZmFjZVVwZGF0ZUluZm87CitzdHJ1Y3QgVGlsZVVwZGF0ZUluZm87CiBjbGFzcyBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDsKIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7Ci1zdHJ1Y3QgQ29vcmRp
bmF0ZWRMYXllckluZm87CiBzdHJ1Y3QgTGVuZ3RoOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJT
KQpAQCAtMTA3LDE2ICsxMDksMjYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbj4gewogfTsKICNlbmRpZgogCi10ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvPiB7Ci0g
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci19OwotCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvPiB7CiAgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlN1cmZh
Y2VVcGRhdGVJbmZvJik7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYs
IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlPiB7Cisg
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRpbGVVcGRh
dGVJbmZvPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0
IFdlYkNvcmU6OlRpbGVVcGRhdGVJbmZvJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciYsIFdlYkNvcmU6OlRpbGVVcGRhdGVJbmZvJik7Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZT4g
eworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJik7Cit9Owor
CiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5jcHAKaW5kZXggYzVmN2U4NzVhNmQ4YmNmZGE0YjcwMzVlNDE5MGMyZTU1M2U3MzZiYS4u
NDg4NWU3NmU3MDhhZmQzN2IyNzgyYzEzM2Y0MzkyMGQ1MDUyMGVmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApAQCAtMjcsNyAr
MjcsNyBAQAogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvQ29vcmRpbmF0ZWRMYXllckluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5mby5oPgogCkBAIC02MiwyMiArNjIs
NiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaXNwYXRjaFVwZGF0ZShj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdAogICAgIG1fc2NlbmUtPmFwcGVuZFVwZGF0ZShm
dW5jdGlvbik7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpjcmVhdGVUaWxlLCBtX3NjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUlu
Zm8uc2NhbGVGYWN0b3IpKTsKLSAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlE
LCB0aWxlUmVjdCwgdXBkYXRlSW5mbyk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVUaWxlLCBtX3NjZW5lLmdldCgpLCBsYXllcklELCB0
aWxlSUQsIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVw
ZGF0ZVJlY3QsIHRpbGVSZWN0LCB1cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFj
ZU9mZnNldCkpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVt
b3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpyZW1vdmVUaWxlLCBtX3NjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKLX0KLQogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMy
X3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkK
IHsKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNy
ZWF0ZVVwZGF0ZUF0bGFzLCBtX3NjZW5lLmdldCgpLCBhdGxhc0lELCBXZWJDb29yZGluYXRlZFN1
cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7CkBAIC05OCwyOCArODIsNiBAQCB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0
b3I8Q29vcmRpbgogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6ZGVsZXRlTGF5ZXJzLCBtX3NjZW5lLmdldCgpLCBpZHMpKTsKIH0KIAotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRp
bmF0ZWRMYXllcklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6c2V0Um9vdExheWVySUQsIG1fc2NlbmUuZ2V0KCksIGlkKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJT
dGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBp
bmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6c2V0TGF5ZXJTdGF0ZSwgbV9zY2VuZS5nZXQoKSwgaWQsIGluZm8pKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVu
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4m
IGNoaWxkcmVuKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJDaGlsZHJlbiwgbV9zY2VuZS5nZXQoKSwgaWQsIGNoaWxkcmVuKSk7
Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQg
aWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckZpbHRlcnMsIG1fc2Nl
bmUuZ2V0KCksIGlkLCBmaWx0ZXJzKSk7Ci19Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUN1c3RvbUZp
bHRlclByb2dyYW0oaW50IGlkKQogewpAQCAtMTMxLDE1ICs5MywxMiBAQCB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwg
Y29uc3QgQ3VzdAogfQogI2VuZGlmCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25z
dCBJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IEludFJlY3QmIGNvdmVyZWRSZWN0KQordm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgZ3JhcGhpY3NTdGF0ZSkKIHsK
LSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZsdXNo
TGF5ZXJDaGFuZ2VzLCBtX3NjZW5lLmdldCgpLCBzY3JvbGxQb3NpdGlvbikpOworICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Zmx1c2hTdGF0ZUNoYW5n
ZXMsIG1fc2NlbmUuZ2V0KCksIGdyYXBoaWNzU3RhdGUpKTsKICAgICB1cGRhdGVWaWV3cG9ydCgp
OwogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+
cGFnZSgpLT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRlbnRzU2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNvdmVy
ZWRSZWN0KTsKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+ZGlkUmVuZGVyRnJhbWUo
Z3JhcGhpY3NTdGF0ZS5jb250ZW50c1NpemUsIGdyYXBoaWNzU3RhdGUuY292ZXJlZFJlY3QpOwog
I2VuZGlmCiB9CiAKQEAgLTE2MywxMSArMTIyLDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQK
ICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92
ZUltYWdlQmFja2luZywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCkpOwogfQogCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsK
LSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExh
eWVyQW5pbWF0aW9ucywgbV9zY2VuZS5nZXQoKSwgaWQsIGFuaW1hdGlvbnMpKTsKLX0KLQogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QW5pbWF0aW9uc0xvY2tlZChib29s
IGxvY2tlZCkKIHsKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OnNldEFuaW1hdGlvbnNMb2NrZWQsIG1fc2NlbmUuZ2V0KCksIGxvY2tlZCkpOwpAQCAt
MjA0LDI5ICsxNTgsNiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojphbmlt
YXRpb25GcmFtZVJlYWR5KCkKIH0KICNlbmRpZgogCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDYW52YXMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBjb25zdCBHcmFwaGlj
c1N1cmZhY2VUb2tlbiYgdG9rZW4pCi17Ci0gICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJm
YWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBo
aWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzLCBtX3NjZW5lLmdldCgpLCBpZCwg
Y2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFzU2l6ZSwgc3VyZmFjZUZs
YWdzLCB0b2tlbikpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVyKQot
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3lu
Y0NhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGZyb250QnVmZmVyKSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6ZGVzdHJveUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQpKTsKLX0KLSNlbmRpZgotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllclJlcGFpbnRDb3VudChD
b29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUmVwYWludENvdW50LCBtX3Nj
ZW5lLmdldCgpLCBpZCwgdmFsdWUpKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFn
ZUlEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5LmgKaW5kZXggOTQ2YjM5OTIwZDI4NDg4M2E4NDRhN2YxOTY2OTExYjA4NjllZjlmNS4uZDE2
OGJjZGNkYTdhYmFjZGFhOTFhZjU4MjIzZGJjMDdiZTRiZmJiOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCkBAIC00MSw3ICs0MSw4IEBA
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBD
b29yZGluYXRlZExheWVySW5mbzsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRl
OworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlOwogY2xhc3MgU3VyZmFjZVVwZGF0ZUlu
Zm87CiB9CiAKQEAgLTUzLDQzICs1NCwzMSBAQCBjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbAogcHVi
bGljOgogICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdB
cmVhUHJveHkqKTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgp
OwotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICB2b2lk
IHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0jaWYgRU5BQkxF
KENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7
Ci0jZW5kaWYKKworICAgIC8vIE1lc3NhZ2VzIEZyb20gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
CisgICAgdm9pZCBjcmVhdGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMo
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKICNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCiAgICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwg
Y29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKICAgICB2b2lkIHJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKICNlbmRpZgotICAgIHZvaWQgY3JlYXRlQ29t
cG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4m
KTsKLSAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXll
cihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQpOwotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRl
bnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiB0cmFqZWN0b3J5VmVjdG9yKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsKLSAg
ICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVp
bnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlN1
cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgcmVtb3Zl
VGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
KTsKICAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdl
YkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVVcGRhdGVBdGxh
cyh1aW50MzJfdCBhdGxhc0lEKTsKICAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhXZWJDb3Jl
OjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2lu
ZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJDb29yZGluYXRl
ZFN1cmZhY2U6OkhhbmRsZSYpOwogICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhX
ZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2b2lkIHJlbW92ZUltYWdl
QmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0ZUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c1N1cmZhY2VUb2tlbiYpOwotICAgIHZvaWQgc3luY0NhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52YXMo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKLSNlbmRpZgotICAgIHZvaWQgc2V0TGF5ZXJS
ZXBhaW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBpbnQgdmFsdWUpOwotICAg
IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lKCkgY29uc3QgeyByZXR1cm4gbV9zY2VuZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0TGF5ZXJB
bmltYXRpb25zKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMmKTsKKworICAgIHZvaWQgY29tbWl0Q29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOwogICAg
IHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUpCiAgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKICNlbmRpZgog
ICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAKKyAg
ICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rvcik7CisgICAgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKSBj
b25zdCB7IHJldHVybiBtX3NjZW5lLmdldCgpOyB9CisKICAgICAvLyBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmVDbGllbnQgTWV0aG9kcy4KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkZyYW1lUmVhZHkoKSBPVkVSUklERTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkubWVzc2FnZXMuaW4KaW5kZXggNWNlMTI4MzZiZjIzZjBkMGJjNjg3NDc4N2YxNjFiMmE4OTQy
NTg2Yy4uM2E3NjRmMTNjN2EyZTE0NDYyNjFhZjg2NWI3ZmQ2MDBkMWU3ZTY4MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
bWVzc2FnZXMuaW4KQEAgLTE5LDQzICsxOSwyOSBAQAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQogbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgewotICAg
IFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBpZCwgV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllckluZm8gbGF5ZXJJbmZvKQotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbih1
aW50MzJfdCBpZCwgVmVjdG9yPHVpbnQzMl90PiBjaGlsZHJlbikKLSNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi0gICAgU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnModWludDMyX3QgaWQsIFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVycykKLSNlbmRpZgorCisgICAgQ29tbWl0Q29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBzdGF0
ZSkKKworICAgIENyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRzKQor
ICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRzKQorCiAjaWYg
RU5BQkxFKENTU19TSEFERVJTKQogICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlk
LCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbykKICAgICBSZW1v
dmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKICNlbmRpZgotICAgIFNldFJvb3RDb21wb3Np
dGluZ0xheWVyKHVpbnQzMl90IGlkKQotICAgIENyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rv
cjx1aW50MzJfdD4gaWRzKQotICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50
MzJfdD4gaWRzKQotICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50
MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OlN1cmZhY2VV
cGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgVXBkYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViQ29y
ZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxlRm9yTGF5ZXIo
dWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQogICAgIENyZWF0ZVVwZGF0ZUF0bGFz
KHVpbnQzMl90IGF0bGFzSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUg
aGFuZGxlKQogICAgIFJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCiAgICAgQ3Jl
YXRlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQpCiAgICAgVXBkYXRlSW1hZ2VCYWNraW5n
KHVpbnQ2NF90IGltYWdlSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUg
aGFuZGxlKQogICAgIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHModWludDY0X3QgaW1hZ2VJRCkK
ICAgICBSZW1vdmVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCkKLSAgICBEaWRSZW5kZXJG
cmFtZShXZWJDb3JlOjpGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRTaXpl
IGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50UmVjdCBjb3ZlcmVkUmVjdCkKLSAgICBTZXRMYXll
ckFuaW1hdGlvbnModWludDMyX3QgaWQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25z
IGFuaW1hdGlvbnMpCisKICAgICBTZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQogCiAj
aWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIFJlcXVlc3RBbmltYXRpb25G
cmFtZSgpCiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIENyZWF0ZUNh
bnZhcyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52YXNTaXplLCBXZWJDb3JlOjpH
cmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbikKLSAgICBTeW5jQ2FudmFzKHVpbnQzMl90IGlkLCB1
aW50MzJfdCBmcm9udEJ1ZmZlcikKLSAgICBEZXN0cm95Q2FudmFzKHVpbnQzMl90IGlkKQotI2Vu
ZGlmCi0KLSAgICBTZXRMYXllclJlcGFpbnRDb3VudCh1aW50MzJfdCBsYXllcklELCBpbnQgdmFs
dWUpCi0KICAgICBTZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29yZTo6Q29sb3IgY29sb3IpCiB9CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuY3BwCmluZGV4IDdhY2VmMzBiMzJjOTU0MjJlNGRjNTcxYjE1N2M5ZTBjNGUx
ZjMyZjAuLmFiOTVmMmNlYzliNWJkODY5ZjMwMjFiZjQyMjdlOGZiNjA1OTI4MDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmNwcApAQCAtMzAxLDkgKzMwMSwxNSBAQCBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKICAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUpIHsK
ICAgICAgICAgZGlkU3luYyA9IHRydWU7CiAKLSAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemUg
PSByb3VuZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKSk7Ci0g
ICAgICAgIEludFJlY3QgY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciht
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3ZlclJlY3QoKTsKLSAgICAgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
RGlkUmVuZGVyRnJhbWUobV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCksIGNvbnRlbnRz
U2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAgICAgICAgbV9zdGF0ZS5jb250ZW50c1NpemUgPSByb3Vu
ZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKSk7CisgICAgICAg
IG1fc3RhdGUuY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3ZlclJlY3QoKTsKKyAgICAgICAgbV9zdGF0
ZS5zY3JvbGxQb3NpdGlvbiA9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpOworCisg
ICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZShtX3N0YXRlKSk7CisKKyAgICAg
ICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5jbGVhcigpOworICAgICAgICBtX3N0YXRlLmltYWdl
c1RvVXBkYXRlLmNsZWFyKCk7CisKICAgICAgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1
ZTsKICAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKICAgICB9IGVsc2UKQEAgLTM1
Niw2NCArMzYyLDU0IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXpl
Um9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCiAgICAgaWYgKG1fZGlkSW5pdGlhbGl6ZVJv
b3RDb21wb3NpdGluZ0xheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRSb290Q29tcG9z
aXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSkt
PmlkKCkpKTsKKyAgICBtX3N0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyID0gdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpOwogICAgIG1fZGlkSW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0
ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZv
KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllclN0YXRlKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewog
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyU3Rh
dGUoaWQsIGluZm8pKTsKKyAgICBwcmVwcm9jZXNzU3RhdGVDaGFuZ2Uoc3RhdGUpOworICAgIG1f
c3RhdGUubGF5ZXJzVG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkLCBzdGF0ZSkpOwog
fQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyQ2hpbGRyZW4oQ29v
cmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hp
bGRyZW4pCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcHJvY2Vzc1N0YXRlQ2hh
bmdlKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBj
aGlsZHJlbikpOworICAgIHByZXByb2Nlc3NBbmltYXRpb25TdGF0ZUlmTmVlZGVkKHN0YXRlKTsK
KyAgICBwcmVwcm9jZXNzRmlsdGVyT3BlcmF0aW9uc0lmTmVlZGVkKHN0YXRlKTsKIH0KIAotI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNy
ZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1Bs
YXRmb3JtTGF5ZXIpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcHJvY2Vzc0Fu
aW1hdGlvblN0YXRlSWZOZWVkZWQoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRl
KQogewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBHcmFwaGljc1N1cmZhY2VU
b2tlbiB0b2tlbiA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7
Ci0gICAgSW50U2l6ZSBjYW52YXNTaXplID0gY2FudmFzUGxhdGZvcm1MYXllci0+cGxhdGZvcm1M
YXllclNpemUoKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVDYW52YXMoaWQsIGNhbnZhc1NpemUsIHRva2VuKSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jQ2FudmFzKENvb3JkaW5hdGVk
TGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKLXsKLSAgICBt
X3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgdWludDMyX3QgZnJvbnRCdWZmZXIgPSBjYW52
YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKLSAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTeW5jQ2FudmFz
KGlkLCBmcm9udEJ1ZmZlcikpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgaWYgKG1faXNQdXJn
aW5nKQorICAgIGlmICghc3RhdGUuYW5pbWF0aW9uc0NoYW5nZWQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95Q2FudmFzKGlkKSk7
Ci19CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMgPSBz
dGF0ZS5hbmltYXRpb25zOworICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1h
dGlvbnMgPSBhbmltYXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFu
aW1hdGlvbnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYga2V5ZnJhbWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7
CisgICAgICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Vi
a2l0RmlsdGVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBjb25zdCBGaWx0
ZXJBbmltYXRpb25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJB
bmltYXRpb25WYWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7CisgICAgICAgICAgICBjaGVja0N1c3Rv
bUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgIH0K
KyAgICB9CiAjZW5kaWYKLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVy
UmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IHZhbHVlKQotewotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNl
dExheWVyUmVwYWludENvdW50KGlkLCB2YWx1ZSkpOworICAgIHN0YXRlLmFuaW1hdGlvbnMgPSBh
Y3RpdmVBbmltYXRpb25zOwogfQogCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQordm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnByZXByb2Nlc3NGaWx0ZXJPcGVyYXRpb25zSWZOZWVkZWQoQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0g
dHJ1ZTsKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9n
cmFtUHJveGllcyhmaWx0ZXJzKTsKKyAgICBpZiAoIXN0YXRlLmZpbHRlcnNDaGFuZ2VkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKHN0YXRl
LmZpbHRlcnMpOwogI2VuZGlmCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZp
bHRlcnMpKTsKIH0KLSNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKQEAgLTU4NSw3ICs1ODEsOCBAQCBib29sIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZwogICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRs
ZTsKICAgICBpZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCwg
aGFuZGxlKSk7CisKKyAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcihpbWFnZUlELCBjb29yZGluYXRlZFN1cmZhY2UpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtNjY4LDI2ICs2NjUsNiBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwg
dGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHRpbGVSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBk
YXRlSW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlVGls
ZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotewotICAgIGlm
IChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0g
dHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0KIGJv
b2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNl
KQogewogICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZSogd2ViQ29vcmRpbmF0ZWRTdXJmYWNlID0g
c3RhdGljX2Nhc3Q8V2ViQ29vcmRpbmF0ZWRTdXJmYWNlKj4oY29vcmRpbmF0ZWRTdXJmYWNlLmdl
dCgpKTsKQEAgLTcxMCwyNSArNjg3LDYgQEAgV2ViQ29yZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
dmlzaWJsZUNvbnRlbnRzUmVjdDsKIH0KIAotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBH
cmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7Ci0gICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9u
cyA9IGFuaW1hdGlvbnMuZ2V0QWN0aXZlQW5pbWF0aW9ucygpOwotI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0
aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBr
ZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKLSAg
ICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRG
aWx0ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7
IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IEZpbHRlckFu
aW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1h
dGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkpKTsKLSAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3hpZXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKLSAgICAgICAgfQotICAg
IH0KLSNlbmRpZgotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVBbmltYXRp
b25zKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29u
dGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVj
dG9yeVZlY3RvcikKIHsKICAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMg
dGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgpAQCAtODUx
LDcgKzgwOSw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlCiAKIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNv
bG9yKQogewotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OlNldEJhY2tncm91bmRDb2xvcihjb2xvcikpOworICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3N0YXRlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggYjYwNTI4OTA5ZjdlYjliNjcxM2Mx
ZTk5NmE4Y2U4NzAxOTY1MzI0ZS4uNmNkMzQyMjk4OTQ2MzRjNDJjYzA1NDZlYjhiZTQ2MGM1Mjdl
N2I5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJMYXllclRyZWVIb3N0
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllckZhY3RvcnkuaD4KQEAgLTgwLDM5ICs4MSwxMyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsg
c2NoZWR1bGVMYXllckZsdXNoKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2Nh
bGVGYWN0b3JDaGFuZ2VkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChX
ZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdM
YXllckNoYW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNo
YW5nZXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUlu
Zm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRp
bGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdl
YkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29u
dGVudHNSZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpN
ZXNzYWdlRGVjb2RlciYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rv
cnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
c3luY0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGls
ZHJlbihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0aW9u
cyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zJik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgdm9p
ZCBzeW5jTGF5ZXJGaWx0ZXJzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2Vi
Q29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExh
eWVySUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgc3luY0NhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRm
b3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQpIE9WRVJSSURFOwotI2VuZGlmCi0gICAgdmlydHVhbCB2
b2lkIHNldExheWVyUmVwYWludENvdW50KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgaW50
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lE
LCBXZWJDb3JlOjpJbnRQb2ludCYpOwotCi0gICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKLSAgICB2
aXJ0dWFsIGJvb2wgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0KICNpZiBFTkFCTEUoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9u
KCkgT1ZFUlJJREU7CiAjZW5kaWYKQEAgLTEzOSw2ICsxMTQsMTggQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgZmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwogCisgICAgLy8gQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXll
ckNoYW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5n
ZXM7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdl
YkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJD
b3JlOjpJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlJik7CisKKyAgICAvLyBVcGRhdGVBdGxhc0NsaWVudAorICAgIHZpcnR1YWwgYm9vbCBjcmVh
dGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lEKTsKKwogICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CiAg
ICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBo
aWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwogCkBAIC0x
NTYsNiArMTQzLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBsb2NrQW5pbWF0aW9ucygpOwogICAg
IHZvaWQgdW5sb2NrQW5pbWF0aW9ucygpOwogCisgICAgdm9pZCBwcmVwcm9jZXNzU3RhdGVDaGFu
Z2UoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHBy
ZXByb2Nlc3NBbmltYXRpb25TdGF0ZUlmTmVlZGVkKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllclN0YXRlJik7CisgICAgdm9pZCBwcmVwcm9jZXNzRmlsdGVyT3BlcmF0aW9uc0lmTmVl
ZGVkKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisKICAgICB2b2lk
IGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdD4qKTsKIAogICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CkBA
IC0xODEsNiArMTcyLDggQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVy
LiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCiAgICAgT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKIAorICAgIFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBtX3N0YXRlOworCiAgICAgSGFzaFNldDxXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgVmVj
dG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0NyZWF0ZTsKICAgICBW
ZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191353</attachid>
            <date>2013-03-04 16:50:15 -0800</date>
            <delta_ts>2013-03-04 21:58:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108294-20130305094623.patch</filename>
            <type>text/plain</type>
            <size>100080</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBkNTAxNjgwMjkzZGFi
YTg1NmViMzY2ZWNmMTU4MmIzNjExZTFjNi4uNGE3MTY5ODFkN2U0MDc5OTgwMDQ3NzFhYTM0NjM0
MjkxYjUwNzhmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxMy0wMy0wNCAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUgcGVyZm9ybSB2aWEgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODI5NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5IGhhcyB0b28gbWFueSBJUEMgbWVzc2FnZXMgKGUuZy4gU3lu
Y0NhbnZhcyBhbmQKKyAgICAgICAgQ3JlYXRlVGlsZSksIGFuZCB0aGVyZSBpcyBhIGxvbmcgZnVu
Y3Rpb24gY2hhaW4gZnJvbSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgdG8KKyAgICAgICAgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lICg0IGNsYXNzZXMpLgorICAgICAgICBJZiB3ZSB3YW50IHRv
IGFkZCBhIG5ldyBtZXNzYWdlLCB3ZSBuZWVkIHRvIGFkZCBzaW1pbGFyIGZ1bmN0aW9ucyBpbnRv
IDQgY2xhc3Nlcy4KKworICAgICAgICBOb3cgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGhhcyBv
bmx5IG9uZSBJUEMgbWVzc2FnZSBmb3IgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOgorICAgICAg
ICBDb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUuCisgICAgICAgIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcnVuIGFzIGZvbGxvd3M6
CisgICAgICAgIDEuIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBhIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllclN0YXRlLgorICAgICAgICAyLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qg
c3RvcmVzIGFsbCBMYXllclN0YXRlcy4KKyAgICAgICAgMy4gQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0IHNlbmRzIEdyYXBoaWNzU3RhdGUgaW5jbHVkZXMgTGF5ZXJTdGF0ZXMgdG8gQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkKKyAgICAgICAgYXQgdGhlIG1vbWVudCBvZiBmbHVzaGluZyB2
aWEgQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlIG1lc3NhZ2UuCisgICAgICAgIDQuIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBhcHBsaWVzIGFsbCBzdGF0ZSBjaGFuZ2VzIHRvIGxheWVy
cy4KKworICAgICAgICBUaGVyZSBpcyBvbmUgYmlnIGJlaGF2aW9yIGNoYW5nZS4gQWxsIHN0YXRl
cyBjaGFuZ2VzIChlLmcuCisgICAgICAgIFVwZGF0ZVRpbGVzLCBTZXRMYXllckNoaWxkcmVuLCBh
bmQgZXRjLi4pIGFyZSBwZXJmb3JtZWQgYXQgdGhlIHNhbWUgdGltZSwgd2hlbgorICAgICAgICBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBp
cyBjYWxsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBiYXNlZCBvbiBEb25nc3VuZyBIdWFu
ZywgYW5kIE5vYW0ncyB3b3JrIGluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDgyOTQKKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFu
Y2hvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNpYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFj
ZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNU
b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
TWFza0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRGaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9yZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNh
bnZhc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVzZXRMYXllclN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVU
aWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Y3JlYXRlQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpzeW5jQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3VudElmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5
ZXJDaGlsZHJlbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxlc0lmTmVlZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZXNJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZVRp
bGVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Ojphc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Zmx1c2hTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFRpbGVVcGRhdGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSk6
CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSk6CisgICAgICAgIChDb29y
ZGluYXRlZEdyYXBoaWNzU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9T
dXJmYWNlVXBkYXRlSW5mby5oOgorCiAyMDEzLTAzLTA0ICBUb20gU2VwZXogIDx0c2VwZXpAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFhTU0F1ZGl0b3IgYnlwYXNzIHdpdGggLS0+IGNvbW1lbnQg
c3ludGF4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDI1YmM4MTYyOTIwNzZiMTJmNzA5Zjk1ZmFiODc4YzY3MDFm
MGI5MzMuLjVkZjU2Y2NiZWU3ZWJlNDRhOTUzOWJjM2Y2MWQxY2U2YWZjMGU1YmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMy0wMy0wNCAgR3dhbmcgWW9vbiBId2FuZyAgPHJ5dW1p
ZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcGVyZm9y
bSB2aWEgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBjaGFuZ2VzIGluIFdLMi4KKyAg
ICAgICAgMS4gQ2hhbmdlIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IHRvIHVzZSBDb29y
ZGluYXRlZEdyYXBoaWNzU3RhdGUuCisgICAgICAgIDIuIEFkZCBlbmNvZGUvZGVjb2RlIG9mIENv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBpbiBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2Rl
cnMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBiYXNlZCBvbiBEb25nc3VuZyBIdWFuZywgYW5k
IE5vYW0ncyB3b3JrIGluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDgyOTQKKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3Rp
bmcgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHk6CisgICAg
ICAgIChoZWFkZXJzX2Zvcl90eXBlKToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29y
ZUlQQzo6OjplbmNvZGUpOgorICAgICAgICAgICAgRW5jb2RpbmcgVXBkYXRlSW1hZ2VCYWNraW5n
IGFuZCBDcmVhdGVVcGRhdGVBdGxhcyBjYW4gZmFpbCB3aGVuCisgICAgICAgICAgICBlbmNvZGlu
ZyBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBmYWlscywgYnV0IHdlIGRvbid0CisgICAg
ICAgICAgICByZWNvdmVyIGluIHRoZSBjYXNlLgorICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUp
OgorICAgICAgICAoQ29yZUlQQzo6ZW5jb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKToKKyAgICAgICAg
KENvcmVJUEM6OmRlY29kZUxheWVyU3RhdGVJZk5lZWRlZCk6CisgICAgICAgIChDb3JlSVBDKToK
KyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
QXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvbW1pdENv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVl
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5
ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJl
cHJvY2Vzc1N0YXRlQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpwcmVwcm9jZXNzQW5pbWF0aW9uU3RhdGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcHJvY2Vzc0ZpbHRlck9wZXJhdGlvbnNJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBk
YXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAo
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKwogMjAxMy0wMy0wNCAgTWlraGFpbCBQb3pkbnlh
a292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBbV0syXVtFRkxd
IEFkZCBjYWxsYmFja3MgdG8gdGhlIFdLVmlld0NsaWVudCB0byBoYW5kbGUgV2ViIFByb2Nlc3Mg
Y3Jhc2ggYW5kIHJlbGF1bmNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2MDNjZGJkYjI3ODc0MDc1ZGQ0ZmIx
MTZlYzQ4NTYyMjFmYjJhZWU1Li43NWIwMDNiNDkzZTk3MzMxMzQ1YmI2OTdmY2ZjZjE5ZmZhYjA2
OTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQxMTAsOCArNDExMCw4IEBAIHVzZT8oM0RfR1JBUEhJQ1Mp
IHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZS5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggXAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8uaCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1
cmZhY2UuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZFRpbGUuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggNGM0M2FhN2UyMzhkZjVm
MjhmYmVlMzk5MzBiM2EwYzUxOWJiNjlhYS4uYTg5MjY5MDAyZGY1YzM5YzJlZTQzYmVmYjJhNzhk
ODdhY2Y5MjNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAKQEAgLTE5Miw2ICsxOTIsNyBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7CisgICAgbV9sYXll
clN0YXRlLnBvc2l0aW9uQ2hhbmdlZCA9IHRydWU7CiAgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsK
IH0KIApAQCAtMjAxLDYgKzIwMiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHApOworICAgIG1fbGF5ZXJTdGF0ZS5h
bmNob3JQb2ludENoYW5nZWQgPSB0cnVlOwogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7CiB9CiAK
QEAgLTIxMCw2ICsyMTIsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNz
TGF5ZXI6OnNldFNpemUoc2l6ZSk7CisgICAgbV9sYXllclN0YXRlLnNpemVDaGFuZ2VkID0gdHJ1
ZTsKIAogICAgIGlmIChtYXNrTGF5ZXIoKSkKICAgICAgICAgbWFza0xheWVyKCktPnNldFNpemUo
c2l6ZSk7CkBAIC0yMjIsNiArMjI1LDggQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOworICAgIG1fbGF5ZXJT
dGF0ZS50cmFuc2Zvcm1DaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7
CiB9CiAKQEAgLTIzMSw2ICsyMzYsOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmCiAgICAgICAg
IHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKHQpOwor
ICAgIG1fbGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5zZm9ybUNoYW5nZWQgPSB0cnVlOworCiAgICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0KIApAQCAtMjQwLDYgKzI0Nyw5IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGIpOworICAgIG1fbGF5ZXJT
dGF0ZS5wcmVzZXJ2ZXMzRCA9IGI7CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRy
dWU7CisKICAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQogCkBAIC0yNDgsNiArMjU4LDkgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCBiKQog
ICAgIGlmIChtYXNrc1RvQm91bmRzKCkgPT0gYikKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBo
aWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYik7CisgICAgbV9sYXllclN0YXRlLm1hc2tzVG9C
b3VuZHMgPSBiOworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworCiAgICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0KIApAQCAtMjU2LDYgKzI2OSw4IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBiKQogICAgIGlmIChkcmF3
c0NvbnRlbnQoKSA9PSBiKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0
RHJhd3NDb250ZW50KGIpOworICAgIG1fbGF5ZXJTdGF0ZS5kcmF3c0NvbnRlbnQgPSBiOworICAg
IG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOwogCiAgICAgZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOwogfQpAQCAtMjY1LDYgKzI4MCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c1Zpc2libGUoYm9vbCBiKQogICAgIGlmIChjb250ZW50c0FyZVZpc2li
bGUoKSA9PSBiKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNWaXNpYmxlKGIpOworICAgIG1fbGF5ZXJTdGF0ZS5jb250ZW50c1Zpc2libGUgPSBiOworICAg
IG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworCiAgICAgaWYgKG1hc2tMYXllcigp
KQogICAgICAgICBtYXNrTGF5ZXIoKS0+c2V0Q29udGVudHNWaXNpYmxlKGIpOwogCkBAIC0yNzgs
NiArMjk2LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3Bh
cXVlKGJvb2wgYikKICAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQogICAgICAgICBtX21haW5C
YWNraW5nU3RvcmUtPnNldFN1cHBvcnRzQWxwaGEoIWIpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dENvbnRlbnRzT3BhcXVlKGIpOworICAgIG1fbGF5ZXJTdGF0ZS5jb250ZW50c09wYXF1ZSA9IGI7
CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VM
YXllclN0YXRlKCk7CiB9CiAKQEAgLTI4Nyw2ICszMDgsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOworICAgIG1f
bGF5ZXJTdGF0ZS5iYWNrZmFjZVZpc2libGUgPSBiOworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0No
YW5nZWQgPSB0cnVlOworCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC0yOTYs
NiArMzIwLDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoZmxv
YXQgb3BhY2l0eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKKyAgICBtX2xheWVyU3RhdGUub3BhY2l0eSA9IG9wYWNpdHk7CisgICAg
bV9sYXllclN0YXRlLm9wYWNpdHlDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxheWVy
U3RhdGUoKTsKIH0KIApAQCAtMzA1LDYgKzMzMiw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHIpOworICAgIG1fbGF5ZXJT
dGF0ZS5jb250ZW50c1JlY3QgPSByOworICAgIG1fbGF5ZXJTdGF0ZS5jb250ZW50c1JlY3RDaGFu
Z2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtMzU2LDE2
ICszODYsMjMgQEAgYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgbmV3RmlsdGVycykKIHsKICAgICBpZiAoZmlsdGVycygpID09
IG5ld0ZpbHRlcnMpCiAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFHcmFwaGljc0xh
eWVyOjpzZXRGaWx0ZXJzKG5ld0ZpbHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICBkaWRDaGFuZ2VGaWx0ZXJzKCk7Ci0gICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRl
cnMobmV3RmlsdGVycyk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIAogdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBpZiAobV9sYXllckluZm8uc29saWRDb2xvciA9PSBjb2xvcikKKyAg
ICBpZiAobV9sYXllclN0YXRlLnNvbGlkQ29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2xheWVySW5mby5zb2xpZENvbG9yID0gY29sb3I7CisKKyAgICBtX2xheWVyU3RhdGUu
c29saWRDb2xvciA9IGNvbG9yOworICAgIG1fbGF5ZXJTdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCA9
IHRydWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTM3NSw2ICs0MTIs
OSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKGJv
b2wgc2hvdykKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd0Rl
YnVnQm9yZGVyKHNob3cpOworICAgIG1fbGF5ZXJTdGF0ZS5zaG93RGVidWdCb3JkZXJzID0gdHJ1
ZTsKKyAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5n
ZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtMzg0LDYgKzQyNCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRTaG93UmVwYWludENvdW50ZXIoYm9vbCBzaG93KQogICAgICAgICBy
ZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRTaG93UmVwYWludENvdW50ZXIoc2hvdyk7
CisgICAgbV9sYXllclN0YXRlLnNob3dSZXBhaW50Q291bnRlciA9IHRydWU7CisgICAgbV9sYXll
clN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7
CiB9CiAKQEAgLTQyMSw2ICs0NjQsMTAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICBsYXllci0+c2V0Q29udGVu
dHNWaXNpYmxlKGNvbnRlbnRzQXJlVmlzaWJsZSgpKTsKICAgICBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqIGNvb3JkaW5hdGVkTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXll
cik7CiAgICAgY29vcmRpbmF0ZWRMYXllci0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworCisgICAg
bV9sYXllclN0YXRlLm1hc2sgPSBjb29yZGluYXRlZExheWVyLT5pZCgpOworICAgIG1fbGF5ZXJT
dGF0ZS5tYXNrQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9
CiAKQEAgLTQ0Miw2ICs0ODksOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVyKTsKKyAgICBt
X2xheWVyU3RhdGUucmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKGxheWVyKTsKKyAgICBt
X2xheWVyU3RhdGUucmVwbGljYUNoYW5nZWQgPSB0cnVlOwogICAgIGRpZENoYW5nZUxheWVyU3Rh
dGUoKTsKIH0KIApAQCAtNDcxLDYgKzUyMCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRGaXhlZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKQogICAgICAgICByZXR1cm47CiAK
ICAgICBtX2ZpeGVkVG9WaWV3cG9ydCA9IGlzRml4ZWQ7CisgICAgbV9sYXllclN0YXRlLmZpeGVk
VG9WaWV3cG9ydCA9IGlzRml4ZWQ7CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRy
dWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTUwNCwxMSArNTU2LDEw
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4oKQogICAgIGlm
ICghbV9zaG91bGRTeW5jQ2hpbGRyZW4pCiAgICAgICAgIHJldHVybjsKICAgICBtX3Nob3VsZFN5
bmNDaGlsZHJlbiA9IGZhbHNlOwotICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGNoaWxk
SURzOworICAgIG1fbGF5ZXJTdGF0ZS5jaGlsZHJlbkNoYW5nZWQgPSB0cnVlOworICAgIG1fbGF5
ZXJTdGF0ZS5jaGlsZHJlbi5jbGVhcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hp
bGRyZW4oKS5zaXplKCk7ICsraSkKLSAgICAgICAgY2hpbGRJRHMuYXBwZW5kKHRvQ29vcmRpbmF0
ZWRMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKLQotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXll
ckNoaWxkcmVuKG1faWQsIGNoaWxkSURzKTsKKyAgICAgICAgbV9sYXllclN0YXRlLmNoaWxkcmVu
LmFwcGVuZCh0b0Nvb3JkaW5hdGVkTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CiB9CiAKICNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC01MTcsNyArNTY4LDkgQEAgdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKCkKICAgICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMp
CiAgICAgICAgIHJldHVybjsKICAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gZmFsc2U7Ci0gICAg
bV9jb29yZGluYXRvci0+c3luY0xheWVyRmlsdGVycyhtX2lkLCBmaWx0ZXJzKCkpOworCisgICAg
bV9sYXllclN0YXRlLmZpbHRlcnMgPSBHcmFwaGljc0xheWVyOjpmaWx0ZXJzKCk7CisgICAgbV9s
YXllclN0YXRlLmZpbHRlcnNDaGFuZ2VkID0gdHJ1ZTsKIH0KICNlbmRpZgogCkBAIC01MzgsMTQg
KzU5MSwxNSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ltYWdlQmFja2lu
ZygpCiAgICAgICAgIGlmICghbV9jb29yZGluYXRlZEltYWdlQmFja2luZykgewogICAgICAgICAg
ICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZyA9IG1fY29vcmRpbmF0b3ItPmNyZWF0ZUltYWdl
QmFja2luZ0lmTmVlZGVkKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsKICAgICAgICAgICAgIG1f
Y29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmFkZEhvc3QodGhpcyk7Ci0gICAgICAgICAgICBtX2xh
eWVySW5mby5pbWFnZUlEID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+aWQoKTsKKyAgICAg
ICAgICAgIG1fbGF5ZXJTdGF0ZS5pbWFnZUlEID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+
aWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPm1h
cmtEaXJ0eSgpOworICAgICAgICBtX2xheWVyU3RhdGUuaW1hZ2VDaGFuZ2VkID0gdHJ1ZTsKICAg
ICB9IGVsc2UKICAgICAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CiAKLSAgICAv
LyBzeW5jSW1hZ2VCYWNraW5nKCkgY2hhbmdlZCBtX2xheWVySW5mby5pbWFnZUlELgorICAgIC8v
IHN5bmNJbWFnZUJhY2tpbmcoKSBjaGFuZ2VkIG1fbGF5ZXJTdGF0ZS5pbWFnZUlELgogICAgIGRp
ZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtNTU0LDM4ICs2MDgsMzQgQEAgdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKCkKICAgICBpZiAoIW1fc2hvdWxk
U3luY0xheWVyU3RhdGUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Nob3VsZFN5bmNMYXllclN0
YXRlID0gZmFsc2U7Ci0gICAgbV9sYXllckluZm8uZml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWRUb1Zp
ZXdwb3J0KCk7Ci0KLSAgICBtX2xheWVySW5mby5iYWNrZmFjZVZpc2libGUgPSBiYWNrZmFjZVZp
c2liaWxpdHkoKTsKLSAgICBtX2xheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVu
VHJhbnNmb3JtKCk7Ci0gICAgbV9sYXllckluZm8uY29udGVudHNPcGFxdWUgPSBjb250ZW50c09w
YXF1ZSgpOwotICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOwot
ICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpOwotICAgIG1fbGF5
ZXJJbmZvLmNvbnRlbnRzVmlzaWJsZSA9IGNvbnRlbnRzQXJlVmlzaWJsZSgpOwotICAgIG1fbGF5
ZXJJbmZvLm1hc2sgPSB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChtYXNrTGF5ZXIoKSk7Ci0gICAgbV9s
YXllckluZm8ubWFza3NUb0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsKLSAgICBtX2xheWVySW5m
by5vcGFjaXR5ID0gb3BhY2l0eSgpOwotICAgIG1fbGF5ZXJJbmZvLnByZXNlcnZlczNEID0gcHJl
c2VydmVzM0QoKTsKLSAgICBtX2xheWVySW5mby5yZXBsaWNhID0gdG9Db29yZGluYXRlZExheWVy
SUQocmVwbGljYUxheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5zZm9y
bSgpOwotCi0gICAgbV9sYXllckluZm8uYW5jaG9yUG9pbnQgPSBtX2FkanVzdGVkQW5jaG9yUG9p
bnQ7Ci0gICAgbV9sYXllckluZm8ucG9zID0gbV9hZGp1c3RlZFBvc2l0aW9uOwotICAgIG1fbGF5
ZXJJbmZvLnNpemUgPSBtX2FkanVzdGVkU2l6ZTsKLQotICAgIG1fbGF5ZXJJbmZvLnNob3dEZWJ1
Z0JvcmRlcnMgPSBpc1Nob3dpbmdEZWJ1Z0JvcmRlcigpOwotICAgIGlmIChtX2xheWVySW5mby5z
aG93RGVidWdCb3JkZXJzKQotICAgICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKLSAgICBt
X2xheWVySW5mby5zaG93UmVwYWludENvdW50ZXIgPSBpc1Nob3dpbmdSZXBhaW50Q291bnRlcigp
OwogCi0gICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyU3RhdGUobV9pZCwgbV9sYXllckluZm8p
OworICAgIG1fbGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJhbnNmb3Jt
KCk7CisgICAgbV9sYXllclN0YXRlLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOworICAg
IG1fbGF5ZXJTdGF0ZS5tYXNrID0gdG9Db29yZGluYXRlZExheWVySUQobWFza0xheWVyKCkpOwor
ICAgIG1fbGF5ZXJTdGF0ZS5vcGFjaXR5ID0gb3BhY2l0eSgpOworICAgIG1fbGF5ZXJTdGF0ZS5y
ZXBsaWNhID0gdG9Db29yZGluYXRlZExheWVySUQocmVwbGljYUxheWVyKCkpOworICAgIG1fbGF5
ZXJTdGF0ZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKKworICAgIG1fbGF5ZXJTdGF0ZS5hbmNo
b3JQb2ludCA9IG1fYWRqdXN0ZWRBbmNob3JQb2ludDsKKyAgICBtX2xheWVyU3RhdGUucG9zID0g
bV9hZGp1c3RlZFBvc2l0aW9uOworICAgIG1fbGF5ZXJTdGF0ZS5zaXplID0gbV9hZGp1c3RlZFNp
emU7CisKKyAgICBpZiAobV9sYXllclN0YXRlLnNob3dEZWJ1Z0JvcmRlcnMpCisgICAgICAgIHVw
ZGF0ZURlYnVnSW5kaWNhdG9ycygpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0RGVidWdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCkKIHsKLSAg
ICBBU1NFUlQobV9sYXllckluZm8uc2hvd0RlYnVnQm9yZGVycyk7Ci0gICAgbV9sYXllckluZm8u
ZGVidWdCb3JkZXJDb2xvciA9IGNvbG9yOwotICAgIG1fbGF5ZXJJbmZvLmRlYnVnQm9yZGVyV2lk
dGggPSB3aWR0aDsKKyAgICBBU1NFUlQobV9sYXllclN0YXRlLnNob3dEZWJ1Z0JvcmRlcnMpOwor
ICAgIGlmIChtX2xheWVyU3RhdGUuZGVidWdCb3JkZXJDb2xvciAhPSBjb2xvcikgeworICAgICAg
ICBtX2xheWVyU3RhdGUuZGVidWdCb3JkZXJDb2xvciA9IGNvbG9yOworICAgICAgICBtX2xheWVy
U3RhdGUuZGVidWdCb3JkZXJDb2xvckNoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmICht
X2xheWVyU3RhdGUuZGVidWdCb3JkZXJXaWR0aCAhPSB3aWR0aCkgeworICAgICAgICBtX2xheWVy
U3RhdGUuZGVidWdCb3JkZXJXaWR0aCA9IHdpZHRoOworICAgICAgICBtX2xheWVyU3RhdGUuZGVi
dWdCb3JkZXJXaWR0aENoYW5nZWQgPSB0cnVlOworICAgIH0KIH0KIAogdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnN5bmNBbmltYXRpb25zKCkKQEAgLTU5NCw4ICs2NDQsOCBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMoKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX3Nob3VsZFN5bmNBbmltYXRpb25zID0gZmFsc2U7Ci0KLSAgICBtX2Nvb3Jk
aW5hdG9yLT5zZXRMYXllckFuaW1hdGlvbnMobV9pZCwgbV9hbmltYXRpb25zKTsKKyAgICBtX2xh
eWVyU3RhdGUuYW5pbWF0aW9ucyA9IG1fYW5pbWF0aW9uczsKKyAgICBtX2xheWVyU3RhdGUuYW5p
bWF0aW9uc0NoYW5nZWQgPSB0cnVlOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBA
IC02MTIsNyArNjYyLDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52
YXMoKQogICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2Nvb3JkaW5hdG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7Cisg
ICAgQVNTRVJUKG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgbV9sYXllclN0YXRlLmNhbnZh
c0Zyb250QnVmZmVyID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZh
Y2UoKTsKKyAgICBtX2xheWVyU3RhdGUuY2FudmFzU2hvdWxkU3dhcEJ1ZmZlcnMgPSB0cnVlOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNhbnZhc0lmTmVlZGVk
KCkKQEAgLTYyMSw4ICs2NzMsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVz
dHJveUNhbnZhc0lmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1faXNWYWxp
ZENhbnZhcykgewotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5kZXN0cm95Q2FudmFzKG1faWQpOwog
ICAgICAgICBtX2lzVmFsaWRDYW52YXMgPSBmYWxzZTsKKyAgICAgICAgbV9sYXllclN0YXRlLmNh
bnZhc1Rva2VuID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKKyAgICAgICAgbV9sYXllclN0YXRl
LmNhbnZhc0NoYW5nZWQgPSB0cnVlOwogICAgIH0KIAogICAgIG1fcGVuZGluZ0NhbnZhc09wZXJh
dGlvbiAmPSB+RGVzdHJveUNhbnZhczsKQEAgLTYzNSw3ICs2ODgsOSBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQoKQogCiAgICAgQVNTRVJUKG1f
Y2FudmFzUGxhdGZvcm1MYXllcik7CiAgICAgaWYgKCFtX2lzVmFsaWRDYW52YXMpIHsKLSAgICAg
ICAgbV9jb29yZGluYXRvci0+Y3JlYXRlQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXll
cik7CisgICAgICAgIG1fbGF5ZXJTdGF0ZS5jYW52YXNTaXplID0gbV9jYW52YXNQbGF0Zm9ybUxh
eWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOworICAgICAgICBtX2xheWVyU3RhdGUuY2FudmFzVG9r
ZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAg
ICAgIG1fbGF5ZXJTdGF0ZS5jYW52YXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgbV9pc1ZhbGlk
Q2FudmFzID0gdHJ1ZTsKICAgICB9CiAKQEAgLTY2NywxMSArNzIyLDIzIEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCkKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICBzeW5jQ2FudmFzKCk7CiAjZW5kaWYK
KworICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJTdGF0ZSk7
CisgICAgcmVzZXRMYXllclN0YXRlKCk7CisKICAgICAvLyBPbmx5IHVuc2V0IG1fbW92aW5nVmlz
aWJsZVJlY3QgYWZ0ZXIgd2UgaGF2ZSB1cGRhdGVkIHRoZSB2aXNpYmxlIHJlY3QgYWZ0ZXIgdGhl
IGFuaW1hdGlvbiBzdG9wcGVkLgogICAgIGlmICghaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9u
KQogICAgICAgICBtX21vdmluZ1Zpc2libGVSZWN0ID0gZmFsc2U7CiB9CiAKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpyZXNldExheWVyU3RhdGUoKQoreworICAgIG1fbGF5ZXJTdGF0
ZS5jaGFuZ2VNYXNrID0gMDsKKyAgICBtX2xheWVyU3RhdGUudGlsZXNUb0NyZWF0ZS5jbGVhcigp
OworICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvUmVtb3ZlLmNsZWFyKCk7CisgICAgbV9sYXllclN0
YXRlLnRpbGVzVG9VcGRhdGUuY2xlYXIoKTsKK30KKwogYm9vbCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmltYWdlQmFja2luZ1Zpc2libGUoKQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nKTsKQEAgLTY4Niw3ICs3NTMsOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6cmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCkKICAgICBBU1NFUlQobV9jb29y
ZGluYXRvcik7CiAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+cmVtb3ZlSG9zdCh0aGlz
KTsKICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNsZWFyKCk7Ci0gICAgbV9sYXllcklu
Zm8uaW1hZ2VJRCA9IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEOworICAgIG1fbGF5
ZXJTdGF0ZS5pbWFnZUlEID0gSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7CisgICAg
bV9sYXllclN0YXRlLmltYWdlQ2hhbmdlZCA9IHRydWU7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQpAQCAtNjk1LDcgKzc2
Myw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBh
aW50QmVnaW4oKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Um9vdExheWVy
KGJvb2wgaXNSb290KQogewotICAgIG1fbGF5ZXJJbmZvLmlzUm9vdExheWVyID0gaXNSb290Owor
ICAgIG1fbGF5ZXJTdGF0ZS5pc1Jvb3RMYXllciA9IGlzUm9vdDsKKyAgICBtX2xheWVyU3RhdGUu
ZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAg
LTc1MSw4ICs4MjAsMTEgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogCiB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8
SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKIHsKLSAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50
ZXIoKSAmJiAhdXBkYXRlZFJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+
c2V0TGF5ZXJSZXBhaW50Q291bnQoaWQoKSwgaW5jcmVtZW50UmVwYWludENvdW50KCkpOworICAg
IGlmICghaXNTaG93aW5nUmVwYWludENvdW50ZXIoKSB8fCB1cGRhdGVkUmVjdHMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyU3RhdGUucmVwYWludENvdW50ID0gaW5j
cmVtZW50UmVwYWludENvdW50KCk7CisgICAgbV9sYXllclN0YXRlLnJlcGFpbnRDb3VudENoYW5n
ZWQgPSB0cnVlOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVIYXNQZW5kaW5nVGlsZUNyZWF0aW9uKCkKQEAgLTgxMSwyMSArODgzLDMyIEBAIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluCiB7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwogICAg
IEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAgIG1f
Y29vcmRpbmF0b3ItPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVj
dCk7CisKKyAgICBUaWxlQ3JlYXRpb25JbmZvIGNyZWF0aW9uSW5mbzsKKyAgICBjcmVhdGlvbklu
Zm8udGlsZUlEID0gdGlsZUlEOworICAgIGNyZWF0aW9uSW5mby5zY2FsZSA9IHVwZGF0ZUluZm8u
c2NhbGVGYWN0b3I7CisKKyAgICBtX2xheWVyU3RhdGUudGlsZXNUb0NyZWF0ZS5hcHBlbmQoY3Jl
YXRpb25JbmZvKTsKKyAgICB1cGRhdGVUaWxlKHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3Qp
OwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSh1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRS
ZWN0JiB0aWxlUmVjdCkKIHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJU
KG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0gICAgbV9jb29yZGlu
YXRvci0+dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKwor
ICAgIFRpbGVVcGRhdGVJbmZvIHRpbGVVcGRhdGVJbmZvOworICAgIHRpbGVVcGRhdGVJbmZvLnRp
bGVJRCA9IHRpbGVJRDsKKyAgICB0aWxlVXBkYXRlSW5mby50aWxlUmVjdCA9IHRpbGVSZWN0Owor
ICAgIHRpbGVVcGRhdGVJbmZvLnVwZGF0ZUluZm8gPSB1cGRhdGVJbmZvOworICAgIG1fbGF5ZXJT
dGF0ZS50aWxlc1RvVXBkYXRlLmFwcGVuZCh0aWxlVXBkYXRlSW5mbyk7CiB9CiAKIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCkKIHsKICAg
ICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1
c2hpbmdMYXllckNoYW5nZXMoKSB8fCBtX2lzUHVyZ2luZyk7Ci0gICAgbV9jb29yZGluYXRvci0+
cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOworICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvUmVtb3Zl
LmFwcGVuZCh0aWxlSUQpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBk
YXRlQ29udGVudEJ1ZmZlcnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IGU1YWE0N2FmY2MwODAyMGUyMjU5MjkxMDVhOWFj
MGE4ZTU5ZGQzMjcuLjc5MGZlOTZjOGEzNGVkNTZmNzZlMDA0NmZjYzgyOTY3MWIyNzE4MTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmgKQEAgLTIxLDggKzIxLDggQEAKICNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gK
ICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKIAorI2luY2x1ZGUgIkNvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgi
Ci0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJDb29yZGluYXRl
ZFRpbGUuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xh
eWVyLmgiCkBAIC00OCwzMSArNDgsMTIgQEAgY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7
CiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgPSAwOwotCi0gICAgLy8g
Q29vcmRpbmF0ZWRUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwg
Y29uc3QgSW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGlu
YXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBj
b25zdCBJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5h
dGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKSA9IDA7Ci0KICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1h
Z2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5
ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4mKSA9IDA7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYpID0gMDsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxh
eWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgUGxhdGZvcm1MYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhD
b29yZGluYXRlZExheWVySUQpID0gMDsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldExh
eWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50KSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMmKSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5
ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiwgQ29v
cmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JikgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKSA9IDA7CiB9OwogCiBjbGFzcyBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgR3JhcGhpY3NMYXllcgpAQCAtMTkwLDYgKzE3MSw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lkIGRpZENoYW5nZUltYWdlQmFja2luZygpOwog
CisgICAgdm9pZCByZXNldExheWVyU3RhdGUoKTsKICAgICB2b2lkIHN5bmNMYXllclN0YXRlKCk7
CiAgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwogICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7CkBA
IC0yMTYsNyArMTk4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1l
ckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4qKTsKIAogICAgIENvb3JkaW5h
dGVkTGF5ZXJJRCBtX2lkOwotICAgIENvb3JkaW5hdGVkTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwor
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlIG1fbGF5ZXJTdGF0ZTsKICAgICBHcmFw
aGljc0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9jYWNoZWRJbnZlcnNlVHJhbnNmb3JtOwogICAgIEZsb2F0U2l6ZSBtX3BpeGVsQWxp
Z25tZW50T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCA4NjI0NTEzMDQ5MmQ5YmIxMDNiZTBkNDIzMzJiM2Y2
MDA1MGNhMTU4Li5jNTQ2NjdhZjk3ZjllOWZiNzZlMzViMzQzY2I5YmYzYjlmMDkzNmVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
LmNwcApAQCAtMTk2LDU0ICsxOTYsNjMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKQogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJm
YWNlPiBzdXJmYWNlKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUNhbnZh
c0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAg
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotICAgIEFTU0VSVCghbV9zdXJm
YWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkpOworICAgIGlmICghc3RhdGUuY2FudmFzVG9r
ZW4uaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyU3Vy
ZmFjZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOwotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMu
c2V0KGlkLCBjYW52YXNCYWNraW5nU3RvcmUpOworICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMu
c2V0KGxheWVyLCBjYW52YXNCYWNraW5nU3RvcmUpOwogCi0gICAgY2FudmFzQmFja2luZ1N0b3Jl
LT5zZXRHcmFwaGljc1N1cmZhY2Uoc3VyZmFjZSk7CisgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFn
cyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8
IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOworICAgIGNhbnZhc0JhY2tpbmdTdG9y
ZS0+c2V0R3JhcGhpY3NTdXJmYWNlKEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN0YXRlLmNhbnZh
c1NpemUsIHN1cmZhY2VGbGFncywgc3RhdGUuY2FudmFzVG9rZW4pKTsKICAgICBsYXllci0+c2V0
Q29udGVudHNUb01lZGlhKGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7CiB9CiAKLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
dWludDMyX3QgZnJvbnRCdWZmZXIpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3lu
Y0NhbnZhc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7
Ci0gICAgQVNTRVJUKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMoaWQpKTsKIAotICAg
IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQmFja2luZ1N0
b3Jlcy5maW5kKGlkKTsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3Rv
cmU+IGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKKyAgICBpZiAoc3RhdGUuY2FudmFz
Q2hhbmdlZCkgeworICAgICAgICBkZXN0cm95Q2FudmFzSWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsK
KyAgICAgICAgY3JlYXRlQ2FudmFzSWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsKKyAgICB9CiAKLSAg
ICBjYW52YXNCYWNraW5nU3RvcmUtPnN3YXBCdWZmZXJzSWZOZWVkZWQoZnJvbnRCdWZmZXIpOwor
ICAgIGlmIChzdGF0ZS5jYW52YXNTaG91bGRTd2FwQnVmZmVycykgeworICAgICAgICBBU1NFUlQo
bV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhsYXllcikpOworICAgICAgICBTdXJmYWNl
QmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZmlu
ZChsYXllcik7CisgICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9y
ZT4gY2FudmFzQmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOworICAgICAgICBjYW52YXNCYWNraW5n
U3RvcmUtPnN3YXBCdWZmZXJzSWZOZWVkZWQoc3RhdGUuY2FudmFzRnJvbnRCdWZmZXIpOworICAg
IH0KIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ryb3lDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklEIGlkKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ry
b3lDYW52YXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIp
OwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICBBU1NFUlQo
bV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkpOworICAgIGlmIChzdGF0ZS5jYW52
YXNUb2tlbi5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIG1fc3VyZmFjZUJhY2tp
bmdTdG9yZXMucmVtb3ZlKGlkKTsKKyAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShs
YXllcik7CiAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKIH0KICNlbmRpZgogCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6c2V0TGF5ZXJSZXBhaW50Q291bnRJZk5lZWRlZChHcmFwaGljc0xheWVyKiBsYXllciwgY29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyKGxheWVyKS0+c2V0UmVwYWludENvdW50KHZhbHVlKTsKKyAgICBpZiAoIWxheWVyLT5p
c1Nob3dpbmdSZXBhaW50Q291bnRlcigpIHx8ICFzdGF0ZS5yZXBhaW50Q291bnRDaGFuZ2VkKQor
ICAgICAgICByZXR1cm47CisKKyAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVy
KS0+c2V0UmVwYWludENvdW50KHN0YXRlLnJlcGFpbnRDb3VudCk7CiB9CiAKLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkSURzKQordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRyZW5JZk5lZWRlZChHcmFwaGljc0xh
eWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQog
ewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAgICBpZiAoIXN0
YXRlLmNoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgVmVjdG9yPEdyYXBo
aWNzTGF5ZXIqPiBjaGlsZHJlbjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRJ
RHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGNoaWxkSUQgPSBj
aGlsZElEc1tpXTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLmNoaWxkcmVuLnNp
emUoKTsgKytpKSB7CisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBjaGlsZElEID0gc3RhdGUu
Y2hpbGRyZW5baV07CiAgICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNo
aWxkSUQpOwogICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwogICAgIH0KQEAgLTI1MSwx
NCArMjYwLDE1IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxk
cmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjCiB9CiAKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckZpbHRlcnNJZk5lZWRlZChH
cmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUm
IHN0YXRlKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAg
ICBpZiAoIXN0YXRlLmZpbHRlcnNDaGFuZ2VkKQorICAgICAgICByZXR1cm47CiAKICNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCi0gICAgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoZmls
dGVycyk7CisgICAgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoc3RhdGUuZmlsdGVy
cyk7CiAjZW5kaWYKLSAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+
c2V0RmlsdGVycyhzdGF0ZS5maWx0ZXJzKTsKIH0KICNlbmRpZgogCkBAIC0yOTQsNDMgKzMwNCw3
OCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbShpbnQgaWQpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQogCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQg
aWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBsYXllckluZm8pCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNv
bnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBsYXllclN0YXRlKQogewogICAgIEFT
U0VSVChtX3Jvb3RMYXllcklEICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOwogICAgIEdy
YXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKIAotICAgIGxheWVyLT5zZXRSZXBs
aWNhdGVkQnlMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllckluZm8ucmVwbGljYSkpOwot
ICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJJbmZvLm1h
c2spKTsKLQotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8uYW5jaG9yUG9pbnQp
OwotICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllckluZm8ucG9zKTsKLSAgICBsYXllci0+c2V0
U2l6ZShsYXllckluZm8uc2l6ZSk7Ci0KLSAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5m
by50cmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8u
Y2hpbGRyZW5UcmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5
ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxh
eWVySW5mby5jb250ZW50c09wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXll
ckluZm8uY29udGVudHNSZWN0KTsKLSAgICBsYXllci0+c2V0Q29udGVudHNUb1NvbGlkQ29sb3Io
bGF5ZXJJbmZvLnNvbGlkQ29sb3IpOwotICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJ
bmZvLmRyYXdzQ29udGVudCk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZShsYXllcklu
Zm8uY29udGVudHNWaXNpYmxlKTsKLSAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxh
eWVyKS0+c2V0Rml4ZWRUb1ZpZXdwb3J0KGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpOwotICAg
IGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIobGF5ZXJJbmZvLnNob3dEZWJ1Z0JvcmRlcnMpOwot
ICAgIGxheWVyLT5zZXREZWJ1Z0JvcmRlcihsYXllckluZm8uZGVidWdCb3JkZXJDb2xvciwgbGF5
ZXJJbmZvLmRlYnVnQm9yZGVyV2lkdGgpOwotICAgIGxheWVyLT5zZXRTaG93UmVwYWludENvdW50
ZXIobGF5ZXJJbmZvLnNob3dSZXBhaW50Q291bnRlcik7Ci0KLSAgICBpZiAobGF5ZXJJbmZvLmZp
eGVkVG9WaWV3cG9ydCkKKyAgICBpZiAobGF5ZXJTdGF0ZS5wb3NpdGlvbkNoYW5nZWQpCisgICAg
ICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllclN0YXRlLnBvcyk7CisKKyAgICBpZiAobGF5ZXJT
dGF0ZS5hbmNob3JQb2ludENoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChs
YXllclN0YXRlLmFuY2hvclBvaW50KTsKKworICAgIGlmIChsYXllclN0YXRlLnNpemVDaGFuZ2Vk
KQorICAgICAgICBsYXllci0+c2V0U2l6ZShsYXllclN0YXRlLnNpemUpOworCisgICAgaWYgKGxh
eWVyU3RhdGUudHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShs
YXllclN0YXRlLnRyYW5zZm9ybSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5z
Zm9ybUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllclN0
YXRlLmNoaWxkcmVuVHJhbnNmb3JtKTsKKworICAgIGlmIChsYXllclN0YXRlLmNvbnRlbnRzUmVj
dENoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJTdGF0ZS5jb250
ZW50c1JlY3QpOworCisgICAgaWYgKGxheWVyU3RhdGUub3BhY2l0eUNoYW5nZWQpCisgICAgICAg
IGxheWVyLT5zZXRPcGFjaXR5KGxheWVyU3RhdGUub3BhY2l0eSk7CisKKyAgICBpZiAobGF5ZXJT
dGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9Tb2xp
ZENvbG9yKGxheWVyU3RhdGUuc29saWRDb2xvcik7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5kZWJ1
Z0JvcmRlckNvbG9yQ2hhbmdlZCB8fCBsYXllclN0YXRlLmRlYnVnQm9yZGVyV2lkdGhDaGFuZ2Vk
KQorICAgICAgICBsYXllci0+c2V0RGVidWdCb3JkZXIobGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNv
bG9yLCBsYXllclN0YXRlLmRlYnVnQm9yZGVyV2lkdGgpOworCisgICAgaWYgKGxheWVyU3RhdGUu
cmVwbGljYUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihnZXRM
YXllckJ5SURJZkV4aXN0cyhsYXllclN0YXRlLnJlcGxpY2EpKTsKKworICAgIGlmIChsYXllclN0
YXRlLm1hc2tDaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0TWFza0xheWVyKGdldExheWVyQnlJ
RElmRXhpc3RzKGxheWVyU3RhdGUubWFzaykpOworCisgICAgaWYgKGxheWVyU3RhdGUuaW1hZ2VD
aGFuZ2VkKQorICAgICAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKGxheWVyLCBsYXllclN0
YXRlLmltYWdlSUQpOworCisgICAgaWYgKGxheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkKSB7CisgICAg
ICAgIGxheWVyLT5zZXRDb250ZW50c09wYXF1ZShsYXllclN0YXRlLmNvbnRlbnRzT3BhcXVlKTsK
KyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllclN0YXRlLmRyYXdzQ29udGVudCk7
CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1Zpc2libGUobGF5ZXJTdGF0ZS5jb250ZW50c1Zp
c2libGUpOworICAgICAgICBsYXllci0+c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVyU3RhdGUu
YmFja2ZhY2VWaXNpYmxlKTsKKworICAgICAgICAvLyBOZXZlciBjbGlwIHRoZSByb290IGxheWVy
LgorICAgICAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllclN0YXRlLmlzUm9vdExheWVy
ID8gZmFsc2UgOiBsYXllclN0YXRlLm1hc2tzVG9Cb3VuZHMpOworICAgICAgICBsYXllci0+c2V0
UHJlc2VydmVzM0QobGF5ZXJTdGF0ZS5wcmVzZXJ2ZXMzRCk7CisKKyAgICAgICAgdG9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcihsYXllciktPnNldEZpeGVkVG9WaWV3cG9ydChsYXllclN0YXRl
LmZpeGVkVG9WaWV3cG9ydCk7CisgICAgICAgIGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIobGF5
ZXJTdGF0ZS5zaG93RGVidWdCb3JkZXJzKTsKKyAgICAgICAgbGF5ZXItPnNldFNob3dSZXBhaW50
Q291bnRlcihsYXllclN0YXRlLnNob3dSZXBhaW50Q291bnRlcik7CisgICAgfQorCisgICAgaWYg
KGxheWVyU3RhdGUuZml4ZWRUb1ZpZXdwb3J0KQogICAgICAgICBtX2ZpeGVkTGF5ZXJzLmFkZChp
ZCwgbGF5ZXIpOwogICAgIGVsc2UKICAgICAgICAgbV9maXhlZExheWVycy5yZW1vdmUoaWQpOwog
Ci0gICAgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihpZCwgbGF5ZXIsIGxheWVySW5mby5pbWFn
ZUlEKTsKICAgICBwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShsYXllcik7CiAKLSAgICAvLyBO
ZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCi0gICAgbGF5ZXItPnNldE1hc2tzVG9Cb3Vu
ZHMobGF5ZXJJbmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5k
cyk7Ci0gICAgbGF5ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOwotICAgIGxheWVy
LT5zZXRQcmVzZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOworICAgIC8vIEFwcGx5IE9w
ZXJhdGlvbnMuCisgICAgc2V0TGF5ZXJDaGlsZHJlbklmTmVlZGVkKGxheWVyLCBsYXllclN0YXRl
KTsKKyAgICB1cGRhdGVUaWxlc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisgICAgc2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQobGF5ZXIsIGxheWVy
U3RhdGUpOworI2VuZGlmCisgICAgc2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQobGF5ZXIsIGxh
eWVyU3RhdGUpOworICAgIHN5bmNDYW52YXNJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7Cisg
ICAgc2V0TGF5ZXJSZXBhaW50Q291bnRJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7CiB9CiAK
IEdyYXBoaWNzTGF5ZXIqIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Z2V0TGF5ZXJCeUlESWZF
eGlzdHMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQpAQCAtMzY1LDcgKzQxMCw3IEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5
ZXJJRCkKICAgICBtX2JhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKICAgICBtX2Zp
eGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShsYXllcklEKTsKKyAgICBtX3N1cmZhY2VC
YWNraW5nU3RvcmVzLnJlbW92ZShsYXllci5nZXQoKSk7CiAjZW5kaWYKIH0KIApAQCAtNDE5LDM2
ICs0NjQsNTYgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlc2V0QmFja2luZ1N0
b3JlU2l6ZVRvTGF5ZXJTaXplKEdyYXBoaWNzTGF5ZXIqIGcKICAgICBtX2JhY2tpbmdTdG9yZXNX
aXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OmNyZWF0ZVRpbGVzSWZOZWVkZWQoR3JhcGhpY3NMYXllciogbGF5ZXIsIGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBpZiAoc3RhdGUudGlsZXNUb0NyZWF0ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldChsYXllcik7CiAgICAg
QVNTRVJUKGJhY2tpbmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKHRpbGVJ
RCwgc2NhbGUpOworCisgICAgVmVjdG9yPFRpbGVDcmVhdGlvbkluZm8+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBzdGF0ZS50aWxlc1RvQ3JlYXRlLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFRpbGVD
cmVhdGlvbkluZm8+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0YXRlLnRpbGVzVG9DcmVhdGUuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUo
aXQtPnRpbGVJRCwgaXQtPnNjYWxlKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlc0lmTmVlZGVkKEdy
YXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7
CisgICAgaWYgKHN0YXRlLnRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1f
YmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwogICAgIGlmICghYmFja2luZ1N0b3JlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBiYWNraW5nU3RvcmUtPnJlbW92ZVRpbGUodGlsZUlEKTsKKyAgICBW
ZWN0b3I8dWludDMyX3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdGF0ZS50aWxlc1RvUmVtb3Zl
LmVuZCgpOworICAgIGZvciAoVmVjdG9yPHVpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBz
dGF0ZS50aWxlc1RvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYmFj
a2luZ1N0b3JlLT5yZW1vdmVUaWxlKCppdCk7CisKICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVu
ZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjp1cGRhdGVUaWxlc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgY3JlYXRlVGlsZXNJZk5lZWRl
ZChsYXllciwgc3RhdGUpOworICAgIHJlbW92ZVRpbGVzSWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsK
KworICAgIGlmIChzdGF0ZS50aWxlc1RvVXBkYXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBt
X2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKICAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKIAot
ICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHVwZGF0ZS5hdGxh
c0lEKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7CisgICAgVmVjdG9yPFRp
bGVVcGRhdGVJbmZvPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RhdGUudGlsZXNUb1VwZGF0ZS5l
bmQoKTsKKyAgICBmb3IgKFZlY3RvcjxUaWxlVXBkYXRlSW5mbz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gc3RhdGUudGlsZXNUb1VwZGF0ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvID0gaXQtPnVwZGF0
ZUluZm87CiAKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGUuc291
cmNlUmVjdCwgdXBkYXRlLnRpbGVSZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZS5vZmZzZXQpOwotICAg
IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKKyAg
ICAgICAgU3VyZmFjZU1hcDo6aXRlcmF0b3Igc3VyZmFjZUl0ID0gbV9zdXJmYWNlcy5maW5kKHN1
cmZhY2VVcGRhdGVJbmZvLmF0bGFzSUQpOworICAgICAgICBBU1NFUlQoc3VyZmFjZUl0ICE9IG1f
c3VyZmFjZXMuZW5kKCkpOworCisgICAgICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZShpdC0+
dGlsZUlELCBzdXJmYWNlVXBkYXRlSW5mby51cGRhdGVSZWN0LCBpdC0+dGlsZVJlY3QsIHN1cmZh
Y2VJdC0+dmFsdWUsIHN1cmZhY2VVcGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpOworICAgICAgICBt
X2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CisgICAg
fQogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2Up
CkBAIC01MDQsMTAgKzU2OSwxMCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVt
b3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZwogICAgIG1fcmVs
ZWFzZWRJbWFnZUJhY2tpbmdzLmFwcGVuZChtX2ltYWdlQmFja2luZ3MudGFrZShpbWFnZUlEKSk7
CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphc3NpZ25JbWFnZUJhY2tpbmdU
b0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgR3JhcGhpY3NMYXllciogbGF5ZXIsIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjphc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCi0gICAgaWYgKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMoaWQpKQorICAgIGlm
IChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGxheWVyKSkKICAgICAgICAgcmV0dXJu
OwogI2VuZGlmCiAKQEAgLTUzNCwxMyArNTk5LDI0IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpCiAgICAgbV9iYWNr
aW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpmbHVzaExheWVyQ2hhbmdlcyhjb25zdCBGbG9hdFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRTY2VuZVN0
YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgbV9yZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKKyAgICBtX3JlbmRl
cmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHN0YXRlLnNjcm9sbFBvc2l0aW9uOwogCiAgICAg
Ly8gU2luY2UgdGhlIGZyYW1lIGhhcyBub3cgYmVlbiByZW5kZXJlZCwgd2UgY2FuIHNhZmVseSB1
bmxvY2sgdGhlIGFuaW1hdGlvbnMgdW50aWwgdGhlIG5leHQgbGF5b3V0LgogICAgIHNldEFuaW1h
dGlvbnNMb2NrZWQoZmFsc2UpOwogCisgICAgaWYgKHN0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVy
ICE9IG1fcm9vdExheWVySUQpCisgICAgICAgIHNldFJvb3RMYXllcklEKHN0YXRlLnJvb3RDb21w
b3NpdGluZ0xheWVyKTsKKworICAgIGlmIChzdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgIT0gbV9iYWNr
Z3JvdW5kQ29sb3IpCisgICAgICAgIHNldEJhY2tncm91bmRDb2xvcihzdGF0ZS5iYWNrZ3JvdW5k
Q29sb3IpOworCisgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPENvb3JkaW5hdGVkTGF5ZXJJ
RCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU+ID4gTGF5ZXJVcGRhdGVQYWlyVmVjdG9y
OworICAgIExheWVyVXBkYXRlUGFpclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RhdGUu
bGF5ZXJzVG9VcGRhdGUuZW5kKCk7CisgICAgZm9yIChMYXllclVwZGF0ZVBhaXJWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gc3RhdGUubGF5ZXJzVG9VcGRhdGUuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICBzZXRMYXllclN0YXRlKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisK
ICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKICAg
ICBjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpOwogICAgIHJlbW92ZVJlbGVh
c2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7CkBAIC02MTYsMTIgKzY5MiwxNiBAQCB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKICAgICAgICAgbV9j
bGllbnQtPnB1cmdlQmFja2luZ1N0b3JlcygpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3Qg
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQoR3JhcGhpY3NMYXllciogZ3Jh
cGhpY3NMYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQog
ewotICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBsYXllciA9IHRvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIobGF5ZXJCeUlEKGlkKSk7CisgICAgaWYgKCFzdGF0ZS5hbmltYXRpb25z
Q2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIqIGxheWVyID0gdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihncmFwaGljc0xheWVyKTsK
KwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFu
aW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZy
YW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5r
ZXlmcmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLmFuaW1hdGlvbnMu
YW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiBrZXlmcmFtZXMgPSBzdGF0ZS5hbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlm
cmFtZXMoKTsKICAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRGaWx0ZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKQEAgLTYzMCw3ICs3MTAs
NyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0g
ICAgbGF5ZXItPnNldEFuaW1hdGlvbnMoYW5pbWF0aW9ucyk7CisgICAgbGF5ZXItPnNldEFuaW1h
dGlvbnMoc3RhdGUuYW5pbWF0aW9ucyk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4IDljOTIxYTc0ZjZj
M2YwZDgzNzFjMGI5MjlmNzgxMmI0ODljZmY1ZDEuLmVkNWRiZTAxZWZiN2EzOTNhNDJlOWY5OTU5
YjhiMWI4ZTFiMzNiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lX2gKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNs
dWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKQEAgLTQ2LDcgKzQ2
LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU7Ci1jbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKIGNsYXNzIEN1c3RvbUZpbHRlclByb2dy
YW07CiBjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbzsKIGNsYXNzIFRleHR1cmVNYXBwZXJM
YXllcjsKQEAgLTY0LDMxICs2MywxMSBAQCBwdWJsaWM6CiAKIGNsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU+LCBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3Ry
dWN0IFRpbGVVcGRhdGUgewotICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3Q7Ci0gICAgICAgIElu
dFJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7Ci0gICAgICAgIEludFBv
aW50IG9mZnNldDsKLSAgICAgICAgVGlsZVVwZGF0ZShjb25zdCBJbnRSZWN0JiBzb3VyY2UsIGNv
bnN0IEludFJlY3QmIHRpbGUsIHVpbnQzMl90IGF0bGFzLCBjb25zdCBJbnRQb2ludCYgbmV3T2Zm
c2V0KQotICAgICAgICAgICAgOiBzb3VyY2VSZWN0KHNvdXJjZSkKLSAgICAgICAgICAgICwgdGls
ZVJlY3QodGlsZSkKLSAgICAgICAgICAgICwgYXRsYXNJRChhdGxhcykKLSAgICAgICAgICAgICwg
b2Zmc2V0KG5ld09mZnNldCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsKICAgICBleHBs
aWNpdCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xp
ZW50Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CiAgICAgdm9p
ZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZs
b2F0LCBjb25zdCBGbG9hdFJlY3QmLCBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzID0gMCk7CiAg
ICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7
CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7Ci0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklELCBjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KTsKLSAgICB2
b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7
Ci0gICAgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAg
ICB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVl
KTsKLQogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYpOwogCkBAIC05NywzMSArNzYsMjMgQEAgcHVibGljOgogICAgIHZvaWQg
cHVyZ2VHTFJlc291cmNlcygpOwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOwogCisgICAgdm9p
ZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOworCiAg
ICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsK
ICAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYp
OwotICAgIHZvaWQgc2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lk
IHNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRp
bmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJT
KQotICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCisKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAg
dm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKSBjb25zdDsKICAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0o
aW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwogICAgIHZvaWQgcmVtb3Zl
Q3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwogI2VuZGlmCiAKLSAgICB2b2lkIGNyZWF0ZVRp
bGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKTsKLSAg
ICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwot
ICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3Qg
YXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKICAgICB2b2lkIHJlbW92
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1c2hMYXllckNoYW5n
ZXMoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogICAgIHZvaWQgY3JlYXRlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgdXBkYXRlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRTdXJmYWNlPik7CiAgICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKICAgICB2b2lkIHNl
dEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgQ29sb3ImKTsKICAgICB2b2lkIHNldERyYXdzQmFja2dyb3VuZChib29sIGVuYWJsZSkgeyBt
X3NldERyYXdzQmFja2dyb3VuZCA9IGVuYWJsZTsgfQpAQCAtMTMxLDYgKzEwMiwyMyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICB2b2lkIHNldFJvb3RMYXllcklEKENvb3JkaW5h
dGVkTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHNldExheWVy
Q2hpbGRyZW5JZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVzSWZOZWVkZWQoR3JhcGhpY3NMYXll
ciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBjcmVh
dGVUaWxlc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZSYpOworICAgIHZvaWQgcmVtb3ZlVGlsZXNJZk5lZWRlZChHcmFwaGljc0xheWVy
KiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgdm9pZCBzZXRMYXllckZpbHRlcnNJZk5lZWRlZChHcmFwaGljc0xheWVy
KiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyNlbmRpZgorICAgIHZv
aWQgc2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQoR3JhcGhpY3NMYXllciosIGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisg
ICAgdm9pZCBjcmVhdGVDYW52YXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHN5bmNDYW52YXNJZk5lZWRlZChH
cmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAg
ICB2b2lkIGRlc3Ryb3lDYW52YXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyNlbmRpZgorICAgIHZvaWQgc2V0TGF5ZXJSZXBh
aW50Q291bnRJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyU3RhdGUmKTsKKwogICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChDb29yZGluYXRl
ZExheWVySUQgaWQpCiAgICAgewogICAgICAgICBBU1NFUlQobV9sYXllcnMuY29udGFpbnMoaWQp
KTsKQEAgLTE1OSw3ICsxNDcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlTGF5ZXIoQ29v
cmRpbmF0ZWRMYXllcklEKTsKICAgICB2b2lkIGRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJ
RCk7CiAKLSAgICB2b2lkIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoQ29vcmRpbmF0ZWRMYXll
cklELCBHcmFwaGljc0xheWVyKiwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9p
ZCBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBoaWNzTGF5ZXIqLCBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKICAgICB2b2lkIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVl
ZGVkKCk7CiAgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKICAgICB2b2lkIGNvbW1pdFBlbmRp
bmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7CkBAIC0xODUsNyArMTczLDcgQEAgcHJpdmF0ZToK
ICAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBtX2JhY2tpbmdT
dG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnM7CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBSZWZQdHI8VGV4dHVyZU1hcHBl
clN1cmZhY2VCYWNraW5nU3RvcmU+ID4gU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8R3JhcGhpY3NMYXllciosIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJh
Y2tpbmdTdG9yZT4gPiBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOwogICAgIFN1cmZhY2VCYWNraW5n
U3RvcmVNYXAgbV9zdXJmYWNlQmFja2luZ1N0b3JlczsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Zjg1ODQzNTE2ODJiMjQ0NGY5MGYwNDdiYWQzZDU5N2JkZDIyNjBiNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZV9oCisj
ZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRpb24u
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
IlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
KworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgi
CisjZW5kaWYKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorI2luY2x1ZGUgIkdyYXBoaWNz
U3VyZmFjZVRva2VuLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgdWludDMyX3QgQ29vcmRpbmF0ZWRM
YXllcklEOworZW51bSB7IEludmFsaWRDb29yZGluYXRlZExheWVySUQgPSAwIH07CisKK3R5cGVk
ZWYgdWludDY0X3QgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKK2VudW0geyBJbnZhbGlkQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCA9IDAgfTsKKworc3RydWN0IFRpbGVVcGRhdGVJbmZvIHsK
KyAgICB1aW50MzJfdCB0aWxlSUQ7CisgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAgICBXZWJDb3Jl
OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworfTsKKworc3RydWN0IFRpbGVDcmVhdGlv
bkluZm8geworICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICBmbG9hdCBzY2FsZTsKK307CisKK3N0
cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSB7CisgICAgdW5pb24geworICAgICAg
ICBzdHJ1Y3QgeworICAgICAgICAgICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQ6IDE7CisgICAgICAg
ICAgICBib29sIGFuY2hvclBvaW50Q2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgc2l6ZUNo
YW5nZWQ6IDE7CisgICAgICAgICAgICBib29sIHRyYW5zZm9ybUNoYW5nZWQ6IDE7CisgICAgICAg
ICAgICBib29sIGNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wg
Y29udGVudHNSZWN0Q2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgb3BhY2l0eUNoYW5nZWQ6
IDE7CisgICAgICAgICAgICBib29sIHNvbGlkQ29sb3JDaGFuZ2VkOiAxOworICAgICAgICAgICAg
Ym9vbCBkZWJ1Z0JvcmRlckNvbG9yQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgZGVidWdC
b3JkZXJXaWR0aENoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29sIHJlcGxpY2FDaGFuZ2VkOiAx
OworICAgICAgICAgICAgYm9vbCBtYXNrQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgaW1h
Z2VDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBmbGFnc0NoYW5nZWQ6IDE7CisgICAgICAg
ICAgICBib29sIGFuaW1hdGlvbnNDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBmaWx0ZXJz
Q2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkOiAxOworICAgICAg
ICAgICAgYm9vbCByZXBhaW50Q291bnRDaGFuZ2VkIDogMTsKKyAgICAgICAgICAgIGJvb2wgY2Fu
dmFzQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgY2FudmFzU2hvdWxkU3dhcEJ1ZmZlcnM6
IDE7CisgICAgICAgIH07CisgICAgICAgIHVuc2lnbmVkIGNoYW5nZU1hc2s7CisgICAgfTsKKyAg
ICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBib29sIGNvbnRlbnRzT3Bh
cXVlIDogMTsKKyAgICAgICAgICAgIGJvb2wgZHJhd3NDb250ZW50IDogMTsKKyAgICAgICAgICAg
IGJvb2wgY29udGVudHNWaXNpYmxlIDogMTsKKyAgICAgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNp
YmxlIDogMTsKKyAgICAgICAgICAgIGJvb2wgbWFza3NUb0JvdW5kcyA6IDE7CisgICAgICAgICAg
ICBib29sIHByZXNlcnZlczNEIDogMTsKKyAgICAgICAgICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7
CisgICAgICAgICAgICBib29sIGZpeGVkVG9WaWV3cG9ydCA6IDE7CisgICAgICAgICAgICBib29s
IHNob3dEZWJ1Z0JvcmRlcnMgOiAxOworICAgICAgICAgICAgYm9vbCBzaG93UmVwYWludENvdW50
ZXIgOiAxOworICAgICAgICB9OworICAgICAgICB1bnNpZ25lZCBmbGFnczsKKyAgICB9OworCisg
ICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUoKQorICAgICAgICA6IGNoYW5nZU1hc2so
MCkKKyAgICAgICAgLCBjb250ZW50c09wYXF1ZShmYWxzZSkKKyAgICAgICAgLCBkcmF3c0NvbnRl
bnQoZmFsc2UpCisgICAgICAgICwgY29udGVudHNWaXNpYmxlKHRydWUpCisgICAgICAgICwgYmFj
a2ZhY2VWaXNpYmxlKHRydWUpCisgICAgICAgICwgbWFza3NUb0JvdW5kcyhmYWxzZSkKKyAgICAg
ICAgLCBwcmVzZXJ2ZXMzRChmYWxzZSkKKyAgICAgICAgLCBpc1Jvb3RMYXllcihmYWxzZSkKKyAg
ICAgICAgLCBmaXhlZFRvVmlld3BvcnQoZmFsc2UpCisgICAgICAgICwgc2hvd0RlYnVnQm9yZGVy
cyhmYWxzZSkKKyAgICAgICAgLCBzaG93UmVwYWludENvdW50ZXIoZmFsc2UpCisgICAgICAgICwg
b3BhY2l0eSgwKQorICAgICAgICAsIGRlYnVnQm9yZGVyV2lkdGgoMCkKKyAgICAgICAgLCByZXBs
aWNhKEludmFsaWRDb29yZGluYXRlZExheWVySUQpCisgICAgICAgICwgbWFzayhJbnZhbGlkQ29v
cmRpbmF0ZWRMYXllcklEKQorICAgICAgICAsIGltYWdlSUQoSW52YWxpZENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQpCisgICAgICAgICwgY2FudmFzRnJvbnRCdWZmZXIoMCkKKyAgICB7CisgICAg
fQorCisgICAgRmxvYXRQb2ludCBwb3M7CisgICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50Owor
ICAgIEZsb2F0U2l6ZSBzaXplOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKKyAgICBJbnRSZWN0
IGNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBvcGFjaXR5OworICAgIENvbG9yIHNvbGlkQ29sb3I7
CisgICAgQ29sb3IgZGVidWdCb3JkZXJDb2xvcjsKKyAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRo
OworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7
CisjZW5kaWYKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRpb25zOworICAgIFZl
Y3Rvcjx1aW50MzJfdD4gY2hpbGRyZW47CisgICAgVmVjdG9yPFRpbGVDcmVhdGlvbkluZm8+IHRp
bGVzVG9DcmVhdGU7CisgICAgVmVjdG9yPHVpbnQzMl90PiB0aWxlc1RvUmVtb3ZlOworICAgIENv
b3JkaW5hdGVkTGF5ZXJJRCByZXBsaWNhOworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtYXNrOwor
ICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRDsKKworICAgIHVuc2lnbmVkIHJl
cGFpbnRDb3VudDsKKyAgICBWZWN0b3I8VGlsZVVwZGF0ZUluZm8+IHRpbGVzVG9VcGRhdGU7CisK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBJbnRTaXplIGNhbnZhc1NpemU7CisgICAg
R3JhcGhpY3NTdXJmYWNlVG9rZW4gY2FudmFzVG9rZW47CisgICAgdWludDMyX3QgY2FudmFzRnJv
bnRCdWZmZXI7CisjZW5kaWYKK307CisKK3N0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUg
eworICAgIHVpbnQzMl90IHJvb3RDb21wb3NpdGluZ0xheWVyOworICAgIENvbG9yIGJhY2tncm91
bmRDb2xvcjsKKyAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uOworICAgIEludFNpemUgY29u
dGVudHNTaXplOworICAgIEludFJlY3QgY292ZXJlZFJlY3Q7CisKKyAgICBWZWN0b3I8c3RkOjpw
YWlyPENvb3JkaW5hdGVkTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU+ID4g
bGF5ZXJzVG9VcGRhdGU7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiA+ID4gaW1hZ2VzVG9VcGRhdGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAppbmRleCA1
YjViNTdhNmVjYjEwMWVmNzViMjkxOTFiNTc1MDdiZWRkYTJmNzY1Li4zNjllMjM5ZjliMGEyOThj
ZDlmY2NlNDIzZGE0ZDJmMWU1YTIxYTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaApAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBD
b29yZGluYXRlZEltYWdlQmFja2luZ19oCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzU3RhdGUuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNs
dWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXll
ckluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZExheWVySW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwZmEyYTEyZWQzZjQ2YzA4NDIzYjRiOWM0ZGM5MTY1NjlmMDM4Yjc2Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllckluZm9faAotI2RlZmluZSBDb29yZGlu
YXRlZExheWVySW5mb19oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNs
dWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6
ZS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgdWludDMyX3QgQ29vcmRpbmF0
ZWRMYXllcklEOwotZW51bSB7IEludmFsaWRDb29yZGluYXRlZExheWVySUQgPSAwIH07Ci0KLXR5
cGVkZWYgdWludDY0X3QgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKLWVudW0geyBJbnZhbGlk
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCA9IDAgfTsKLQotLy8gTk9URTogQ29vcmRpbmF0ZWRM
YXllckluZm8gc2hvdWxkIG9ubHkgdXNlIFBPRCB0eXBlcywgYXMgdG8gbWFrZSBzZXJpYWxpemF0
aW9uIGZhc3Rlci4KLXN0cnVjdCBDb29yZGluYXRlZExheWVySW5mbyB7Ci0gICAgQ29vcmRpbmF0
ZWRMYXllckluZm8oKQotICAgICAgICA6IHJlcGxpY2EoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJ
RCkKLSAgICAgICAgLCBtYXNrKEludmFsaWRDb29yZGluYXRlZExheWVySUQpCi0gICAgICAgICwg
aW1hZ2VJRChJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkKLSAgICAgICAgLCBvcGFj
aXR5KDApCi0gICAgICAgICwgZGVidWdCb3JkZXJXaWR0aCgwKQotICAgICAgICAsIGZsYWdzKDAp
IHsgfQotCi0gICAgQ29vcmRpbmF0ZWRMYXllcklEIHJlcGxpY2E7Ci0gICAgQ29vcmRpbmF0ZWRM
YXllcklEIG1hc2s7Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEOwotCi0g
ICAgRmxvYXRQb2ludCBwb3M7Ci0gICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwotICAgIEZs
b2F0U2l6ZSBzaXplOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKLSAgICBJbnRSZWN0IGNvbnRl
bnRzUmVjdDsKLSAgICBmbG9hdCBvcGFjaXR5OwotICAgIENvbG9yIHNvbGlkQ29sb3I7Ci0gICAg
Q29sb3IgZGVidWdCb3JkZXJDb2xvcjsKLSAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOwotCi0g
ICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgYm9vbCBjb250ZW50c09w
YXF1ZSA6IDE7Ci0gICAgICAgICAgICBib29sIGRyYXdzQ29udGVudCA6IDE7Ci0gICAgICAgICAg
ICBib29sIGNvbnRlbnRzVmlzaWJsZSA6IDE7Ci0gICAgICAgICAgICBib29sIGJhY2tmYWNlVmlz
aWJsZSA6IDE7Ci0gICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwotICAgICAgICAg
ICAgYm9vbCBwcmVzZXJ2ZXMzRCA6IDE7Ci0gICAgICAgICAgICBib29sIGlzUm9vdExheWVyOiAx
OwotICAgICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOwotICAgICAgICAgICAgYm9v
bCBzaG93RGVidWdCb3JkZXJzIDogMTsKLSAgICAgICAgICAgIGJvb2wgc2hvd1JlcGFpbnRDb3Vu
dGVyIDogMTsKLSAgICAgICAgfTsKLSAgICAgICAgdW5zaWduZWQgZmxhZ3M7Ci0gICAgfTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJJbmZvX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJm
YWNlVXBkYXRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKaW5kZXggNmFiMzg0YTExZWFhNWVhMjU0
MDgxM2M3MDI1ZTVmYzhjMTdkMzkxMC4uNWFmMDY5YTJiZDdhN2E3ZTJlZTc3YWM1YjBjMjk4Mzgz
Y2NlYWJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgK
QEAgLTIzLDEyICsyMywxMCBAQAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbyB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU3VyZmFjZVVwZGF0ZUluZm8pOwogCiBwdWJsaWM6CiAgICAgU3VyZmFjZVVw
ZGF0ZUluZm8oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0
Mi9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5w
eQppbmRleCBiNjkwYTAxODliZTFmMWJlYmVlNDE3ZjA1ZTJiOWI4YmQzMGFmY2M4Li5mNDY1Yzdm
MzAxYmJjOTFkM2Q4MzhiYmE2ZTk0ZTFiYWQ5NTk3OGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdDIvU2Ny
aXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CkBAIC0zOTgsNyArMzk4LDcgQEAgZGVmIGhlYWRlcnNf
Zm9yX3R5cGUodHlwZSk6CiAgICAgc3BlY2lhbF9jYXNlcyA9IHsKICAgICAgICAgJ1dURjo6U3Ry
aW5nJzogWyc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpDb21w
b3NpdGlvblVuZGVybGluZSc6IFsnPFdlYkNvcmUvRWRpdG9yLmg+J10sCi0gICAgICAgICdXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQnOiBbJzxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZv
Lmg+J10sCisgICAgICAgICdXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSc6
IFsnPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg+J10sCiAgICAgICAgICdXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsJzogWyc8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPiddLAog
ICAgICAgICAnV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMnOiBbJzxXZWJDb3JlL0dy
YXBoaWNzTGF5ZXJBbmltYXRpb24uaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OktleWZyYW1lVmFs
dWVMaXN0JzogWyc8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+J10sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
QXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAppbmRleCA1YTA2ZDEx
NjhjMjI3NjAyY2EyMGMxYmMyODBkMTc2OTcyNmEwNTg4Li44MGM3MjU5OGUwYWQ4MDA5NzNiYzg5
YjM5NTY2NzViMTI3N2U4ZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTI5LDEwICsyOSwxMSBAQAogI2luY2x1ZGUg
IkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogCiAjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIldlYkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQW5pbWF0aW9u
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRp
bmF0ZWRMYXllckluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludDNELmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JZGVudGl0
eVRyYW5zZm9ybU9wZXJhdGlvbi5oPgpAQCAtNzMsOSArNzQsNyBAQAogI2VuZGlmCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7Ci0jZW5kaWYKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCkBAIC04MTUsMjQg
KzgxNCwyNjEgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRv
a2VuPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2QKIH0KICNlbmRpZgogCi12b2lkIEFy
Z3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRMYXllckluZm8+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgY29vcmRpbmF0ZWRMYXllcklu
Zm8pCit2b2lkIEFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjplbmNvZGUoQXJndW1l
bnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgc3VyZmFjZVVwZGF0
ZUluZm8pCiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZExheWVySW5mbz46
OmVuY29kZShlbmNvZGVyLCBjb29yZGluYXRlZExheWVySW5mbyk7CisgICAgU2ltcGxlQXJndW1l
bnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmVuY29kZShlbmNvZGVyLCBzdXJmYWNlVXBkYXRl
SW5mbyk7CiB9CiAKLWJvb2wgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZExheWVySW5mbz46OmRl
Y29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBjb29y
ZGluYXRlZExheWVySW5mbykKK2Jvb2wgQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46
OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFN1cmZhY2VVcGRhdGVJbmZvJiBzdXJm
YWNlVXBkYXRlSW5mbykKIHsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxDb29yZGlu
YXRlZExheWVySW5mbz46OmRlY29kZShkZWNvZGVyLCBjb29yZGluYXRlZExheWVySW5mbyk7Cisg
ICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUo
ZGVjb2Rlciwgc3VyZmFjZVVwZGF0ZUluZm8pOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8U3Vy
ZmFjZVVwZGF0ZUluZm8+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBT
dXJmYWNlVXBkYXRlSW5mbyYgc3VyZmFjZVVwZGF0ZUluZm8pCit2b2lkIEFyZ3VtZW50Q29kZXI8
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgU2ltcGxlQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmVuY29kZShlbmNvZGVy
LCBzdXJmYWNlVXBkYXRlSW5mbyk7CisgICAgZW5jb2RlciA8PCBzdGF0ZS5jaGFuZ2VNYXNrOwor
CisgICAgaWYgKHN0YXRlLmZsYWdzQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5m
bGFnczsKKworICAgIGlmIChzdGF0ZS5wb3NpdGlvbkNoYW5nZWQpCisgICAgICAgIGVuY29kZXIg
PDwgc3RhdGUucG9zOworCisgICAgaWYgKHN0YXRlLmFuY2hvclBvaW50Q2hhbmdlZCkKKyAgICAg
ICAgZW5jb2RlciA8PCBzdGF0ZS5hbmNob3JQb2ludDsKKworICAgIGlmIChzdGF0ZS5zaXplQ2hh
bmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaXplOworCisgICAgaWYgKHN0YXRlLnRy
YW5zZm9ybUNoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUudHJhbnNmb3JtOworCisg
ICAgaWYgKHN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8
PCBzdGF0ZS5jaGlsZHJlblRyYW5zZm9ybTsKKworICAgIGlmIChzdGF0ZS5jb250ZW50c1JlY3RD
aGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNvbnRlbnRzUmVjdDsKKworICAgIGlm
IChzdGF0ZS5vcGFjaXR5Q2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5vcGFjaXR5
OworCisgICAgaWYgKHN0YXRlLnNvbGlkQ29sb3JDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8
IHN0YXRlLnNvbGlkQ29sb3I7CisKKyAgICBpZiAoc3RhdGUuZGVidWdCb3JkZXJDb2xvckNoYW5n
ZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuZGVidWdCb3JkZXJDb2xvcjsKKworICAgIGlm
IChzdGF0ZS5kZWJ1Z0JvcmRlcldpZHRoQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0
ZS5kZWJ1Z0JvcmRlcldpZHRoOworCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGlmIChz
dGF0ZS5maWx0ZXJzQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWx0ZXJzOwor
I2VuZGlmCisKKyAgICBpZiAoc3RhdGUuYW5pbWF0aW9uc0NoYW5nZWQpCisgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGUuYW5pbWF0aW9uczsKKworICAgIGlmIChzdGF0ZS5jaGlsZHJlbkNoYW5nZWQp
CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuY2hpbGRyZW47CisKKyAgICBlbmNvZGVyIDw8IHN0
YXRlLnRpbGVzVG9DcmVhdGU7CisgICAgZW5jb2RlciA8PCBzdGF0ZS50aWxlc1RvUmVtb3ZlOwor
CisgICAgaWYgKHN0YXRlLnJlcGxpY2FDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRl
LnJlcGxpY2E7CisKKyAgICBpZiAoc3RhdGUubWFza0NoYW5nZWQpCisgICAgICAgIGVuY29kZXIg
PDwgc3RhdGUubWFzazsKKworICAgIGlmIChzdGF0ZS5pbWFnZUNoYW5nZWQpCisgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGUuaW1hZ2VJRDsKKworICAgIGlmIChzdGF0ZS5yZXBhaW50Q291bnRDaGFu
Z2VkKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnJlcGFpbnRDb3VudDsKKworICAgIGVuY29k
ZXIgPDwgc3RhdGUudGlsZXNUb1VwZGF0ZTsKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQor
ICAgIGlmIChzdGF0ZS5jYW52YXNDaGFuZ2VkKSB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
Y2FudmFzU2l6ZTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jYW52YXNUb2tlbjsKKyAgICAg
ICAgZW5jb2RlciA8PCBzdGF0ZS5jYW52YXNGcm9udEJ1ZmZlcjsKKyAgICB9CisjZW5kaWYKIH0K
IAotYm9vbCBBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciYgZGVjb2RlciwgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvKQor
Ym9vbCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlPjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUm
IHN0YXRlKQogewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJ
bmZvPjo6ZGVjb2RlKGRlY29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHN0YXRlLmNoYW5nZU1hc2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoc3RhdGUuZmxhZ3NDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5mbGFncykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5wb3NpdGlvbkNoYW5nZWQg
JiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLnBvcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChzdGF0ZS5hbmNob3JQb2ludENoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRl
LmFuY2hvclBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLnNp
emVDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5zaXplKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKHN0YXRlLnRyYW5zZm9ybUNoYW5nZWQgJiYgIWRlY29kZXIuZGVj
b2RlKHN0YXRlLnRyYW5zZm9ybSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChz
dGF0ZS5jaGlsZHJlblRyYW5zZm9ybUNoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNo
aWxkcmVuVHJhbnNmb3JtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRl
LmNvbnRlbnRzUmVjdENoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNvbnRlbnRzUmVj
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5vcGFjaXR5Q2hhbmdl
ZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUub3BhY2l0eSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChzdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUo
c3RhdGUuc29saWRDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0
ZS5kZWJ1Z0JvcmRlckNvbG9yQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuZGVidWdC
b3JkZXJDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5kZWJ1
Z0JvcmRlcldpZHRoQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuZGVidWdCb3JkZXJX
aWR0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
KyAgICBpZiAoc3RhdGUuZmlsdGVyc0NoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmZp
bHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzdGF0ZS5h
bmltYXRpb25zQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuYW5pbWF0aW9ucykpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5jaGlsZHJlbkNoYW5nZWQgJiYg
IWRlY29kZXIuZGVjb2RlKHN0YXRlLmNoaWxkcmVuKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS50aWxlc1RvQ3JlYXRlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS50aWxlc1RvUmVt
b3ZlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLnJlcGxpY2FDaGFu
Z2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5yZXBsaWNhKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKHN0YXRlLm1hc2tDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0
ZS5tYXNrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLmltYWdlQ2hh
bmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuaW1hZ2VJRCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChzdGF0ZS5yZXBhaW50Q291bnRDaGFuZ2VkICYmICFkZWNvZGVyLmRl
Y29kZShzdGF0ZS5yZXBhaW50Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLnRpbGVzVG9VcGRhdGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBpZiAoc3RhdGUuY2FudmFz
Q2hhbmdlZCkgeworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNhbnZhc1NpemUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc3RhdGUuY2FudmFzVG9rZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuY2FudmFzRnJvbnRCdWZmZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmVuY29kZShBcmd1bWVudEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFRpbGVVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAg
IFNpbXBsZUFyZ3VtZW50Q29kZXI8VGlsZVVwZGF0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgdXBk
YXRlSW5mbyk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmRlY29k
ZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFRpbGVVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQor
eworICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFRpbGVVcGRhdGVJbmZvPjo6ZGVjb2Rl
KGRlY29kZXIsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8VGlsZUNyZWF0
aW9uSW5mbz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRpbGVDcmVh
dGlvbkluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxUaWxlQ3Jl
YXRpb25JbmZvPjo6ZW5jb2RlKGVuY29kZXIsIHVwZGF0ZUluZm8pOworfQorCitib29sIEFyZ3Vt
ZW50Q29kZXI8VGlsZUNyZWF0aW9uSW5mbz46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29k
ZXIsIFRpbGVDcmVhdGlvbkluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgcmV0dXJuIFNpbXBsZUFy
Z3VtZW50Q29kZXI8VGlsZUNyZWF0aW9uSW5mbz46OmRlY29kZShkZWNvZGVyLCB1cGRhdGVJbmZv
KTsKK30KKwordm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZT46OmVu
Y29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZSYgc3RhdGUpCit7CisgICAgZW5jb2RlciA8PCBzdGF0ZS5yb290Q29tcG9zaXRpbmdMYXll
cjsKKyAgICBlbmNvZGVyIDw8IHN0YXRlLmJhY2tncm91bmRDb2xvcjsKKyAgICBlbmNvZGVyIDw8
IHN0YXRlLnNjcm9sbFBvc2l0aW9uOworICAgIGVuY29kZXIgPDwgc3RhdGUuY29udGVudHNTaXpl
OworICAgIGVuY29kZXIgPDwgc3RhdGUuY292ZXJlZFJlY3Q7CisgICAgZW5jb2RlciA8PCBzdGF0
ZS5sYXllcnNUb1VwZGF0ZTsKKworICAgIC8vIFdlIG5lZWQgdG8gZW5jb2RlIFdlYkNvb3JkaW5h
dGVkU3VyZmFjZTo6SGFuZGxlIHJpZ2h0IGFmdGVyIGl0J3MgY3JlYXRpb24uCisgICAgLy8gVGhh
dCdzIHdoeSB3ZSBjYW5ub3QgdXNlIHNpbXBsZSBzdGQ6OnBhaXIgZW5jb2Rlci4KKyAgICBlbmNv
ZGVyIDw8IHN0YXRlLmltYWdlc1RvVXBkYXRlLnNpemUoKTsKKworICAgIHR5cGVkZWYgVmVjdG9y
PHN0ZDo6cGFpcjxDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRT
dXJmYWNlPiA+ID4gU3VyZmFjZVVwZGF0ZVBhaXJWZWN0b3I7CisgICAgU3VyZmFjZVVwZGF0ZVBh
aXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0YXRlLmltYWdlc1RvVXBkYXRlLmVuZCgp
OworICAgIGZvciAoU3VyZmFjZVVwZGF0ZVBhaXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
c3RhdGUuaW1hZ2VzVG9VcGRhdGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisKKyAgICAg
ICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNf
Y2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihpdC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICBpZiAoIXdlYkNv
b3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgZW5jb2RlciA8PCBpdC0+Zmlyc3Q7CisgICAgICAgIGVuY29kZXIgPDwg
aGFuZGxlOworICAgIH0KK30KKworYm9vbCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZT46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5yb290
Q29tcG9zaXRpbmdMYXllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoc3RhdGUuYmFja2dyb3VuZENvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5zY3JvbGxQb3NpdGlvbikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuY29udGVu
dHNTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdGF0ZS5jb3ZlcmVkUmVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc3RhdGUubGF5ZXJzVG9VcGRhdGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzaXplX3Qgc2l6ZU9mSW1hZ2VzVG9VcGRhdGU7CisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShzaXplT2ZJbWFnZXNUb1VwZGF0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZU9mSW1hZ2VzVG9VcGRhdGU7IGkrKykgewor
ICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQ7CisgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaW1hZ2VJRCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGhhbmRsZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZSA9IFdlYkNvb3JkaW5hdGVk
U3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSk7CisgICAgICAgIHN0YXRlLmltYWdlc1RvVXBkYXRlLmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBzdXJmYWNlLnJlbGVhc2UoKSkpOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCmluZGV4IDhl
N2RlZWZiM2ZlYTE3Zjk4NWU1ODNlNzMxMDNlZjhiYWMyOTUxMWUuLmQ0MmFlNzlkZjI0YTEwMWUz
NDUwYTM1NjcxODMyMTAyM2M5NTJiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCkBAIC0zMiwxMyArMzIsMTYgQEAKICNpbmNsdWRl
ICJBcmd1bWVudENvZGVycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGU7CitzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRl
OwogY2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbjsKIGNs
YXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOwogY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87Citz
dHJ1Y3QgVGlsZUNyZWF0aW9uSW5mbzsKK3N0cnVjdCBUaWxlVXBkYXRlSW5mbzsKIGNsYXNzIFRy
YW5zZm9ybWF0aW9uTWF0cml4OwogY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKLXN0cnVjdCBD
b29yZGluYXRlZExheWVySW5mbzsKIHN0cnVjdCBMZW5ndGg7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCkBAIC0xMDcsMTYgKzExMCwzMSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuPiB7CiB9OwogI2VuZGlmCiAKLXRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLX07Ci0KIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8+IHsK
ICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6
U3VyZmFjZVVwZGF0ZUluZm8mKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNv
ZGVyJiwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKIH07CiAKK3RlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU+
IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGUmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VGls
ZVVwZGF0ZUluZm8+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwg
Y29uc3QgV2ViQ29yZTo6VGlsZVVwZGF0ZUluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
QXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6VGlsZVVwZGF0ZUluZm8mKTsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VGlsZUNyZWF0aW9uSW5mbz4gewor
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpU
aWxlQ3JlYXRpb25JbmZvJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciYsIFdlYkNvcmU6OlRpbGVDcmVhdGlvbkluZm8mKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlPiB7CisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERl
Y29kZXImLCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKK307CisKIH0gLy8g
bmFtZXNwYWNlIENvcmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNw
cAppbmRleCBjNWY3ZTg3NWE2ZDhiY2ZkYTRiNzAzNWU0MTkwYzJlNTUzZTczNmJhLi4wMThiZDE3
YzViNDI5MWQxYjQ3NDdiOGQ2NTBhNDBhNTQ5Njc1ZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC0yNyw3ICsyNyw3IEBA
CiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9D
b29yZGluYXRlZExheWVySW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+CiAKQEAgLTYyLDIyICs2Miw2IEBAIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0CiAgICAgbV9zY2VuZS0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9u
KTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZUZv
ckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0
IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNy
ZWF0ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2Fs
ZUZhY3RvcikpOwotICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVS
ZWN0LCB1cGRhdGVJbmZvKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6dXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYgdXBkYXRlSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnVwZGF0ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVj
dCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8uYXRsYXNJRCwgdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0
KSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxl
Rm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKLXsK
LSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92
ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkpOwotfQotCiB2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxh
c0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQogewogICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVXBk
YXRlQXRsYXMsIG1fc2NlbmUuZ2V0KCksIGF0bGFzSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6
Y3JlYXRlKGhhbmRsZSkpKTsKQEAgLTk4LDI4ICs4Miw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29y
ZGluCiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpk
ZWxldGVMYXllcnMsIG1fc2NlbmUuZ2V0KCksIGlkcykpOwogfQogCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihDb29yZGluYXRlZExh
eWVySUQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpzZXRSb290TGF5ZXJJRCwgbV9zY2VuZS5nZXQoKSwgaWQpKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGluZm8pCi17
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRM
YXllclN0YXRlLCBtX3NjZW5lLmdldCgpLCBpZCwgaW5mbykpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRy
ZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpzZXRMYXllckNoaWxkcmVuLCBtX3NjZW5lLmdldCgpLCBpZCwgY2hpbGRyZW4pKTsKLX0KLQot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyRmlsdGVycywgbV9zY2VuZS5nZXQo
KSwgaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQog
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbShpbnQgaWQpCiB7CkBAIC0xMzEsMTUgKzkzLDEyIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBD
dXN0CiB9CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlk
UmVuZGVyRnJhbWUoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEludFNp
emUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgSW50UmVjdCYgY292ZXJlZFJlY3QpCit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUo
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBncmFwaGljc1N0YXRlKQogewotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Zmx1c2hMYXllckNo
YW5nZXMsIG1fc2NlbmUuZ2V0KCksIHNjcm9sbFBvc2l0aW9uKSk7CisgICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRTY2VuZVN0YXRlLCBtX3Nj
ZW5lLmdldCgpLCBncmFwaGljc1N0YXRlKSk7CiAgICAgdXBkYXRlVmlld3BvcnQoKTsKICNpZiBV
U0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
ZGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShjb250ZW50c1NpemUpOwotICAgIFVOVVNFRF9QQVJBTShjb3ZlcmVkUmVjdCk7
CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPmRpZFJlbmRlckZyYW1lKGdyYXBoaWNz
U3RhdGUuY29udGVudHNTaXplLCBncmFwaGljc1N0YXRlLmNvdmVyZWRSZWN0KTsKICNlbmRpZgog
fQogCkBAIC0xNjMsMTEgKzEyMiw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lECiAgICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVJbWFnZUJh
Y2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQpKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1h
dGlvbnMsIG1fc2NlbmUuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7Ci19Ci0KIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQp
CiB7CiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpz
ZXRBbmltYXRpb25zTG9ja2VkLCBtX3NjZW5lLmdldCgpLCBsb2NrZWQpKTsKQEAgLTIwNCwyOSAr
MTU4LDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6YW5pbWF0aW9uRnJh
bWVSZWFkeSgpCiB9CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNl
VG9rZW4mIHRva2VuKQotewotICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdz
ID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQgfCBHcmFwaGljc1N1cmZh
Y2U6OlN1cHBvcnRzU2hhcmluZzsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGNhbnZhc1Np
emUsIEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgdG9r
ZW4pKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnN5bmNDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKLXsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnN5bmNDYW52YXMs
IG1fc2NlbmUuZ2V0KCksIGlkLCBmcm9udEJ1ZmZlcikpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRl
c3Ryb3lDYW52YXMsIG1fc2NlbmUuZ2V0KCksIGlkKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0
ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3VudCwgbV9zY2VuZS5nZXQo
KSwgaWQsIHZhbHVlKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnB1cmdlQmFja2luZ1N0b3JlcygpCiB7CiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpQdXJn
ZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCmlu
ZGV4IDk0NmIzOTkyMGQyODQ4ODNhODQ0YTdmMTk2NjkxMWIwODY5ZWY5ZjUuLmQxNjhiY2RjZGE3
YWJhY2RhYTkxYWY1ODIyM2RiYzA3YmU0YmZiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaApAQCAtNDEsNyArNDEsOCBAQAogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ29vcmRpbmF0
ZWRMYXllckluZm87CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZTsKK2NsYXNz
IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZTsKIGNsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOwogfQog
CkBAIC01Myw0MyArNTQsMzEgQEAgY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkg
OiBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2wKIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5
Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICB2
b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdm9pZCBzZXRDb21w
b3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlm
CisKKyAgICAvLyBNZXNzYWdlcyBGcm9tIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdAorICAgIHZv
aWQgY3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7CiAjaWYgRU5BQkxFKENTU19TSEFE
RVJTKQogICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdl
YkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7CiAgICAgdm9pZCByZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtKGludCBpZCk7CiAjZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0aW5n
TGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAg
dm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJh
amVjdG9yeVZlY3Rvcik7Ci0gICAgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVu
dHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCk7Ci0gICAgdm9pZCBj
cmVhdGVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0
aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBk
YXRlSW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZVRpbGVGb3JM
YXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7CiAgICAg
dm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGlu
YXRlZFN1cmZhY2U6OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMy
X3QgYXRsYXNJRCk7CiAgICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
OjpIYW5kbGUmKTsKICAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmco
V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0jaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklE
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNl
VG9rZW4mKTsKLSAgICB2b2lkIHN5bmNDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExheWVyUmVwYWludENv
dW50KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKLSAgICBXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2NlbmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldExheWVyQW5pbWF0aW9u
cyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zJik7CisKKyAgICB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0
ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKICAgICB2b2lkIHNl
dEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQogICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7CiAjZW5kaWYKICAgICB2b2lk
IHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogCisgICAgdm9pZCBz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpOworICAgIFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY2VuZS5nZXQoKTsgfQorCiAgICAgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Q2xpZW50IE1ldGhvZHMuCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCkgT1ZFUlJJREU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3Nh
Z2VzLmluCmluZGV4IDVjZTEyODM2YmYyM2YwZDBiYzY4NzQ3ODdmMTYxYjJhODk0MjU4NmMuLjNh
NzY0ZjEzYzdhMmUxNDQ2MjYxYWY4NjViN2ZkNjAwZDFlN2U2ODMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2Vz
LmluCkBAIC0xOSw0MyArMTksMjkgQEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
IG1lc3NhZ2VzIC0+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IHsKLSAgICBTZXRDb21w
b3NpdGluZ0xheWVyU3RhdGUodWludDMyX3QgaWQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
bmZvIGxheWVySW5mbykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWludDMyX3Qg
aWQsIFZlY3Rvcjx1aW50MzJfdD4gY2hpbGRyZW4pCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQot
ICAgIFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpGaWx0
ZXJPcGVyYXRpb25zIGZpbHRlcnMpCi0jZW5kaWYKKworICAgIENvbW1pdENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgc3RhdGUpCisKKyAg
ICBDcmVhdGVDb21wb3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlkcykKKyAgICBEZWxl
dGVDb21wb3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlkcykKKwogI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKICAgICBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgV2ViQ29y
ZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gcHJvZ3JhbUluZm8pCiAgICAgUmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbShpbnQgaWQpCiAjZW5kaWYKLSAgICBTZXRSb290Q29tcG9zaXRpbmdMYXll
cih1aW50MzJfdCBpZCkKLSAgICBDcmVhdGVDb21wb3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMy
X3Q+IGlkcykKLSAgICBEZWxldGVDb21wb3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlk
cykKLSAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5m
byB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OlN1cmZh
Y2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90
IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKICAgICBDcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJf
dCBhdGxhc0lELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkK
ICAgICBSZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQogICAgIENyZWF0ZUltYWdl
QmFja2luZyh1aW50NjRfdCBpbWFnZUlEKQogICAgIFVwZGF0ZUltYWdlQmFja2luZyh1aW50NjRf
dCBpbWFnZUlELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkK
ICAgICBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKHVpbnQ2NF90IGltYWdlSUQpCiAgICAgUmVt
b3ZlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQpCi0gICAgRGlkUmVuZGVyRnJhbWUoV2Vi
Q29yZTo6RmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbiwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50
c1NpemUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCi0gICAgU2V0TGF5ZXJBbmltYXRp
b25zKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRp
b25zKQorCiAgICAgU2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKIAogI2lmIEVOQUJM
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQog
I2VuZGlmCiAKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBDcmVhdGVDYW52YXModWlu
dDMyX3QgaWQsIFdlYkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgV2ViQ29yZTo6R3JhcGhpY3NT
dXJmYWNlVG9rZW4gdG9rZW4pCi0gICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwgdWludDMyX3Qg
ZnJvbnRCdWZmZXIpCi0gICAgRGVzdHJveUNhbnZhcyh1aW50MzJfdCBpZCkKLSNlbmRpZgotCi0g
ICAgU2V0TGF5ZXJSZXBhaW50Q291bnQodWludDMyX3QgbGF5ZXJJRCwgaW50IHZhbHVlKQotCiAg
ICAgU2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogfQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmNwcAppbmRleCA3YWNlZjMwYjMyYzk1NDIyZTRkYzU3MWIxNTdjOWUwYzRlMWYzMmYwLi5h
Yjk1ZjJjZWM5YjViZDg2OWYzMDIxYmY0MjI3ZThmYjYwNTkyODA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAg
LTMwMSw5ICszMDEsMTUgQEAgYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlcygpCiAgICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7CiAgICAgICAg
IGRpZFN5bmMgPSB0cnVlOwogCi0gICAgICAgIEludFNpemUgY29udGVudHNTaXplID0gcm91bmRl
ZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwotICAgICAgICBJ
bnRSZWN0IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRpZFJlbmRl
ckZyYW1lKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpLCBjb250ZW50c1NpemUsIGNv
dmVyZWRSZWN0KSk7CisgICAgICAgIG1fc3RhdGUuY29udGVudHNTaXplID0gcm91bmRlZEludFNp
emUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOworICAgICAgICBtX3N0YXRl
LmNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7CisgICAgICAgIG1fc3RhdGUuc2Nyb2xs
UG9zaXRpb24gPSBtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKTsKKworICAgICAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpD
b21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUobV9zdGF0ZSkpOworCisgICAgICAgIG1fc3Rh
dGUubGF5ZXJzVG9VcGRhdGUuY2xlYXIoKTsKKyAgICAgICAgbV9zdGF0ZS5pbWFnZXNUb1VwZGF0
ZS5jbGVhcigpOworCiAgICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7CiAgICAg
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CiAgICAgfSBlbHNlCkBAIC0zNTYsNjQgKzM2
Miw1NCBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21w
b3NpdGluZ0xheWVySWZOZWVkZWQoKQogICAgIGlmIChtX2RpZEluaXRpYWxpemVSb290Q29tcG9z
aXRpbmdMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIodG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7
CisgICAgbV9zdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKTsKICAgICBtX2RpZEluaXRpYWxpemVSb290
Q29tcG9zaXRpbmdMYXllciA9IHRydWU7CiAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwog
fQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyU3RhdGUoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVy
SUQgaWQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKICAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBp
bmZvKSk7CisgICAgcHJlcHJvY2Vzc1N0YXRlQ2hhbmdlKHN0YXRlKTsKKyAgICBtX3N0YXRlLmxh
eWVyc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpZCwgc3RhdGUpKTsKIH0KIAotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVk
TGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQor
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnByZXByb2Nlc3NTdGF0ZUNoYW5nZShDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4p
KTsKKyAgICBwcmVwcm9jZXNzQW5pbWF0aW9uU3RhdGVJZk5lZWRlZChzdGF0ZSk7CisgICAgcHJl
cHJvY2Vzc0ZpbHRlck9wZXJhdGlvbnNJZk5lZWRlZChzdGF0ZSk7CiB9CiAKLSNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxh
eWVyKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnByZXByb2Nlc3NBbmltYXRpb25T
dGF0ZUlmTmVlZGVkKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9r
ZW4gPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIElu
dFNpemUgY2FudmFzU2l6ZSA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXpl
KCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6Q3JlYXRlQ2FudmFzKGlkLCBjYW52YXNTaXplLCB0b2tlbikpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQg
aWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gY2FudmFzUGxhdGZv
cm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U3luY0NhbnZhcyhpZCwgZnJv
bnRCdWZmZXIpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lD
YW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKKyAg
ICBpZiAoIXN0YXRlLmFuaW1hdGlvbnNDaGFuZ2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveUNhbnZhcyhpZCkpOwotfQorICAg
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zID0gc3RhdGUuYW5p
bWF0aW9uczsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25zID0g
YW5pbWF0aW9ucy5nZXRBY3RpdmVBbmltYXRpb25zKCk7CisjaWYgRU5BQkxFKENTU19TSEFERVJT
KQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25z
KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZy
YW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOworICAgICAg
ICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRl
cikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IGtleWZyYW1lcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0
aW9uVmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9u
VmFsdWUqPihrZXlmcmFtZXMuYXQoaSkpOworICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveGllcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOworICAgICAgICB9CisgICAgfQog
I2VuZGlmCi0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRMYXllclJlcGFpbnRD
b3VudChDb29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRMYXllclJl
cGFpbnRDb3VudChpZCwgdmFsdWUpKTsKKyAgICBzdGF0ZS5hbmltYXRpb25zID0gYWN0aXZlQW5p
bWF0aW9uczsKIH0KIAotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpwcmVwcm9jZXNzRmlsdGVyT3BlcmF0aW9uc0lmTmVlZGVkKENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CiAj
aWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hp
ZXMoZmlsdGVycyk7CisgICAgaWYgKCFzdGF0ZS5maWx0ZXJzQ2hhbmdlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhzdGF0ZS5maWx0ZXJz
KTsKICNlbmRpZgotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7
CiB9Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMpCkBAIC01ODUsNyArNTgxLDggQEAgYm9vbCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWcKICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7CiAgICAg
aWYgKCF3ZWJDb29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6VXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSkp
OworCisgICAgbV9zdGF0ZS5pbWFnZXNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaW1h
Z2VJRCwgY29vcmRpbmF0ZWRTdXJmYWNlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTY2
OCwyNiArNjY1LDYgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0
LCB1cGRhdGVJbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRh
dGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0
IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8p
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVRpbGUoQ29vcmRp
bmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKLXsKLSAgICBpZiAobV9pc1B1
cmdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwotfQotCiBib29sIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwg
UGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKIHsKICAg
ICBXZWJDb29yZGluYXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19j
YXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFjZSo+KGNvb3JkaW5hdGVkU3VyZmFjZS5nZXQoKSk7CkBA
IC03MTAsMjUgKzY4Nyw2IEBAIFdlYkNvcmU6OkZsb2F0UmVjdCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAogICAgIHJldHVybiBtX3Zpc2libGVD
b250ZW50c1JlY3Q7CiB9CiAKLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExh
eWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NM
YXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOwotICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmlt
YXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5z
aXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVz
ID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7Ci0gICAgICAgIGlm
IChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5
ZnJhbWVzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25W
YWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1
ZSo+KGtleWZyYW1lcy5hdChpKSk7Ci0gICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dy
YW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5k
aWYKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYWN0aXZlQW5pbWF0aW9ucykpOwot
fQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0
b3IpCiB7CiAgICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGls
ZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4KQEAgLTg1MSw3ICs4MDks
OCBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNl
c1RpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKIHsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7CisgICAgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGI2MDUyODkwOWY3ZWI5YjY3MTNjMWU5OTZhOGNl
ODcwMTk2NTMyNGUuLjZjZDM0MjI5ODk0NjM0YzQyY2MwNTQ2ZWI4YmU0NjBjNTI3ZTdiOWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXJGYWN0b3J5Lmg+CkBAIC04MCwzOSArODEsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9y
Q2hhbmdlZCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29y
ZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6
SW1hZ2UqKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFu
Z2VzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOyB9
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpT
dXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRp
bGVJRCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVj
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKICAgICB2aXJ0
dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2li
bGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURl
Y29kZXImKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFw
aGljc0xheWVyRmFjdG9yeSgpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXll
clN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllckluZm8mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklEPiYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0
aW9ucyYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xh
eWVyRmlsdGVycyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZp
bHRlck9wZXJhdGlvbnMmKTsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBX
ZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmND
YW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVy
KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXllclJlcGFpbnRDb3VudChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGludCkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciopOwotCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJD
b3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgV2ViQ29y
ZTo6SW50UG9pbnQmKTsKLQotICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50Ci0gICAgdmlydHVhbCBi
b29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIE9WRVJS
SURFOwogI2VuZGlmCkBAIC0xMzksNiArMTE0LDE4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZs
dXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKIAorICAgIC8vIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2Vz
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOyB9Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2lu
Zz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKik7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpD
b29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllcklELCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwor
CisgICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlVXBkYXRl
QXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1
cmZhY2U+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCk7CisKICAgICAvLyBHcmFwaGljc0xheWVyRmFjdG9yeQogICAgIHZpcnR1
YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVHcmFwaGljc0xheWVy
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQqKSBPVkVSUklERTsKIApAQCAtMTU2LDYgKzE0
MywxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgbG9ja0FuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVu
bG9ja0FuaW1hdGlvbnMoKTsKIAorICAgIHZvaWQgcHJlcHJvY2Vzc1N0YXRlQ2hhbmdlKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBwcmVwcm9jZXNz
QW5pbWF0aW9uU3RhdGVJZk5lZWRlZChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJT
dGF0ZSYpOworICAgIHZvaWQgcHJlcHJvY2Vzc0ZpbHRlck9wZXJhdGlvbnNJZk5lZWRlZChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworCiAgICAgdm9pZCBsYXllckZs
dXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7
CiAKICAgICB2b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOwpAQCAtMTgxLDYg
KzE3Miw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBi
ZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgogICAgIE93blB0cjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CiAKKyAgICBXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzU3RhdGUgbV9zdGF0ZTsKKwogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwogICAgIFZlY3RvcjxXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9DcmVhdGU7CiAgICAgVmVjdG9yPFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191399</attachid>
            <date>2013-03-04 21:58:16 -0800</date>
            <delta_ts>2013-03-05 01:11:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108294-20130305145424.patch</filename>
            <type>text/plain</type>
            <size>100074</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBkNTAxNjgwMjkzZGFi
YTg1NmViMzY2ZWNmMTU4MmIzNjExZTFjNi4uNGE3MTY5ODFkN2U0MDc5OTgwMDQ3NzFhYTM0NjM0
MjkxYjUwNzhmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxMy0wMy0wNCAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUgcGVyZm9ybSB2aWEgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODI5NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5IGhhcyB0b28gbWFueSBJUEMgbWVzc2FnZXMgKGUuZy4gU3lu
Y0NhbnZhcyBhbmQKKyAgICAgICAgQ3JlYXRlVGlsZSksIGFuZCB0aGVyZSBpcyBhIGxvbmcgZnVu
Y3Rpb24gY2hhaW4gZnJvbSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgdG8KKyAgICAgICAgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lICg0IGNsYXNzZXMpLgorICAgICAgICBJZiB3ZSB3YW50IHRv
IGFkZCBhIG5ldyBtZXNzYWdlLCB3ZSBuZWVkIHRvIGFkZCBzaW1pbGFyIGZ1bmN0aW9ucyBpbnRv
IDQgY2xhc3Nlcy4KKworICAgICAgICBOb3cgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGhhcyBv
bmx5IG9uZSBJUEMgbWVzc2FnZSBmb3IgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOgorICAgICAg
ICBDb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUuCisgICAgICAgIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcnVuIGFzIGZvbGxvd3M6
CisgICAgICAgIDEuIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBhIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllclN0YXRlLgorICAgICAgICAyLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qg
c3RvcmVzIGFsbCBMYXllclN0YXRlcy4KKyAgICAgICAgMy4gQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0IHNlbmRzIEdyYXBoaWNzU3RhdGUgaW5jbHVkZXMgTGF5ZXJTdGF0ZXMgdG8gQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkKKyAgICAgICAgYXQgdGhlIG1vbWVudCBvZiBmbHVzaGluZyB2
aWEgQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlIG1lc3NhZ2UuCisgICAgICAgIDQuIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBhcHBsaWVzIGFsbCBzdGF0ZSBjaGFuZ2VzIHRvIGxheWVy
cy4KKworICAgICAgICBUaGVyZSBpcyBvbmUgYmlnIGJlaGF2aW9yIGNoYW5nZS4gQWxsIHN0YXRl
cyBjaGFuZ2VzIChlLmcuCisgICAgICAgIFVwZGF0ZVRpbGVzLCBTZXRMYXllckNoaWxkcmVuLCBh
bmQgZXRjLi4pIGFyZSBwZXJmb3JtZWQgYXQgdGhlIHNhbWUgdGltZSwgd2hlbgorICAgICAgICBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBp
cyBjYWxsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBiYXNlZCBvbiBEb25nc3VuZyBIdWFu
ZywgYW5kIE5vYW0ncyB3b3JrIGluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDgyOTQKKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFu
Y2hvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNpYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFj
ZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNU
b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
TWFza0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRGaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9yZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNh
bnZhc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVzZXRMYXllclN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVU
aWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Y3JlYXRlQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpzeW5jQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3VudElmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5
ZXJDaGlsZHJlbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxlc0lmTmVlZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZXNJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZVRp
bGVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Ojphc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Zmx1c2hTdGF0ZUNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFRpbGVVcGRhdGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSk6
CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSk6CisgICAgICAgIChDb29y
ZGluYXRlZEdyYXBoaWNzU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9T
dXJmYWNlVXBkYXRlSW5mby5oOgorCiAyMDEzLTAzLTA0ICBUb20gU2VwZXogIDx0c2VwZXpAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFhTU0F1ZGl0b3IgYnlwYXNzIHdpdGggLS0+IGNvbW1lbnQg
c3ludGF4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDI1YmM4MTYyOTIwNzZiMTJmNzA5Zjk1ZmFiODc4YzY3MDFm
MGI5MzMuLjVkZjU2Y2NiZWU3ZWJlNDRhOTUzOWJjM2Y2MWQxY2U2YWZjMGU1YmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMy0wMy0wNCAgR3dhbmcgWW9vbiBId2FuZyAgPHJ5dW1p
ZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcGVyZm9y
bSB2aWEgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBjaGFuZ2VzIGluIFdLMi4KKyAg
ICAgICAgMS4gQ2hhbmdlIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IHRvIHVzZSBDb29y
ZGluYXRlZEdyYXBoaWNzU3RhdGUuCisgICAgICAgIDIuIEFkZCBlbmNvZGUvZGVjb2RlIG9mIENv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBpbiBDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2Rl
cnMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBiYXNlZCBvbiBEb25nc3VuZyBIdWFuZywgYW5k
IE5vYW0ncyB3b3JrIGluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDgyOTQKKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3Rp
bmcgdGVzdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHk6CisgICAg
ICAgIChoZWFkZXJzX2Zvcl90eXBlKToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29y
ZUlQQzo6OjplbmNvZGUpOgorICAgICAgICAgICAgRW5jb2RpbmcgVXBkYXRlSW1hZ2VCYWNraW5n
IGFuZCBDcmVhdGVVcGRhdGVBdGxhcyBjYW4gZmFpbCB3aGVuCisgICAgICAgICAgICBlbmNvZGlu
ZyBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBmYWlscywgYnV0IHdlIGRvbid0CisgICAg
ICAgICAgICByZWNvdmVyIGluIHRoZSBjYXNlLgorICAgICAgICAoQ29yZUlQQzo6OjpkZWNvZGUp
OgorICAgICAgICAoQ29yZUlQQzo6ZW5jb2RlTGF5ZXJTdGF0ZUlmTmVlZGVkKToKKyAgICAgICAg
KENvcmVJUEM6OmRlY29kZUxheWVyU3RhdGVJZk5lZWRlZCk6CisgICAgICAgIChDb3JlSVBDKToK
KyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
QXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvbW1pdENv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVl
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5
ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJl
cHJvY2Vzc1N0YXRlQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpwcmVwcm9jZXNzQW5pbWF0aW9uU3RhdGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcHJvY2Vzc0ZpbHRlck9wZXJhdGlvbnNJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBk
YXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAo
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKwogMjAxMy0wMy0wNCAgTWlraGFpbCBQb3pkbnlh
a292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBbV0syXVtFRkxd
IEFkZCBjYWxsYmFja3MgdG8gdGhlIFdLVmlld0NsaWVudCB0byBoYW5kbGUgV2ViIFByb2Nlc3Mg
Y3Jhc2ggYW5kIHJlbGF1bmNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2MDNjZGJkYjI3ODc0MDc1ZGQ0ZmIx
MTZlYzQ4NTYyMjFmYjJhZWU1Li43NWIwMDNiNDkzZTk3MzMxMzQ1YmI2OTdmY2ZjZjE5ZmZhYjA2
OTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQxMTAsOCArNDExMCw4IEBAIHVzZT8oM0RfR1JBUEhJQ1Mp
IHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZS5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggXAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8uaCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1
cmZhY2UuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZFRpbGUuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggNGM0M2FhN2UyMzhkZjVm
MjhmYmVlMzk5MzBiM2EwYzUxOWJiNjlhYS4uYTg5MjY5MDAyZGY1YzM5YzJlZTQzYmVmYjJhNzhk
ODdhY2Y5MjNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAKQEAgLTE5Miw2ICsxOTIsNyBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7CisgICAgbV9sYXll
clN0YXRlLnBvc2l0aW9uQ2hhbmdlZCA9IHRydWU7CiAgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsK
IH0KIApAQCAtMjAxLDYgKzIwMiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHApOworICAgIG1fbGF5ZXJTdGF0ZS5h
bmNob3JQb2ludENoYW5nZWQgPSB0cnVlOwogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7CiB9CiAK
QEAgLTIxMCw2ICsyMTIsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNz
TGF5ZXI6OnNldFNpemUoc2l6ZSk7CisgICAgbV9sYXllclN0YXRlLnNpemVDaGFuZ2VkID0gdHJ1
ZTsKIAogICAgIGlmIChtYXNrTGF5ZXIoKSkKICAgICAgICAgbWFza0xheWVyKCktPnNldFNpemUo
c2l6ZSk7CkBAIC0yMjIsNiArMjI1LDggQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOworICAgIG1fbGF5ZXJT
dGF0ZS50cmFuc2Zvcm1DaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7
CiB9CiAKQEAgLTIzMSw2ICsyMzYsOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmCiAgICAgICAg
IHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKHQpOwor
ICAgIG1fbGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5zZm9ybUNoYW5nZWQgPSB0cnVlOworCiAgICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0KIApAQCAtMjQwLDYgKzI0Nyw5IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGIpOworICAgIG1fbGF5ZXJT
dGF0ZS5wcmVzZXJ2ZXMzRCA9IGI7CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRy
dWU7CisKICAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQogCkBAIC0yNDgsNiArMjU4LDkgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCBiKQog
ICAgIGlmIChtYXNrc1RvQm91bmRzKCkgPT0gYikKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBo
aWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYik7CisgICAgbV9sYXllclN0YXRlLm1hc2tzVG9C
b3VuZHMgPSBiOworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworCiAgICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0KIApAQCAtMjU2LDYgKzI2OSw4IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBiKQogICAgIGlmIChkcmF3
c0NvbnRlbnQoKSA9PSBiKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0
RHJhd3NDb250ZW50KGIpOworICAgIG1fbGF5ZXJTdGF0ZS5kcmF3c0NvbnRlbnQgPSBiOworICAg
IG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOwogCiAgICAgZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOwogfQpAQCAtMjY1LDYgKzI4MCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c1Zpc2libGUoYm9vbCBiKQogICAgIGlmIChjb250ZW50c0FyZVZpc2li
bGUoKSA9PSBiKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNWaXNpYmxlKGIpOworICAgIG1fbGF5ZXJTdGF0ZS5jb250ZW50c1Zpc2libGUgPSBiOworICAg
IG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworCiAgICAgaWYgKG1hc2tMYXllcigp
KQogICAgICAgICBtYXNrTGF5ZXIoKS0+c2V0Q29udGVudHNWaXNpYmxlKGIpOwogCkBAIC0yNzgs
NiArMjk2LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3Bh
cXVlKGJvb2wgYikKICAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQogICAgICAgICBtX21haW5C
YWNraW5nU3RvcmUtPnNldFN1cHBvcnRzQWxwaGEoIWIpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dENvbnRlbnRzT3BhcXVlKGIpOworICAgIG1fbGF5ZXJTdGF0ZS5jb250ZW50c09wYXF1ZSA9IGI7
CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VM
YXllclN0YXRlKCk7CiB9CiAKQEAgLTI4Nyw2ICszMDgsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOworICAgIG1f
bGF5ZXJTdGF0ZS5iYWNrZmFjZVZpc2libGUgPSBiOworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0No
YW5nZWQgPSB0cnVlOworCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC0yOTYs
NiArMzIwLDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoZmxv
YXQgb3BhY2l0eSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKKyAgICBtX2xheWVyU3RhdGUub3BhY2l0eSA9IG9wYWNpdHk7CisgICAg
bV9sYXllclN0YXRlLm9wYWNpdHlDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxheWVy
U3RhdGUoKTsKIH0KIApAQCAtMzA1LDYgKzMzMiw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHIpOworICAgIG1fbGF5ZXJT
dGF0ZS5jb250ZW50c1JlY3QgPSByOworICAgIG1fbGF5ZXJTdGF0ZS5jb250ZW50c1JlY3RDaGFu
Z2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtMzU2LDE2
ICszODYsMjMgQEAgYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgbmV3RmlsdGVycykKIHsKICAgICBpZiAoZmlsdGVycygpID09
IG5ld0ZpbHRlcnMpCiAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFHcmFwaGljc0xh
eWVyOjpzZXRGaWx0ZXJzKG5ld0ZpbHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICBkaWRDaGFuZ2VGaWx0ZXJzKCk7Ci0gICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRl
cnMobmV3RmlsdGVycyk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKIAogdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBpZiAobV9sYXllckluZm8uc29saWRDb2xvciA9PSBjb2xvcikKKyAg
ICBpZiAobV9sYXllclN0YXRlLnNvbGlkQ29sb3IgPT0gY29sb3IpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2xheWVySW5mby5zb2xpZENvbG9yID0gY29sb3I7CisKKyAgICBtX2xheWVyU3RhdGUu
c29saWRDb2xvciA9IGNvbG9yOworICAgIG1fbGF5ZXJTdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCA9
IHRydWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTM3NSw2ICs0MTIs
OSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKGJv
b2wgc2hvdykKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd0Rl
YnVnQm9yZGVyKHNob3cpOworICAgIG1fbGF5ZXJTdGF0ZS5zaG93RGVidWdCb3JkZXJzID0gdHJ1
ZTsKKyAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5n
ZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtMzg0LDYgKzQyNCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRTaG93UmVwYWludENvdW50ZXIoYm9vbCBzaG93KQogICAgICAgICBy
ZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRTaG93UmVwYWludENvdW50ZXIoc2hvdyk7
CisgICAgbV9sYXllclN0YXRlLnNob3dSZXBhaW50Q291bnRlciA9IHRydWU7CisgICAgbV9sYXll
clN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7
CiB9CiAKQEAgLTQyMSw2ICs0NjQsMTAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICBsYXllci0+c2V0Q29udGVu
dHNWaXNpYmxlKGNvbnRlbnRzQXJlVmlzaWJsZSgpKTsKICAgICBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqIGNvb3JkaW5hdGVkTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXll
cik7CiAgICAgY29vcmRpbmF0ZWRMYXllci0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworCisgICAg
bV9sYXllclN0YXRlLm1hc2sgPSBjb29yZGluYXRlZExheWVyLT5pZCgpOworICAgIG1fbGF5ZXJT
dGF0ZS5tYXNrQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9
CiAKQEAgLTQ0Miw2ICs0ODksOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVyKTsKKyAgICBt
X2xheWVyU3RhdGUucmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKGxheWVyKTsKKyAgICBt
X2xheWVyU3RhdGUucmVwbGljYUNoYW5nZWQgPSB0cnVlOwogICAgIGRpZENoYW5nZUxheWVyU3Rh
dGUoKTsKIH0KIApAQCAtNDcxLDYgKzUyMCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRGaXhlZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKQogICAgICAgICByZXR1cm47CiAK
ICAgICBtX2ZpeGVkVG9WaWV3cG9ydCA9IGlzRml4ZWQ7CisgICAgbV9sYXllclN0YXRlLmZpeGVk
VG9WaWV3cG9ydCA9IGlzRml4ZWQ7CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRy
dWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTUwNCwxMSArNTU2LDEw
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4oKQogICAgIGlm
ICghbV9zaG91bGRTeW5jQ2hpbGRyZW4pCiAgICAgICAgIHJldHVybjsKICAgICBtX3Nob3VsZFN5
bmNDaGlsZHJlbiA9IGZhbHNlOwotICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGNoaWxk
SURzOworICAgIG1fbGF5ZXJTdGF0ZS5jaGlsZHJlbkNoYW5nZWQgPSB0cnVlOworICAgIG1fbGF5
ZXJTdGF0ZS5jaGlsZHJlbi5jbGVhcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hp
bGRyZW4oKS5zaXplKCk7ICsraSkKLSAgICAgICAgY2hpbGRJRHMuYXBwZW5kKHRvQ29vcmRpbmF0
ZWRMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKLQotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXll
ckNoaWxkcmVuKG1faWQsIGNoaWxkSURzKTsKKyAgICAgICAgbV9sYXllclN0YXRlLmNoaWxkcmVu
LmFwcGVuZCh0b0Nvb3JkaW5hdGVkTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CiB9CiAKICNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC01MTcsNyArNTY4LDkgQEAgdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKCkKICAgICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMp
CiAgICAgICAgIHJldHVybjsKICAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gZmFsc2U7Ci0gICAg
bV9jb29yZGluYXRvci0+c3luY0xheWVyRmlsdGVycyhtX2lkLCBmaWx0ZXJzKCkpOworCisgICAg
bV9sYXllclN0YXRlLmZpbHRlcnMgPSBHcmFwaGljc0xheWVyOjpmaWx0ZXJzKCk7CisgICAgbV9s
YXllclN0YXRlLmZpbHRlcnNDaGFuZ2VkID0gdHJ1ZTsKIH0KICNlbmRpZgogCkBAIC01MzgsMTQg
KzU5MSwxNSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ltYWdlQmFja2lu
ZygpCiAgICAgICAgIGlmICghbV9jb29yZGluYXRlZEltYWdlQmFja2luZykgewogICAgICAgICAg
ICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZyA9IG1fY29vcmRpbmF0b3ItPmNyZWF0ZUltYWdl
QmFja2luZ0lmTmVlZGVkKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsKICAgICAgICAgICAgIG1f
Y29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmFkZEhvc3QodGhpcyk7Ci0gICAgICAgICAgICBtX2xh
eWVySW5mby5pbWFnZUlEID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+aWQoKTsKKyAgICAg
ICAgICAgIG1fbGF5ZXJTdGF0ZS5pbWFnZUlEID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+
aWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPm1h
cmtEaXJ0eSgpOworICAgICAgICBtX2xheWVyU3RhdGUuaW1hZ2VDaGFuZ2VkID0gdHJ1ZTsKICAg
ICB9IGVsc2UKICAgICAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CiAKLSAgICAv
LyBzeW5jSW1hZ2VCYWNraW5nKCkgY2hhbmdlZCBtX2xheWVySW5mby5pbWFnZUlELgorICAgIC8v
IHN5bmNJbWFnZUJhY2tpbmcoKSBjaGFuZ2VkIG1fbGF5ZXJTdGF0ZS5pbWFnZUlELgogICAgIGRp
ZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtNTU0LDM4ICs2MDgsMzQgQEAgdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKCkKICAgICBpZiAoIW1fc2hvdWxk
U3luY0xheWVyU3RhdGUpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Nob3VsZFN5bmNMYXllclN0
YXRlID0gZmFsc2U7Ci0gICAgbV9sYXllckluZm8uZml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWRUb1Zp
ZXdwb3J0KCk7Ci0KLSAgICBtX2xheWVySW5mby5iYWNrZmFjZVZpc2libGUgPSBiYWNrZmFjZVZp
c2liaWxpdHkoKTsKLSAgICBtX2xheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVu
VHJhbnNmb3JtKCk7Ci0gICAgbV9sYXllckluZm8uY29udGVudHNPcGFxdWUgPSBjb250ZW50c09w
YXF1ZSgpOwotICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOwot
ICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpOwotICAgIG1fbGF5
ZXJJbmZvLmNvbnRlbnRzVmlzaWJsZSA9IGNvbnRlbnRzQXJlVmlzaWJsZSgpOwotICAgIG1fbGF5
ZXJJbmZvLm1hc2sgPSB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChtYXNrTGF5ZXIoKSk7Ci0gICAgbV9s
YXllckluZm8ubWFza3NUb0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsKLSAgICBtX2xheWVySW5m
by5vcGFjaXR5ID0gb3BhY2l0eSgpOwotICAgIG1fbGF5ZXJJbmZvLnByZXNlcnZlczNEID0gcHJl
c2VydmVzM0QoKTsKLSAgICBtX2xheWVySW5mby5yZXBsaWNhID0gdG9Db29yZGluYXRlZExheWVy
SUQocmVwbGljYUxheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5zZm9y
bSgpOwotCi0gICAgbV9sYXllckluZm8uYW5jaG9yUG9pbnQgPSBtX2FkanVzdGVkQW5jaG9yUG9p
bnQ7Ci0gICAgbV9sYXllckluZm8ucG9zID0gbV9hZGp1c3RlZFBvc2l0aW9uOwotICAgIG1fbGF5
ZXJJbmZvLnNpemUgPSBtX2FkanVzdGVkU2l6ZTsKLQotICAgIG1fbGF5ZXJJbmZvLnNob3dEZWJ1
Z0JvcmRlcnMgPSBpc1Nob3dpbmdEZWJ1Z0JvcmRlcigpOwotICAgIGlmIChtX2xheWVySW5mby5z
aG93RGVidWdCb3JkZXJzKQotICAgICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKLSAgICBt
X2xheWVySW5mby5zaG93UmVwYWludENvdW50ZXIgPSBpc1Nob3dpbmdSZXBhaW50Q291bnRlcigp
OwogCi0gICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyU3RhdGUobV9pZCwgbV9sYXllckluZm8p
OworICAgIG1fbGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJhbnNmb3Jt
KCk7CisgICAgbV9sYXllclN0YXRlLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOworICAg
IG1fbGF5ZXJTdGF0ZS5tYXNrID0gdG9Db29yZGluYXRlZExheWVySUQobWFza0xheWVyKCkpOwor
ICAgIG1fbGF5ZXJTdGF0ZS5vcGFjaXR5ID0gb3BhY2l0eSgpOworICAgIG1fbGF5ZXJTdGF0ZS5y
ZXBsaWNhID0gdG9Db29yZGluYXRlZExheWVySUQocmVwbGljYUxheWVyKCkpOworICAgIG1fbGF5
ZXJTdGF0ZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKKworICAgIG1fbGF5ZXJTdGF0ZS5hbmNo
b3JQb2ludCA9IG1fYWRqdXN0ZWRBbmNob3JQb2ludDsKKyAgICBtX2xheWVyU3RhdGUucG9zID0g
bV9hZGp1c3RlZFBvc2l0aW9uOworICAgIG1fbGF5ZXJTdGF0ZS5zaXplID0gbV9hZGp1c3RlZFNp
emU7CisKKyAgICBpZiAobV9sYXllclN0YXRlLnNob3dEZWJ1Z0JvcmRlcnMpCisgICAgICAgIHVw
ZGF0ZURlYnVnSW5kaWNhdG9ycygpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0RGVidWdCb3JkZXIoY29uc3QgQ29sb3ImIGNvbG9yLCBmbG9hdCB3aWR0aCkKIHsKLSAg
ICBBU1NFUlQobV9sYXllckluZm8uc2hvd0RlYnVnQm9yZGVycyk7Ci0gICAgbV9sYXllckluZm8u
ZGVidWdCb3JkZXJDb2xvciA9IGNvbG9yOwotICAgIG1fbGF5ZXJJbmZvLmRlYnVnQm9yZGVyV2lk
dGggPSB3aWR0aDsKKyAgICBBU1NFUlQobV9sYXllclN0YXRlLnNob3dEZWJ1Z0JvcmRlcnMpOwor
ICAgIGlmIChtX2xheWVyU3RhdGUuZGVidWdCb3JkZXJDb2xvciAhPSBjb2xvcikgeworICAgICAg
ICBtX2xheWVyU3RhdGUuZGVidWdCb3JkZXJDb2xvciA9IGNvbG9yOworICAgICAgICBtX2xheWVy
U3RhdGUuZGVidWdCb3JkZXJDb2xvckNoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmICht
X2xheWVyU3RhdGUuZGVidWdCb3JkZXJXaWR0aCAhPSB3aWR0aCkgeworICAgICAgICBtX2xheWVy
U3RhdGUuZGVidWdCb3JkZXJXaWR0aCA9IHdpZHRoOworICAgICAgICBtX2xheWVyU3RhdGUuZGVi
dWdCb3JkZXJXaWR0aENoYW5nZWQgPSB0cnVlOworICAgIH0KIH0KIAogdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnN5bmNBbmltYXRpb25zKCkKQEAgLTU5NCw4ICs2NDQsOCBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMoKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX3Nob3VsZFN5bmNBbmltYXRpb25zID0gZmFsc2U7Ci0KLSAgICBtX2Nvb3Jk
aW5hdG9yLT5zZXRMYXllckFuaW1hdGlvbnMobV9pZCwgbV9hbmltYXRpb25zKTsKKyAgICBtX2xh
eWVyU3RhdGUuYW5pbWF0aW9ucyA9IG1fYW5pbWF0aW9uczsKKyAgICBtX2xheWVyU3RhdGUuYW5p
bWF0aW9uc0NoYW5nZWQgPSB0cnVlOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBA
IC02MTIsNyArNjYyLDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52
YXMoKQogICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2Nvb3JkaW5hdG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7Cisg
ICAgQVNTRVJUKG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgbV9sYXllclN0YXRlLmNhbnZh
c0Zyb250QnVmZmVyID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZh
Y2UoKTsKKyAgICBtX2xheWVyU3RhdGUuY2FudmFzU2hvdWxkU3dhcEJ1ZmZlcnMgPSB0cnVlOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNhbnZhc0lmTmVlZGVk
KCkKQEAgLTYyMSw4ICs2NzMsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVz
dHJveUNhbnZhc0lmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1faXNWYWxp
ZENhbnZhcykgewotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5kZXN0cm95Q2FudmFzKG1faWQpOwog
ICAgICAgICBtX2lzVmFsaWRDYW52YXMgPSBmYWxzZTsKKyAgICAgICAgbV9sYXllclN0YXRlLmNh
bnZhc1Rva2VuID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKKyAgICAgICAgbV9sYXllclN0YXRl
LmNhbnZhc0NoYW5nZWQgPSB0cnVlOwogICAgIH0KIAogICAgIG1fcGVuZGluZ0NhbnZhc09wZXJh
dGlvbiAmPSB+RGVzdHJveUNhbnZhczsKQEAgLTYzNSw3ICs2ODgsOSBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQoKQogCiAgICAgQVNTRVJUKG1f
Y2FudmFzUGxhdGZvcm1MYXllcik7CiAgICAgaWYgKCFtX2lzVmFsaWRDYW52YXMpIHsKLSAgICAg
ICAgbV9jb29yZGluYXRvci0+Y3JlYXRlQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXll
cik7CisgICAgICAgIG1fbGF5ZXJTdGF0ZS5jYW52YXNTaXplID0gbV9jYW52YXNQbGF0Zm9ybUxh
eWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOworICAgICAgICBtX2xheWVyU3RhdGUuY2FudmFzVG9r
ZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAg
ICAgIG1fbGF5ZXJTdGF0ZS5jYW52YXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgbV9pc1ZhbGlk
Q2FudmFzID0gdHJ1ZTsKICAgICB9CiAKQEAgLTY2NywxMSArNzIyLDIzIEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCkKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICBzeW5jQ2FudmFzKCk7CiAjZW5kaWYK
KworICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJTdGF0ZSk7
CisgICAgcmVzZXRMYXllclN0YXRlKCk7CisKICAgICAvLyBPbmx5IHVuc2V0IG1fbW92aW5nVmlz
aWJsZVJlY3QgYWZ0ZXIgd2UgaGF2ZSB1cGRhdGVkIHRoZSB2aXNpYmxlIHJlY3QgYWZ0ZXIgdGhl
IGFuaW1hdGlvbiBzdG9wcGVkLgogICAgIGlmICghaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9u
KQogICAgICAgICBtX21vdmluZ1Zpc2libGVSZWN0ID0gZmFsc2U7CiB9CiAKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpyZXNldExheWVyU3RhdGUoKQoreworICAgIG1fbGF5ZXJTdGF0
ZS5jaGFuZ2VNYXNrID0gMDsKKyAgICBtX2xheWVyU3RhdGUudGlsZXNUb0NyZWF0ZS5jbGVhcigp
OworICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvUmVtb3ZlLmNsZWFyKCk7CisgICAgbV9sYXllclN0
YXRlLnRpbGVzVG9VcGRhdGUuY2xlYXIoKTsKK30KKwogYm9vbCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmltYWdlQmFja2luZ1Zpc2libGUoKQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nKTsKQEAgLTY4Niw3ICs3NTMsOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6cmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCkKICAgICBBU1NFUlQobV9jb29y
ZGluYXRvcik7CiAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+cmVtb3ZlSG9zdCh0aGlz
KTsKICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNsZWFyKCk7Ci0gICAgbV9sYXllcklu
Zm8uaW1hZ2VJRCA9IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEOworICAgIG1fbGF5
ZXJTdGF0ZS5pbWFnZUlEID0gSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7CisgICAg
bV9sYXllclN0YXRlLmltYWdlQ2hhbmdlZCA9IHRydWU7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQpAQCAtNjk1LDcgKzc2
Myw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBh
aW50QmVnaW4oKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Um9vdExheWVy
KGJvb2wgaXNSb290KQogewotICAgIG1fbGF5ZXJJbmZvLmlzUm9vdExheWVyID0gaXNSb290Owor
ICAgIG1fbGF5ZXJTdGF0ZS5pc1Jvb3RMYXllciA9IGlzUm9vdDsKKyAgICBtX2xheWVyU3RhdGUu
ZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAg
LTc1MSw4ICs4MjAsMTEgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogCiB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8
SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKIHsKLSAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50
ZXIoKSAmJiAhdXBkYXRlZFJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+
c2V0TGF5ZXJSZXBhaW50Q291bnQoaWQoKSwgaW5jcmVtZW50UmVwYWludENvdW50KCkpOworICAg
IGlmICghaXNTaG93aW5nUmVwYWludENvdW50ZXIoKSB8fCB1cGRhdGVkUmVjdHMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyU3RhdGUucmVwYWludENvdW50ID0gaW5j
cmVtZW50UmVwYWludENvdW50KCk7CisgICAgbV9sYXllclN0YXRlLnJlcGFpbnRDb3VudENoYW5n
ZWQgPSB0cnVlOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVIYXNQZW5kaW5nVGlsZUNyZWF0aW9uKCkKQEAgLTgxMSwyMSArODgzLDMyIEBAIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluCiB7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwogICAg
IEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAgIG1f
Y29vcmRpbmF0b3ItPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVj
dCk7CisKKyAgICBUaWxlQ3JlYXRpb25JbmZvIGNyZWF0aW9uSW5mbzsKKyAgICBjcmVhdGlvbklu
Zm8udGlsZUlEID0gdGlsZUlEOworICAgIGNyZWF0aW9uSW5mby5zY2FsZSA9IHVwZGF0ZUluZm8u
c2NhbGVGYWN0b3I7CisKKyAgICBtX2xheWVyU3RhdGUudGlsZXNUb0NyZWF0ZS5hcHBlbmQoY3Jl
YXRpb25JbmZvKTsKKyAgICB1cGRhdGVUaWxlKHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3Qp
OwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSh1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRS
ZWN0JiB0aWxlUmVjdCkKIHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJU
KG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0gICAgbV9jb29yZGlu
YXRvci0+dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKwor
ICAgIFRpbGVVcGRhdGVJbmZvIHRpbGVVcGRhdGVJbmZvOworICAgIHRpbGVVcGRhdGVJbmZvLnRp
bGVJRCA9IHRpbGVJRDsKKyAgICB0aWxlVXBkYXRlSW5mby50aWxlUmVjdCA9IHRpbGVSZWN0Owor
ICAgIHRpbGVVcGRhdGVJbmZvLnVwZGF0ZUluZm8gPSB1cGRhdGVJbmZvOworICAgIG1fbGF5ZXJT
dGF0ZS50aWxlc1RvVXBkYXRlLmFwcGVuZCh0aWxlVXBkYXRlSW5mbyk7CiB9CiAKIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCkKIHsKICAg
ICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1
c2hpbmdMYXllckNoYW5nZXMoKSB8fCBtX2lzUHVyZ2luZyk7Ci0gICAgbV9jb29yZGluYXRvci0+
cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOworICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvUmVtb3Zl
LmFwcGVuZCh0aWxlSUQpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBk
YXRlQ29udGVudEJ1ZmZlcnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IGU1YWE0N2FmY2MwODAyMGUyMjU5MjkxMDVhOWFj
MGE4ZTU5ZGQzMjcuLjc5MGZlOTZjOGEzNGVkNTZmNzZlMDA0NmZjYzgyOTY3MWIyNzE4MTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmgKQEAgLTIxLDggKzIxLDggQEAKICNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gK
ICNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKIAorI2luY2x1ZGUgIkNvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgi
Ci0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJDb29yZGluYXRl
ZFRpbGUuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xh
eWVyLmgiCkBAIC00OCwzMSArNDgsMTIgQEAgY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7
CiBjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgPSAwOwotCi0gICAgLy8g
Q29vcmRpbmF0ZWRUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwg
Y29uc3QgSW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGlu
YXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBj
b25zdCBJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5h
dGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKSA9IDA7Ci0KICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1h
Z2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5
ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4mKSA9IDA7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYpID0gMDsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxh
eWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgUGxhdGZvcm1MYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhD
b29yZGluYXRlZExheWVySUQpID0gMDsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldExh
eWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50KSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMmKSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5
ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiwgQ29v
cmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JikgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKSA9IDA7CiB9OwogCiBjbGFzcyBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgR3JhcGhpY3NMYXllcgpAQCAtMTkwLDYgKzE3MSw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lkIGRpZENoYW5nZUltYWdlQmFja2luZygpOwog
CisgICAgdm9pZCByZXNldExheWVyU3RhdGUoKTsKICAgICB2b2lkIHN5bmNMYXllclN0YXRlKCk7
CiAgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwogICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7CkBA
IC0yMTYsNyArMTk4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1l
ckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4qKTsKIAogICAgIENvb3JkaW5h
dGVkTGF5ZXJJRCBtX2lkOwotICAgIENvb3JkaW5hdGVkTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwor
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlIG1fbGF5ZXJTdGF0ZTsKICAgICBHcmFw
aGljc0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9jYWNoZWRJbnZlcnNlVHJhbnNmb3JtOwogICAgIEZsb2F0U2l6ZSBtX3BpeGVsQWxp
Z25tZW50T2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCA4NjI0NTEzMDQ5MmQ5YmIxMDNiZTBkNDIzMzJiM2Y2
MDA1MGNhMTU4Li5jNTQ2NjdhZjk3ZjllOWZiNzZlMzViMzQzY2I5YmYzYjlmMDkzNmVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
LmNwcApAQCAtMTk2LDU0ICsxOTYsNjMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKQogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJm
YWNlPiBzdXJmYWNlKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUNhbnZh
c0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAg
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotICAgIEFTU0VSVCghbV9zdXJm
YWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkpOworICAgIGlmICghc3RhdGUuY2FudmFzVG9r
ZW4uaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyU3Vy
ZmFjZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOwotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMu
c2V0KGlkLCBjYW52YXNCYWNraW5nU3RvcmUpOworICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMu
c2V0KGxheWVyLCBjYW52YXNCYWNraW5nU3RvcmUpOwogCi0gICAgY2FudmFzQmFja2luZ1N0b3Jl
LT5zZXRHcmFwaGljc1N1cmZhY2Uoc3VyZmFjZSk7CisgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFn
cyBzdXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8
IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOworICAgIGNhbnZhc0JhY2tpbmdTdG9y
ZS0+c2V0R3JhcGhpY3NTdXJmYWNlKEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN0YXRlLmNhbnZh
c1NpemUsIHN1cmZhY2VGbGFncywgc3RhdGUuY2FudmFzVG9rZW4pKTsKICAgICBsYXllci0+c2V0
Q29udGVudHNUb01lZGlhKGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7CiB9CiAKLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
dWludDMyX3QgZnJvbnRCdWZmZXIpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3lu
Y0NhbnZhc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7
Ci0gICAgQVNTRVJUKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMoaWQpKTsKIAotICAg
IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQmFja2luZ1N0
b3Jlcy5maW5kKGlkKTsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3Rv
cmU+IGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKKyAgICBpZiAoc3RhdGUuY2FudmFz
Q2hhbmdlZCkgeworICAgICAgICBkZXN0cm95Q2FudmFzSWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsK
KyAgICAgICAgY3JlYXRlQ2FudmFzSWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsKKyAgICB9CiAKLSAg
ICBjYW52YXNCYWNraW5nU3RvcmUtPnN3YXBCdWZmZXJzSWZOZWVkZWQoZnJvbnRCdWZmZXIpOwor
ICAgIGlmIChzdGF0ZS5jYW52YXNTaG91bGRTd2FwQnVmZmVycykgeworICAgICAgICBBU1NFUlQo
bV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhsYXllcikpOworICAgICAgICBTdXJmYWNl
QmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZmlu
ZChsYXllcik7CisgICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9y
ZT4gY2FudmFzQmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOworICAgICAgICBjYW52YXNCYWNraW5n
U3RvcmUtPnN3YXBCdWZmZXJzSWZOZWVkZWQoc3RhdGUuY2FudmFzRnJvbnRCdWZmZXIpOworICAg
IH0KIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ryb3lDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklEIGlkKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ry
b3lDYW52YXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIp
OwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICBBU1NFUlQo
bV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkpOworICAgIGlmIChzdGF0ZS5jYW52
YXNUb2tlbi5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIG1fc3VyZmFjZUJhY2tp
bmdTdG9yZXMucmVtb3ZlKGlkKTsKKyAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShs
YXllcik7CiAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKIH0KICNlbmRpZgogCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6c2V0TGF5ZXJSZXBhaW50Q291bnRJZk5lZWRlZChHcmFwaGljc0xheWVyKiBsYXllciwgY29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyKGxheWVyKS0+c2V0UmVwYWludENvdW50KHZhbHVlKTsKKyAgICBpZiAoIWxheWVyLT5p
c1Nob3dpbmdSZXBhaW50Q291bnRlcigpIHx8ICFzdGF0ZS5yZXBhaW50Q291bnRDaGFuZ2VkKQor
ICAgICAgICByZXR1cm47CisKKyAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVy
KS0+c2V0UmVwYWludENvdW50KHN0YXRlLnJlcGFpbnRDb3VudCk7CiB9CiAKLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkSURzKQordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRyZW5JZk5lZWRlZChHcmFwaGljc0xh
eWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQog
ewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAgICBpZiAoIXN0
YXRlLmNoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgVmVjdG9yPEdyYXBo
aWNzTGF5ZXIqPiBjaGlsZHJlbjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRJ
RHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGNoaWxkSUQgPSBj
aGlsZElEc1tpXTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLmNoaWxkcmVuLnNp
emUoKTsgKytpKSB7CisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBjaGlsZElEID0gc3RhdGUu
Y2hpbGRyZW5baV07CiAgICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNo
aWxkSUQpOwogICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwogICAgIH0KQEAgLTI1MSwx
NCArMjYwLDE1IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxk
cmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjCiB9CiAKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckZpbHRlcnNJZk5lZWRlZChH
cmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUm
IHN0YXRlKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAg
ICBpZiAoIXN0YXRlLmZpbHRlcnNDaGFuZ2VkKQorICAgICAgICByZXR1cm47CiAKICNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCi0gICAgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoZmls
dGVycyk7CisgICAgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoc3RhdGUuZmlsdGVy
cyk7CiAjZW5kaWYKLSAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+
c2V0RmlsdGVycyhzdGF0ZS5maWx0ZXJzKTsKIH0KICNlbmRpZgogCkBAIC0yOTQsNDMgKzMwNCw3
OCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJv
Z3JhbShpbnQgaWQpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQogCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQg
aWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBsYXllckluZm8pCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNv
bnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBsYXllclN0YXRlKQogewogICAgIEFT
U0VSVChtX3Jvb3RMYXllcklEICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOwogICAgIEdy
YXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKIAotICAgIGxheWVyLT5zZXRSZXBs
aWNhdGVkQnlMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllckluZm8ucmVwbGljYSkpOwot
ICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJJbmZvLm1h
c2spKTsKLQotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8uYW5jaG9yUG9pbnQp
OwotICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllckluZm8ucG9zKTsKLSAgICBsYXllci0+c2V0
U2l6ZShsYXllckluZm8uc2l6ZSk7Ci0KLSAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5m
by50cmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8u
Y2hpbGRyZW5UcmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5
ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxh
eWVySW5mby5jb250ZW50c09wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXll
ckluZm8uY29udGVudHNSZWN0KTsKLSAgICBsYXllci0+c2V0Q29udGVudHNUb1NvbGlkQ29sb3Io
bGF5ZXJJbmZvLnNvbGlkQ29sb3IpOwotICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJ
bmZvLmRyYXdzQ29udGVudCk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZShsYXllcklu
Zm8uY29udGVudHNWaXNpYmxlKTsKLSAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxh
eWVyKS0+c2V0Rml4ZWRUb1ZpZXdwb3J0KGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpOwotICAg
IGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIobGF5ZXJJbmZvLnNob3dEZWJ1Z0JvcmRlcnMpOwot
ICAgIGxheWVyLT5zZXREZWJ1Z0JvcmRlcihsYXllckluZm8uZGVidWdCb3JkZXJDb2xvciwgbGF5
ZXJJbmZvLmRlYnVnQm9yZGVyV2lkdGgpOwotICAgIGxheWVyLT5zZXRTaG93UmVwYWludENvdW50
ZXIobGF5ZXJJbmZvLnNob3dSZXBhaW50Q291bnRlcik7Ci0KLSAgICBpZiAobGF5ZXJJbmZvLmZp
eGVkVG9WaWV3cG9ydCkKKyAgICBpZiAobGF5ZXJTdGF0ZS5wb3NpdGlvbkNoYW5nZWQpCisgICAg
ICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllclN0YXRlLnBvcyk7CisKKyAgICBpZiAobGF5ZXJT
dGF0ZS5hbmNob3JQb2ludENoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChs
YXllclN0YXRlLmFuY2hvclBvaW50KTsKKworICAgIGlmIChsYXllclN0YXRlLnNpemVDaGFuZ2Vk
KQorICAgICAgICBsYXllci0+c2V0U2l6ZShsYXllclN0YXRlLnNpemUpOworCisgICAgaWYgKGxh
eWVyU3RhdGUudHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShs
YXllclN0YXRlLnRyYW5zZm9ybSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5z
Zm9ybUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllclN0
YXRlLmNoaWxkcmVuVHJhbnNmb3JtKTsKKworICAgIGlmIChsYXllclN0YXRlLmNvbnRlbnRzUmVj
dENoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJTdGF0ZS5jb250
ZW50c1JlY3QpOworCisgICAgaWYgKGxheWVyU3RhdGUub3BhY2l0eUNoYW5nZWQpCisgICAgICAg
IGxheWVyLT5zZXRPcGFjaXR5KGxheWVyU3RhdGUub3BhY2l0eSk7CisKKyAgICBpZiAobGF5ZXJT
dGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9Tb2xp
ZENvbG9yKGxheWVyU3RhdGUuc29saWRDb2xvcik7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5kZWJ1
Z0JvcmRlckNvbG9yQ2hhbmdlZCB8fCBsYXllclN0YXRlLmRlYnVnQm9yZGVyV2lkdGhDaGFuZ2Vk
KQorICAgICAgICBsYXllci0+c2V0RGVidWdCb3JkZXIobGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNv
bG9yLCBsYXllclN0YXRlLmRlYnVnQm9yZGVyV2lkdGgpOworCisgICAgaWYgKGxheWVyU3RhdGUu
cmVwbGljYUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihnZXRM
YXllckJ5SURJZkV4aXN0cyhsYXllclN0YXRlLnJlcGxpY2EpKTsKKworICAgIGlmIChsYXllclN0
YXRlLm1hc2tDaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0TWFza0xheWVyKGdldExheWVyQnlJ
RElmRXhpc3RzKGxheWVyU3RhdGUubWFzaykpOworCisgICAgaWYgKGxheWVyU3RhdGUuaW1hZ2VD
aGFuZ2VkKQorICAgICAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKGxheWVyLCBsYXllclN0
YXRlLmltYWdlSUQpOworCisgICAgaWYgKGxheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkKSB7CisgICAg
ICAgIGxheWVyLT5zZXRDb250ZW50c09wYXF1ZShsYXllclN0YXRlLmNvbnRlbnRzT3BhcXVlKTsK
KyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllclN0YXRlLmRyYXdzQ29udGVudCk7
CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1Zpc2libGUobGF5ZXJTdGF0ZS5jb250ZW50c1Zp
c2libGUpOworICAgICAgICBsYXllci0+c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVyU3RhdGUu
YmFja2ZhY2VWaXNpYmxlKTsKKworICAgICAgICAvLyBOZXZlciBjbGlwIHRoZSByb290IGxheWVy
LgorICAgICAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllclN0YXRlLmlzUm9vdExheWVy
ID8gZmFsc2UgOiBsYXllclN0YXRlLm1hc2tzVG9Cb3VuZHMpOworICAgICAgICBsYXllci0+c2V0
UHJlc2VydmVzM0QobGF5ZXJTdGF0ZS5wcmVzZXJ2ZXMzRCk7CisKKyAgICAgICAgdG9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcihsYXllciktPnNldEZpeGVkVG9WaWV3cG9ydChsYXllclN0YXRl
LmZpeGVkVG9WaWV3cG9ydCk7CisgICAgICAgIGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIobGF5
ZXJTdGF0ZS5zaG93RGVidWdCb3JkZXJzKTsKKyAgICAgICAgbGF5ZXItPnNldFNob3dSZXBhaW50
Q291bnRlcihsYXllclN0YXRlLnNob3dSZXBhaW50Q291bnRlcik7CisgICAgfQorCisgICAgaWYg
KGxheWVyU3RhdGUuZml4ZWRUb1ZpZXdwb3J0KQogICAgICAgICBtX2ZpeGVkTGF5ZXJzLmFkZChp
ZCwgbGF5ZXIpOwogICAgIGVsc2UKICAgICAgICAgbV9maXhlZExheWVycy5yZW1vdmUoaWQpOwog
Ci0gICAgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihpZCwgbGF5ZXIsIGxheWVySW5mby5pbWFn
ZUlEKTsKICAgICBwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShsYXllcik7CiAKLSAgICAvLyBO
ZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCi0gICAgbGF5ZXItPnNldE1hc2tzVG9Cb3Vu
ZHMobGF5ZXJJbmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5k
cyk7Ci0gICAgbGF5ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOwotICAgIGxheWVy
LT5zZXRQcmVzZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOworICAgIC8vIEFwcGx5IE9w
ZXJhdGlvbnMuCisgICAgc2V0TGF5ZXJDaGlsZHJlbklmTmVlZGVkKGxheWVyLCBsYXllclN0YXRl
KTsKKyAgICB1cGRhdGVUaWxlc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisgICAgc2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQobGF5ZXIsIGxheWVy
U3RhdGUpOworI2VuZGlmCisgICAgc2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQobGF5ZXIsIGxh
eWVyU3RhdGUpOworICAgIHN5bmNDYW52YXNJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7Cisg
ICAgc2V0TGF5ZXJSZXBhaW50Q291bnRJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7CiB9CiAK
IEdyYXBoaWNzTGF5ZXIqIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Z2V0TGF5ZXJCeUlESWZF
eGlzdHMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQpAQCAtMzY1LDcgKzQxMCw3IEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5
ZXJJRCkKICAgICBtX2JhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKICAgICBtX2Zp
eGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShsYXllcklEKTsKKyAgICBtX3N1cmZhY2VC
YWNraW5nU3RvcmVzLnJlbW92ZShsYXllci5nZXQoKSk7CiAjZW5kaWYKIH0KIApAQCAtNDE5LDM2
ICs0NjQsNTYgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlc2V0QmFja2luZ1N0
b3JlU2l6ZVRvTGF5ZXJTaXplKEdyYXBoaWNzTGF5ZXIqIGcKICAgICBtX2JhY2tpbmdTdG9yZXNX
aXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OmNyZWF0ZVRpbGVzSWZOZWVkZWQoR3JhcGhpY3NMYXllciogbGF5ZXIsIGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBpZiAoc3RhdGUudGlsZXNUb0NyZWF0ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldChsYXllcik7CiAgICAg
QVNTRVJUKGJhY2tpbmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKHRpbGVJ
RCwgc2NhbGUpOworCisgICAgVmVjdG9yPFRpbGVDcmVhdGlvbkluZm8+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBzdGF0ZS50aWxlc1RvQ3JlYXRlLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFRpbGVD
cmVhdGlvbkluZm8+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0YXRlLnRpbGVzVG9DcmVhdGUuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUo
aXQtPnRpbGVJRCwgaXQtPnNjYWxlKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlc0lmTmVlZGVkKEdy
YXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7
CisgICAgaWYgKHN0YXRlLnRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1f
YmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwogICAgIGlmICghYmFja2luZ1N0b3JlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBiYWNraW5nU3RvcmUtPnJlbW92ZVRpbGUodGlsZUlEKTsKKyAgICBW
ZWN0b3I8dWludDMyX3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdGF0ZS50aWxlc1RvUmVtb3Zl
LmVuZCgpOworICAgIGZvciAoVmVjdG9yPHVpbnQzMl90Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBz
dGF0ZS50aWxlc1RvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgYmFj
a2luZ1N0b3JlLT5yZW1vdmVUaWxlKCppdCk7CisKICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVu
ZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjp1cGRhdGVUaWxlc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgY3JlYXRlVGlsZXNJZk5lZWRl
ZChsYXllciwgc3RhdGUpOworICAgIHJlbW92ZVRpbGVzSWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsK
KworICAgIGlmIChzdGF0ZS50aWxlc1RvVXBkYXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBt
X2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKICAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKIAot
ICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHVwZGF0ZS5hdGxh
c0lEKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7CisgICAgVmVjdG9yPFRp
bGVVcGRhdGVJbmZvPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RhdGUudGlsZXNUb1VwZGF0ZS5l
bmQoKTsKKyAgICBmb3IgKFZlY3RvcjxUaWxlVXBkYXRlSW5mbz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gc3RhdGUudGlsZXNUb1VwZGF0ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvID0gaXQtPnVwZGF0
ZUluZm87CiAKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGUuc291
cmNlUmVjdCwgdXBkYXRlLnRpbGVSZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZS5vZmZzZXQpOwotICAg
IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKKyAg
ICAgICAgU3VyZmFjZU1hcDo6aXRlcmF0b3Igc3VyZmFjZUl0ID0gbV9zdXJmYWNlcy5maW5kKHN1
cmZhY2VVcGRhdGVJbmZvLmF0bGFzSUQpOworICAgICAgICBBU1NFUlQoc3VyZmFjZUl0ICE9IG1f
c3VyZmFjZXMuZW5kKCkpOworCisgICAgICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZShpdC0+
dGlsZUlELCBzdXJmYWNlVXBkYXRlSW5mby51cGRhdGVSZWN0LCBpdC0+dGlsZVJlY3QsIHN1cmZh
Y2VJdC0+dmFsdWUsIHN1cmZhY2VVcGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpOworICAgICAgICBt
X2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CisgICAg
fQogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2Up
CkBAIC01MDQsMTAgKzU2OSwxMCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVt
b3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZwogICAgIG1fcmVs
ZWFzZWRJbWFnZUJhY2tpbmdzLmFwcGVuZChtX2ltYWdlQmFja2luZ3MudGFrZShpbWFnZUlEKSk7
CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphc3NpZ25JbWFnZUJhY2tpbmdU
b0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgR3JhcGhpY3NMYXllciogbGF5ZXIsIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjphc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCi0gICAgaWYgKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMoaWQpKQorICAgIGlm
IChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGxheWVyKSkKICAgICAgICAgcmV0dXJu
OwogI2VuZGlmCiAKQEAgLTUzNCwxMyArNTk5LDI0IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpCiAgICAgbV9iYWNr
aW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpmbHVzaExheWVyQ2hhbmdlcyhjb25zdCBGbG9hdFBvaW50JiBzY3Jv
bGxQb3NpdGlvbikKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRTY2VuZVN0
YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgbV9yZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKKyAgICBtX3JlbmRl
cmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHN0YXRlLnNjcm9sbFBvc2l0aW9uOwogCiAgICAg
Ly8gU2luY2UgdGhlIGZyYW1lIGhhcyBub3cgYmVlbiByZW5kZXJlZCwgd2UgY2FuIHNhZmVseSB1
bmxvY2sgdGhlIGFuaW1hdGlvbnMgdW50aWwgdGhlIG5leHQgbGF5b3V0LgogICAgIHNldEFuaW1h
dGlvbnNMb2NrZWQoZmFsc2UpOwogCisgICAgaWYgKHN0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVy
ICE9IG1fcm9vdExheWVySUQpCisgICAgICAgIHNldFJvb3RMYXllcklEKHN0YXRlLnJvb3RDb21w
b3NpdGluZ0xheWVyKTsKKworICAgIGlmIChzdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgIT0gbV9iYWNr
Z3JvdW5kQ29sb3IpCisgICAgICAgIHNldEJhY2tncm91bmRDb2xvcihzdGF0ZS5iYWNrZ3JvdW5k
Q29sb3IpOworCisgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPENvb3JkaW5hdGVkTGF5ZXJJ
RCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU+ID4gTGF5ZXJVcGRhdGVQYWlyVmVjdG9y
OworICAgIExheWVyVXBkYXRlUGFpclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RhdGUu
bGF5ZXJzVG9VcGRhdGUuZW5kKCk7CisgICAgZm9yIChMYXllclVwZGF0ZVBhaXJWZWN0b3I6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gc3RhdGUubGF5ZXJzVG9VcGRhdGUuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICBzZXRMYXllclN0YXRlKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7CisK
ICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKICAg
ICBjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpOwogICAgIHJlbW92ZVJlbGVh
c2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7CkBAIC02MTYsMTIgKzY5MiwxNiBAQCB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKICAgICAgICAgbV9j
bGllbnQtPnB1cmdlQmFja2luZ1N0b3JlcygpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3Qg
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQoR3JhcGhpY3NMYXllciogZ3Jh
cGhpY3NMYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQog
ewotICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBsYXllciA9IHRvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIobGF5ZXJCeUlEKGlkKSk7CisgICAgaWYgKCFzdGF0ZS5hbmltYXRpb25z
Q2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIqIGxheWVyID0gdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihncmFwaGljc0xheWVyKTsK
KwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFu
aW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZy
YW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5r
ZXlmcmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLmFuaW1hdGlvbnMu
YW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiBrZXlmcmFtZXMgPSBzdGF0ZS5hbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlm
cmFtZXMoKTsKICAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRGaWx0ZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKQEAgLTYzMCw3ICs3MTAs
NyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0g
ICAgbGF5ZXItPnNldEFuaW1hdGlvbnMoYW5pbWF0aW9ucyk7CisgICAgbGF5ZXItPnNldEFuaW1h
dGlvbnMoc3RhdGUuYW5pbWF0aW9ucyk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4IDljOTIxYTc0ZjZj
M2YwZDgzNzFjMGI5MjlmNzgxMmI0ODljZmY1ZDEuLmVkNWRiZTAxZWZiN2EzOTNhNDJlOWY5OTU5
YjhiMWI4ZTFiMzNiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lX2gKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNs
dWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKQEAgLTQ2LDcgKzQ2
LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU7Ci1jbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKIGNsYXNzIEN1c3RvbUZpbHRlclByb2dy
YW07CiBjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbzsKIGNsYXNzIFRleHR1cmVNYXBwZXJM
YXllcjsKQEAgLTY0LDMxICs2MywxMSBAQCBwdWJsaWM6CiAKIGNsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU+LCBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3Ry
dWN0IFRpbGVVcGRhdGUgewotICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3Q7Ci0gICAgICAgIElu
dFJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7Ci0gICAgICAgIEludFBv
aW50IG9mZnNldDsKLSAgICAgICAgVGlsZVVwZGF0ZShjb25zdCBJbnRSZWN0JiBzb3VyY2UsIGNv
bnN0IEludFJlY3QmIHRpbGUsIHVpbnQzMl90IGF0bGFzLCBjb25zdCBJbnRQb2ludCYgbmV3T2Zm
c2V0KQotICAgICAgICAgICAgOiBzb3VyY2VSZWN0KHNvdXJjZSkKLSAgICAgICAgICAgICwgdGls
ZVJlY3QodGlsZSkKLSAgICAgICAgICAgICwgYXRsYXNJRChhdGxhcykKLSAgICAgICAgICAgICwg
b2Zmc2V0KG5ld09mZnNldCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsKICAgICBleHBs
aWNpdCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xp
ZW50Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CiAgICAgdm9p
ZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZs
b2F0LCBjb25zdCBGbG9hdFJlY3QmLCBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzID0gMCk7CiAg
ICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7
CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7Ci0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklELCBjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KTsKLSAgICB2
b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7
Ci0gICAgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAg
ICB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVl
KTsKLQogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYpOwogCkBAIC05NywzMSArNzYsMjMgQEAgcHVibGljOgogICAgIHZvaWQg
cHVyZ2VHTFJlc291cmNlcygpOwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOwogCisgICAgdm9p
ZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOworCiAg
ICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsK
ICAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYp
OwotICAgIHZvaWQgc2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lk
IHNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRp
bmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJT
KQotICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCisKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAg
dm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKSBjb25zdDsKICAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0o
aW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwogICAgIHZvaWQgcmVtb3Zl
Q3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwogI2VuZGlmCiAKLSAgICB2b2lkIGNyZWF0ZVRp
bGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKTsKLSAg
ICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwot
ICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3Qg
YXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKICAgICB2b2lkIHJlbW92
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1c2hMYXllckNoYW5n
ZXMoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogICAgIHZvaWQgY3JlYXRlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgdXBkYXRlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRTdXJmYWNlPik7CiAgICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKICAgICB2b2lkIHNl
dEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgQ29sb3ImKTsKICAgICB2b2lkIHNldERyYXdzQmFja2dyb3VuZChib29sIGVuYWJsZSkgeyBt
X3NldERyYXdzQmFja2dyb3VuZCA9IGVuYWJsZTsgfQpAQCAtMTMxLDYgKzEwMiwyMyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICB2b2lkIHNldFJvb3RMYXllcklEKENvb3JkaW5h
dGVkTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHNldExheWVy
Q2hpbGRyZW5JZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVzSWZOZWVkZWQoR3JhcGhpY3NMYXll
ciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBjcmVh
dGVUaWxlc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZSYpOworICAgIHZvaWQgcmVtb3ZlVGlsZXNJZk5lZWRlZChHcmFwaGljc0xheWVy
KiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgdm9pZCBzZXRMYXllckZpbHRlcnNJZk5lZWRlZChHcmFwaGljc0xheWVy
KiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyNlbmRpZgorICAgIHZv
aWQgc2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQoR3JhcGhpY3NMYXllciosIGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisg
ICAgdm9pZCBjcmVhdGVDYW52YXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHN5bmNDYW52YXNJZk5lZWRlZChH
cmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAg
ICB2b2lkIGRlc3Ryb3lDYW52YXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyNlbmRpZgorICAgIHZvaWQgc2V0TGF5ZXJSZXBh
aW50Q291bnRJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyU3RhdGUmKTsKKwogICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChDb29yZGluYXRl
ZExheWVySUQgaWQpCiAgICAgewogICAgICAgICBBU1NFUlQobV9sYXllcnMuY29udGFpbnMoaWQp
KTsKQEAgLTE1OSw3ICsxNDcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlTGF5ZXIoQ29v
cmRpbmF0ZWRMYXllcklEKTsKICAgICB2b2lkIGRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJ
RCk7CiAKLSAgICB2b2lkIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoQ29vcmRpbmF0ZWRMYXll
cklELCBHcmFwaGljc0xheWVyKiwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9p
ZCBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBoaWNzTGF5ZXIqLCBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKICAgICB2b2lkIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVl
ZGVkKCk7CiAgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKICAgICB2b2lkIGNvbW1pdFBlbmRp
bmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7CkBAIC0xODUsNyArMTczLDcgQEAgcHJpdmF0ZToK
ICAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBtX2JhY2tpbmdT
dG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnM7CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBSZWZQdHI8VGV4dHVyZU1hcHBl
clN1cmZhY2VCYWNraW5nU3RvcmU+ID4gU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8R3JhcGhpY3NMYXllciosIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJh
Y2tpbmdTdG9yZT4gPiBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOwogICAgIFN1cmZhY2VCYWNraW5n
U3RvcmVNYXAgbV9zdXJmYWNlQmFja2luZ1N0b3JlczsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjY4NjYwNTE2NjdjN2FiYWViNDI1MDdhMWZhMWM2MjM4ZWM0NWE3OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZV9oCisj
ZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRpb24u
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
IlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
KworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgi
CisjZW5kaWYKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorI2luY2x1ZGUgIkdyYXBoaWNz
U3VyZmFjZVRva2VuLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
b29yZGluYXRlZFN1cmZhY2U7CisKK3R5cGVkZWYgdWludDMyX3QgQ29vcmRpbmF0ZWRMYXllcklE
OworZW51bSB7IEludmFsaWRDb29yZGluYXRlZExheWVySUQgPSAwIH07CisKK3R5cGVkZWYgdWlu
dDY0X3QgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKK2VudW0geyBJbnZhbGlkQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCA9IDAgfTsKKworc3RydWN0IFRpbGVVcGRhdGVJbmZvIHsKKyAgICB1
aW50MzJfdCB0aWxlSUQ7CisgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAgICBXZWJDb3JlOjpTdXJm
YWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworfTsKKworc3RydWN0IFRpbGVDcmVhdGlvbkluZm8g
eworICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICBmbG9hdCBzY2FsZTsKK307CisKK3N0cnVjdCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSB7CisgICAgdW5pb24geworICAgICAgICBzdHJ1
Y3QgeworICAgICAgICAgICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQ6IDE7CisgICAgICAgICAgICBi
b29sIGFuY2hvclBvaW50Q2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgc2l6ZUNoYW5nZWQ6
IDE7CisgICAgICAgICAgICBib29sIHRyYW5zZm9ybUNoYW5nZWQ6IDE7CisgICAgICAgICAgICBi
b29sIGNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgY29udGVu
dHNSZWN0Q2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgb3BhY2l0eUNoYW5nZWQ6IDE7Cisg
ICAgICAgICAgICBib29sIHNvbGlkQ29sb3JDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBk
ZWJ1Z0JvcmRlckNvbG9yQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgZGVidWdCb3JkZXJX
aWR0aENoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29sIHJlcGxpY2FDaGFuZ2VkOiAxOworICAg
ICAgICAgICAgYm9vbCBtYXNrQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgaW1hZ2VDaGFu
Z2VkOiAxOworICAgICAgICAgICAgYm9vbCBmbGFnc0NoYW5nZWQ6IDE7CisgICAgICAgICAgICBi
b29sIGFuaW1hdGlvbnNDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBmaWx0ZXJzQ2hhbmdl
ZDogMTsKKyAgICAgICAgICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkOiAxOworICAgICAgICAgICAg
Ym9vbCByZXBhaW50Q291bnRDaGFuZ2VkIDogMTsKKyAgICAgICAgICAgIGJvb2wgY2FudmFzQ2hh
bmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgY2FudmFzU2hvdWxkU3dhcEJ1ZmZlcnM6IDE7Cisg
ICAgICAgIH07CisgICAgICAgIHVuc2lnbmVkIGNoYW5nZU1hc2s7CisgICAgfTsKKyAgICB1bmlv
biB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDog
MTsKKyAgICAgICAgICAgIGJvb2wgZHJhd3NDb250ZW50IDogMTsKKyAgICAgICAgICAgIGJvb2wg
Y29udGVudHNWaXNpYmxlIDogMTsKKyAgICAgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmxlIDog
MTsKKyAgICAgICAgICAgIGJvb2wgbWFza3NUb0JvdW5kcyA6IDE7CisgICAgICAgICAgICBib29s
IHByZXNlcnZlczNEIDogMTsKKyAgICAgICAgICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7CisgICAg
ICAgICAgICBib29sIGZpeGVkVG9WaWV3cG9ydCA6IDE7CisgICAgICAgICAgICBib29sIHNob3dE
ZWJ1Z0JvcmRlcnMgOiAxOworICAgICAgICAgICAgYm9vbCBzaG93UmVwYWludENvdW50ZXIgOiAx
OworICAgICAgICB9OworICAgICAgICB1bnNpZ25lZCBmbGFnczsKKyAgICB9OworCisgICAgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUoKQorICAgICAgICA6IGNoYW5nZU1hc2soMCkKKyAg
ICAgICAgLCBjb250ZW50c09wYXF1ZShmYWxzZSkKKyAgICAgICAgLCBkcmF3c0NvbnRlbnQoZmFs
c2UpCisgICAgICAgICwgY29udGVudHNWaXNpYmxlKHRydWUpCisgICAgICAgICwgYmFja2ZhY2VW
aXNpYmxlKHRydWUpCisgICAgICAgICwgbWFza3NUb0JvdW5kcyhmYWxzZSkKKyAgICAgICAgLCBw
cmVzZXJ2ZXMzRChmYWxzZSkKKyAgICAgICAgLCBpc1Jvb3RMYXllcihmYWxzZSkKKyAgICAgICAg
LCBmaXhlZFRvVmlld3BvcnQoZmFsc2UpCisgICAgICAgICwgc2hvd0RlYnVnQm9yZGVycyhmYWxz
ZSkKKyAgICAgICAgLCBzaG93UmVwYWludENvdW50ZXIoZmFsc2UpCisgICAgICAgICwgb3BhY2l0
eSgwKQorICAgICAgICAsIGRlYnVnQm9yZGVyV2lkdGgoMCkKKyAgICAgICAgLCByZXBsaWNhKElu
dmFsaWRDb29yZGluYXRlZExheWVySUQpCisgICAgICAgICwgbWFzayhJbnZhbGlkQ29vcmRpbmF0
ZWRMYXllcklEKQorICAgICAgICAsIGltYWdlSUQoSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpCisgICAgICAgICwgY2FudmFzRnJvbnRCdWZmZXIoMCkKKyAgICB7CisgICAgfQorCisg
ICAgRmxvYXRQb2ludCBwb3M7CisgICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OworICAgIEZs
b2F0U2l6ZSBzaXplOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKKyAgICBJbnRSZWN0IGNvbnRl
bnRzUmVjdDsKKyAgICBmbG9hdCBvcGFjaXR5OworICAgIENvbG9yIHNvbGlkQ29sb3I7CisgICAg
Q29sb3IgZGVidWdCb3JkZXJDb2xvcjsKKyAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOworI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisjZW5k
aWYKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRpb25zOworICAgIFZlY3Rvcjx1
aW50MzJfdD4gY2hpbGRyZW47CisgICAgVmVjdG9yPFRpbGVDcmVhdGlvbkluZm8+IHRpbGVzVG9D
cmVhdGU7CisgICAgVmVjdG9yPHVpbnQzMl90PiB0aWxlc1RvUmVtb3ZlOworICAgIENvb3JkaW5h
dGVkTGF5ZXJJRCByZXBsaWNhOworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtYXNrOworICAgIENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRDsKKworICAgIHVuc2lnbmVkIHJlcGFpbnRD
b3VudDsKKyAgICBWZWN0b3I8VGlsZVVwZGF0ZUluZm8+IHRpbGVzVG9VcGRhdGU7CisKKyNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBJbnRTaXplIGNhbnZhc1NpemU7CisgICAgR3JhcGhp
Y3NTdXJmYWNlVG9rZW4gY2FudmFzVG9rZW47CisgICAgdWludDMyX3QgY2FudmFzRnJvbnRCdWZm
ZXI7CisjZW5kaWYKK307CisKK3N0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgeworICAg
IHVpbnQzMl90IHJvb3RDb21wb3NpdGluZ0xheWVyOworICAgIENvbG9yIGJhY2tncm91bmRDb2xv
cjsKKyAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uOworICAgIEludFNpemUgY29udGVudHNT
aXplOworICAgIEludFJlY3QgY292ZXJlZFJlY3Q7CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPENv
b3JkaW5hdGVkTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU+ID4gbGF5ZXJz
VG9VcGRhdGU7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
LCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiA+ID4gaW1hZ2VzVG9VcGRhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAppbmRleCA1YjViNTdh
NmVjYjEwMWVmNzViMjkxOTFiNTc1MDdiZWRkYTJmNzY1Li4zNjllMjM5ZjliMGEyOThjZDlmY2Nl
NDIzZGE0ZDJmMWU1YTIxYTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcuaApAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBDb29yZGlu
YXRlZEltYWdlQmFja2luZ19oCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5j
bHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBo
aWNzU3RhdGUuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJJ
bWFnZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZExheWVySW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmEy
YTEyZWQzZjQ2YzA4NDIzYjRiOWM0ZGM5MTY1NjlmMDM4Yjc2Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5oCisrKyAvZGV2L251
bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllckluZm9faAotI2RlZmluZSBDb29yZGluYXRlZExh
eWVySW5mb19oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJD
b2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgot
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgdWludDMyX3QgQ29vcmRpbmF0ZWRMYXll
cklEOwotZW51bSB7IEludmFsaWRDb29yZGluYXRlZExheWVySUQgPSAwIH07Ci0KLXR5cGVkZWYg
dWludDY0X3QgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKLWVudW0geyBJbnZhbGlkQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCA9IDAgfTsKLQotLy8gTk9URTogQ29vcmRpbmF0ZWRMYXllcklu
Zm8gc2hvdWxkIG9ubHkgdXNlIFBPRCB0eXBlcywgYXMgdG8gbWFrZSBzZXJpYWxpemF0aW9uIGZh
c3Rlci4KLXN0cnVjdCBDb29yZGluYXRlZExheWVySW5mbyB7Ci0gICAgQ29vcmRpbmF0ZWRMYXll
ckluZm8oKQotICAgICAgICA6IHJlcGxpY2EoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKLSAg
ICAgICAgLCBtYXNrKEludmFsaWRDb29yZGluYXRlZExheWVySUQpCi0gICAgICAgICwgaW1hZ2VJ
RChJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkKLSAgICAgICAgLCBvcGFjaXR5KDAp
Ci0gICAgICAgICwgZGVidWdCb3JkZXJXaWR0aCgwKQotICAgICAgICAsIGZsYWdzKDApIHsgfQot
Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklEIHJlcGxpY2E7Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklE
IG1hc2s7Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEOwotCi0gICAgRmxv
YXRQb2ludCBwb3M7Ci0gICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwotICAgIEZsb2F0U2l6
ZSBzaXplOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKLSAgICBJbnRSZWN0IGNvbnRlbnRzUmVj
dDsKLSAgICBmbG9hdCBvcGFjaXR5OwotICAgIENvbG9yIHNvbGlkQ29sb3I7Ci0gICAgQ29sb3Ig
ZGVidWdCb3JkZXJDb2xvcjsKLSAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOwotCi0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgYm9vbCBjb250ZW50c09wYXF1ZSA6
IDE7Ci0gICAgICAgICAgICBib29sIGRyYXdzQ29udGVudCA6IDE7Ci0gICAgICAgICAgICBib29s
IGNvbnRlbnRzVmlzaWJsZSA6IDE7Ci0gICAgICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJsZSA6
IDE7Ci0gICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwotICAgICAgICAgICAgYm9v
bCBwcmVzZXJ2ZXMzRCA6IDE7Ci0gICAgICAgICAgICBib29sIGlzUm9vdExheWVyOiAxOwotICAg
ICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOwotICAgICAgICAgICAgYm9vbCBzaG93
RGVidWdCb3JkZXJzIDogMTsKLSAgICAgICAgICAgIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyIDog
MTsKLSAgICAgICAgfTsKLSAgICAgICAgdW5zaWduZWQgZmxhZ3M7Ci0gICAgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBk
YXRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKaW5kZXggNmFiMzg0YTExZWFhNWVhMjU0MDgxM2M3
MDI1ZTVmYzhjMTdkMzkxMC4uNWFmMDY5YTJiZDdhN2E3ZTJlZTc3YWM1YjBjMjk4MzgzY2NlYWJh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKQEAgLTIz
LDEyICsyMywxMCBAQAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAogI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbyB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU3VyZmFjZVVwZGF0ZUluZm8pOwogCiBwdWJsaWM6CiAgICAgU3VyZmFjZVVwZGF0ZUlu
Zm8oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNz
YWdlcy5weSBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQppbmRl
eCBiNjkwYTAxODliZTFmMWJlYmVlNDE3ZjA1ZTJiOWI4YmQzMGFmY2M4Li5mNDY1YzdmMzAxYmJj
OTFkM2Q4MzhiYmE2ZTk0ZTFiYWQ5NTk3OGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
Y3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5CkBAIC0zOTgsNyArMzk4LDcgQEAgZGVmIGhlYWRlcnNfZm9yX3R5
cGUodHlwZSk6CiAgICAgc3BlY2lhbF9jYXNlcyA9IHsKICAgICAgICAgJ1dURjo6U3RyaW5nJzog
Wyc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpDb21wb3NpdGlv
blVuZGVybGluZSc6IFsnPFdlYkNvcmUvRWRpdG9yLmg+J10sCi0gICAgICAgICdXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQnOiBbJzxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+J10s
CisgICAgICAgICdXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSc6IFsnPFdl
YkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsJzogWyc8V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPiddLAogICAgICAg
ICAnV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMnOiBbJzxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXJBbmltYXRpb24uaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0
JzogWyc8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+J10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1l
bnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAppbmRleCA1YTA2ZDExNjhjMjI3
NjAyY2EyMGMxYmMyODBkMTc2OTcyNmEwNTg4Li44MGM3MjU5OGUwYWQ4MDA5NzNiYzg5YjM5NTY2
NzViMTI3N2U4ZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTI5LDEwICsyOSwxMSBAQAogI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2luY2x1ZGUgIldlYkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIldl
YkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQW5pbWF0aW9uLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRM
YXllckluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludDNELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JZGVudGl0eVRyYW5z
Zm9ybU9wZXJhdGlvbi5oPgpAQCAtNzMsOSArNzQsNyBAQAogI2VuZGlmCiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7Ci0jZW5kaWYKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCkBAIC04MTUsMjQgKzgxNCwy
NjEgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuPjo6
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2QKIH0KICNlbmRpZgogCi12b2lkIEFyZ3VtZW50
Q29kZXI8Q29vcmRpbmF0ZWRMYXllckluZm8+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgY29vcmRpbmF0ZWRMYXllckluZm8pCit2
b2lkIEFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjplbmNvZGUoQXJndW1lbnRFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgc3VyZmFjZVVwZGF0ZUluZm8p
CiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZExheWVySW5mbz46OmVuY29k
ZShlbmNvZGVyLCBjb29yZGluYXRlZExheWVySW5mbyk7CisgICAgU2ltcGxlQXJndW1lbnRDb2Rl
cjxTdXJmYWNlVXBkYXRlSW5mbz46OmVuY29kZShlbmNvZGVyLCBzdXJmYWNlVXBkYXRlSW5mbyk7
CiB9CiAKLWJvb2wgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZExheWVySW5mbz46OmRlY29kZShB
cmd1bWVudERlY29kZXImIGRlY29kZXIsIENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBjb29yZGluYXRl
ZExheWVySW5mbykKK2Jvb2wgQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmRlY29k
ZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFN1cmZhY2VVcGRhdGVJbmZvJiBzdXJmYWNlVXBk
YXRlSW5mbykKIHsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZExh
eWVySW5mbz46OmRlY29kZShkZWNvZGVyLCBjb29yZGluYXRlZExheWVySW5mbyk7CisgICAgcmV0
dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUoZGVjb2Rl
ciwgc3VyZmFjZVVwZGF0ZUluZm8pOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8U3VyZmFjZVVw
ZGF0ZUluZm8+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYgc3VyZmFjZVVwZGF0ZUluZm8pCit2b2lkIEFyZ3VtZW50Q29kZXI8Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGU+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVy
LCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgU2lt
cGxlQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmVuY29kZShlbmNvZGVyLCBzdXJm
YWNlVXBkYXRlSW5mbyk7CisgICAgZW5jb2RlciA8PCBzdGF0ZS5jaGFuZ2VNYXNrOworCisgICAg
aWYgKHN0YXRlLmZsYWdzQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5mbGFnczsK
KworICAgIGlmIChzdGF0ZS5wb3NpdGlvbkNoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUucG9zOworCisgICAgaWYgKHN0YXRlLmFuY2hvclBvaW50Q2hhbmdlZCkKKyAgICAgICAgZW5j
b2RlciA8PCBzdGF0ZS5hbmNob3JQb2ludDsKKworICAgIGlmIChzdGF0ZS5zaXplQ2hhbmdlZCkK
KyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaXplOworCisgICAgaWYgKHN0YXRlLnRyYW5zZm9y
bUNoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUudHJhbnNmb3JtOworCisgICAgaWYg
KHN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0
ZS5jaGlsZHJlblRyYW5zZm9ybTsKKworICAgIGlmIChzdGF0ZS5jb250ZW50c1JlY3RDaGFuZ2Vk
KQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNvbnRlbnRzUmVjdDsKKworICAgIGlmIChzdGF0
ZS5vcGFjaXR5Q2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5vcGFjaXR5OworCisg
ICAgaWYgKHN0YXRlLnNvbGlkQ29sb3JDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRl
LnNvbGlkQ29sb3I7CisKKyAgICBpZiAoc3RhdGUuZGVidWdCb3JkZXJDb2xvckNoYW5nZWQpCisg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuZGVidWdCb3JkZXJDb2xvcjsKKworICAgIGlmIChzdGF0
ZS5kZWJ1Z0JvcmRlcldpZHRoQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5kZWJ1
Z0JvcmRlcldpZHRoOworCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGlmIChzdGF0ZS5m
aWx0ZXJzQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5maWx0ZXJzOworI2VuZGlm
CisKKyAgICBpZiAoc3RhdGUuYW5pbWF0aW9uc0NoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwg
c3RhdGUuYW5pbWF0aW9uczsKKworICAgIGlmIChzdGF0ZS5jaGlsZHJlbkNoYW5nZWQpCisgICAg
ICAgIGVuY29kZXIgPDwgc3RhdGUuY2hpbGRyZW47CisKKyAgICBlbmNvZGVyIDw8IHN0YXRlLnRp
bGVzVG9DcmVhdGU7CisgICAgZW5jb2RlciA8PCBzdGF0ZS50aWxlc1RvUmVtb3ZlOworCisgICAg
aWYgKHN0YXRlLnJlcGxpY2FDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnJlcGxp
Y2E7CisKKyAgICBpZiAoc3RhdGUubWFza0NoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3Rh
dGUubWFzazsKKworICAgIGlmIChzdGF0ZS5pbWFnZUNoYW5nZWQpCisgICAgICAgIGVuY29kZXIg
PDwgc3RhdGUuaW1hZ2VJRDsKKworICAgIGlmIChzdGF0ZS5yZXBhaW50Q291bnRDaGFuZ2VkKQor
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnJlcGFpbnRDb3VudDsKKworICAgIGVuY29kZXIgPDwg
c3RhdGUudGlsZXNUb1VwZGF0ZTsKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlm
IChzdGF0ZS5jYW52YXNDaGFuZ2VkKSB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuY2FudmFz
U2l6ZTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jYW52YXNUb2tlbjsKKyAgICAgICAgZW5j
b2RlciA8PCBzdGF0ZS5jYW52YXNGcm9udEJ1ZmZlcjsKKyAgICB9CisjZW5kaWYKIH0KIAotYm9v
bCBBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciYgZGVjb2RlciwgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvKQorYm9vbCBB
cmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlPjo6ZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciYgZGVjb2RlciwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRl
KQogewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6
ZGVjb2RlKGRlY29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHN0YXRlLmNoYW5nZU1hc2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
c3RhdGUuZmxhZ3NDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5mbGFncykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5wb3NpdGlvbkNoYW5nZWQgJiYgIWRl
Y29kZXIuZGVjb2RlKHN0YXRlLnBvcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChzdGF0ZS5hbmNob3JQb2ludENoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmFuY2hv
clBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLnNpemVDaGFu
Z2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5zaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKHN0YXRlLnRyYW5zZm9ybUNoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0
YXRlLnRyYW5zZm9ybSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5j
aGlsZHJlblRyYW5zZm9ybUNoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNoaWxkcmVu
VHJhbnNmb3JtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLmNvbnRl
bnRzUmVjdENoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNvbnRlbnRzUmVjdCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5vcGFjaXR5Q2hhbmdlZCAmJiAh
ZGVjb2Rlci5kZWNvZGUoc3RhdGUub3BhY2l0eSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChzdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUu
c29saWRDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5kZWJ1
Z0JvcmRlckNvbG9yQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuZGVidWdCb3JkZXJD
b2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5kZWJ1Z0JvcmRl
cldpZHRoQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuZGVidWdCb3JkZXJXaWR0aCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBp
ZiAoc3RhdGUuZmlsdGVyc0NoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmZpbHRlcnMp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKworICAgIGlmIChzdGF0ZS5hbmltYXRp
b25zQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuYW5pbWF0aW9ucykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5jaGlsZHJlbkNoYW5nZWQgJiYgIWRlY29k
ZXIuZGVjb2RlKHN0YXRlLmNoaWxkcmVuKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS50aWxlc1RvQ3JlYXRlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS50aWxlc1RvUmVtb3ZlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLnJlcGxpY2FDaGFuZ2VkICYm
ICFkZWNvZGVyLmRlY29kZShzdGF0ZS5yZXBsaWNhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKHN0YXRlLm1hc2tDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5tYXNr
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLmltYWdlQ2hhbmdlZCAm
JiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuaW1hZ2VJRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChzdGF0ZS5yZXBhaW50Q291bnRDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShz
dGF0ZS5yZXBhaW50Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHN0YXRlLnRpbGVzVG9VcGRhdGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBpZiAoc3RhdGUuY2FudmFzQ2hhbmdl
ZCkgeworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNhbnZhc1NpemUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3Rh
dGUuY2FudmFzVG9rZW4pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuY2FudmFzRnJvbnRCdWZmZXIpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgQXJndW1lbnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmVuY29kZShBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFRpbGVVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIFNpbXBs
ZUFyZ3VtZW50Q29kZXI8VGlsZVVwZGF0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgdXBkYXRlSW5m
byk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmRlY29kZShBcmd1
bWVudERlY29kZXImIGRlY29kZXIsIFRpbGVVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAg
IHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFRpbGVVcGRhdGVJbmZvPjo6ZGVjb2RlKGRlY29k
ZXIsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8VGlsZUNyZWF0aW9uSW5m
bz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRpbGVDcmVhdGlvbklu
Zm8mIHVwZGF0ZUluZm8pCit7CisgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxUaWxlQ3JlYXRpb25J
bmZvPjo6ZW5jb2RlKGVuY29kZXIsIHVwZGF0ZUluZm8pOworfQorCitib29sIEFyZ3VtZW50Q29k
ZXI8VGlsZUNyZWF0aW9uSW5mbz46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFRp
bGVDcmVhdGlvbkluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50
Q29kZXI8VGlsZUNyZWF0aW9uSW5mbz46OmRlY29kZShkZWNvZGVyLCB1cGRhdGVJbmZvKTsKK30K
Kwordm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZT46OmVuY29kZShB
cmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYg
c3RhdGUpCit7CisgICAgZW5jb2RlciA8PCBzdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllcjsKKyAg
ICBlbmNvZGVyIDw8IHN0YXRlLmJhY2tncm91bmRDb2xvcjsKKyAgICBlbmNvZGVyIDw8IHN0YXRl
LnNjcm9sbFBvc2l0aW9uOworICAgIGVuY29kZXIgPDwgc3RhdGUuY29udGVudHNTaXplOworICAg
IGVuY29kZXIgPDwgc3RhdGUuY292ZXJlZFJlY3Q7CisgICAgZW5jb2RlciA8PCBzdGF0ZS5sYXll
cnNUb1VwZGF0ZTsKKworICAgIC8vIFdlIG5lZWQgdG8gZW5jb2RlIFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZTo6SGFuZGxlIHJpZ2h0IGFmdGVyIGl0J3MgY3JlYXRpb24uCisgICAgLy8gVGhhdCdzIHdo
eSB3ZSBjYW5ub3QgdXNlIHNpbXBsZSBzdGQ6OnBhaXIgZW5jb2Rlci4KKyAgICBlbmNvZGVyIDw8
IHN0YXRlLmltYWdlc1RvVXBkYXRlLnNpemUoKTsKKworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6
cGFpcjxDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiA+ID4gU3VyZmFjZVVwZGF0ZVBhaXJWZWN0b3I7CisgICAgU3VyZmFjZVVwZGF0ZVBhaXJWZWN0
b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0YXRlLmltYWdlc1RvVXBkYXRlLmVuZCgpOworICAg
IGZvciAoU3VyZmFjZVVwZGF0ZVBhaXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3RhdGUu
aW1hZ2VzVG9VcGRhdGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisKKyAgICAgICAgV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxX
ZWJDb29yZGluYXRlZFN1cmZhY2UqPihpdC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICBpZiAoIXdlYkNvb3JkaW5h
dGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgZW5jb2RlciA8PCBpdC0+Zmlyc3Q7CisgICAgICAgIGVuY29kZXIgPDwgaGFuZGxl
OworICAgIH0KK30KKworYm9vbCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0
ZT46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIENvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5yb290Q29tcG9z
aXRpbmdMYXllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoc3RhdGUuYmFja2dyb3VuZENvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5zY3JvbGxQb3NpdGlvbikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuY29udGVudHNTaXpl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0
ZS5jb3ZlcmVkUmVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoc3RhdGUubGF5ZXJzVG9VcGRhdGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzaXplX3Qgc2l6ZU9mSW1hZ2VzVG9VcGRhdGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzaXplT2ZJbWFnZXNUb1VwZGF0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZU9mSW1hZ2VzVG9VcGRhdGU7IGkrKykgeworICAgICAg
ICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQ7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoaW1hZ2VJRCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGhhbmRsZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZSA9IFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZTo6Y3JlYXRlKGhhbmRsZSk7CisgICAgICAgIHN0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihpbWFnZUlELCBzdXJmYWNlLnJlbGVhc2UoKSkpOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCmluZGV4IDhlN2RlZWZi
M2ZlYTE3Zjk4NWU1ODNlNzMxMDNlZjhiYWMyOTUxMWUuLmQ0MmFlNzlkZjI0YTEwMWUzNDUwYTM1
NjcxODMyMTAyM2M5NTJiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVycy5oCkBAIC0zMiwxMyArMzIsMTYgQEAKICNpbmNsdWRlICJBcmd1
bWVudENvZGVycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyU3RhdGU7CitzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlOwogY2xh
c3MgRmxvYXRQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbjsKIGNsYXNzIEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zOwogY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87CitzdHJ1Y3Qg
VGlsZUNyZWF0aW9uSW5mbzsKK3N0cnVjdCBUaWxlVXBkYXRlSW5mbzsKIGNsYXNzIFRyYW5zZm9y
bWF0aW9uTWF0cml4OwogY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKLXN0cnVjdCBDb29yZGlu
YXRlZExheWVySW5mbzsKIHN0cnVjdCBMZW5ndGg7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CkBAIC0xMDcsMTYgKzExMCwzMSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdl
YkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuPiB7CiB9OwogI2VuZGlmCiAKLXRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8+IHsKLSAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNv
ZGVyJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLX07Ci0KIHRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8+IHsKICAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6U3VyZmFj
ZVVwZGF0ZUluZm8mKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwg
V2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU+IHsKKyAg
ICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsK
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VGlsZVVwZGF0
ZUluZm8+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3Qg
V2ViQ29yZTo6VGlsZVVwZGF0ZUluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyJiwgV2ViQ29yZTo6VGlsZVVwZGF0ZUluZm8mKTsKK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VGlsZUNyZWF0aW9uSW5mbz4geworICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUaWxlQ3Jl
YXRpb25JbmZvJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYsIFdl
YkNvcmU6OlRpbGVDcmVhdGlvbkluZm8mKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlPiB7CisgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NTdGF0ZSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIm
LCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKK307CisKIH0gLy8gbmFtZXNw
YWNlIENvcmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAppbmRl
eCBjNWY3ZTg3NWE2ZDhiY2ZkYTRiNzAzNWU0MTkwYzJlNTUzZTczNmJhLi4wMThiZDE3YzViNDI5
MWQxYjQ3NDdiOGQ2NTBhNDBhNTQ5Njc1ZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGlu
YXRlZExheWVySW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1N0
YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+CiAKQEAgLTYyLDIyICs2Miw2IEBAIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0CiAgICAgbV9zY2VuZS0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9uKTsKIH0K
IAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVy
KENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IEludFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVRp
bGUsIG1fc2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZhY3Rv
cikpOwotICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1
cGRhdGVJbmZvKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBk
YXRlSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OnVwZGF0ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGls
ZVJlY3QsIHVwZGF0ZUluZm8uYXRsYXNJRCwgdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KSkpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlRm9yTGF5
ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKLXsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVRpbGUs
IG1fc2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBj
b25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQogewogICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVXBkYXRlQXRs
YXMsIG1fc2NlbmUuZ2V0KCksIGF0bGFzSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRl
KGhhbmRsZSkpKTsKQEAgLTk4LDI4ICs4Miw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluCiAg
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVM
YXllcnMsIG1fc2NlbmUuZ2V0KCksIGlkcykpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQg
aWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpzZXRSb290TGF5ZXJJRCwgbV9zY2VuZS5nZXQoKSwgaWQpKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGluZm8pCi17Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0
YXRlLCBtX3NjZW5lLmdldCgpLCBpZCwgaW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRM
YXllckNoaWxkcmVuLCBtX3NjZW5lLmdldCgpLCBpZCwgY2hpbGRyZW4pKTsKLX0KLQotI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNl
dENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyRmlsdGVycywgbV9zY2VuZS5nZXQoKSwgaWQs
IGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShp
bnQgaWQpCiB7CkBAIC0xMzEsMTUgKzkzLDEyIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBDdXN0CiB9
CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVy
RnJhbWUoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEludFNpemUmIGNv
bnRlbnRzU2l6ZSwgY29uc3QgSW50UmVjdCYgY292ZXJlZFJlY3QpCit2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUoY29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBncmFwaGljc1N0YXRlKQogewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Zmx1c2hMYXllckNoYW5nZXMs
IG1fc2NlbmUuZ2V0KCksIHNjcm9sbFBvc2l0aW9uKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRTY2VuZVN0YXRlLCBtX3NjZW5lLmdl
dCgpLCBncmFwaGljc1N0YXRlKSk7CiAgICAgdXBkYXRlVmlld3BvcnQoKTsKICNpZiBVU0UoVElM
RURfQkFDS0lOR19TVE9SRSkKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+ZGlkUmVu
ZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShjb250ZW50c1NpemUpOwotICAgIFVOVVNFRF9QQVJBTShjb3ZlcmVkUmVjdCk7CisgICAg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPmRpZFJlbmRlckZyYW1lKGdyYXBoaWNzU3RhdGUu
Y29udGVudHNTaXplLCBncmFwaGljc1N0YXRlLmNvdmVyZWRSZWN0KTsKICNlbmRpZgogfQogCkBA
IC0xNjMsMTEgKzEyMiw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJl
bW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lECiAgICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVJbWFnZUJhY2tpbmcs
IG1fc2NlbmUuZ2V0KCksIGltYWdlSUQpKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29u
c3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnMs
IG1fc2NlbmUuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCiB7CiAg
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBbmlt
YXRpb25zTG9ja2VkLCBtX3NjZW5lLmdldCgpLCBsb2NrZWQpKTsKQEAgLTIwNCwyOSArMTU4LDYg
QEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6YW5pbWF0aW9uRnJhbWVSZWFk
eSgpCiB9CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4m
IHRva2VuKQotewotICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0gR3Jh
cGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQgfCBHcmFwaGljc1N1cmZhY2U6OlN1
cHBvcnRzU2hhcmluZzsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmNyZWF0ZUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGNhbnZhc1NpemUsIEdy
YXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgdG9rZW4pKSk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnN5bmNDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKLXsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnN5bmNDYW52YXMsIG1fc2Nl
bmUuZ2V0KCksIGlkLCBmcm9udEJ1ZmZlcikpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ryb3lD
YW52YXMsIG1fc2NlbmUuZ2V0KCksIGlkKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXll
cklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3VudCwgbV9zY2VuZS5nZXQoKSwgaWQs
IHZhbHVlKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnB1cmdl
QmFja2luZ1N0b3JlcygpCiB7CiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nl
c3MoKS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tp
bmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCmluZGV4IDk0
NmIzOTkyMGQyODQ4ODNhODQ0YTdmMTk2NjkxMWIwODY5ZWY5ZjUuLmQxNjhiY2RjZGE3YWJhY2Rh
YTkxYWY1ODIyM2RiYzA3YmU0YmZiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaApAQCAtNDEsNyArNDEsOCBAQAogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ29vcmRpbmF0ZWRMYXll
ckluZm87CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZTsKK2NsYXNzIENvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZTsKIGNsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOwogfQogCkBAIC01
Myw0MyArNTQsMzEgQEAgY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgOiBwdWJs
aWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2wKIHB1YmxpYzoKICAgICBleHBs
aWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5Kik7CiAg
ICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICB2b2lkIHNl
dENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0
IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGlu
Z0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8
V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
LSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCisKKyAg
ICAvLyBNZXNzYWdlcyBGcm9tIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdAorICAgIHZvaWQgY3Jl
YXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJRD4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQog
ICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6
OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7CiAgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQ
cm9ncmFtKGludCBpZCk7CiAjZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJz
KGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBk
ZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRM
YXllcklEPiYpOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9y
eVZlY3Rvcik7Ci0gICAgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXpl
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCk7Ci0gICAgdm9pZCBjcmVhdGVU
aWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5m
byYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7CiAgICAgdm9pZCBj
cmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1
cmZhY2U6OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRs
YXNJRCk7CiAgICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5k
bGUmKTsKICAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci0gICAgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4m
KTsKLSAgICB2b2lkIHN5bmNDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExheWVyUmVwYWludENvdW50KFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKLSAgICBXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2NlbmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmlt
YXRpb25zJik7CisKKyAgICB2b2lkIGNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZShjb25z
dCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKICAgICB2b2lkIHNldEFuaW1h
dGlvbnNMb2NrZWQoYm9vbCk7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQog
ICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7CiAjZW5kaWYKICAgICB2b2lkIHNldEJh
Y2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOwogCisgICAgdm9pZCBzZXRWaXNp
YmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpOworICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkgY29uc3QgeyByZXR1cm4g
bV9zY2VuZS5nZXQoKTsgfQorCiAgICAgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50
IE1ldGhvZHMuCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCkgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmlu
CmluZGV4IDVjZTEyODM2YmYyM2YwZDBiYzY4NzQ3ODdmMTYxYjJhODk0MjU4NmMuLjNhNzY0ZjEz
YzdhMmUxNDQ2MjYxYWY4NjViN2ZkNjAwZDFlN2U2ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBA
IC0xOSw0MyArMTksMjkgQEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIG1lc3Nh
Z2VzIC0+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IHsKLSAgICBTZXRDb21wb3NpdGlu
Z0xheWVyU3RhdGUodWludDMyX3QgaWQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvIGxh
eWVySW5mbykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWludDMyX3QgaWQsIFZl
Y3Rvcjx1aW50MzJfdD4gY2hpbGRyZW4pCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIFNl
dENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zIGZpbHRlcnMpCi0jZW5kaWYKKworICAgIENvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgc3RhdGUpCisKKyAgICBDcmVh
dGVDb21wb3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlkcykKKyAgICBEZWxldGVDb21w
b3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlkcykKKwogI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKICAgICBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgV2ViQ29yZTo6Q3Vz
dG9tRmlsdGVyUHJvZ3JhbUluZm8gcHJvZ3JhbUluZm8pCiAgICAgUmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbShpbnQgaWQpCiAjZW5kaWYKLSAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1aW50
MzJfdCBpZCkKLSAgICBDcmVhdGVDb21wb3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlk
cykKLSAgICBEZWxldGVDb21wb3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlkcykKLSAg
ICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBX
ZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRh
dGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OlN1cmZhY2VVcGRh
dGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCkKICAgICBDcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxh
c0lELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKICAgICBS
ZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQogICAgIENyZWF0ZUltYWdlQmFja2lu
Zyh1aW50NjRfdCBpbWFnZUlEKQogICAgIFVwZGF0ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFn
ZUlELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKICAgICBD
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzKHVpbnQ2NF90IGltYWdlSUQpCiAgICAgUmVtb3ZlSW1h
Z2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQpCi0gICAgRGlkUmVuZGVyRnJhbWUoV2ViQ29yZTo6
RmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbiwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUs
IFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCi0gICAgU2V0TGF5ZXJBbmltYXRpb25zKHVp
bnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRpb25zKQor
CiAgICAgU2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKIAogI2lmIEVOQUJMRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQogI2VuZGlm
CiAKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBDcmVhdGVDYW52YXModWludDMyX3Qg
aWQsIFdlYkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNl
VG9rZW4gdG9rZW4pCi0gICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwgdWludDMyX3QgZnJvbnRC
dWZmZXIpCi0gICAgRGVzdHJveUNhbnZhcyh1aW50MzJfdCBpZCkKLSNlbmRpZgotCi0gICAgU2V0
TGF5ZXJSZXBhaW50Q291bnQodWludDMyX3QgbGF5ZXJJRCwgaW50IHZhbHVlKQotCiAgICAgU2V0
QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNvbG9yIGNvbG9yKQogfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNw
cAppbmRleCA3YWNlZjMwYjMyYzk1NDIyZTRkYzU3MWIxNTdjOWUwYzRlMWYzMmYwLi5hYjk1ZjJj
ZWM5YjViZDg2OWYzMDIxYmY0MjI3ZThmYjYwNTkyODA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMwMSw5
ICszMDEsMTUgQEAgYm9vbCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcygpCiAgICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7CiAgICAgICAgIGRpZFN5
bmMgPSB0cnVlOwogCi0gICAgICAgIEludFNpemUgY29udGVudHNTaXplID0gcm91bmRlZEludFNp
emUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwotICAgICAgICBJbnRSZWN0
IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRpZFJlbmRlckZyYW1l
KG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpLCBjb250ZW50c1NpemUsIGNvdmVyZWRS
ZWN0KSk7CisgICAgICAgIG1fc3RhdGUuY29udGVudHNTaXplID0gcm91bmRlZEludFNpemUobV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOworICAgICAgICBtX3N0YXRlLmNvdmVy
ZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7CisgICAgICAgIG1fc3RhdGUuc2Nyb2xsUG9zaXRp
b24gPSBtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKTsKKworICAgICAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDb21taXRD
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUobV9zdGF0ZSkpOworCisgICAgICAgIG1fc3RhdGUubGF5
ZXJzVG9VcGRhdGUuY2xlYXIoKTsKKyAgICAgICAgbV9zdGF0ZS5pbWFnZXNUb1VwZGF0ZS5jbGVh
cigpOworCiAgICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7CiAgICAgICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CiAgICAgfSBlbHNlCkBAIC0zNTYsNjQgKzM2Miw1NCBA
QCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGlu
Z0xheWVySWZOZWVkZWQoKQogICAgIGlmIChtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7CisgICAg
bV9zdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KG1fcm9vdExheWVyLmdldCgpKS0+aWQoKTsKICAgICBtX2RpZEluaXRpYWxpemVSb290Q29tcG9z
aXRpbmdMYXllciA9IHRydWU7CiAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwogfQogCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKK3ZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQs
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKICAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7
CisgICAgcHJlcHJvY2Vzc1N0YXRlQ2hhbmdlKHN0YXRlKTsKKyAgICBtX3N0YXRlLmxheWVyc1Rv
VXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpZCwgc3RhdGUpKTsKIH0KIAotdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQordm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnByZXByb2Nlc3NTdGF0ZUNoYW5nZShDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKKyAg
ICBwcmVwcm9jZXNzQW5pbWF0aW9uU3RhdGVJZk5lZWRlZChzdGF0ZSk7CisgICAgcHJlcHJvY2Vz
c0ZpbHRlck9wZXJhdGlvbnNJZk5lZWRlZChzdGF0ZSk7CiB9CiAKLSNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxheWVyKQor
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnByZXByb2Nlc3NBbmltYXRpb25TdGF0ZUlm
TmVlZGVkKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKIHsKLSAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBj
YW52YXNQbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIEludFNpemUg
Y2FudmFzU2l6ZSA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7Ci0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6Q3JlYXRlQ2FudmFzKGlkLCBjYW52YXNTaXplLCB0b2tlbikpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBs
YXRmb3JtTGF5ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOwotICAgIHVpbnQzMl90IGZyb250QnVmZmVyID0gY2FudmFzUGxhdGZvcm1MYXll
ci0+Y29weVRvR3JhcGhpY3NTdXJmYWNlKCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U3luY0NhbnZhcyhpZCwgZnJvbnRCdWZm
ZXIpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICBpZiAo
IXN0YXRlLmFuaW1hdGlvbnNDaGFuZ2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveUNhbnZhcyhpZCkpOwotfQorICAgIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zID0gc3RhdGUuYW5pbWF0aW9u
czsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25zID0gYW5pbWF0
aW9ucy5nZXRBY3RpdmVBbmltYXRpb25zKCk7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9
IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOworICAgICAgICBpZiAo
a2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZy
YW1lcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFs
dWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUq
PihrZXlmcmFtZXMuYXQoaSkpOworICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFt
UHJveGllcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOworICAgICAgICB9CisgICAgfQogI2VuZGlm
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRMYXllclJlcGFpbnRDb3VudChD
b29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRMYXllclJlcGFpbnRD
b3VudChpZCwgdmFsdWUpKTsKKyAgICBzdGF0ZS5hbmltYXRpb25zID0gYWN0aXZlQW5pbWF0aW9u
czsKIH0KIAotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpw
cmVwcm9jZXNzRmlsdGVyT3BlcmF0aW9uc0lmTmVlZGVkKENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlJiBzdGF0ZSkKIHsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CiAjaWYgRU5B
QkxFKENTU19TSEFERVJTKQotICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoZmls
dGVycyk7CisgICAgaWYgKCFzdGF0ZS5maWx0ZXJzQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhzdGF0ZS5maWx0ZXJzKTsKICNl
bmRpZgotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7CiB9Ci0j
ZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMpCkBAIC01ODUsNyArNTgxLDggQEAgYm9vbCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWcKICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7CiAgICAgaWYgKCF3
ZWJDb29yZGluYXRlZFN1cmZhY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6VXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSkpOworCisg
ICAgbV9zdGF0ZS5pbWFnZXNUb1VwZGF0ZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaW1hZ2VJRCwg
Y29vcmRpbmF0ZWRTdXJmYWNlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTY2OCwyNiAr
NjY1LDYgQEAgYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRh
dGVJbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVUaWxl
KENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNv
cmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6VXBkYXRl
VGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVt
b3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwotfQotCiBib29sIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNvb3JkaW5hdGVkU3VyZmFjZSkKIHsKICAgICBXZWJD
b29yZGluYXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFjZSA9IHN0YXRpY19jYXN0PFdl
YkNvb3JkaW5hdGVkU3VyZmFjZSo+KGNvb3JkaW5hdGVkU3VyZmFjZS5nZXQoKSk7CkBAIC03MTAs
MjUgKzY4Nyw2IEBAIFdlYkNvcmU6OkZsb2F0UmVjdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAogICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50
c1JlY3Q7CiB9CiAKLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyQW5p
bWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFu
aW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRpb25z
LmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7
ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYW5p
bWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7Ci0gICAgICAgIGlmIChrZXlm
cmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVz
LnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSog
ZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+KGtl
eWZyYW1lcy5hdChpKSk7Ci0gICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94
aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpTZXRMYXllckFuaW1hdGlvbnMobGF5ZXJJRCwgYWN0aXZlQW5pbWF0aW9ucykpOwotfQotCiB2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7
CiAgICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGlsZXMgYWxs
IGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4KQEAgLTg1MSw3ICs4MDksOCBAQCB2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
RmlyZWQoVGltZXI8Q29vcmRpbmF0ZQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKIHsKLSAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpT
ZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
CisgICAgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5oCmluZGV4IGI2MDUyODkwOWY3ZWI5YjY3MTNjMWU5OTZhOGNlODcwMTk2
NTMyNGUuLjZjZDM0MjI5ODk0NjM0YzQyY2MwNTQ2ZWI4YmU0NjBjNTI3ZTdiOWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5o
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzTGF5ZXJDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJGYWN0
b3J5Lmg+CkBAIC04MCwzOSArODEsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXVz
ZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQg
cmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRl
ZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2Uq
KSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNl
VXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKICAgICB2aXJ0dWFsIHZv
aWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250
ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXIm
KTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xh
eWVyRmFjdG9yeSgpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRl
KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRM
YXllckluZm8mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklEPiYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYp
OwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmls
dGVycyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9w
ZXJhdGlvbnMmKTsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3Jl
OjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklEKSBPVkVSUklERTsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJl
cGFpbnRDb3VudChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGludCkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciopOwotCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpD
b29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50
UG9pbnQmKTsKLQotICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50Ci0gICAgdmlydHVhbCBib29sIGNy
ZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIE9WRVJSSURFOwog
I2VuZGlmCkBAIC0xMzksNiArMTE0LDE4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZsdXNoUGVu
ZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKIAorICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudAorICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzOyB9CisgICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3Jl
YXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Kik7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVn
aW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGlu
YXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRM
YXllcklELCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworCisgICAg
Ly8gVXBkYXRlQXRsYXNDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3Qg
YXRsYXNJRCk7CisKICAgICAvLyBHcmFwaGljc0xheWVyRmFjdG9yeQogICAgIHZpcnR1YWwgUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVHcmFwaGljc0xheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQqKSBPVkVSUklERTsKIApAQCAtMTU2LDYgKzE0MywxMCBA
QCBwcml2YXRlOgogICAgIHZvaWQgbG9ja0FuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVubG9ja0Fu
aW1hdGlvbnMoKTsKIAorICAgIHZvaWQgcHJlcHJvY2Vzc1N0YXRlQ2hhbmdlKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBwcmVwcm9jZXNzQW5pbWF0
aW9uU3RhdGVJZk5lZWRlZChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYp
OworICAgIHZvaWQgcHJlcHJvY2Vzc0ZpbHRlck9wZXJhdGlvbnNJZk5lZWRlZChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworCiAgICAgdm9pZCBsYXllckZsdXNoVGlt
ZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7CiAKICAg
ICB2b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOwpAQCAtMTgxLDYgKzE3Miw4
IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxs
IGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7CiAKKyAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzU3RhdGUgbV9zdGF0ZTsKKwogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwogICAgIFZlY3RvcjxXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9DcmVhdGU7CiAgICAgVmVjdG9yPFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191429</attachid>
            <date>2013-03-05 01:11:31 -0800</date>
            <delta_ts>2013-03-05 01:20:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108294-20130305180739.patch</filename>
            <type>text/plain</type>
            <size>99395</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjE0ZjBjMTg0ZWJlZTAy
YjM1Mjc3MGE1M2I1ZGM3MDRlNjdiMzU2ZS4uNjc3YjU1ZDdiYTEzYmJhOTI1M2ZkYTczZTg1NjUz
ODBmMzNmN2JiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxMy0wMy0wNCAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUgcGVyZm9ybSB2aWEgQ29vcmRpbmF0ZWRHcmFwaGljc09wZXJhdGlvbi4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODI5NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5IGhhcyB0b28gbWFueSBJUEMgbWVzc2FnZXMgKGUuZy4gU3lu
Y0NhbnZhcyBhbmQKKyAgICAgICAgQ3JlYXRlVGlsZSksIGFuZCB0aGVyZSBpcyBhIGxvbmcgZnVu
Y3Rpb24gY2hhaW4gZnJvbSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgdG8KKyAgICAgICAgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lICg0IGNsYXNzZXMpLgorICAgICAgICBJZiB3ZSB3YW50IHRv
IGFkZCBhIG5ldyBtZXNzYWdlLCB3ZSBuZWVkIHRvIGFkZCBzaW1pbGFyIGZ1bmN0aW9ucyBpbnRv
IDQgY2xhc3Nlcy4KKworICAgICAgICBOb3cgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGhhcyBv
bmx5IG9uZSBJUEMgbWVzc2FnZSBmb3IgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOgorICAgICAg
ICBDb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUuCisgICAgICAgIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgcnVuIGFzIGZvbGxvd3M6
CisgICAgICAgIDEuIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBhIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllclN0YXRlLgorICAgICAgICAyLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qg
c3RvcmVzIGFsbCBMYXllclN0YXRlcy4KKyAgICAgICAgMy4gQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0IHNlbmRzIEdyYXBoaWNzU3RhdGUgaW5jbHVkZXMgTGF5ZXJTdGF0ZXMgdG8gQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkKKyAgICAgICAgYXQgdGhlIG1vbWVudCBvZiBmbHVzaGluZyB2
aWEgQ29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlIG1lc3NhZ2UuCisgICAgICAgIDQuIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBhcHBsaWVzIGFsbCBzdGF0ZSBjaGFuZ2VzIHRvIGxheWVy
cy4KKworICAgICAgICBUaGVyZSBpcyBvbmUgYmlnIGJlaGF2aW9yIGNoYW5nZS4gQWxsIHN0YXRl
cyBjaGFuZ2VzIChlLmcuCisgICAgICAgIFVwZGF0ZVRpbGVzLCBTZXRMYXllckNoaWxkcmVuLCBh
bmQgZXRjLi4pIGFyZSBwZXJmb3JtZWQgYXQgdGhlIHNhbWUgdGltZSwgd2hlbgorICAgICAgICBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBp
cyBjYWxsZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBiYXNlZCBvbiBEb25nc3VuZyBIdWFu
ZywgYW5kIE5vYW0ncyB3b3JrIGluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDgyOTQKKworICAgICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkg
ZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFu
Y2hvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNpYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFj
ZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UmVwbGlj
YXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXRGaXhlZFRvVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzeW5jQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzeW5jRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnN5bmNJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNhbnZhc0lmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRl
Q2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVzZXRMYXllclN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmg6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQp
OgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2Fu
dmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpzeW5jQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3VudElmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJDaGlsZHJl
bklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
c2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxlc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZXNJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZVRpbGVzSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphc3NpZ25J
bWFnZUJhY2tpbmdUb0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6Y29tbWl0U2NlbmVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQW5pbWF0aW9uc0lmTmVlZGVkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoVGlsZVVwZGF0ZUluZm8pOgorICAgICAgICAoVGlsZUNyZWF0aW9uSW5mbyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyU3RhdGUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRMYXllckluZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaDoKKwogMjAxMy0wMy0wNSAgS29q
aSBIYXJhICA8a29qaWhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gUmVtb3ZlIHVudXNl
ZCBjdXN0b20gaW5kZXhlZFByb3BlcnR5R2V0dGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYWQ1ZGUwMjEyZTIy
Njc5NTQ3YzMxNTVjZDM3ZWJiZmVjMWMwZTA4MC4uNDE4ZDdkNjZkOWNhYTdhMjE1ZDg3ZDRlYjcx
YjAwNjcyNjE4ZmU2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAzLTA0ICBH
d2FuZyBZb29uIEh3YW5nICA8cnl1bWllbEBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBDb29y
ZGluYXRlZCBHcmFwaGljczogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZSBwZXJmb3JtIHZpYSBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgyOTQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVyZSBhcmUg
dHdvIGNoYW5nZXMgaW4gV0syLgorICAgICAgICAxLiBDaGFuZ2UgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkgdG8gdXNlIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS4KKyAgICAgICAgMi4g
QWRkIGVuY29kZS9kZWNvZGUgb2YgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlIGluIENvb3JkaW5h
dGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGJhc2Vk
IG9uIERvbmdzdW5nIEh1YW5nLCBhbmQgTm9hbSdzIHdvcmsgaW4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODI5NAorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKGhlYWRlcnNfZm9yX3R5cGUpOgorICAgICAgICAq
IFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENv
ZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6CisgICAgICAgICAgICBFbmNv
ZGluZyBVcGRhdGVJbWFnZUJhY2tpbmcgYW5kIENyZWF0ZVVwZGF0ZUF0bGFzIGNhbiBmYWlsIHdo
ZW4KKyAgICAgICAgICAgIGVuY29kaW5nIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGZh
aWxzLCBidXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIHJlY292ZXIgaW4gdGhlIGNhc2UuCisgICAg
ICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgIChDb3JlSVBDKToKKyAgICAgICAgKiBT
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2Rl
cnMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvbW1pdENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVz
aFBlbmRpbmdMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcGFyZUN1c3RvbUZp
bHRlclByb3hpZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFja2dyb3VuZENvbG9yKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6
CisKIDIwMTMtMDMtMDQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBTdXBwb3J0IFdlYlNwZWVjaCAtIFNwZWVjaCBTeW50aGVzaXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmlu
ZGV4IGI5Y2Y4YmNiNmEyOTMwMjA2MjYxNTI1NDVkOTU0ZjUzNDA5OTlmZTQuLmNkNWNlYTUwOTBi
ZTg3MWMyZTI3OWIyNjhjMTUzNWEwMThjODgyMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtNDExMiw4ICs0
MTEyLDggQEAgdXNlPygzRF9HUkFQSElDUykgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtLmggXAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmggXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmggXAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcuaCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZExheWVySW5mby5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5oIFwKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmNwcAppbmRleCA0YzQzYWE3ZTIzOGRmNWYyOGZiZWUzOTkzMGIzYTBjNTE5YmI2OWFhLi42ZTkw
MDM2MTdmNzg5MmFjOWE5ZGQ1Y2JjY2Y4ZjMwNmQwYzZhOGE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMTkyLDYg
KzE5Miw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50JiBwKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpz
ZXRQb3NpdGlvbihwKTsKKyAgICBtX2xheWVyU3RhdGUucG9zaXRpb25DaGFuZ2VkID0gdHJ1ZTsK
ICAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQogCkBAIC0yMDEsNiArMjAyLDcgQEAgdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQz
RCYgcCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9p
bnQocCk7CisgICAgbV9sYXllclN0YXRlLmFuY2hvclBvaW50Q2hhbmdlZCA9IHRydWU7CiAgICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0KIApAQCAtMjEwLDYgKzIxMiw3IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZShzaXplKTsKKyAgICBtX2xh
eWVyU3RhdGUuc2l6ZUNoYW5nZWQgPSB0cnVlOwogCiAgICAgaWYgKG1hc2tMYXllcigpKQogICAg
ICAgICBtYXNrTGF5ZXIoKS0+c2V0U2l6ZShzaXplKTsKQEAgLTIyMiw2ICsyMjUsOCBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0KQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRU
cmFuc2Zvcm0odCk7CisgICAgbV9sYXllclN0YXRlLnRyYW5zZm9ybUNoYW5nZWQgPSB0cnVlOwor
CiAgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0KIApAQCAtMjMxLDYgKzIzNiw4IEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6
c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odCk7CisgICAgbV9sYXllclN0YXRlLmNoaWxkcmVuVHJhbnNm
b3JtQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQogCkBAIC0y
NDAsNiArMjQ3LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZl
czNEKGJvb2wgYikKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJl
c2VydmVzM0QoYik7CisgICAgbV9sYXllclN0YXRlLnByZXNlcnZlczNEID0gYjsKKyAgICBtX2xh
eWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7
CiB9CiAKQEAgLTI0OCw2ICsyNTgsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0TWFza3NUb0JvdW5kcyhib29sIGIpCiAgICAgaWYgKG1hc2tzVG9Cb3VuZHMoKSA9PSBiKQog
ICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhiKTsK
KyAgICBtX2xheWVyU3RhdGUubWFza3NUb0JvdW5kcyA9IGI7CisgICAgbV9sYXllclN0YXRlLmZs
YWdzQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQogCkBAIC0y
NTYsNiArMjY5LDggQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29u
dGVudChib29sIGIpCiAgICAgaWYgKGRyYXdzQ29udGVudCgpID09IGIpCiAgICAgICAgIHJldHVy
bjsKICAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYik7CisgICAgbV9sYXllclN0
YXRlLmRyYXdzQ29udGVudCA9IGI7CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRy
dWU7CiAKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CkBAIC0yNjUsNiArMjgwLDkgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGIp
CiAgICAgaWYgKGNvbnRlbnRzQXJlVmlzaWJsZSgpID09IGIpCiAgICAgICAgIHJldHVybjsKICAg
ICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Zpc2libGUoYik7CisgICAgbV9sYXllclN0YXRl
LmNvbnRlbnRzVmlzaWJsZSA9IGI7CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRy
dWU7CisKICAgICBpZiAobWFza0xheWVyKCkpCiAgICAgICAgIG1hc2tMYXllcigpLT5zZXRDb250
ZW50c1Zpc2libGUoYik7CiAKQEAgLTI3OCw2ICsyOTYsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBiKQogICAgIGlmIChtX21haW5CYWNr
aW5nU3RvcmUpCiAgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSgh
Yik7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7CisgICAgbV9sYXll
clN0YXRlLmNvbnRlbnRzT3BhcXVlID0gYjsKKyAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2Vk
ID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtMjg3LDYgKzMw
OCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxp
dHkoYm9vbCBiKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNr
ZmFjZVZpc2liaWxpdHkoYik7CisgICAgbV9sYXllclN0YXRlLmJhY2tmYWNlVmlzaWJsZSA9IGI7
CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VM
YXllclN0YXRlKCk7CiB9CiAKQEAgLTI5Niw2ICszMjAsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQogICAgICAgICByZXR1cm47CiAK
ICAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNpdHkpOworICAgIG1fbGF5ZXJTdGF0
ZS5vcGFjaXR5ID0gb3BhY2l0eTsKKyAgICBtX2xheWVyU3RhdGUub3BhY2l0eUNoYW5nZWQgPSB0
cnVlOworCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC0zMDUsNiArMzMyLDkg
QEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJ
bnRSZWN0JiByKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c1JlY3Qocik7CisgICAgbV9sYXllclN0YXRlLmNvbnRlbnRzUmVjdCA9IHI7CisgICAgbV9s
YXllclN0YXRlLmNvbnRlbnRzUmVjdENoYW5nZWQgPSB0cnVlOworCiAgICAgZGlkQ2hhbmdlTGF5
ZXJTdGF0ZSgpOwogfQogCkBAIC0zNTYsMTYgKzM4NiwyMyBAQCBib29sIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBuZXdGaWx0ZXJz
KQogewogICAgIGlmIChmaWx0ZXJzKCkgPT0gbmV3RmlsdGVycykKICAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoIUdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMobmV3RmlsdGVycykpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGRpZENoYW5nZUZpbHRlcnMoKTsKLSAgICByZXR1
cm4gR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhuZXdGaWx0ZXJzKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KICNlbmRpZgogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChtX2xheWVySW5m
by5zb2xpZENvbG9yID09IGNvbG9yKQorICAgIGlmIChtX2xheWVyU3RhdGUuc29saWRDb2xvciA9
PSBjb2xvcikKICAgICAgICAgcmV0dXJuOwotICAgIG1fbGF5ZXJJbmZvLnNvbGlkQ29sb3IgPSBj
b2xvcjsKKworICAgIG1fbGF5ZXJTdGF0ZS5zb2xpZENvbG9yID0gY29sb3I7CisgICAgbV9sYXll
clN0YXRlLnNvbGlkQ29sb3JDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxheWVyU3Rh
dGUoKTsKIH0KIApAQCAtMzc1LDYgKzQxMiw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRTaG93RGVidWdCb3JkZXIoYm9vbCBzaG93KQogICAgICAgICByZXR1cm47CiAKICAg
ICBHcmFwaGljc0xheWVyOjpzZXRTaG93RGVidWdCb3JkZXIoc2hvdyk7CisgICAgbV9sYXllclN0
YXRlLnNob3dEZWJ1Z0JvcmRlcnMgPSB0cnVlOworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5n
ZWQgPSB0cnVlOworCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC0zODQsNiAr
NDI0LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50Q291
bnRlcihib29sIHNob3cpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dFNob3dSZXBhaW50Q291bnRlcihzaG93KTsKKyAgICBtX2xheWVyU3RhdGUuc2hvd1JlcGFpbnRD
b3VudGVyID0gdHJ1ZTsKKyAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwog
ICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtNDIxLDYgKzQ2NCwxMCBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQogICAgIGxheWVyLT5zZXRDb250ZW50c1Zpc2libGUoY29udGVudHNBcmVWaXNpYmxlKCkp
OwogICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRMYXllciA9IHRvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKTsKICAgICBjb29yZGluYXRlZExheWVyLT5kaWRD
aGFuZ2VMYXllclN0YXRlKCk7CisKKyAgICBtX2xheWVyU3RhdGUubWFzayA9IGNvb3JkaW5hdGVk
TGF5ZXItPmlkKCk7CisgICAgbV9sYXllclN0YXRlLm1hc2tDaGFuZ2VkID0gdHJ1ZTsKKwogICAg
IGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtNDQyLDYgKzQ4OSw4IEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVy
KiBsYXllcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGlj
YXRlZEJ5TGF5ZXIobGF5ZXIpOworICAgIG1fbGF5ZXJTdGF0ZS5yZXBsaWNhID0gdG9Db29yZGlu
YXRlZExheWVySUQobGF5ZXIpOworICAgIG1fbGF5ZXJTdGF0ZS5yZXBsaWNhQ2hhbmdlZCA9IHRy
dWU7CiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC00NzEsNiArNTIwLDkgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEZpeGVkVG9WaWV3cG9ydChib29sIGlz
Rml4ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhl
ZDsKKyAgICBtX2xheWVyU3RhdGUuZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsKKyAgICBtX2xh
eWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUo
KTsKIH0KIApAQCAtNTA0LDExICs1NTYsMTAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnN5bmNDaGlsZHJlbigpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNDaGlsZHJlbikKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fc2hvdWxkU3luY0NoaWxkcmVuID0gZmFsc2U7Ci0gICAgVmVjdG9y
PENvb3JkaW5hdGVkTGF5ZXJJRD4gY2hpbGRJRHM7CisgICAgbV9sYXllclN0YXRlLmNoaWxkcmVu
Q2hhbmdlZCA9IHRydWU7CisgICAgbV9sYXllclN0YXRlLmNoaWxkcmVuLmNsZWFyKCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQotICAgICAgICBj
aGlsZElEcy5hcHBlbmQodG9Db29yZGluYXRlZExheWVySUQoY2hpbGRyZW4oKVtpXSkpOwotCi0g
ICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hpbGRJRHMpOworICAg
ICAgICBtX2xheWVyU3RhdGUuY2hpbGRyZW4uYXBwZW5kKHRvQ29vcmRpbmF0ZWRMYXllcklEKGNo
aWxkcmVuKClbaV0pKTsKIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTUxNyw3ICs1
NjgsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRlcnMoKQogICAg
IGlmICghbV9zaG91bGRTeW5jRmlsdGVycykKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2hvdWxk
U3luY0ZpbHRlcnMgPSBmYWxzZTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJGaWx0ZXJz
KG1faWQsIGZpbHRlcnMoKSk7CisKKyAgICBtX2xheWVyU3RhdGUuZmlsdGVycyA9IEdyYXBoaWNz
TGF5ZXI6OmZpbHRlcnMoKTsKKyAgICBtX2xheWVyU3RhdGUuZmlsdGVyc0NoYW5nZWQgPSB0cnVl
OwogfQogI2VuZGlmCiAKQEAgLTUzOCwxNCArNTkxLDE1IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzeW5jSW1hZ2VCYWNraW5nKCkKICAgICAgICAgaWYgKCFtX2Nvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nKSB7CiAgICAgICAgICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nID0g
bV9jb29yZGluYXRvci0+Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQobV9jb21wb3NpdGVkSW1h
Z2UuZ2V0KCkpOwogICAgICAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+YWRkSG9z
dCh0aGlzKTsKLSAgICAgICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlSUQgPSBtX2Nvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nLT5pZCgpOworICAgICAgICAgICAgbV9sYXllclN0YXRlLmltYWdlSUQgPSBt
X2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5pZCgpOwogICAgICAgICB9CiAKICAgICAgICAgbV9j
b29yZGluYXRlZEltYWdlQmFja2luZy0+bWFya0RpcnR5KCk7CisgICAgICAgIG1fbGF5ZXJTdGF0
ZS5pbWFnZUNoYW5nZWQgPSB0cnVlOwogICAgIH0gZWxzZQogICAgICAgICByZWxlYXNlSW1hZ2VC
YWNraW5nSWZOZWVkZWQoKTsKIAotICAgIC8vIHN5bmNJbWFnZUJhY2tpbmcoKSBjaGFuZ2VkIG1f
bGF5ZXJJbmZvLmltYWdlSUQuCisgICAgLy8gc3luY0ltYWdlQmFja2luZygpIGNoYW5nZWQgbV9s
YXllclN0YXRlLmltYWdlSUQuCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC01
NTQsMzggKzYwOCwzNCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVy
U3RhdGUoKQogICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fc2hvdWxkU3luY0xheWVyU3RhdGUgPSBmYWxzZTsKLSAgICBtX2xheWVySW5mby5m
aXhlZFRvVmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKLQotICAgIG1fbGF5ZXJJbmZvLmJh
Y2tmYWNlVmlzaWJsZSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOwotICAgIG1fbGF5ZXJJbmZvLmNo
aWxkcmVuVHJhbnNmb3JtID0gY2hpbGRyZW5UcmFuc2Zvcm0oKTsKLSAgICBtX2xheWVySW5mby5j
b250ZW50c09wYXF1ZSA9IGNvbnRlbnRzT3BhcXVlKCk7Ci0gICAgbV9sYXllckluZm8uY29udGVu
dHNSZWN0ID0gY29udGVudHNSZWN0KCk7Ci0gICAgbV9sYXllckluZm8uZHJhd3NDb250ZW50ID0g
ZHJhd3NDb250ZW50KCk7Ci0gICAgbV9sYXllckluZm8uY29udGVudHNWaXNpYmxlID0gY29udGVu
dHNBcmVWaXNpYmxlKCk7Ci0gICAgbV9sYXllckluZm8ubWFzayA9IHRvQ29vcmRpbmF0ZWRMYXll
cklEKG1hc2tMYXllcigpKTsKLSAgICBtX2xheWVySW5mby5tYXNrc1RvQm91bmRzID0gbWFza3NU
b0JvdW5kcygpOwotICAgIG1fbGF5ZXJJbmZvLm9wYWNpdHkgPSBvcGFjaXR5KCk7Ci0gICAgbV9s
YXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOwotICAgIG1fbGF5ZXJJbmZvLnJl
cGxpY2EgPSB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChyZXBsaWNhTGF5ZXIoKSk7Ci0gICAgbV9sYXll
ckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7Ci0KLSAgICBtX2xheWVySW5mby5hbmNob3JQ
b2ludCA9IG1fYWRqdXN0ZWRBbmNob3JQb2ludDsKLSAgICBtX2xheWVySW5mby5wb3MgPSBtX2Fk
anVzdGVkUG9zaXRpb247Ci0gICAgbV9sYXllckluZm8uc2l6ZSA9IG1fYWRqdXN0ZWRTaXplOwot
Ci0gICAgbV9sYXllckluZm8uc2hvd0RlYnVnQm9yZGVycyA9IGlzU2hvd2luZ0RlYnVnQm9yZGVy
KCk7Ci0gICAgaWYgKG1fbGF5ZXJJbmZvLnNob3dEZWJ1Z0JvcmRlcnMpCi0gICAgICAgIHVwZGF0
ZURlYnVnSW5kaWNhdG9ycygpOwotICAgIG1fbGF5ZXJJbmZvLnNob3dSZXBhaW50Q291bnRlciA9
IGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCk7CiAKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5
ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5mbyk7CisgICAgbV9sYXllclN0YXRlLmNoaWxkcmVuVHJh
bnNmb3JtID0gY2hpbGRyZW5UcmFuc2Zvcm0oKTsKKyAgICBtX2xheWVyU3RhdGUuY29udGVudHNS
ZWN0ID0gY29udGVudHNSZWN0KCk7CisgICAgbV9sYXllclN0YXRlLm1hc2sgPSB0b0Nvb3JkaW5h
dGVkTGF5ZXJJRChtYXNrTGF5ZXIoKSk7CisgICAgbV9sYXllclN0YXRlLm9wYWNpdHkgPSBvcGFj
aXR5KCk7CisgICAgbV9sYXllclN0YXRlLnJlcGxpY2EgPSB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChy
ZXBsaWNhTGF5ZXIoKSk7CisgICAgbV9sYXllclN0YXRlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgp
OworCisgICAgbV9sYXllclN0YXRlLmFuY2hvclBvaW50ID0gbV9hZGp1c3RlZEFuY2hvclBvaW50
OworICAgIG1fbGF5ZXJTdGF0ZS5wb3MgPSBtX2FkanVzdGVkUG9zaXRpb247CisgICAgbV9sYXll
clN0YXRlLnNpemUgPSBtX2FkanVzdGVkU2l6ZTsKKworICAgIGlmIChtX2xheWVyU3RhdGUuc2hv
d0RlYnVnQm9yZGVycykKKyAgICAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CiAKIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYg
Y29sb3IsIGZsb2F0IHdpZHRoKQogewotICAgIEFTU0VSVChtX2xheWVySW5mby5zaG93RGVidWdC
b3JkZXJzKTsKLSAgICBtX2xheWVySW5mby5kZWJ1Z0JvcmRlckNvbG9yID0gY29sb3I7Ci0gICAg
bV9sYXllckluZm8uZGVidWdCb3JkZXJXaWR0aCA9IHdpZHRoOworICAgIEFTU0VSVChtX2xheWVy
U3RhdGUuc2hvd0RlYnVnQm9yZGVycyk7CisgICAgaWYgKG1fbGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRl
ckNvbG9yICE9IGNvbG9yKSB7CisgICAgICAgIG1fbGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNvbG9y
ID0gY29sb3I7CisgICAgICAgIG1fbGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNvbG9yQ2hhbmdlZCA9
IHRydWU7CisgICAgfQorCisgICAgaWYgKG1fbGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlcldpZHRoICE9
IHdpZHRoKSB7CisgICAgICAgIG1fbGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlcldpZHRoID0gd2lkdGg7
CisgICAgICAgIG1fbGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlcldpZHRoQ2hhbmdlZCA9IHRydWU7Cisg
ICAgfQogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMo
KQpAQCAtNTk0LDggKzY0NCw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5j
QW5pbWF0aW9ucygpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc2hvdWxkU3luY0FuaW1hdGlv
bnMgPSBmYWxzZTsKLQotICAgIG1fY29vcmRpbmF0b3ItPnNldExheWVyQW5pbWF0aW9ucyhtX2lk
LCBtX2FuaW1hdGlvbnMpOworICAgIG1fbGF5ZXJTdGF0ZS5hbmltYXRpb25zID0gbV9hbmltYXRp
b25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKKyAgICBtX2xheWVyU3RhdGUuYW5pbWF0aW9uc0No
YW5nZWQgPSB0cnVlOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCkBAIC02MTIsNyAr
NjYyLDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQogICAg
IGlmICghbV9pc1ZhbGlkQ2FudmFzKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Nvb3JkaW5h
dG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgQVNTRVJU
KG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAgbV9sYXllclN0YXRlLmNhbnZhc0Zyb250QnVm
ZmVyID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKKyAg
ICBtX2xheWVyU3RhdGUuY2FudmFzU2hvdWxkU3dhcEJ1ZmZlcnMgPSB0cnVlOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNhbnZhc0lmTmVlZGVkKCkKQEAgLTYy
MSw4ICs2NzMsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNhbnZh
c0lmTmVlZGVkKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1faXNWYWxpZENhbnZhcykg
ewotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5kZXN0cm95Q2FudmFzKG1faWQpOwogICAgICAgICBt
X2lzVmFsaWRDYW52YXMgPSBmYWxzZTsKKyAgICAgICAgbV9sYXllclN0YXRlLmNhbnZhc1Rva2Vu
ID0gR3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKKyAgICAgICAgbV9sYXllclN0YXRlLmNhbnZhc0No
YW5nZWQgPSB0cnVlOwogICAgIH0KIAogICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmPSB+
RGVzdHJveUNhbnZhczsKQEAgLTYzNSw3ICs2ODgsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQoKQogCiAgICAgQVNTRVJUKG1fY2FudmFzUGxh
dGZvcm1MYXllcik7CiAgICAgaWYgKCFtX2lzVmFsaWRDYW52YXMpIHsKLSAgICAgICAgbV9jb29y
ZGluYXRvci0+Y3JlYXRlQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisgICAg
ICAgIG1fbGF5ZXJTdGF0ZS5jYW52YXNTaXplID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0
Zm9ybUxheWVyU2l6ZSgpOworICAgICAgICBtX2xheWVyU3RhdGUuY2FudmFzVG9rZW4gPSBtX2Nh
bnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAgICAgIG1fbGF5
ZXJTdGF0ZS5jYW52YXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgbV9pc1ZhbGlkQ2FudmFzID0g
dHJ1ZTsKICAgICB9CiAKQEAgLTY2NywxMSArNzIyLDIzIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKICNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKICAgICBzeW5jQ2FudmFzKCk7CiAjZW5kaWYKKworICAgIG1f
Y29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJTdGF0ZSk7CisgICAgcmVz
ZXRMYXllclN0YXRlKCk7CisKICAgICAvLyBPbmx5IHVuc2V0IG1fbW92aW5nVmlzaWJsZVJlY3Qg
YWZ0ZXIgd2UgaGF2ZSB1cGRhdGVkIHRoZSB2aXNpYmxlIHJlY3QgYWZ0ZXIgdGhlIGFuaW1hdGlv
biBzdG9wcGVkLgogICAgIGlmICghaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKQogICAgICAg
ICBtX21vdmluZ1Zpc2libGVSZWN0ID0gZmFsc2U7CiB9CiAKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpyZXNldExheWVyU3RhdGUoKQoreworICAgIG1fbGF5ZXJTdGF0ZS5jaGFuZ2VN
YXNrID0gMDsKKyAgICBtX2xheWVyU3RhdGUudGlsZXNUb0NyZWF0ZS5jbGVhcigpOworICAgIG1f
bGF5ZXJTdGF0ZS50aWxlc1RvUmVtb3ZlLmNsZWFyKCk7CisgICAgbV9sYXllclN0YXRlLnRpbGVz
VG9VcGRhdGUuY2xlYXIoKTsKK30KKwogYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6Omlt
YWdlQmFja2luZ1Zpc2libGUoKQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nKTsKQEAgLTY4Niw3ICs3NTMsOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
cmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCkKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7
CiAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+cmVtb3ZlSG9zdCh0aGlzKTsKICAgICBt
X2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNsZWFyKCk7Ci0gICAgbV9sYXllckluZm8uaW1hZ2VJ
RCA9IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEOworICAgIG1fbGF5ZXJTdGF0ZS5p
bWFnZUlEID0gSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7CisgICAgbV9sYXllclN0
YXRlLmltYWdlQ2hhbmdlZCA9IHRydWU7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQpAQCAtNjk1LDcgKzc2Myw4IEBAIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4o
KQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Um9vdExheWVyKGJvb2wgaXNS
b290KQogewotICAgIG1fbGF5ZXJJbmZvLmlzUm9vdExheWVyID0gaXNSb290OworICAgIG1fbGF5
ZXJTdGF0ZS5pc1Jvb3RMYXllciA9IGlzUm9vdDsKKyAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFu
Z2VkID0gdHJ1ZTsKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTc1MSw4ICs4
MjAsMTEgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3Jl
UGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4m
IHVwZGF0ZWRSZWN0cykKIHsKLSAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50ZXIoKSAmJiAh
dXBkYXRlZFJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+c2V0TGF5ZXJS
ZXBhaW50Q291bnQoaWQoKSwgaW5jcmVtZW50UmVwYWludENvdW50KCkpOworICAgIGlmICghaXNT
aG93aW5nUmVwYWludENvdW50ZXIoKSB8fCB1cGRhdGVkUmVjdHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2xheWVyU3RhdGUucmVwYWludENvdW50ID0gaW5jcmVtZW50UmVw
YWludENvdW50KCk7CisgICAgbV9sYXllclN0YXRlLnJlcGFpbnRDb3VudENoYW5nZWQgPSB0cnVl
OwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVI
YXNQZW5kaW5nVGlsZUNyZWF0aW9uKCkKQEAgLTgxMSwyMSArODgzLDMyIEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3Vy
ZmFjZVVwZGF0ZUluCiB7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwogICAgIEFTU0VSVCht
X2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAgIG1fY29vcmRpbmF0
b3ItPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVjdCk7CisKKyAg
ICBUaWxlQ3JlYXRpb25JbmZvIGNyZWF0aW9uSW5mbzsKKyAgICBjcmVhdGlvbkluZm8udGlsZUlE
ID0gdGlsZUlEOworICAgIGNyZWF0aW9uSW5mby5zY2FsZSA9IHVwZGF0ZUluZm8uc2NhbGVGYWN0
b3I7CisKKyAgICBtX2xheWVyU3RhdGUudGlsZXNUb0NyZWF0ZS5hcHBlbmQoY3JlYXRpb25JbmZv
KTsKKyAgICB1cGRhdGVUaWxlKHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3QpOwogfQogCiB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0aWxl
UmVjdCkKIHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRp
bmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0gICAgbV9jb29yZGluYXRvci0+dXBk
YXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKworICAgIFRpbGVV
cGRhdGVJbmZvIHRpbGVVcGRhdGVJbmZvOworICAgIHRpbGVVcGRhdGVJbmZvLnRpbGVJRCA9IHRp
bGVJRDsKKyAgICB0aWxlVXBkYXRlSW5mby50aWxlUmVjdCA9IHRpbGVSZWN0OworICAgIHRpbGVV
cGRhdGVJbmZvLnVwZGF0ZUluZm8gPSB1cGRhdGVJbmZvOworICAgIG1fbGF5ZXJTdGF0ZS50aWxl
c1RvVXBkYXRlLmFwcGVuZCh0aWxlVXBkYXRlSW5mbyk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCkKIHsKICAgICBBU1NFUlQo
bV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXll
ckNoYW5nZXMoKSB8fCBtX2lzUHVyZ2luZyk7Ci0gICAgbV9jb29yZGluYXRvci0+cmVtb3ZlVGls
ZShpZCgpLCB0aWxlSUQpOworICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvUmVtb3ZlLmFwcGVuZCh0
aWxlSUQpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVu
dEJ1ZmZlcnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5oCmluZGV4IGU1YWE0N2FmY2MwODAyMGUyMjU5MjkxMDVhOWFjMGE4ZTU5ZGQz
MjcuLjc5MGZlOTZjOGEzNGVkNTZmNzZlMDA0NmZjYzgyOTY3MWIyNzE4MTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTIx
LDggKzIxLDggQEAKICNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKICNkZWZpbmUg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCi0jaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIK
ICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCkBA
IC00OCwzMSArNDgsMTIgQEAgY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7CiBjbGFzcyBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgPSAwOwotCi0gICAgLy8gQ29vcmRpbmF0
ZWRUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50
UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlEKSA9IDA7Ci0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2aXNpYmxl
Q29udGVudHNSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXll
ckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5
ZXJJRD4mKSA9IDA7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYpID0gMDsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxheWVyKikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgUGxhdGZv
cm1MYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRl
ZExheWVySUQpID0gMDsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVwYWlu
dENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMmKSA9IDA7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGlj
c0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiwgQ29vcmRpbmF0ZWRT
dXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JikgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyU3RhdGUmKSA9IDA7CiB9OwogCiBjbGFzcyBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIgOiBwdWJsaWMgR3JhcGhpY3NMYXllcgpAQCAtMTkwLDYgKzE3MSw3IEBAIHByaXZh
dGU6CiAjZW5kaWYKICAgICB2b2lkIGRpZENoYW5nZUltYWdlQmFja2luZygpOwogCisgICAgdm9p
ZCByZXNldExheWVyU3RhdGUoKTsKICAgICB2b2lkIHN5bmNMYXllclN0YXRlKCk7CiAgICAgdm9p
ZCBzeW5jQW5pbWF0aW9ucygpOwogICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7CkBAIC0yMTYsNyAr
MTk4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRp
bWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4qKTsKIAogICAgIENvb3JkaW5hdGVkTGF5ZXJJ
RCBtX2lkOwotICAgIENvb3JkaW5hdGVkTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOworICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlIG1fbGF5ZXJTdGF0ZTsKICAgICBHcmFwaGljc0xheWVy
VHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9j
YWNoZWRJbnZlcnNlVHJhbnNmb3JtOwogICAgIEZsb2F0U2l6ZSBtX3BpeGVsQWxpZ25tZW50T2Zm
c2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmNwcAppbmRleCA4NjI0NTEzMDQ5MmQ5YmIxMDNiZTBkNDIzMzJiM2Y2MDA1MGNhMTU4
Li45ZjA4MDUzM2M2NmJhYmRiMmJmYjhlM2YxNjA0ZTlhZGEzYTM4YTU2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApAQCAt
MTk2LDU0ICsxOTYsNjMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFkanVzdFBv
c2l0aW9uRm9yRml4ZWRMYXllcnMoKQogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJm
YWNlKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUNhbnZhc0lmTmVlZGVk
KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAgR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotICAgIEFTU0VSVCghbV9zdXJmYWNlQmFja2lu
Z1N0b3Jlcy5jb250YWlucyhpZCkpOworICAgIGlmICghc3RhdGUuY2FudmFzVG9rZW4uaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VC
YWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tp
bmdTdG9yZTo6Y3JlYXRlKCkpOwotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBj
YW52YXNCYWNraW5nU3RvcmUpOworICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGxheWVy
LCBjYW52YXNCYWNraW5nU3RvcmUpOwogCi0gICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFw
aGljc1N1cmZhY2Uoc3VyZmFjZSk7CisgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJmYWNl
RmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBoaWNz
U3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOworICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c2V0R3Jh
cGhpY3NTdXJmYWNlKEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKHN0YXRlLmNhbnZhc1NpemUsIHN1
cmZhY2VGbGFncywgc3RhdGUuY2FudmFzVG9rZW4pKTsKICAgICBsYXllci0+c2V0Q29udGVudHNU
b01lZGlhKGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3Qg
ZnJvbnRCdWZmZXIpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY0NhbnZhc0lm
TmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSYgc3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAgQVNT
RVJUKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMoaWQpKTsKIAotICAgIFN1cmZhY2VC
YWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5maW5k
KGlkKTsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZh
c0JhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKKyAgICBpZiAoc3RhdGUuY2FudmFzQ2hhbmdlZCkg
eworICAgICAgICBkZXN0cm95Q2FudmFzSWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsKKyAgICAgICAg
Y3JlYXRlQ2FudmFzSWZOZWVkZWQobGF5ZXIsIHN0YXRlKTsKKyAgICB9CiAKLSAgICBjYW52YXNC
YWNraW5nU3RvcmUtPnN3YXBCdWZmZXJzSWZOZWVkZWQoZnJvbnRCdWZmZXIpOworICAgIGlmIChz
dGF0ZS5jYW52YXNTaG91bGRTd2FwQnVmZmVycykgeworICAgICAgICBBU1NFUlQobV9zdXJmYWNl
QmFja2luZ1N0b3Jlcy5jb250YWlucyhsYXllcikpOworICAgICAgICBTdXJmYWNlQmFja2luZ1N0
b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZmluZChsYXllcik7
CisgICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gY2FudmFz
QmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOworICAgICAgICBjYW52YXNCYWNraW5nU3RvcmUtPnN3
YXBCdWZmZXJzSWZOZWVkZWQoc3RhdGUuY2FudmFzRnJvbnRCdWZmZXIpOworICAgIH0KIH0KIAot
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ryb3lDYW52YXNJ
Zk5lZWRlZChHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyU3RhdGUmIHN0YXRlKQogewotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwotICAgIEdy
YXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICBBU1NFUlQobV9zdXJmYWNl
QmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkpOworICAgIGlmIChzdGF0ZS5jYW52YXNUb2tlbi5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMu
cmVtb3ZlKGlkKTsKKyAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShsYXllcik7CiAg
ICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKIH0KICNlbmRpZgogCi12b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXll
cklEIGlkLCBpbnQgdmFsdWUpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5
ZXJSZXBhaW50Q291bnRJZk5lZWRlZChHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxh
eWVyKS0+c2V0UmVwYWludENvdW50KHZhbHVlKTsKKyAgICBpZiAoIWxheWVyLT5pc1Nob3dpbmdS
ZXBhaW50Q291bnRlcigpIHx8ICFzdGF0ZS5yZXBhaW50Q291bnRDaGFuZ2VkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+c2V0UmVw
YWludENvdW50KHN0YXRlLnJlcGFpbnRDb3VudCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3Qg
VmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkSURzKQordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRyZW5JZk5lZWRlZChHcmFwaGljc0xheWVyKiBsYXll
ciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIEdy
YXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAgICBpZiAoIXN0YXRlLmNoaWxk
cmVuQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIq
PiBjaGlsZHJlbjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRJRHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGNoaWxkSUQgPSBjaGlsZElEc1tp
XTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLmNoaWxkcmVuLnNpemUoKTsgKytp
KSB7CisgICAgICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBjaGlsZElEID0gc3RhdGUuY2hpbGRyZW5b
aV07CiAgICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxkSUQpOwog
ICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwogICAgIH0KQEAgLTI1MSwxNCArMjYwLDE1
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxkcmVuKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjCiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Ci12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckZpbHRlcnNJZk5lZWRlZChHcmFwaGljc0xh
eWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQog
ewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAgICBpZiAoIXN0
YXRlLmZpbHRlcnNDaGFuZ2VkKQorICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCi0gICAgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoZmlsdGVycyk7Cisg
ICAgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoc3RhdGUuZmlsdGVycyk7CiAjZW5k
aWYKLSAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKKyAgICBsYXllci0+c2V0RmlsdGVy
cyhzdGF0ZS5maWx0ZXJzKTsKIH0KICNlbmRpZgogCkBAIC0yOTQsNDMgKzMwNCw4MCBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQg
aWQpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQogCi12b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0
IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBsYXllckluZm8pCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBsYXllclN0YXRlKQogewogICAgIEFTU0VSVChtX3Jv
b3RMYXllcklEICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOwogICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKIAotICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlM
YXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllckluZm8ucmVwbGljYSkpOwotICAgIGxheWVy
LT5zZXRNYXNrTGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJJbmZvLm1hc2spKTsKLQot
ICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8uYW5jaG9yUG9pbnQpOwotICAgIGxh
eWVyLT5zZXRQb3NpdGlvbihsYXllckluZm8ucG9zKTsKLSAgICBsYXllci0+c2V0U2l6ZShsYXll
ckluZm8uc2l6ZSk7Ci0KLSAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5mby50cmFuc2Zv
cm0pOwotICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8uY2hpbGRyZW5U
cmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJJbmZvLmJh
Y2tmYWNlVmlzaWJsZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxheWVySW5mby5j
b250ZW50c09wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8uY29u
dGVudHNSZWN0KTsKLSAgICBsYXllci0+c2V0Q29udGVudHNUb1NvbGlkQ29sb3IobGF5ZXJJbmZv
LnNvbGlkQ29sb3IpOwotICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJbmZvLmRyYXdz
Q29udGVudCk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZShsYXllckluZm8uY29udGVu
dHNWaXNpYmxlKTsKLSAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+c2V0
Rml4ZWRUb1ZpZXdwb3J0KGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpOwotICAgIGxheWVyLT5z
ZXRTaG93RGVidWdCb3JkZXIobGF5ZXJJbmZvLnNob3dEZWJ1Z0JvcmRlcnMpOwotICAgIGxheWVy
LT5zZXREZWJ1Z0JvcmRlcihsYXllckluZm8uZGVidWdCb3JkZXJDb2xvciwgbGF5ZXJJbmZvLmRl
YnVnQm9yZGVyV2lkdGgpOwotICAgIGxheWVyLT5zZXRTaG93UmVwYWludENvdW50ZXIobGF5ZXJJ
bmZvLnNob3dSZXBhaW50Q291bnRlcik7Ci0KLSAgICBpZiAobGF5ZXJJbmZvLmZpeGVkVG9WaWV3
cG9ydCkKKyAgICBpZiAobGF5ZXJTdGF0ZS5wb3NpdGlvbkNoYW5nZWQpCisgICAgICAgIGxheWVy
LT5zZXRQb3NpdGlvbihsYXllclN0YXRlLnBvcyk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5hbmNo
b3JQb2ludENoYW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllclN0YXRl
LmFuY2hvclBvaW50KTsKKworICAgIGlmIChsYXllclN0YXRlLnNpemVDaGFuZ2VkKQorICAgICAg
ICBsYXllci0+c2V0U2l6ZShsYXllclN0YXRlLnNpemUpOworCisgICAgaWYgKGxheWVyU3RhdGUu
dHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShsYXllclN0YXRl
LnRyYW5zZm9ybSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5zZm9ybUNoYW5n
ZWQpCisgICAgICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllclN0YXRlLmNoaWxk
cmVuVHJhbnNmb3JtKTsKKworICAgIGlmIChsYXllclN0YXRlLmNvbnRlbnRzUmVjdENoYW5nZWQp
CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJTdGF0ZS5jb250ZW50c1JlY3Qp
OworCisgICAgaWYgKGxheWVyU3RhdGUub3BhY2l0eUNoYW5nZWQpCisgICAgICAgIGxheWVyLT5z
ZXRPcGFjaXR5KGxheWVyU3RhdGUub3BhY2l0eSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5zb2xp
ZENvbG9yQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGxh
eWVyU3RhdGUuc29saWRDb2xvcik7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNv
bG9yQ2hhbmdlZCB8fCBsYXllclN0YXRlLmRlYnVnQm9yZGVyV2lkdGhDaGFuZ2VkKQorICAgICAg
ICBsYXllci0+c2V0RGVidWdCb3JkZXIobGF5ZXJTdGF0ZS5kZWJ1Z0JvcmRlckNvbG9yLCBsYXll
clN0YXRlLmRlYnVnQm9yZGVyV2lkdGgpOworCisgICAgaWYgKGxheWVyU3RhdGUucmVwbGljYUNo
YW5nZWQpCisgICAgICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihnZXRMYXllckJ5SURJ
ZkV4aXN0cyhsYXllclN0YXRlLnJlcGxpY2EpKTsKKworICAgIGlmIChsYXllclN0YXRlLm1hc2tD
aGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0TWFza0xheWVyKGdldExheWVyQnlJRElmRXhpc3Rz
KGxheWVyU3RhdGUubWFzaykpOworCisgICAgaWYgKGxheWVyU3RhdGUuaW1hZ2VDaGFuZ2VkKQor
ICAgICAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKGxheWVyLCBsYXllclN0YXRlLmltYWdl
SUQpOworCisgICAgaWYgKGxheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkKSB7CisgICAgICAgIGxheWVy
LT5zZXRDb250ZW50c09wYXF1ZShsYXllclN0YXRlLmNvbnRlbnRzT3BhcXVlKTsKKyAgICAgICAg
bGF5ZXItPnNldERyYXdzQ29udGVudChsYXllclN0YXRlLmRyYXdzQ29udGVudCk7CisgICAgICAg
IGxheWVyLT5zZXRDb250ZW50c1Zpc2libGUobGF5ZXJTdGF0ZS5jb250ZW50c1Zpc2libGUpOwor
ICAgICAgICBsYXllci0+c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVyU3RhdGUuYmFja2ZhY2VW
aXNpYmxlKTsKKworICAgICAgICAvLyBOZXZlciBjbGlwIHRoZSByb290IGxheWVyLgorICAgICAg
ICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllclN0YXRlLmlzUm9vdExheWVyID8gZmFsc2Ug
OiBsYXllclN0YXRlLm1hc2tzVG9Cb3VuZHMpOworICAgICAgICBsYXllci0+c2V0UHJlc2VydmVz
M0QobGF5ZXJTdGF0ZS5wcmVzZXJ2ZXMzRCk7CisKKyAgICAgICAgdG9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcihsYXllciktPnNldEZpeGVkVG9WaWV3cG9ydChsYXllclN0YXRlLmZpeGVkVG9W
aWV3cG9ydCk7CisgICAgICAgIGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIobGF5ZXJTdGF0ZS5z
aG93RGVidWdCb3JkZXJzKTsKKyAgICAgICAgbGF5ZXItPnNldFNob3dSZXBhaW50Q291bnRlcihs
YXllclN0YXRlLnNob3dSZXBhaW50Q291bnRlcik7CisgICAgfQorCisgICAgaWYgKGxheWVyU3Rh
dGUuZml4ZWRUb1ZpZXdwb3J0KQogICAgICAgICBtX2ZpeGVkTGF5ZXJzLmFkZChpZCwgbGF5ZXIp
OwogICAgIGVsc2UKICAgICAgICAgbV9maXhlZExheWVycy5yZW1vdmUoaWQpOwogCi0gICAgYXNz
aWduSW1hZ2VCYWNraW5nVG9MYXllcihpZCwgbGF5ZXIsIGxheWVySW5mby5pbWFnZUlEKTsKICAg
ICBwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShsYXllcik7CiAKLSAgICAvLyBOZXZlciBtYWtl
IHRoZSByb290IGxheWVyIGNsaXAuCi0gICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJ
bmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7Ci0gICAg
bGF5ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOwotICAgIGxheWVyLT5zZXRQcmVz
ZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOworICAgIC8vIEFwcGx5IE9wZXJhdGlvbnMu
CisgICAgc2V0TGF5ZXJDaGlsZHJlbklmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyAgICBj
cmVhdGVUaWxlc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyAgICByZW1vdmVUaWxlc0lm
TmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKKyAgICB1cGRhdGVUaWxlc0lmTmVlZGVkKGxheWVy
LCBsYXllclN0YXRlKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgc2V0TGF5ZXJGaWx0
ZXJzSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOworI2VuZGlmCisgICAgc2V0TGF5ZXJBbmlt
YXRpb25zSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOworICAgIHN5bmNDYW52YXNJZk5lZWRl
ZChsYXllciwgbGF5ZXJTdGF0ZSk7CisgICAgc2V0TGF5ZXJSZXBhaW50Q291bnRJZk5lZWRlZChs
YXllciwgbGF5ZXJTdGF0ZSk7CiB9CiAKIEdyYXBoaWNzTGF5ZXIqIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQpAQCAt
MzY1LDcgKzQxMiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXll
cihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKICAgICBtX2JhY2tpbmdTdG9yZXMucmVtb3Zl
KGxheWVyLmdldCgpKTsKICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKICNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShs
YXllcklEKTsKKyAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShsYXllci5nZXQoKSk7
CiAjZW5kaWYKIH0KIApAQCAtNDE5LDM2ICs0NjYsNTEgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKEdyYXBoaWNzTGF5ZXIq
IGcKICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9y
ZSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxlKENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKQordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVRpbGVzSWZOZWVkZWQoR3JhcGhpY3NM
YXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkK
IHsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBp
ZiAoc3RhdGUudGlsZXNUb0NyZWF0ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5n
U3RvcmVzLmdldChsYXllcik7CiAgICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7Ci0gICAgYmFja2lu
Z1N0b3JlLT5jcmVhdGVUaWxlKHRpbGVJRCwgc2NhbGUpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdGF0ZS50aWxlc1RvQ3JlYXRlLnNpemUoKTsgKytpKQorICAgICAgICBiYWNraW5n
U3RvcmUtPmNyZWF0ZVRpbGUoc3RhdGUudGlsZXNUb0NyZWF0ZVtpXS50aWxlSUQsIHN0YXRlLnRp
bGVzVG9DcmVhdGVbaV0uc2NhbGUpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6cmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
KQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVRpbGVzSWZOZWVkZWQoR3Jh
cGhpY3NMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBz
dGF0ZSkKIHsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsK
KyAgICBpZiAoc3RhdGUudGlsZXNUb1JlbW92ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gbV9i
YWNraW5nU3RvcmVzLmdldChsYXllcik7CiAgICAgaWYgKCFiYWNraW5nU3RvcmUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGJhY2tpbmdTdG9yZS0+cmVtb3ZlVGlsZSh0aWxlSUQpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUudGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkKKyAg
ICAgICAgYmFja2luZ1N0b3JlLT5yZW1vdmVUaWxlKHN0YXRlLnRpbGVzVG9SZW1vdmVbaV0pOwor
CiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUp
OwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZShDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1
cGRhdGUpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZXNJZk5lZWRl
ZChHcmFwaGljc0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGUmIHN0YXRlKQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVy
SUQpOworICAgIGlmIChzdGF0ZS50aWxlc1RvVXBkYXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUg
PSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKICAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsK
IAotICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHVwZGF0ZS5h
dGxhc0lEKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzdGF0ZS50aWxlc1RvVXBkYXRlLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGNvbnN0IFRpbGVVcGRhdGVJbmZvJiB0aWxlSW5mbyA9IHN0YXRlLnRpbGVzVG9VcGRhdGVb
aV07CisgICAgICAgIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiBzdXJmYWNlVXBkYXRlSW5mbyA9
IHRpbGVJbmZvLnVwZGF0ZUluZm87CiAKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGls
ZUlELCB1cGRhdGUuc291cmNlUmVjdCwgdXBkYXRlLnRpbGVSZWN0LCBpdC0+dmFsdWUsIHVwZGF0
ZS5vZmZzZXQpOwotICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFj
a2luZ1N0b3JlKTsKKyAgICAgICAgU3VyZmFjZU1hcDo6aXRlcmF0b3Igc3VyZmFjZUl0ID0gbV9z
dXJmYWNlcy5maW5kKHN1cmZhY2VVcGRhdGVJbmZvLmF0bGFzSUQpOworICAgICAgICBBU1NFUlQo
c3VyZmFjZUl0ICE9IG1fc3VyZmFjZXMuZW5kKCkpOworCisgICAgICAgIGJhY2tpbmdTdG9yZS0+
dXBkYXRlVGlsZSh0aWxlSW5mby50aWxlSUQsIHN1cmZhY2VVcGRhdGVJbmZvLnVwZGF0ZVJlY3Qs
IHRpbGVJbmZvLnRpbGVSZWN0LCBzdXJmYWNlSXQtPnZhbHVlLCBzdXJmYWNlVXBkYXRlSW5mby5z
dXJmYWNlT2Zmc2V0KTsKKyAgICAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
LmFkZChiYWNraW5nU3RvcmUpOworICAgIH0KIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQpAQCAtNTA0LDEwICs1NjYsMTAgQEAgdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIGltYWcKICAgICBtX3JlbGVhc2VkSW1hZ2VCYWNraW5ncy5hcHBlbmQobV9pbWFn
ZUJhY2tpbmdzLnRha2UoaW1hZ2VJRCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihDb29yZGluYXRlZExheWVySUQgaWQsIEdy
YXBoaWNzTGF5ZXIqIGxheWVyLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihH
cmFwaGljc0xheWVyKiBsYXllciwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQog
ewogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIGlmIChtX3N1cmZhY2VCYWNraW5nU3Rv
cmVzLmNvbnRhaW5zKGlkKSkKKyAgICBpZiAobV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlu
cyhsYXllcikpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgogCkBAIC01MzQsMTMgKzU5NiwyNSBA
QCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9y
ZU9wZXJhdGlvbnMoKQogICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVh
cigpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Zmx1c2hMYXllckNoYW5n
ZXMoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6Y29tbWl0U2NlbmVTdGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3Rh
dGUmIHN0YXRlKQogewotICAgIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gc2Ny
b2xsUG9zaXRpb247CisgICAgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBzdGF0
ZS5zY3JvbGxQb3NpdGlvbjsKIAogICAgIC8vIFNpbmNlIHRoZSBmcmFtZSBoYXMgbm93IGJlZW4g
cmVuZGVyZWQsIHdlIGNhbiBzYWZlbHkgdW5sb2NrIHRoZSBhbmltYXRpb25zIHVudGlsIHRoZSBu
ZXh0IGxheW91dC4KICAgICBzZXRBbmltYXRpb25zTG9ja2VkKGZhbHNlKTsKIAorICAgIGlmIChz
dGF0ZS5yb290Q29tcG9zaXRpbmdMYXllciAhPSBtX3Jvb3RMYXllcklEKQorICAgICAgICBzZXRS
b290TGF5ZXJJRChzdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllcik7CisKKyAgICBpZiAoc3RhdGUu
YmFja2dyb3VuZENvbG9yICE9IG1fYmFja2dyb3VuZENvbG9yKQorICAgICAgICBzZXRCYWNrZ3Jv
dW5kQ29sb3Ioc3RhdGUuYmFja2dyb3VuZENvbG9yKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3RhdGUuaW1hZ2VzVG9VcGRhdGUuc2l6ZSgpOyArK2kpCisgICAgICAgIHVwZGF0ZUlt
YWdlQmFja2luZyhzdGF0ZS5pbWFnZXNUb1VwZGF0ZVtpXS5maXJzdCwgc3RhdGUuaW1hZ2VzVG9V
cGRhdGVbaV0uc2Vjb25kKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUubGF5
ZXJzVG9VcGRhdGUuc2l6ZSgpOyArK2kpCisgICAgICAgIHNldExheWVyU3RhdGUoc3RhdGUubGF5
ZXJzVG9VcGRhdGVbaV0uZmlyc3QsIHN0YXRlLmxheWVyc1RvVXBkYXRlW2ldLnNlY29uZCk7CisK
ICAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKICAg
ICBjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpOwogICAgIHJlbW92ZVJlbGVh
c2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7CkBAIC02MTYsMTIgKzY5MCwxNiBAQCB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKICAgICAgICAgbV9j
bGllbnQtPnB1cmdlQmFja2luZ1N0b3JlcygpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3Qg
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQoR3JhcGhpY3NMYXllciogZ3Jh
cGhpY3NMYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQog
ewotICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBsYXllciA9IHRvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIobGF5ZXJCeUlEKGlkKSk7CisgICAgaWYgKCFzdGF0ZS5hbmltYXRpb25z
Q2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIqIGxheWVyID0gdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihncmFwaGljc0xheWVyKTsK
KwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFu
aW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZy
YW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5r
ZXlmcmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLmFuaW1hdGlvbnMu
YW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiBrZXlmcmFtZXMgPSBzdGF0ZS5hbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlm
cmFtZXMoKTsKICAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRGaWx0ZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKQEAgLTYzMCw3ICs3MDgs
NyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0g
ICAgbGF5ZXItPnNldEFuaW1hdGlvbnMoYW5pbWF0aW9ucyk7CisgICAgbGF5ZXItPnNldEFuaW1h
dGlvbnMoc3RhdGUuYW5pbWF0aW9ucyk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCmluZGV4IDljOTIxYTc0ZjZj
M2YwZDgzNzFjMGI5MjlmNzgxMmI0ODljZmY1ZDEuLmVkNWRiZTAxZWZiN2EzOTNhNDJlOWY5OTU5
YjhiMWI4ZTFiMzNiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNkZWZpbmUgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lX2gKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNs
dWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKQEAgLTQ2LDcgKzQ2
LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU7Ci1jbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKIGNsYXNzIEN1c3RvbUZpbHRlclByb2dy
YW07CiBjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbzsKIGNsYXNzIFRleHR1cmVNYXBwZXJM
YXllcjsKQEAgLTY0LDMxICs2MywxMSBAQCBwdWJsaWM6CiAKIGNsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU+LCBwdWJsaWMgR3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3Ry
dWN0IFRpbGVVcGRhdGUgewotICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3Q7Ci0gICAgICAgIElu
dFJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7Ci0gICAgICAgIEludFBv
aW50IG9mZnNldDsKLSAgICAgICAgVGlsZVVwZGF0ZShjb25zdCBJbnRSZWN0JiBzb3VyY2UsIGNv
bnN0IEludFJlY3QmIHRpbGUsIHVpbnQzMl90IGF0bGFzLCBjb25zdCBJbnRQb2ludCYgbmV3T2Zm
c2V0KQotICAgICAgICAgICAgOiBzb3VyY2VSZWN0KHNvdXJjZSkKLSAgICAgICAgICAgICwgdGls
ZVJlY3QodGlsZSkKLSAgICAgICAgICAgICwgYXRsYXNJRChhdGxhcykKLSAgICAgICAgICAgICwg
b2Zmc2V0KG5ld09mZnNldCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsKICAgICBleHBs
aWNpdCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xp
ZW50Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CiAgICAgdm9p
ZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZs
b2F0LCBjb25zdCBGbG9hdFJlY3QmLCBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzID0gMCk7CiAg
ICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7
CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7Ci0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklELCBjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KTsKLSAgICB2
b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7
Ci0gICAgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAg
ICB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVl
KTsKLQogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYpOwogCkBAIC05NywzMSArNzYsMjMgQEAgcHVibGljOgogICAgIHZvaWQg
cHVyZ2VHTFJlc291cmNlcygpOwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOwogCisgICAgdm9p
ZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOworCiAg
ICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsK
ICAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYp
OwotICAgIHZvaWQgc2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lk
IHNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRp
bmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJT
KQotICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCisKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAg
dm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKSBjb25zdDsKICAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0o
aW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwogICAgIHZvaWQgcmVtb3Zl
Q3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwogI2VuZGlmCiAKLSAgICB2b2lkIGNyZWF0ZVRp
bGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKTsKLSAg
ICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwot
ICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgVGlsZVVwZGF0ZSYpOwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3Qg
YXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKICAgICB2b2lkIHJlbW92
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1c2hMYXllckNoYW5n
ZXMoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogICAgIHZvaWQgY3JlYXRlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgdXBkYXRlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRTdXJmYWNlPik7CiAgICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKICAgICB2b2lkIHNl
dEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgQ29sb3ImKTsKICAgICB2b2lkIHNldERyYXdzQmFja2dyb3VuZChib29sIGVuYWJsZSkgeyBt
X3NldERyYXdzQmFja2dyb3VuZCA9IGVuYWJsZTsgfQpAQCAtMTMxLDYgKzEwMiwyMyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICB2b2lkIHNldFJvb3RMYXllcklEKENvb3JkaW5h
dGVkTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHNldExheWVy
Q2hpbGRyZW5JZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVzSWZOZWVkZWQoR3JhcGhpY3NMYXll
ciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisgICAgdm9pZCBjcmVh
dGVUaWxlc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZSYpOworICAgIHZvaWQgcmVtb3ZlVGlsZXNJZk5lZWRlZChHcmFwaGljc0xheWVy
KiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgdm9pZCBzZXRMYXllckZpbHRlcnNJZk5lZWRlZChHcmFwaGljc0xheWVy
KiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyNlbmRpZgorICAgIHZv
aWQgc2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQoR3JhcGhpY3NMYXllciosIGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisg
ICAgdm9pZCBjcmVhdGVDYW52YXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIHN5bmNDYW52YXNJZk5lZWRlZChH
cmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAg
ICB2b2lkIGRlc3Ryb3lDYW52YXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyNlbmRpZgorICAgIHZvaWQgc2V0TGF5ZXJSZXBh
aW50Q291bnRJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyU3RhdGUmKTsKKwogICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChDb29yZGluYXRl
ZExheWVySUQgaWQpCiAgICAgewogICAgICAgICBBU1NFUlQobV9sYXllcnMuY29udGFpbnMoaWQp
KTsKQEAgLTE1OSw3ICsxNDcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlTGF5ZXIoQ29v
cmRpbmF0ZWRMYXllcklEKTsKICAgICB2b2lkIGRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJ
RCk7CiAKLSAgICB2b2lkIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoQ29vcmRpbmF0ZWRMYXll
cklELCBHcmFwaGljc0xheWVyKiwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9p
ZCBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBoaWNzTGF5ZXIqLCBDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKICAgICB2b2lkIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVl
ZGVkKCk7CiAgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKICAgICB2b2lkIGNvbW1pdFBlbmRp
bmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7CkBAIC0xODUsNyArMTczLDcgQEAgcHJpdmF0ZToK
ICAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBtX2JhY2tpbmdT
dG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnM7CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBSZWZQdHI8VGV4dHVyZU1hcHBl
clN1cmZhY2VCYWNraW5nU3RvcmU+ID4gU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8R3JhcGhpY3NMYXllciosIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJh
Y2tpbmdTdG9yZT4gPiBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOwogICAgIFN1cmZhY2VCYWNraW5n
U3RvcmVNYXAgbV9zdXJmYWNlQmFja2luZ1N0b3JlczsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjY4NjYwNTE2NjdjN2FiYWViNDI1MDdhMWZhMWM2MjM4ZWM0NWE3OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZV9oCisj
ZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRpb24u
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
IlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
KworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgi
CisjZW5kaWYKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorI2luY2x1ZGUgIkdyYXBoaWNz
U3VyZmFjZVRva2VuLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
b29yZGluYXRlZFN1cmZhY2U7CisKK3R5cGVkZWYgdWludDMyX3QgQ29vcmRpbmF0ZWRMYXllcklE
OworZW51bSB7IEludmFsaWRDb29yZGluYXRlZExheWVySUQgPSAwIH07CisKK3R5cGVkZWYgdWlu
dDY0X3QgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKK2VudW0geyBJbnZhbGlkQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCA9IDAgfTsKKworc3RydWN0IFRpbGVVcGRhdGVJbmZvIHsKKyAgICB1
aW50MzJfdCB0aWxlSUQ7CisgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAgICBXZWJDb3JlOjpTdXJm
YWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworfTsKKworc3RydWN0IFRpbGVDcmVhdGlvbkluZm8g
eworICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICBmbG9hdCBzY2FsZTsKK307CisKK3N0cnVjdCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSB7CisgICAgdW5pb24geworICAgICAgICBzdHJ1
Y3QgeworICAgICAgICAgICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQ6IDE7CisgICAgICAgICAgICBi
b29sIGFuY2hvclBvaW50Q2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgc2l6ZUNoYW5nZWQ6
IDE7CisgICAgICAgICAgICBib29sIHRyYW5zZm9ybUNoYW5nZWQ6IDE7CisgICAgICAgICAgICBi
b29sIGNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgY29udGVu
dHNSZWN0Q2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgb3BhY2l0eUNoYW5nZWQ6IDE7Cisg
ICAgICAgICAgICBib29sIHNvbGlkQ29sb3JDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBk
ZWJ1Z0JvcmRlckNvbG9yQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgZGVidWdCb3JkZXJX
aWR0aENoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29sIHJlcGxpY2FDaGFuZ2VkOiAxOworICAg
ICAgICAgICAgYm9vbCBtYXNrQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgaW1hZ2VDaGFu
Z2VkOiAxOworICAgICAgICAgICAgYm9vbCBmbGFnc0NoYW5nZWQ6IDE7CisgICAgICAgICAgICBi
b29sIGFuaW1hdGlvbnNDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBmaWx0ZXJzQ2hhbmdl
ZDogMTsKKyAgICAgICAgICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkOiAxOworICAgICAgICAgICAg
Ym9vbCByZXBhaW50Q291bnRDaGFuZ2VkIDogMTsKKyAgICAgICAgICAgIGJvb2wgY2FudmFzQ2hh
bmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgY2FudmFzU2hvdWxkU3dhcEJ1ZmZlcnM6IDE7Cisg
ICAgICAgIH07CisgICAgICAgIHVuc2lnbmVkIGNoYW5nZU1hc2s7CisgICAgfTsKKyAgICB1bmlv
biB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDog
MTsKKyAgICAgICAgICAgIGJvb2wgZHJhd3NDb250ZW50IDogMTsKKyAgICAgICAgICAgIGJvb2wg
Y29udGVudHNWaXNpYmxlIDogMTsKKyAgICAgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmxlIDog
MTsKKyAgICAgICAgICAgIGJvb2wgbWFza3NUb0JvdW5kcyA6IDE7CisgICAgICAgICAgICBib29s
IHByZXNlcnZlczNEIDogMTsKKyAgICAgICAgICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7CisgICAg
ICAgICAgICBib29sIGZpeGVkVG9WaWV3cG9ydCA6IDE7CisgICAgICAgICAgICBib29sIHNob3dE
ZWJ1Z0JvcmRlcnMgOiAxOworICAgICAgICAgICAgYm9vbCBzaG93UmVwYWludENvdW50ZXIgOiAx
OworICAgICAgICB9OworICAgICAgICB1bnNpZ25lZCBmbGFnczsKKyAgICB9OworCisgICAgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUoKQorICAgICAgICA6IGNoYW5nZU1hc2soMCkKKyAg
ICAgICAgLCBjb250ZW50c09wYXF1ZShmYWxzZSkKKyAgICAgICAgLCBkcmF3c0NvbnRlbnQoZmFs
c2UpCisgICAgICAgICwgY29udGVudHNWaXNpYmxlKHRydWUpCisgICAgICAgICwgYmFja2ZhY2VW
aXNpYmxlKHRydWUpCisgICAgICAgICwgbWFza3NUb0JvdW5kcyhmYWxzZSkKKyAgICAgICAgLCBw
cmVzZXJ2ZXMzRChmYWxzZSkKKyAgICAgICAgLCBpc1Jvb3RMYXllcihmYWxzZSkKKyAgICAgICAg
LCBmaXhlZFRvVmlld3BvcnQoZmFsc2UpCisgICAgICAgICwgc2hvd0RlYnVnQm9yZGVycyhmYWxz
ZSkKKyAgICAgICAgLCBzaG93UmVwYWludENvdW50ZXIoZmFsc2UpCisgICAgICAgICwgb3BhY2l0
eSgwKQorICAgICAgICAsIGRlYnVnQm9yZGVyV2lkdGgoMCkKKyAgICAgICAgLCByZXBsaWNhKElu
dmFsaWRDb29yZGluYXRlZExheWVySUQpCisgICAgICAgICwgbWFzayhJbnZhbGlkQ29vcmRpbmF0
ZWRMYXllcklEKQorICAgICAgICAsIGltYWdlSUQoSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpCisgICAgICAgICwgY2FudmFzRnJvbnRCdWZmZXIoMCkKKyAgICB7CisgICAgfQorCisg
ICAgRmxvYXRQb2ludCBwb3M7CisgICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OworICAgIEZs
b2F0U2l6ZSBzaXplOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKKyAgICBJbnRSZWN0IGNvbnRl
bnRzUmVjdDsKKyAgICBmbG9hdCBvcGFjaXR5OworICAgIENvbG9yIHNvbGlkQ29sb3I7CisgICAg
Q29sb3IgZGVidWdCb3JkZXJDb2xvcjsKKyAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOworI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnM7CisjZW5k
aWYKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhbmltYXRpb25zOworICAgIFZlY3Rvcjx1
aW50MzJfdD4gY2hpbGRyZW47CisgICAgVmVjdG9yPFRpbGVDcmVhdGlvbkluZm8+IHRpbGVzVG9D
cmVhdGU7CisgICAgVmVjdG9yPHVpbnQzMl90PiB0aWxlc1RvUmVtb3ZlOworICAgIENvb3JkaW5h
dGVkTGF5ZXJJRCByZXBsaWNhOworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtYXNrOworICAgIENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRDsKKworICAgIHVuc2lnbmVkIHJlcGFpbnRD
b3VudDsKKyAgICBWZWN0b3I8VGlsZVVwZGF0ZUluZm8+IHRpbGVzVG9VcGRhdGU7CisKKyNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBJbnRTaXplIGNhbnZhc1NpemU7CisgICAgR3JhcGhp
Y3NTdXJmYWNlVG9rZW4gY2FudmFzVG9rZW47CisgICAgdWludDMyX3QgY2FudmFzRnJvbnRCdWZm
ZXI7CisjZW5kaWYKK307CisKK3N0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgeworICAg
IHVpbnQzMl90IHJvb3RDb21wb3NpdGluZ0xheWVyOworICAgIENvbG9yIGJhY2tncm91bmRDb2xv
cjsKKyAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uOworICAgIEludFNpemUgY29udGVudHNT
aXplOworICAgIEludFJlY3QgY292ZXJlZFJlY3Q7CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPENv
b3JkaW5hdGVkTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU+ID4gbGF5ZXJz
VG9VcGRhdGU7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
LCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiA+ID4gaW1hZ2VzVG9VcGRhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAppbmRleCA1YjViNTdh
NmVjYjEwMWVmNzViMjkxOTFiNTc1MDdiZWRkYTJmNzY1Li4zNjllMjM5ZjliMGEyOThjZDlmY2Nl
NDIzZGE0ZDJmMWU1YTIxYTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcuaApAQCAtMjgsNyArMjgsNyBAQAogI2RlZmluZSBDb29yZGlu
YXRlZEltYWdlQmFja2luZ19oCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5j
bHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBo
aWNzU3RhdGUuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJJ
bWFnZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZExheWVySW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmEy
YTEyZWQzZjQ2YzA4NDIzYjRiOWM0ZGM5MTY1NjlmMDM4Yjc2Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5oCisrKyAvZGV2L251
bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllckluZm9faAotI2RlZmluZSBDb29yZGluYXRlZExh
eWVySW5mb19oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJD
b2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgot
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgdWludDMyX3QgQ29vcmRpbmF0ZWRMYXll
cklEOwotZW51bSB7IEludmFsaWRDb29yZGluYXRlZExheWVySUQgPSAwIH07Ci0KLXR5cGVkZWYg
dWludDY0X3QgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKLWVudW0geyBJbnZhbGlkQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCA9IDAgfTsKLQotLy8gTk9URTogQ29vcmRpbmF0ZWRMYXllcklu
Zm8gc2hvdWxkIG9ubHkgdXNlIFBPRCB0eXBlcywgYXMgdG8gbWFrZSBzZXJpYWxpemF0aW9uIGZh
c3Rlci4KLXN0cnVjdCBDb29yZGluYXRlZExheWVySW5mbyB7Ci0gICAgQ29vcmRpbmF0ZWRMYXll
ckluZm8oKQotICAgICAgICA6IHJlcGxpY2EoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKLSAg
ICAgICAgLCBtYXNrKEludmFsaWRDb29yZGluYXRlZExheWVySUQpCi0gICAgICAgICwgaW1hZ2VJ
RChJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkKLSAgICAgICAgLCBvcGFjaXR5KDAp
Ci0gICAgICAgICwgZGVidWdCb3JkZXJXaWR0aCgwKQotICAgICAgICAsIGZsYWdzKDApIHsgfQot
Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklEIHJlcGxpY2E7Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklE
IG1hc2s7Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEOwotCi0gICAgRmxv
YXRQb2ludCBwb3M7Ci0gICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwotICAgIEZsb2F0U2l6
ZSBzaXplOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKLSAgICBJbnRSZWN0IGNvbnRlbnRzUmVj
dDsKLSAgICBmbG9hdCBvcGFjaXR5OwotICAgIENvbG9yIHNvbGlkQ29sb3I7Ci0gICAgQ29sb3Ig
ZGVidWdCb3JkZXJDb2xvcjsKLSAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOwotCi0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgYm9vbCBjb250ZW50c09wYXF1ZSA6
IDE7Ci0gICAgICAgICAgICBib29sIGRyYXdzQ29udGVudCA6IDE7Ci0gICAgICAgICAgICBib29s
IGNvbnRlbnRzVmlzaWJsZSA6IDE7Ci0gICAgICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJsZSA6
IDE7Ci0gICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwotICAgICAgICAgICAgYm9v
bCBwcmVzZXJ2ZXMzRCA6IDE7Ci0gICAgICAgICAgICBib29sIGlzUm9vdExheWVyOiAxOwotICAg
ICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOwotICAgICAgICAgICAgYm9vbCBzaG93
RGVidWdCb3JkZXJzIDogMTsKLSAgICAgICAgICAgIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyIDog
MTsKLSAgICAgICAgfTsKLSAgICAgICAgdW5zaWduZWQgZmxhZ3M7Ci0gICAgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBk
YXRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKaW5kZXggNmFiMzg0YTExZWFhNWVhMjU0MDgxM2M3
MDI1ZTVmYzhjMTdkMzkxMC4uNWFmMDY5YTJiZDdhN2E3ZTJlZTc3YWM1YjBjMjk4MzgzY2NlYWJh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKQEAgLTIz
LDEyICsyMywxMCBAQAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAogI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbyB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU3VyZmFjZVVwZGF0ZUluZm8pOwogCiBwdWJsaWM6CiAgICAgU3VyZmFjZVVwZGF0ZUlu
Zm8oKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNz
YWdlcy5weSBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQppbmRl
eCBiNjkwYTAxODliZTFmMWJlYmVlNDE3ZjA1ZTJiOWI4YmQzMGFmY2M4Li44NjgwNGIxMzcwNWJh
ODY5ZTMwNzA3YmI0ZWRhZDhiZDgyMDhiYTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
Y3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93
ZWJraXQyL21lc3NhZ2VzLnB5CkBAIC0zOTgsNyArMzk4LDYgQEAgZGVmIGhlYWRlcnNfZm9yX3R5
cGUodHlwZSk6CiAgICAgc3BlY2lhbF9jYXNlcyA9IHsKICAgICAgICAgJ1dURjo6U3RyaW5nJzog
Wyc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpDb21wb3NpdGlv
blVuZGVybGluZSc6IFsnPFdlYkNvcmUvRWRpdG9yLmg+J10sCi0gICAgICAgICdXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQnOiBbJzxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+J10s
CiAgICAgICAgICdXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJzogWyc8V2ViQ29yZS9UZXh0Q2hlY2tl
ckNsaWVudC5oPiddLAogICAgICAgICAnV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMn
OiBbJzxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4nXSwKICAgICAgICAgJ1dlYkNv
cmU6OktleWZyYW1lVmFsdWVMaXN0JzogWyc8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+J10sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNw
cAppbmRleCA1YTA2ZDExNjhjMjI3NjAyY2EyMGMxYmMyODBkMTc2OTcyNmEwNTg4Li44MGM3MjU5
OGUwYWQ4MDA5NzNiYzg5YjM5NTY2NzViMTI3N2U4ZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1l
bnRDb2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTI5LDEwICsyOSwx
MSBAQAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogCiAj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIldlYkNvb3JkaW5hdGVkU3Vy
ZmFjZS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvQ29vcmRpbmF0ZWRMYXllckluZm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludDNELmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oPgpAQCAtNzMsOSArNzQsNyBAQAog
I2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0jZW5kaWYKIAogbmFtZXNwYWNlIENvcmVJUEMg
ewogCkBAIC04MTUsMjQgKzgxNCwyNjEgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Okdy
YXBoaWNzU3VyZmFjZVRva2VuPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2QKIH0KICNl
bmRpZgogCi12b2lkIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRMYXllckluZm8+OjplbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgY29v
cmRpbmF0ZWRMYXllckluZm8pCit2b2lkIEFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+
OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYgc3VyZmFjZVVwZGF0ZUluZm8pCiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxDb29yZGlu
YXRlZExheWVySW5mbz46OmVuY29kZShlbmNvZGVyLCBjb29yZGluYXRlZExheWVySW5mbyk7Cisg
ICAgU2ltcGxlQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmVuY29kZShlbmNvZGVy
LCBzdXJmYWNlVXBkYXRlSW5mbyk7CiB9CiAKLWJvb2wgQXJndW1lbnRDb2RlcjxDb29yZGluYXRl
ZExheWVySW5mbz46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIENvb3JkaW5hdGVk
TGF5ZXJJbmZvJiBjb29yZGluYXRlZExheWVySW5mbykKK2Jvb2wgQXJndW1lbnRDb2RlcjxTdXJm
YWNlVXBkYXRlSW5mbz46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFN1cmZhY2VV
cGRhdGVJbmZvJiBzdXJmYWNlVXBkYXRlSW5mbykKIHsKLSAgICByZXR1cm4gU2ltcGxlQXJndW1l
bnRDb2RlcjxDb29yZGluYXRlZExheWVySW5mbz46OmRlY29kZShkZWNvZGVyLCBjb29yZGluYXRl
ZExheWVySW5mbyk7CisgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0
ZUluZm8+OjpkZWNvZGUoZGVjb2Rlciwgc3VyZmFjZVVwZGF0ZUluZm8pOwogfQogCi12b2lkIEFy
Z3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgc3VyZmFjZVVwZGF0ZUluZm8pCit2b2lk
IEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0
ZSYgc3RhdGUpCiB7Ci0gICAgU2ltcGxlQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46
OmVuY29kZShlbmNvZGVyLCBzdXJmYWNlVXBkYXRlSW5mbyk7CisgICAgZW5jb2RlciA8PCBzdGF0
ZS5jaGFuZ2VNYXNrOworCisgICAgaWYgKHN0YXRlLmZsYWdzQ2hhbmdlZCkKKyAgICAgICAgZW5j
b2RlciA8PCBzdGF0ZS5mbGFnczsKKworICAgIGlmIChzdGF0ZS5wb3NpdGlvbkNoYW5nZWQpCisg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUucG9zOworCisgICAgaWYgKHN0YXRlLmFuY2hvclBvaW50
Q2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5hbmNob3JQb2ludDsKKworICAgIGlm
IChzdGF0ZS5zaXplQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaXplOworCisg
ICAgaWYgKHN0YXRlLnRyYW5zZm9ybUNoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
dHJhbnNmb3JtOworCisgICAgaWYgKHN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCkKKyAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jaGlsZHJlblRyYW5zZm9ybTsKKworICAgIGlmIChzdGF0
ZS5jb250ZW50c1JlY3RDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNvbnRlbnRz
UmVjdDsKKworICAgIGlmIChzdGF0ZS5vcGFjaXR5Q2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8
PCBzdGF0ZS5vcGFjaXR5OworCisgICAgaWYgKHN0YXRlLnNvbGlkQ29sb3JDaGFuZ2VkKQorICAg
ICAgICBlbmNvZGVyIDw8IHN0YXRlLnNvbGlkQ29sb3I7CisKKyAgICBpZiAoc3RhdGUuZGVidWdC
b3JkZXJDb2xvckNoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuZGVidWdCb3JkZXJD
b2xvcjsKKworICAgIGlmIChzdGF0ZS5kZWJ1Z0JvcmRlcldpZHRoQ2hhbmdlZCkKKyAgICAgICAg
ZW5jb2RlciA8PCBzdGF0ZS5kZWJ1Z0JvcmRlcldpZHRoOworCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQorICAgIGlmIChzdGF0ZS5maWx0ZXJzQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBz
dGF0ZS5maWx0ZXJzOworI2VuZGlmCisKKyAgICBpZiAoc3RhdGUuYW5pbWF0aW9uc0NoYW5nZWQp
CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuYW5pbWF0aW9uczsKKworICAgIGlmIChzdGF0ZS5j
aGlsZHJlbkNoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuY2hpbGRyZW47CisKKyAg
ICBlbmNvZGVyIDw8IHN0YXRlLnRpbGVzVG9DcmVhdGU7CisgICAgZW5jb2RlciA8PCBzdGF0ZS50
aWxlc1RvUmVtb3ZlOworCisgICAgaWYgKHN0YXRlLnJlcGxpY2FDaGFuZ2VkKQorICAgICAgICBl
bmNvZGVyIDw8IHN0YXRlLnJlcGxpY2E7CisKKyAgICBpZiAoc3RhdGUubWFza0NoYW5nZWQpCisg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUubWFzazsKKworICAgIGlmIChzdGF0ZS5pbWFnZUNoYW5n
ZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuaW1hZ2VJRDsKKworICAgIGlmIChzdGF0ZS5y
ZXBhaW50Q291bnRDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnJlcGFpbnRDb3Vu
dDsKKworICAgIGVuY29kZXIgPDwgc3RhdGUudGlsZXNUb1VwZGF0ZTsKKworI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorICAgIGlmIChzdGF0ZS5jYW52YXNDaGFuZ2VkKSB7CisgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGUuY2FudmFzU2l6ZTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jYW52
YXNUb2tlbjsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jYW52YXNGcm9udEJ1ZmZlcjsKKyAg
ICB9CisjZW5kaWYKIH0KIAotYm9vbCBBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6
ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZh
Y2VVcGRhdGVJbmZvKQorYm9vbCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyU3RhdGUmIHN0YXRlKQogewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVy
PFN1cmZhY2VVcGRhdGVJbmZvPjo6ZGVjb2RlKGRlY29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNoYW5nZU1hc2spKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoc3RhdGUuZmxhZ3NDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29k
ZShzdGF0ZS5mbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5w
b3NpdGlvbkNoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLnBvcykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5hbmNob3JQb2ludENoYW5nZWQgJiYgIWRlY29k
ZXIuZGVjb2RlKHN0YXRlLmFuY2hvclBvaW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKHN0YXRlLnNpemVDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5zaXplKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLnRyYW5zZm9ybUNoYW5nZWQg
JiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLnRyYW5zZm9ybSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChzdGF0ZS5jaGlsZHJlblRyYW5zZm9ybUNoYW5nZWQgJiYgIWRlY29kZXIu
ZGVjb2RlKHN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKHN0YXRlLmNvbnRlbnRzUmVjdENoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0
YXRlLmNvbnRlbnRzUmVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0
ZS5vcGFjaXR5Q2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUub3BhY2l0eSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5zb2xpZENvbG9yQ2hhbmdlZCAmJiAh
ZGVjb2Rlci5kZWNvZGUoc3RhdGUuc29saWRDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChzdGF0ZS5kZWJ1Z0JvcmRlckNvbG9yQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNv
ZGUoc3RhdGUuZGVidWdCb3JkZXJDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChzdGF0ZS5kZWJ1Z0JvcmRlcldpZHRoQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3Rh
dGUuZGVidWdCb3JkZXJXaWR0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKKyAgICBpZiAoc3RhdGUuZmlsdGVyc0NoYW5nZWQgJiYgIWRlY29kZXIu
ZGVjb2RlKHN0YXRlLmZpbHRlcnMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKwor
ICAgIGlmIChzdGF0ZS5hbmltYXRpb25zQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUu
YW5pbWF0aW9ucykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5jaGls
ZHJlbkNoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLmNoaWxkcmVuKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS50aWxlc1RvQ3Jl
YXRlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
dGF0ZS50aWxlc1RvUmVtb3ZlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0
YXRlLnJlcGxpY2FDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5yZXBsaWNhKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLm1hc2tDaGFuZ2VkICYmICFkZWNv
ZGVyLmRlY29kZShzdGF0ZS5tYXNrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KHN0YXRlLmltYWdlQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuaW1hZ2VJRCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdGF0ZS5yZXBhaW50Q291bnRDaGFuZ2Vk
ICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5yZXBhaW50Q291bnQpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLnRpbGVzVG9VcGRhdGUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBp
ZiAoc3RhdGUuY2FudmFzQ2hhbmdlZCkgeworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0
YXRlLmNhbnZhc1NpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuY2FudmFzVG9rZW4pKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuY2FudmFzRnJvbnRC
dWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyNlbmRpZgorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmVu
Y29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFRpbGVVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvKQoreworICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8VGlsZVVwZGF0ZUluZm8+OjplbmNv
ZGUoZW5jb2RlciwgdXBkYXRlSW5mbyk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxUaWxlVXBk
YXRlSW5mbz46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIsIFRpbGVVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvKQoreworICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPFRpbGVVcGRh
dGVJbmZvPjo6ZGVjb2RlKGRlY29kZXIsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIEFyZ3VtZW50
Q29kZXI8VGlsZUNyZWF0aW9uSW5mbz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFRpbGVDcmVhdGlvbkluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgU2ltcGxlQXJndW1l
bnRDb2RlcjxUaWxlQ3JlYXRpb25JbmZvPjo6ZW5jb2RlKGVuY29kZXIsIHVwZGF0ZUluZm8pOwor
fQorCitib29sIEFyZ3VtZW50Q29kZXI8VGlsZUNyZWF0aW9uSW5mbz46OmRlY29kZShBcmd1bWVu
dERlY29kZXImIGRlY29kZXIsIFRpbGVDcmVhdGlvbkluZm8mIHVwZGF0ZUluZm8pCit7CisgICAg
cmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8VGlsZUNyZWF0aW9uSW5mbz46OmRlY29kZShkZWNv
ZGVyLCB1cGRhdGVJbmZvKTsKK30KKwordm9pZCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZT46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCit7CisgICAgZW5jb2RlciA8PCBzdGF0ZS5yb290
Q29tcG9zaXRpbmdMYXllcjsKKyAgICBlbmNvZGVyIDw8IHN0YXRlLmJhY2tncm91bmRDb2xvcjsK
KyAgICBlbmNvZGVyIDw8IHN0YXRlLnNjcm9sbFBvc2l0aW9uOworICAgIGVuY29kZXIgPDwgc3Rh
dGUuY29udGVudHNTaXplOworICAgIGVuY29kZXIgPDwgc3RhdGUuY292ZXJlZFJlY3Q7CisgICAg
ZW5jb2RlciA8PCBzdGF0ZS5sYXllcnNUb1VwZGF0ZTsKKworICAgIC8vIFdlIG5lZWQgdG8gZW5j
b2RlIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIHJpZ2h0IGFmdGVyIGl0J3MgY3JlYXRp
b24uCisgICAgLy8gVGhhdCdzIHdoeSB3ZSBjYW5ub3QgdXNlIHNpbXBsZSBzdGQ6OnBhaXIgZW5j
b2Rlci4KKyAgICBlbmNvZGVyIDw8IHN0YXRlLmltYWdlc1RvVXBkYXRlLnNpemUoKTsKKworICAg
IHR5cGVkZWYgVmVjdG9yPHN0ZDo6cGFpcjxDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQ
dHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiA+ID4gU3VyZmFjZVVwZGF0ZVBhaXJWZWN0b3I7CisgICAg
U3VyZmFjZVVwZGF0ZVBhaXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0YXRlLmltYWdl
c1RvVXBkYXRlLmVuZCgpOworICAgIGZvciAoU3VyZmFjZVVwZGF0ZVBhaXJWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gc3RhdGUuaW1hZ2VzVG9VcGRhdGUuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisKKyAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1
cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJDb29yZGluYXRlZFN1cmZhY2UqPihpdC0+c2Vjb25kLmdl
dCgpKTsKKyAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOworICAg
ICAgICBpZiAoIXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZW5jb2RlciA8PCBpdC0+Zmlyc3Q7CisgICAg
ICAgIGVuY29kZXIgPDwgaGFuZGxlOworICAgIH0KK30KKworYm9vbCBBcmd1bWVudENvZGVyPENv
b3JkaW5hdGVkR3JhcGhpY3NTdGF0ZT46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRlY29kZXIs
IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShzdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuYmFja2dyb3VuZENvbG9yKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5zY3JvbGxQ
b3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc3RhdGUuY29udGVudHNTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShzdGF0ZS5jb3ZlcmVkUmVjdCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUubGF5ZXJzVG9VcGRhdGUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzaXplX3Qgc2l6ZU9mSW1hZ2VzVG9VcGRhdGU7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplT2ZJbWFnZXNUb1VwZGF0ZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZU9mSW1hZ2VzVG9V
cGRhdGU7IGkrKykgeworICAgICAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQ7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaW1hZ2VJRCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxl
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhbmRsZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZSA9
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSk7CisgICAgICAgIHN0YXRlLmlt
YWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBzdXJmYWNlLnJlbGVh
c2UoKSkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBD
b3JlSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENv
ZGVycy5oCmluZGV4IDhlN2RlZWZiM2ZlYTE3Zjk4NWU1ODNlNzMxMDNlZjhiYWMyOTUxMWUuLmQ0
MmFlNzlkZjI0YTEwMWUzNDUwYTM1NjcxODMyMTAyM2M5NTJiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NB
cmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCkBAIC0zMiwxMyArMzIs
MTYgQEAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CitzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGU7CitzdHJ1Y3QgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlOwogY2xhc3MgRmxvYXRQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOwogY2xhc3MgU3VyZmFj
ZVVwZGF0ZUluZm87CitzdHJ1Y3QgVGlsZUNyZWF0aW9uSW5mbzsKK3N0cnVjdCBUaWxlVXBkYXRl
SW5mbzsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogY2xhc3MgVHJhbnNmb3JtT3BlcmF0
aW9uczsKLXN0cnVjdCBDb29yZGluYXRlZExheWVySW5mbzsKIHN0cnVjdCBMZW5ndGg7CiAKICNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBAIC0xMDcsMTYgKzExMCwzMSBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuPiB7CiB9Owog
I2VuZGlmCiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllckluZm8+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
JiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8m
KTsKLX07Ci0KIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U3VyZmFj
ZVVwZGF0ZUluZm8+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwg
Y29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKICAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKIH07CiAK
K3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyU3RhdGU+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
JiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyU3RhdGUmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6VGlsZVVwZGF0ZUluZm8+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJn
dW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6VGlsZVVwZGF0ZUluZm8mKTsKKyAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6VGlsZVVwZGF0ZUluZm8m
KTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VGlsZUNy
ZWF0aW9uSW5mbz4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpUaWxlQ3JlYXRpb25JbmZvJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OlRpbGVDcmVhdGlvbkluZm8mKTsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0
IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOworICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUm
KTsKK307CisKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKIAogI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5LmNwcAppbmRleCBjNWY3ZTg3NWE2ZDhiY2ZkYTRiNzAzNWU0MTkwYzJlNTUz
ZTczNmJhLi4wMThiZDE3YzViNDI5MWQxYjQ3NDdiOGQ2NTBhNDBhNTQ5Njc1ZWYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCkBA
IC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZExheWVySW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1
cmZhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+CiAKQEAgLTYy
LDIyICs2Miw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNo
VXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0CiAgICAgbV9zY2VuZS0+YXBwZW5k
VXBkYXRlKGZ1bmN0aW9uKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6Y3JlYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYgdXBkYXRlSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmNyZWF0ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwg
dXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOwotICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklE
LCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBT
dXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxh
eWVySUQsIHRpbGVJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpUaWxlVXBkYXRlKHVwZGF0
ZUluZm8udXBkYXRlUmVjdCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8uYXRsYXNJRCwgdXBkYXRlSW5m
by5zdXJmYWNlT2Zmc2V0KSkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnJlbW92ZVRpbGUsIG1fc2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkpOwot
fQotCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVVcGRhdGVBdGxh
cyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYg
aGFuZGxlKQogewogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6Y3JlYXRlVXBkYXRlQXRsYXMsIG1fc2NlbmUuZ2V0KCksIGF0bGFzSUQsIFdlYkNvb3Jk
aW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKQEAgLTk4LDI4ICs4Miw2IEBAIHZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNv
bnN0IFZlY3RvcjxDb29yZGluCiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpkZWxldGVMYXllcnMsIG1fc2NlbmUuZ2V0KCksIGlkcykpOwogfQogCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXll
cihDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRSb290TGF5ZXJJRCwgbV9zY2VuZS5nZXQoKSwgaWQp
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRp
bmdMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXll
ckluZm8mIGluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpzZXRMYXllclN0YXRlLCBtX3NjZW5lLmdldCgpLCBpZCwgaW5mbykpOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVy
Q2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRM
YXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxkcmVuLCBtX3NjZW5lLmdldCgpLCBpZCwgY2hp
bGRyZW4pKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVk
TGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyRmlsdGVy
cywgbV9zY2VuZS5nZXQoKSwgaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCiAjaWYgRU5BQkxF
KENTU19TSEFERVJTKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3Zl
Q3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCiB7CkBAIC0xMzEsMTUgKzkzLDEyIEBAIHZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0o
aW50IGlkLCBjb25zdCBDdXN0CiB9CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRp
b24sIGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgSW50UmVjdCYgY292ZXJlZFJl
Y3QpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpjb21taXRDb29yZGluYXRl
ZEdyYXBoaWNzU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBncmFwaGljc1N0
YXRlKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6Zmx1c2hMYXllckNoYW5nZXMsIG1fc2NlbmUuZ2V0KCksIHNjcm9sbFBvc2l0aW9uKSk7Cisg
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRT
Y2VuZVN0YXRlLCBtX3NjZW5lLmdldCgpLCBncmFwaGljc1N0YXRlKSk7CiAgICAgdXBkYXRlVmll
d3BvcnQoKTsKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+ZGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZW50c1NpemUpOwotICAgIFVOVVNFRF9QQVJB
TShjb3ZlcmVkUmVjdCk7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPmRpZFJlbmRl
ckZyYW1lKGdyYXBoaWNzU3RhdGUuY29udGVudHNTaXplLCBncmFwaGljc1N0YXRlLmNvdmVyZWRS
ZWN0KTsKICNlbmRpZgogfQogCkBAIC0xNjMsMTEgKzEyMiw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lECiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpyZW1vdmVJbWFnZUJhY2tpbmcsIG1fc2NlbmUuZ2V0KCksIGltYWdlSUQpKTsKIH0KIAotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlv
bnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpzZXRMYXllckFuaW1hdGlvbnMsIG1fc2NlbmUuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7Ci19
Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2Nr
ZWQoYm9vbCBsb2NrZWQpCiB7CiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpzZXRBbmltYXRpb25zTG9ja2VkLCBtX3NjZW5lLmdldCgpLCBsb2NrZWQp
KTsKQEAgLTIwNCwyOSArMTU4LDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6YW5pbWF0aW9uRnJhbWVSZWFkeSgpCiB9CiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3Qg
R3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQotewotICAgIEdyYXBoaWNzU3VyZmFjZTo6Rmxh
Z3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQg
fCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUNhbnZhcywgbV9zY2VuZS5nZXQo
KSwgaWQsIGNhbnZhc1NpemUsIEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNhbnZhc1NpemUsIHN1
cmZhY2VGbGFncywgdG9rZW4pKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCBmcm9udEJ1
ZmZlcikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnN5bmNDYW52YXMsIG1fc2NlbmUuZ2V0KCksIGlkLCBmcm9udEJ1ZmZlcikpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95Q2FudmFzKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmRlc3Ryb3lDYW52YXMsIG1fc2NlbmUuZ2V0KCksIGlkKSk7Ci19Ci0jZW5k
aWYKLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJSZXBhaW50
Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3Vu
dCwgbV9zY2VuZS5nZXQoKSwgaWQsIHZhbHVlKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCiB7CiAgICAgbV9kcmF3aW5nQXJl
YVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnBhZ2VJRCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eS5oCmluZGV4IDk0NmIzOTkyMGQyODQ4ODNhODQ0YTdmMTk2NjkxMWIwODY5ZWY5
ZjUuLmQxNjhiY2RjZGE3YWJhY2RhYTkxYWY1ODIyM2RiYzA3YmU0YmZiYjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaApAQCAtNDEsNyAr
NDEsOCBAQAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgQ29vcmRpbmF0ZWRMYXllckluZm87CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZTsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZTsKIGNsYXNzIFN1cmZhY2VV
cGRhdGVJbmZvOwogfQogCkBAIC01Myw0MyArNTQsMzEgQEAgY2xhc3MgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Q2wKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShE
cmF3aW5nQXJlYVByb3h5Kik7CiAgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkoKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0g
ICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRpbmF0ZWRM
YXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJz
KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0
aW9ucyYpOwotI2VuZGlmCisKKyAgICAvLyBNZXNzYWdlcyBGcm9tIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdAorICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5n
TGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7CiAjaWYg
RU5BQkxFKENTU19TSEFERVJTKQogICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShp
bnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7CiAgICAgdm9p
ZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7CiAjZW5kaWYKLSAgICB2b2lkIGNy
ZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExh
eWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8
V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0
aW5nTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIHNldFZpc2li
bGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rvcik7Ci0gICAgdm9pZCBkaWRSZW5kZXJGcmFtZShj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVj
dCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lk
IHJlbW92ZVRpbGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCk7CiAgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBj
b25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7CiAgICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmco
V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCB1cGRhdGVJbWFn
ZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKICAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCByZW1v
dmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0jaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKLSAgICB2b2lkIHN5bmNDYW52YXMoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95
Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNl
dExheWVyUmVwYWludENvdW50KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVl
KTsKLSAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NlbmUuZ2V0KCk7IH0KLSAgICB2b2lkIHNl
dExheWVyQW5pbWF0aW9ucyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CisKKyAgICB2b2lkIGNvbW1pdENvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUm
KTsKICAgICB2b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CiAjaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7CiAj
ZW5kaWYKICAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYp
OwogCisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpOworICAg
IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lKCkgY29uc3QgeyByZXR1cm4gbV9zY2VuZS5nZXQoKTsgfQorCiAgICAgLy8gQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lQ2xpZW50IE1ldGhvZHMuCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCkgT1ZFUlJJ
REU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDVjZTEyODM2YmYyM2YwZDBiYzY4NzQ3ODdmMTYx
YjJhODk0MjU4NmMuLjNhNzY0ZjEzYzdhMmUxNDQ2MjYxYWY4NjViN2ZkNjAwZDFlN2U2ODMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xOSw0MyArMTksMjkgQEAKIAogI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKIG1lc3NhZ2VzIC0+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
IHsKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUodWludDMyX3QgaWQsIFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJbmZvIGxheWVySW5mbykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hp
bGRyZW4odWludDMyX3QgaWQsIFZlY3Rvcjx1aW50MzJfdD4gY2hpbGRyZW4pCi0jaWYgRU5BQkxF
KENTU19GSUxURVJTKQotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQzMl90IGlk
LCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnMpCi0jZW5kaWYKKworICAgIENvbW1p
dENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3Rh
dGUgc3RhdGUpCisKKyAgICBDcmVhdGVDb21wb3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+
IGlkcykKKyAgICBEZWxldGVDb21wb3NpdGluZ0xheWVycyhWZWN0b3I8dWludDMyX3Q+IGlkcykK
KwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFt
KGludCBpZCwgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gcHJvZ3JhbUluZm8pCiAg
ICAgUmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCiAjZW5kaWYKLSAgICBTZXRSb290
Q29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKLSAgICBDcmVhdGVDb21wb3NpdGluZ0xheWVy
cyhWZWN0b3I8dWludDMyX3Q+IGlkcykKLSAgICBEZWxldGVDb21wb3NpdGluZ0xheWVycyhWZWN0
b3I8dWludDMyX3Q+IGlkcykKLSAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpT
dXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50
MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3Qs
IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgUmVtb3ZlVGlsZUZv
ckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKICAgICBDcmVhdGVVcGRh
dGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6
SGFuZGxlIGhhbmRsZSkKICAgICBSZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQog
ICAgIENyZWF0ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlEKQogICAgIFVwZGF0ZUltYWdl
QmFja2luZyh1aW50NjRfdCBpbWFnZUlELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6
SGFuZGxlIGhhbmRsZSkKICAgICBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKHVpbnQ2NF90IGlt
YWdlSUQpCiAgICAgUmVtb3ZlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQpCi0gICAgRGlk
UmVuZGVyRnJhbWUoV2ViQ29yZTo6RmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbiwgV2ViQ29yZTo6
SW50U2l6ZSBjb250ZW50c1NpemUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCi0gICAg
U2V0TGF5ZXJBbmltYXRpb25zKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5p
bWF0aW9ucyBhbmltYXRpb25zKQorCiAgICAgU2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tl
ZCkKIAogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICBSZXF1ZXN0QW5p
bWF0aW9uRnJhbWUoKQogI2VuZGlmCiAKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBD
cmVhdGVDYW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4pCi0gICAgU3luY0NhbnZhcyh1aW50MzJf
dCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCi0gICAgRGVzdHJveUNhbnZhcyh1aW50MzJfdCBp
ZCkKLSNlbmRpZgotCi0gICAgU2V0TGF5ZXJSZXBhaW50Q291bnQodWludDMyX3QgbGF5ZXJJRCwg
aW50IHZhbHVlKQotCiAgICAgU2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNvbG9yIGNvbG9y
KQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCA3YWNlZjMwYjMyYzk1NDIyZTRkYzU3MWIxNTdj
OWUwYzRlMWYzMmYwLi40NWZkMzk1YTEwOTY2OGExODEyMGU3MGRiMGZhNDY0MjRmODVkMmZmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5jcHAKQEAgLTMwMSw5ICszMDEsMTUgQEAgYm9vbCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCiAgICAgaWYgKG1fc2hvdWxkU3luY0Zy
YW1lKSB7CiAgICAgICAgIGRpZFN5bmMgPSB0cnVlOwogCi0gICAgICAgIEludFNpemUgY29udGVu
dHNTaXplID0gcm91bmRlZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXpl
KCkpOwotICAgICAgICBJbnRSZWN0IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0g
ICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OkRpZFJlbmRlckZyYW1lKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpLCBj
b250ZW50c1NpemUsIGNvdmVyZWRSZWN0KSk7CisgICAgICAgIG1fc3RhdGUuY29udGVudHNTaXpl
ID0gcm91bmRlZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwor
ICAgICAgICBtX3N0YXRlLmNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7CisgICAgICAg
IG1fc3RhdGUuc2Nyb2xsUG9zaXRpb24gPSBtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24o
KTsKKworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpDb21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUobV9zdGF0ZSkpOwor
CisgICAgICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUuY2xlYXIoKTsKKyAgICAgICAgbV9zdGF0
ZS5pbWFnZXNUb1VwZGF0ZS5jbGVhcigpOworCiAgICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2Vz
cyA9IHRydWU7CiAgICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CiAgICAgfSBlbHNl
CkBAIC0zNTYsNjYgKzM2Miw0MiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5p
dGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQogICAgIGlmIChtX2RpZEluaXRp
YWxpemVSb290Q29tcG9zaXRpbmdMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIodG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIu
Z2V0KCkpLT5pZCgpKSk7CisgICAgbV9zdGF0ZS5yb290Q29tcG9zaXRpbmdMYXllciA9IHRvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKTsKICAgICBtX2Rp
ZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllciA9IHRydWU7CiAgICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xh
eWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5m
byYgaW5mbykKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9z
aXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKLXsKLSAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBjaGlsZHJl
bikpOwotfQotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1M
YXllciogY2FudmFzUGxhdGZvcm1MYXllcikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBjYW52YXNQbGF0Zm9ybUxheWVy
LT5ncmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIEludFNpemUgY2FudmFzU2l6ZSA9IGNhbnZh
c1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ2FudmFzKGlk
LCBjYW52YXNTaXplLCB0b2tlbikpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZh
c1BsYXRmb3JtTGF5ZXIpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVy
U3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0
ZSYgc3RhdGUpCiB7CiAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIHVpbnQzMl90
IGZyb250QnVmZmVyID0gY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNl
KCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6U3luY0NhbnZhcyhpZCwgZnJvbnRCdWZmZXIpKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQot
ewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlc3Ryb3lDYW52YXMoaWQpKTsKLX0KKyNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCisgICAgcHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChzdGF0
ZSk7CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyUmVw
YWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IHZhbHVlKQotewotICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldExh
eWVyUmVwYWludENvdW50KGlkLCB2YWx1ZSkpOworICAgIG1fc3RhdGUubGF5ZXJzVG9VcGRhdGUu
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGlkLCBzdGF0ZSkpOwogfQogCi0jaWYgRU5BQkxFKENTU19G
SUxURVJTKQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckZpbHRlcnMo
Q29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQot
ewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
Ci0gICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhmaWx0ZXJzKTsKLSNlbmRpZgot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Cit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKHN0YXRlLmFu
aW1hdGlvbnNDaGFuZ2VkKSB7CisgICAgICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhY3Rp
dmVBbmltYXRpb25zID0gc3RhdGUuYW5pbWF0aW9uczsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFjdGl2ZUFuaW1h
dGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOworICAgICAgICAgICAgaWYgKGtl
eWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IGtleWZyYW1lcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGNvbnN0IEZpbHRlckFu
aW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1h
dGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkpKTsKKyAgICAgICAgICAgICAgICBjaGVja0N1c3Rv
bUZpbHRlclByb2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhdGUuZmlsdGVyc0NoYW5nZWQpCisg
ICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoc3RhdGUuZmlsdGVycyk7CiB9
Ci0jZW5kaWYKIAotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIGZpbHRlcnMpCiB7CiAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgdGhlIFdlYkN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eSBvYmplY3RzIGJlZm9yZSB3ZSBnZXQgdG8gc2VyaWFsaXpl
IHRoZQpAQCAtNDY2LDcgKzQ0OCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpk
aXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQogICAgIGZvciAoOyBpdGVyICE9IG1fY3Vz
dG9tRmlsdGVyUHJvZ3JhbXMuZW5kKCk7ICsraXRlcikKICAgICAgICAgKCppdGVyKS0+c2V0Q2xp
ZW50KDApOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQogCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKiBsYXllcikKIHsKQEAgLTU4NSw3ICs1NjcsOCBAQCBib29sIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZwogICAgIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZTsKICAgICBpZiAo
IXdlYkNvb3JkaW5hdGVkU3VyZmFjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCwgaGFuZGxlKSk7CisK
KyAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlE
LCBjb29yZGluYXRlZFN1cmZhY2UpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjY4LDI2
ICs2NTEsNiBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVw
ZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZVRp
bGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2Vi
Q29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHRpbGVSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRh
dGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlVGlsZShDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotewotICAgIGlmIChtX2lzUHVyZ2lu
ZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpS
ZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0KIGJvb2wgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY29vcmRpbmF0ZWRTdXJmYWNlKQogewogICAgIFdl
YkNvb3JkaW5hdGVkU3VyZmFjZSogd2ViQ29vcmRpbmF0ZWRTdXJmYWNlID0gc3RhdGljX2Nhc3Q8
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlKj4oY29vcmRpbmF0ZWRTdXJmYWNlLmdldCgpKTsKQEAgLTcx
MCwyNSArNjczLDYgQEAgV2ViQ29yZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdmlzaWJsZUNvbnRl
bnRzUmVjdDsKIH0KIAotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJB
bmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFwaGljc0xheWVy
QW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Ci0gICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9IGFuaW1hdGlv
bnMuZ2V0QWN0aXZlQW5pbWF0aW9ucygpOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBh
bmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKLSAgICAgICAgaWYgKGtl
eWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFt
ZXMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVl
KiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4o
a2V5ZnJhbWVzLmF0KGkpKTsKLSAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3hpZXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OlNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVBbmltYXRpb25zKSk7Ci19Ci0K
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikK
IHsKICAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBh
bGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgpAQCAtODUxLDcgKzc5NSw4IEBA
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGlt
ZXJGaXJlZChUaW1lcjxDb29yZGluYXRlCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQogewotICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OlNldEJhY2tncm91bmRDb2xvcihjb2xvcikpOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKKyAgICBtX3N0YXRlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggYjYwNTI4OTA5ZjdlYjliNjcxM2MxZTk5NmE4Y2U4NzAx
OTY1MzI0ZS4uNjUzNmFkNzBmYjZiN2UwNmExNzA5ZTRhNTYyY2I1Yjg4NDEyY2IwMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVk
ZSAiVGltZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZh
Y3RvcnkuaD4KQEAgLTgwLDM5ICs4MSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBh
dXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9p
ZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXll
ckZsdXNoKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFu
Z2VkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFn
ZSopIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVp
bnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZh
Y2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
KTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAgIHZpcnR1YWwg
dm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2Rl
ciYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3Rh
dGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExh
eWVySUQ+Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25z
Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJG
aWx0ZXJzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVy
T3BlcmF0aW9ucyYpOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNv
cmU6OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZh
cyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQpIE9WRVJSSURFOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVy
UmVwYWludENvdW50KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgaW50KSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6
OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJ
bnRQb2ludCYpOwotCi0gICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKLSAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpD
b29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgT1ZFUlJJREU7
CiAjZW5kaWYKQEAgLTEzOSw2ICsxMTQsMTggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmx1c2hQ
ZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOwogCisgICAgLy8gQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50CisgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0KKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBj
cmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBi
ZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkNvb3Jk
aW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2lu
dCYpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySUQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7CisKKyAg
ICAvLyBVcGRhdGVBdGxhc0NsaWVudAorICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVVcGRhdGVBdGxh
cyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFj
ZT4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJf
dCBhdGxhc0lEKTsKKwogICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CiAgICAgdmlydHVhbCBQ
YXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwogCkBAIC0xNjYsNiArMTUzLDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFdl
YkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4qKTsKIAogI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKKyAgICB2b2lkIHByZXBhcmVDdXN0b21GaWx0ZXJQcm94aWVzSWZOZWVkZWQo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKwogICAgIC8vIFdlYkN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAogICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSopOwogCkBAIC0xODEsNiAr
MTcwLDggQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJl
IG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCiAgICAgT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKIAorICAgIFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZSBtX3N0YXRlOworCiAgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7CiAgICAgVmVjdG9yPFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0NyZWF0ZTsKICAgICBWZWN0b3I8V2Vi
Q29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191430</attachid>
            <date>2013-03-05 01:20:17 -0800</date>
            <delta_ts>2013-03-05 11:18:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108294-20130305181625.patch</filename>
            <type>text/plain</type>
            <size>99391</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjE0ZjBjMTg0ZWJlZTAy
YjM1Mjc3MGE1M2I1ZGM3MDRlNjdiMzU2ZS4uNTU5YzUxZTYzZmViNjI4MGUzZmZlODhkMTA5NDEx
OTAyZDJhY2YxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxMy0wMy0wNCAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBtYWtlcyBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUgcGVyZm9ybSB2aWEgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkgaGFzIHRvbyBtYW55IElQQyBtZXNzYWdlcyAoZS5nLiBTeW5jQ2Fu
dmFzIGFuZAorICAgICAgICBDcmVhdGVUaWxlKSwgYW5kIHRoZXJlIGlzIGEgbG9uZyBmdW5jdGlv
biBjaGFpbiBmcm9tIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciB0bworICAgICAgICBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUgKDQgY2xhc3NlcykuCisgICAgICAgIElmIHdlIHdhbnQgdG8gYWRk
IGEgbmV3IG1lc3NhZ2UsIHdlIG5lZWQgdG8gYWRkIHNpbWlsYXIgZnVuY3Rpb25zIGludG8gNCBj
bGFzc2VzLgorCisgICAgICAgIE5vdyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgaGFzIG9ubHkg
b25lIElQQyBtZXNzYWdlIGZvciBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6CisgICAgICAgIENv
bW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS4KKyAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyIG1ha2VzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBydW4gYXMgZm9sbG93czoKKyAg
ICAgICAgMS4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyIG1ha2VzIGEgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyU3RhdGUuCisgICAgICAgIDIuIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBzdG9y
ZXMgYWxsIExheWVyU3RhdGVzLgorICAgICAgICAzLiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qg
c2VuZHMgR3JhcGhpY3NTdGF0ZSBpbmNsdWRlcyBMYXllclN0YXRlcyB0byBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eQorICAgICAgICBhdCB0aGUgbW9tZW50IG9mIGZsdXNoaW5nIHZpYSBD
b21taXRDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgbWVzc2FnZS4KKyAgICAgICAgNC4gQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lIGFwcGxpZXMgYWxsIHN0YXRlIGNoYW5nZXMgdG8gbGF5ZXJzLgor
CisgICAgICAgIFRoZXJlIGlzIG9uZSBiaWcgYmVoYXZpb3IgY2hhbmdlLiBBbGwgc3RhdGVzIGNo
YW5nZXMgKGUuZy4KKyAgICAgICAgVXBkYXRlVGlsZXMsIFNldExheWVyQ2hpbGRyZW4sIGFuZCBl
dGMuLikgYXJlIHBlcmZvcm1lZCBhdCB0aGUgc2FtZSB0aW1lLCB3aGVuCisgICAgICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlIGlzIGNh
bGxlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGJhc2VkIG9uIERvbmdzdW5nIEh1YW5nLCBh
bmQgTm9hbSdzIHdvcmsgaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODI5NAorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlz
dGluZyB0ZXN0cy4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9y
UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0VHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
Q2hpbGRyZW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Zpc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlz
aWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG93RGVidWdCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG93UmVwYWludENvdW50ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVk
QnlMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dEZpeGVkVG9WaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnN5bmNDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c3luY0ltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RGVidWdCb3JkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVDYW52
YXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZXNldExheWVyU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJl
bGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlVGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaDoKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk6Cisg
ICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVDYW52YXNJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnN5
bmNDYW52YXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUmVwYWludENvdW50SWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckNoaWxkcmVuSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRM
YXllckZpbHRlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnNldExheWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpkZWxldGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVRpbGVzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlc0lmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZXNJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFzc2lnbkltYWdl
QmFja2luZ1RvTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpjb21taXRTY2VuZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChUaWxlVXBkYXRlSW5mbyk6CisgICAgICAgIChUaWxlQ3JlYXRpb25JbmZvKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJTdGF0ZSk6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSk6
CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZExheWVySW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oOgorCiAyMDEzLTAzLTA1ICBLb2ppIEhh
cmEgIDxrb2ppaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1Y4XSBSZW1vdmUgdW51c2VkIGN1
c3RvbSBpbmRleGVkUHJvcGVydHlHZXR0ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBhZDVkZTAyMTJlMjI2Nzk1
NDdjMzE1NWNkMzdlYmJmZWMxYzBlMDgwLi40MThkN2Q2NmQ5Y2FhN2EyMTVkODdkNGViNzFiMDA2
NzI2MThmZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTMtMDMtMDQgIEd3YW5n
IFlvb24gSHdhbmcgIDxyeXVtaWVsQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzOiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgbWFrZXMgQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lIHBlcmZvcm0gdmlhIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODI5NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIGFyZSB0d28g
Y2hhbmdlcyBpbiBXSzIuCisgICAgICAgIDEuIENoYW5nZSBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSB0byB1c2UgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLgorICAgICAgICAyLiBBZGQg
ZW5jb2RlL2RlY29kZSBvZiBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgaW4gQ29vcmRpbmF0ZWRH
cmFwaGljc0FyZ3VtZW50Q29kZXJzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYmFzZWQgb24g
RG9uZ3N1bmcgSHVhbmcsIGFuZCBOb2FtJ3Mgd29yayBpbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Mjk0CisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQy
L21lc3NhZ2VzLnB5OgorICAgICAgICAoaGVhZGVyc19mb3JfdHlwZSk6CisgICAgICAgICogU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
LmNwcDoKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAgICAgIEVuY29kaW5n
IFVwZGF0ZUltYWdlQmFja2luZyBhbmQgQ3JlYXRlVXBkYXRlQXRsYXMgY2FuIGZhaWwgd2hlbgor
ICAgICAgICAgICAgZW5jb2RpbmcgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgZmFpbHMs
IGJ1dCB3ZSBkb24ndAorICAgICAgICAgICAgcmVjb3ZlciBpbiB0aGUgY2FzZS4KKyAgICAgICAg
KENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKENvcmVJUEMpOgorICAgICAgICAqIFNoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y29tbWl0Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllclN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwcmVwYXJlQ3VzdG9tRmlsdGVy
UHJveGllc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKwog
MjAxMy0wMy0wNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAg
ICAgIFN1cHBvcnQgV2ViU3BlZWNoIC0gU3BlZWNoIFN5bnRoZXNpcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXgg
YjljZjhiY2I2YTI5MzAyMDYyNjE1MjU0NWQ5NTRmNTM0MDk5OWZlNC4uY2Q1Y2VhNTA5MGJlODcx
YzJlMjc5YjI2OGMxNTM1YTAxOGM4ODIxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC00MTEyLDggKzQxMTIs
OCBAQCB1c2U/KDNEX0dSQVBISUNTKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCBcCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2lu
Zy5oIFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkTGF5ZXJJbmZvLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRUaWxlLmggXAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
CmluZGV4IDRjNDNhYTdlMjM4ZGY1ZjI4ZmJlZTM5OTMwYjNhMGM1MTliYjY5YWEuLjZlOTAwMzYx
N2Y3ODkyYWM5YTlkZDVjYmNjZjhmMzA2ZDBjNmE4YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0xOTIsNiArMTky
LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIHApCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBv
c2l0aW9uKHApOworICAgIG1fbGF5ZXJTdGF0ZS5wb3NpdGlvbkNoYW5nZWQgPSB0cnVlOwogICAg
IGRpZENoYW5nZUdlb21ldHJ5KCk7CiB9CiAKQEAgLTIwMSw2ICsyMDIsNyBAQCB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBw
KQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChw
KTsKKyAgICBtX2xheWVyU3RhdGUuYW5jaG9yUG9pbnRDaGFuZ2VkID0gdHJ1ZTsKICAgICBkaWRD
aGFuZ2VHZW9tZXRyeSgpOwogfQogCkBAIC0yMTAsNiArMjEyLDcgQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRTaXplKHNpemUpOworICAgIG1fbGF5ZXJT
dGF0ZS5zaXplQ2hhbmdlZCA9IHRydWU7CiAKICAgICBpZiAobWFza0xheWVyKCkpCiAgICAgICAg
IG1hc2tMYXllcigpLT5zZXRTaXplKHNpemUpOwpAQCAtMjIyLDYgKzIyNSw4IEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHQpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5z
Zm9ybSh0KTsKKyAgICBtX2xheWVyU3RhdGUudHJhbnNmb3JtQ2hhbmdlZCA9IHRydWU7CisKICAg
ICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQogCkBAIC0yMzEsNiArMjM2LDggQEAgdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JgogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRD
aGlsZHJlblRyYW5zZm9ybSh0KTsKKyAgICBtX2xheWVyU3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm1D
aGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7CiB9CiAKQEAgLTI0MCw2
ICsyNDcsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0Qo
Ym9vbCBiKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2
ZXMzRChiKTsKKyAgICBtX2xheWVyU3RhdGUucHJlc2VydmVzM0QgPSBiOworICAgIG1fbGF5ZXJT
dGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworCiAgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0K
IApAQCAtMjQ4LDYgKzI1OCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRN
YXNrc1RvQm91bmRzKGJvb2wgYikKICAgICBpZiAobWFza3NUb0JvdW5kcygpID09IGIpCiAgICAg
ICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGIpOworICAg
IG1fbGF5ZXJTdGF0ZS5tYXNrc1RvQm91bmRzID0gYjsKKyAgICBtX2xheWVyU3RhdGUuZmxhZ3ND
aGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7CiB9CiAKQEAgLTI1Niw2
ICsyNjksOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50
KGJvb2wgYikKICAgICBpZiAoZHJhd3NDb250ZW50KCkgPT0gYikKICAgICAgICAgcmV0dXJuOwog
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChiKTsKKyAgICBtX2xheWVyU3RhdGUu
ZHJhd3NDb250ZW50ID0gYjsKKyAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsK
IAogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KQEAgLTI2NSw2ICsyODAsOSBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNpYmxlKGJvb2wgYikKICAg
ICBpZiAoY29udGVudHNBcmVWaXNpYmxlKCkgPT0gYikKICAgICAgICAgcmV0dXJuOwogICAgIEdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShiKTsKKyAgICBtX2xheWVyU3RhdGUuY29u
dGVudHNWaXNpYmxlID0gYjsKKyAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsK
KwogICAgIGlmIChtYXNrTGF5ZXIoKSkKICAgICAgICAgbWFza0xheWVyKCktPnNldENvbnRlbnRz
VmlzaWJsZShiKTsKIApAQCAtMjc4LDYgKzI5Niw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIpCiAgICAgaWYgKG1fbWFpbkJhY2tpbmdT
dG9yZSkKICAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFiKTsK
ICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShiKTsKKyAgICBtX2xheWVyU3Rh
dGUuY29udGVudHNPcGFxdWUgPSBiOworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0
cnVlOworCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC0yODcsNiArMzA4LDkg
QEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShi
b29sIGIpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNl
VmlzaWJpbGl0eShiKTsKKyAgICBtX2xheWVyU3RhdGUuYmFja2ZhY2VWaXNpYmxlID0gYjsKKyAg
ICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKwogICAgIGRpZENoYW5nZUxheWVy
U3RhdGUoKTsKIH0KIApAQCAtMjk2LDYgKzMyMCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgbV9sYXllclN0YXRlLm9w
YWNpdHkgPSBvcGFjaXR5OworICAgIG1fbGF5ZXJTdGF0ZS5vcGFjaXR5Q2hhbmdlZCA9IHRydWU7
CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTMwNSw2ICszMzIsOSBAQCB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJl
Y3QmIHIpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
UmVjdChyKTsKKyAgICBtX2xheWVyU3RhdGUuY29udGVudHNSZWN0ID0gcjsKKyAgICBtX2xheWVy
U3RhdGUuY29udGVudHNSZWN0Q2hhbmdlZCA9IHRydWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0
YXRlKCk7CiB9CiAKQEAgLTM1NiwxNiArMzg2LDIzIEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG5ld0ZpbHRlcnMpCiB7
CiAgICAgaWYgKGZpbHRlcnMoKSA9PSBuZXdGaWx0ZXJzKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmICghR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhuZXdGaWx0ZXJzKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgZGlkQ2hhbmdlRmlsdGVycygpOwotICAgIHJldHVybiBH
cmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKG5ld0ZpbHRlcnMpOworICAgIHJldHVybiB0cnVlOwog
fQogI2VuZGlmCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Rv
U29saWRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKG1fbGF5ZXJJbmZvLnNv
bGlkQ29sb3IgPT0gY29sb3IpCisgICAgaWYgKG1fbGF5ZXJTdGF0ZS5zb2xpZENvbG9yID09IGNv
bG9yKQogICAgICAgICByZXR1cm47Ci0gICAgbV9sYXllckluZm8uc29saWRDb2xvciA9IGNvbG9y
OworCisgICAgbV9sYXllclN0YXRlLnNvbGlkQ29sb3IgPSBjb2xvcjsKKyAgICBtX2xheWVyU3Rh
dGUuc29saWRDb2xvckNoYW5nZWQgPSB0cnVlOworCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OwogfQogCkBAIC0zNzUsNiArNDEyLDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldFNob3dEZWJ1Z0JvcmRlcihib29sIHNob3cpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdy
YXBoaWNzTGF5ZXI6OnNldFNob3dEZWJ1Z0JvcmRlcihzaG93KTsKKyAgICBtX2xheWVyU3RhdGUu
c2hvd0RlYnVnQm9yZGVycyA9IHRydWU7CisgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9
IHRydWU7CisKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTM4NCw2ICs0MjQs
OSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd1JlcGFpbnRDb3VudGVy
KGJvb2wgc2hvdykKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hv
d1JlcGFpbnRDb3VudGVyKHNob3cpOworICAgIG1fbGF5ZXJTdGF0ZS5zaG93UmVwYWludENvdW50
ZXIgPSB0cnVlOworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworCiAgICAg
ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC00MjEsNiArNDY0LDEwIEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIp
CiAgICAgbGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZShjb250ZW50c0FyZVZpc2libGUoKSk7CiAg
ICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb29yZGluYXRlZExheWVyID0gdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpOwogICAgIGNvb3JkaW5hdGVkTGF5ZXItPmRpZENoYW5n
ZUxheWVyU3RhdGUoKTsKKworICAgIG1fbGF5ZXJTdGF0ZS5tYXNrID0gY29vcmRpbmF0ZWRMYXll
ci0+aWQoKTsKKyAgICBtX2xheWVyU3RhdGUubWFza0NoYW5nZWQgPSB0cnVlOworCiAgICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC00NDIsNiArNDg5LDggQEAgdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVk
QnlMYXllcihsYXllcik7CisgICAgbV9sYXllclN0YXRlLnJlcGxpY2EgPSB0b0Nvb3JkaW5hdGVk
TGF5ZXJJRChsYXllcik7CisgICAgbV9sYXllclN0YXRlLnJlcGxpY2FDaGFuZ2VkID0gdHJ1ZTsK
ICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTQ3MSw2ICs1MjAsOSBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Rml4ZWRUb1ZpZXdwb3J0KGJvb2wgaXNGaXhl
ZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9maXhlZFRvVmlld3BvcnQgPSBpc0ZpeGVkOwor
ICAgIG1fbGF5ZXJTdGF0ZS5maXhlZFRvVmlld3BvcnQgPSBpc0ZpeGVkOworICAgIG1fbGF5ZXJT
dGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwog
fQogCkBAIC01MDQsMTEgKzU1NiwxMCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c3luY0NoaWxkcmVuKCkKICAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQogICAgICAgICBy
ZXR1cm47CiAgICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICBWZWN0b3I8Q29v
cmRpbmF0ZWRMYXllcklEPiBjaGlsZElEczsKKyAgICBtX2xheWVyU3RhdGUuY2hpbGRyZW5DaGFu
Z2VkID0gdHJ1ZTsKKyAgICBtX2xheWVyU3RhdGUuY2hpbGRyZW4uY2xlYXIoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxk
SURzLmFwcGVuZCh0b0Nvb3JkaW5hdGVkTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7Ci0KLSAgICBt
X2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGlsZElEcyk7CisgICAgICAg
IG1fbGF5ZXJTdGF0ZS5jaGlsZHJlbi5hcHBlbmQodG9Db29yZGluYXRlZExheWVySUQoY2hpbGRy
ZW4oKVtpXSkpOwogfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtNTE3LDcgKzU2OCw5
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycygpCiAgICAgaWYg
KCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQogICAgICAgICByZXR1cm47CiAgICAgbV9zaG91bGRTeW5j
RmlsdGVycyA9IGZhbHNlOwotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllckZpbHRlcnMobV9p
ZCwgZmlsdGVycygpKTsKKworICAgIG1fbGF5ZXJTdGF0ZS5maWx0ZXJzID0gR3JhcGhpY3NMYXll
cjo6ZmlsdGVycygpOworICAgIG1fbGF5ZXJTdGF0ZS5maWx0ZXJzQ2hhbmdlZCA9IHRydWU7CiB9
CiAjZW5kaWYKIApAQCAtNTM4LDE0ICs1OTEsMTUgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnN5bmNJbWFnZUJhY2tpbmcoKQogICAgICAgICBpZiAoIW1fY29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcpIHsKICAgICAgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgPSBtX2Nv
b3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChtX2NvbXBvc2l0ZWRJbWFnZS5n
ZXQoKSk7CiAgICAgICAgICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5hZGRIb3N0KHRo
aXMpOwotICAgICAgICAgICAgbV9sYXllckluZm8uaW1hZ2VJRCA9IG1fY29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmctPmlkKCk7CisgICAgICAgICAgICBtX2xheWVyU3RhdGUuaW1hZ2VJRCA9IG1fY29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmctPmlkKCk7CiAgICAgICAgIH0KIAogICAgICAgICBtX2Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLT5tYXJrRGlydHkoKTsKKyAgICAgICAgbV9sYXllclN0YXRlLmlt
YWdlQ2hhbmdlZCA9IHRydWU7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlbGVhc2VJbWFnZUJhY2tp
bmdJZk5lZWRlZCgpOwogCi0gICAgLy8gc3luY0ltYWdlQmFja2luZygpIGNoYW5nZWQgbV9sYXll
ckluZm8uaW1hZ2VJRC4KKyAgICAvLyBzeW5jSW1hZ2VCYWNraW5nKCkgY2hhbmdlZCBtX2xheWVy
U3RhdGUuaW1hZ2VJRC4KICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CiAKQEAgLTU1NCwz
OCArNjA4LDM0IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0
ZSgpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRlKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9IGZhbHNlOwotICAgIG1fbGF5ZXJJbmZvLmZpeGVk
VG9WaWV3cG9ydCA9IGZpeGVkVG9WaWV3cG9ydCgpOwotCi0gICAgbV9sYXllckluZm8uYmFja2Zh
Y2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7Ci0gICAgbV9sYXllckluZm8uY2hpbGRy
ZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOwotICAgIG1fbGF5ZXJJbmZvLmNvbnRl
bnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsKLSAgICBtX2xheWVySW5mby5jb250ZW50c1Jl
Y3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3
c0NvbnRlbnQoKTsKLSAgICBtX2xheWVySW5mby5jb250ZW50c1Zpc2libGUgPSBjb250ZW50c0Fy
ZVZpc2libGUoKTsKLSAgICBtX2xheWVySW5mby5tYXNrID0gdG9Db29yZGluYXRlZExheWVySUQo
bWFza0xheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91
bmRzKCk7Ci0gICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKLSAgICBtX2xheWVy
SW5mby5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZlczNEKCk7Ci0gICAgbV9sYXllckluZm8ucmVwbGlj
YSA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKHJlcGxpY2FMYXllcigpKTsKLSAgICBtX2xheWVySW5m
by50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKLQotICAgIG1fbGF5ZXJJbmZvLmFuY2hvclBvaW50
ID0gbV9hZGp1c3RlZEFuY2hvclBvaW50OwotICAgIG1fbGF5ZXJJbmZvLnBvcyA9IG1fYWRqdXN0
ZWRQb3NpdGlvbjsKLSAgICBtX2xheWVySW5mby5zaXplID0gbV9hZGp1c3RlZFNpemU7Ci0KLSAg
ICBtX2xheWVySW5mby5zaG93RGVidWdCb3JkZXJzID0gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsK
LSAgICBpZiAobV9sYXllckluZm8uc2hvd0RlYnVnQm9yZGVycykKLSAgICAgICAgdXBkYXRlRGVi
dWdJbmRpY2F0b3JzKCk7Ci0gICAgbV9sYXllckluZm8uc2hvd1JlcGFpbnRDb3VudGVyID0gaXNT
aG93aW5nUmVwYWludENvdW50ZXIoKTsKIAotICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllclN0
YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKKyAgICBtX2xheWVyU3RhdGUuY2hpbGRyZW5UcmFuc2Zv
cm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOworICAgIG1fbGF5ZXJTdGF0ZS5jb250ZW50c1JlY3Qg
PSBjb250ZW50c1JlY3QoKTsKKyAgICBtX2xheWVyU3RhdGUubWFzayA9IHRvQ29vcmRpbmF0ZWRM
YXllcklEKG1hc2tMYXllcigpKTsKKyAgICBtX2xheWVyU3RhdGUub3BhY2l0eSA9IG9wYWNpdHko
KTsKKyAgICBtX2xheWVyU3RhdGUucmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKHJlcGxp
Y2FMYXllcigpKTsKKyAgICBtX2xheWVyU3RhdGUudHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7CisK
KyAgICBtX2xheWVyU3RhdGUuYW5jaG9yUG9pbnQgPSBtX2FkanVzdGVkQW5jaG9yUG9pbnQ7Cisg
ICAgbV9sYXllclN0YXRlLnBvcyA9IG1fYWRqdXN0ZWRQb3NpdGlvbjsKKyAgICBtX2xheWVyU3Rh
dGUuc2l6ZSA9IG1fYWRqdXN0ZWRTaXplOworCisgICAgaWYgKG1fbGF5ZXJTdGF0ZS5zaG93RGVi
dWdCb3JkZXJzKQorICAgICAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBjb2xv
ciwgZmxvYXQgd2lkdGgpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJJbmZvLnNob3dEZWJ1Z0JvcmRl
cnMpOwotICAgIG1fbGF5ZXJJbmZvLmRlYnVnQm9yZGVyQ29sb3IgPSBjb2xvcjsKLSAgICBtX2xh
eWVySW5mby5kZWJ1Z0JvcmRlcldpZHRoID0gd2lkdGg7CisgICAgQVNTRVJUKG1fbGF5ZXJTdGF0
ZS5zaG93RGVidWdCb3JkZXJzKTsKKyAgICBpZiAobV9sYXllclN0YXRlLmRlYnVnQm9yZGVyQ29s
b3IgIT0gY29sb3IpIHsKKyAgICAgICAgbV9sYXllclN0YXRlLmRlYnVnQm9yZGVyQ29sb3IgPSBj
b2xvcjsKKyAgICAgICAgbV9sYXllclN0YXRlLmRlYnVnQm9yZGVyQ29sb3JDaGFuZ2VkID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAobV9sYXllclN0YXRlLmRlYnVnQm9yZGVyV2lkdGggIT0gd2lk
dGgpIHsKKyAgICAgICAgbV9sYXllclN0YXRlLmRlYnVnQm9yZGVyV2lkdGggPSB3aWR0aDsKKyAg
ICAgICAgbV9sYXllclN0YXRlLmRlYnVnQm9yZGVyV2lkdGhDaGFuZ2VkID0gdHJ1ZTsKKyAgICB9
CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCkBA
IC01OTQsOCArNjQ0LDggQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNBbmlt
YXRpb25zKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zaG91bGRTeW5jQW5pbWF0aW9ucyA9
IGZhbHNlOwotCi0gICAgbV9jb29yZGluYXRvci0+c2V0TGF5ZXJBbmltYXRpb25zKG1faWQsIG1f
YW5pbWF0aW9ucyk7CisgICAgbV9sYXllclN0YXRlLmFuaW1hdGlvbnMgPSBtX2FuaW1hdGlvbnMu
Z2V0QWN0aXZlQW5pbWF0aW9ucygpOworICAgIG1fbGF5ZXJTdGF0ZS5hbmltYXRpb25zQ2hhbmdl
ZCA9IHRydWU7CiB9CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKQEAgLTYxMiw3ICs2NjIs
OSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NhbnZhcygpCiAgICAgaWYg
KCFtX2lzVmFsaWRDYW52YXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY29vcmRpbmF0b3It
PnN5bmNDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICBBU1NFUlQobV9j
YW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICBtX2xheWVyU3RhdGUuY2FudmFzRnJvbnRCdWZmZXIg
PSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOworICAgIG1f
bGF5ZXJTdGF0ZS5jYW52YXNTaG91bGRTd2FwQnVmZmVycyA9IHRydWU7CiB9CiAKIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQoKQpAQCAtNjIxLDgg
KzY3Myw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZO
ZWVkZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pc1ZhbGlkQ2FudmFzKSB7Ci0g
ICAgICAgIG1fY29vcmRpbmF0b3ItPmRlc3Ryb3lDYW52YXMobV9pZCk7CiAgICAgICAgIG1faXNW
YWxpZENhbnZhcyA9IGZhbHNlOworICAgICAgICBtX2xheWVyU3RhdGUuY2FudmFzVG9rZW4gPSBH
cmFwaGljc1N1cmZhY2VUb2tlbigpOworICAgICAgICBtX2xheWVyU3RhdGUuY2FudmFzQ2hhbmdl
ZCA9IHRydWU7CiAgICAgfQogCiAgICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICY9IH5EZXN0
cm95Q2FudmFzOwpAQCAtNjM1LDcgKzY4OCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpjcmVhdGVDYW52YXNJZk5lZWRlZCgpCiAKICAgICBBU1NFUlQobV9jYW52YXNQbGF0Zm9y
bUxheWVyKTsKICAgICBpZiAoIW1faXNWYWxpZENhbnZhcykgewotICAgICAgICBtX2Nvb3JkaW5h
dG9yLT5jcmVhdGVDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICAgICAg
bV9sYXllclN0YXRlLmNhbnZhc1NpemUgPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3Jt
TGF5ZXJTaXplKCk7CisgICAgICAgIG1fbGF5ZXJTdGF0ZS5jYW52YXNUb2tlbiA9IG1fY2FudmFz
UGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKKyAgICAgICAgbV9sYXllclN0
YXRlLmNhbnZhc0NoYW5nZWQgPSB0cnVlOwogICAgICAgICBtX2lzVmFsaWRDYW52YXMgPSB0cnVl
OwogICAgIH0KIApAQCAtNjY3LDExICs3MjIsMjMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQogI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQogICAgIHN5bmNDYW52YXMoKTsKICNlbmRpZgorCisgICAgbV9jb29y
ZGluYXRvci0+c3luY0xheWVyU3RhdGUobV9pZCwgbV9sYXllclN0YXRlKTsKKyAgICByZXNldExh
eWVyU3RhdGUoKTsKKwogICAgIC8vIE9ubHkgdW5zZXQgbV9tb3ZpbmdWaXNpYmxlUmVjdCBhZnRl
ciB3ZSBoYXZlIHVwZGF0ZWQgdGhlIHZpc2libGUgcmVjdCBhZnRlciB0aGUgYW5pbWF0aW9uIHN0
b3BwZWQuCiAgICAgaWYgKCFoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24pCiAgICAgICAgIG1f
bW92aW5nVmlzaWJsZVJlY3QgPSBmYWxzZTsKIH0KIAordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnJlc2V0TGF5ZXJTdGF0ZSgpCit7CisgICAgbV9sYXllclN0YXRlLmNoYW5nZU1hc2sg
PSAwOworICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvQ3JlYXRlLmNsZWFyKCk7CisgICAgbV9sYXll
clN0YXRlLnRpbGVzVG9SZW1vdmUuY2xlYXIoKTsKKyAgICBtX2xheWVyU3RhdGUudGlsZXNUb1Vw
ZGF0ZS5jbGVhcigpOworfQorCiBib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aW1hZ2VC
YWNraW5nVmlzaWJsZSgpCiB7CiAgICAgQVNTRVJUKG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcp
OwpAQCAtNjg2LDcgKzc1Myw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZWxl
YXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKQogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAg
ICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5yZW1vdmVIb3N0KHRoaXMpOwogICAgIG1fY29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcuY2xlYXIoKTsKLSAgICBtX2xheWVySW5mby5pbWFnZUlEID0g
SW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7CisgICAgbV9sYXllclN0YXRlLmltYWdl
SUQgPSBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKKyAgICBtX2xheWVyU3RhdGUu
aW1hZ2VDaGFuZ2VkID0gdHJ1ZTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCkBAIC02OTUsNyArNzYzLDggQEAgdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCiAK
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3Qp
CiB7Ci0gICAgbV9sYXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jvb3Q7CisgICAgbV9sYXllclN0
YXRlLmlzUm9vdExheWVyID0gaXNSb290OworICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQg
PSB0cnVlOwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtNzUxLDggKzgyMCwx
MSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWlu
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBk
YXRlZFJlY3RzKQogewotICAgIGlmIChpc1Nob3dpbmdSZXBhaW50Q291bnRlcigpICYmICF1cGRh
dGVkUmVjdHMuaXNFbXB0eSgpKQotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5zZXRMYXllclJlcGFp
bnRDb3VudChpZCgpLCBpbmNyZW1lbnRSZXBhaW50Q291bnQoKSk7CisgICAgaWYgKCFpc1Nob3dp
bmdSZXBhaW50Q291bnRlcigpIHx8IHVwZGF0ZWRSZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fbGF5ZXJTdGF0ZS5yZXBhaW50Q291bnQgPSBpbmNyZW1lbnRSZXBhaW50
Q291bnQoKTsKKyAgICBtX2xheWVyU3RhdGUucmVwYWludENvdW50Q2hhbmdlZCA9IHRydWU7CiB9
CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUhhc1Bl
bmRpbmdUaWxlQ3JlYXRpb24oKQpAQCAtODExLDIxICs4ODMsMzIgQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNl
VXBkYXRlSW4KIHsKICAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CiAgICAgQVNTRVJUKG1fY29v
cmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0gICAgbV9jb29yZGluYXRvci0+
Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKworICAgIFRp
bGVDcmVhdGlvbkluZm8gY3JlYXRpb25JbmZvOworICAgIGNyZWF0aW9uSW5mby50aWxlSUQgPSB0
aWxlSUQ7CisgICAgY3JlYXRpb25JbmZvLnNjYWxlID0gdXBkYXRlSW5mby5zY2FsZUZhY3RvcjsK
KworICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvQ3JlYXRlLmFwcGVuZChjcmVhdGlvbkluZm8pOwor
ICAgIHVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVjdCk7CiB9CiAKIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0
KQogewogICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRv
ci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT51cGRhdGVU
aWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3QpOworCisgICAgVGlsZVVwZGF0
ZUluZm8gdGlsZVVwZGF0ZUluZm87CisgICAgdGlsZVVwZGF0ZUluZm8udGlsZUlEID0gdGlsZUlE
OworICAgIHRpbGVVcGRhdGVJbmZvLnRpbGVSZWN0ID0gdGlsZVJlY3Q7CisgICAgdGlsZVVwZGF0
ZUluZm8udXBkYXRlSW5mbyA9IHVwZGF0ZUluZm87CisgICAgbV9sYXllclN0YXRlLnRpbGVzVG9V
cGRhdGUuYXBwZW5kKHRpbGVVcGRhdGVJbmZvKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKQogewogICAgIEFTU0VSVChtX2Nv
b3JkaW5hdG9yKTsKICAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hh
bmdlcygpIHx8IG1faXNQdXJnaW5nKTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5yZW1vdmVUaWxlKGlk
KCksIHRpbGVJRCk7CisgICAgbV9sYXllclN0YXRlLnRpbGVzVG9SZW1vdmUuYXBwZW5kKHRpbGVJ
RCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVm
ZmVycygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmgKaW5kZXggZTVhYTQ3YWZjYzA4MDIwZTIyNTkyOTEwNWE5YWMwYThlNTlkZDMyNy4u
NzkwZmU5NmM4YTM0ZWQ1NmY3NmUwMDQ2ZmNjODI5NjcxYjI3MTgxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAtMjEsOCAr
MjEsOCBAQAogI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAogI2RlZmluZSBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1N0
YXRlLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCIKLSNpbmNsdWRlICJD
b29yZGluYXRlZExheWVySW5mby5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgogI2lu
Y2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKQEAgLTQ4
LDMxICs0OCwxMiBAQCBjbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsKIGNsYXNzIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
Rmx1c2hpbmdMYXllckNoYW5nZXMoKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBDb29yZGluYXRlZFRp
bGVDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3Qm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCB0aWxlSUQpID0gMDsKLQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHZpc2libGVDb250
ZW50c1JlY3QoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSopID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBD
b29yZGluYXRlZExheWVySW5mbyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hp
bGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklE
PiYpID0gMDsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikg
PSAwOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdmlydHVhbCB2b2lk
IGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFBsYXRmb3JtTGF5ZXIqKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxh
eWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5
ZXJJRCkgPSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291
bnQoQ29vcmRpbmF0ZWRMYXllcklELCBpbnQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5p
bWF0aW9ucyYpID0gMDsKLQogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmLCBDb29yZGluYXRlZFN1cmZh
Y2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJTdGF0ZSYpID0gMDsKIH07CiAKIGNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciA6IHB1YmxpYyBHcmFwaGljc0xheWVyCkBAIC0xOTAsNiArMTcxLDcgQEAgcHJpdmF0ZToK
ICNlbmRpZgogICAgIHZvaWQgZGlkQ2hhbmdlSW1hZ2VCYWNraW5nKCk7CiAKKyAgICB2b2lkIHJl
c2V0TGF5ZXJTdGF0ZSgpOwogICAgIHZvaWQgc3luY0xheWVyU3RhdGUoKTsKICAgICB2b2lkIHN5
bmNBbmltYXRpb25zKCk7CiAgICAgdm9pZCBzeW5jQ2hpbGRyZW4oKTsKQEAgLTIxNiw3ICsxOTgs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgYW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiopOwogCiAgICAgQ29vcmRpbmF0ZWRMYXllcklEIG1f
aWQ7Ci0gICAgQ29vcmRpbmF0ZWRMYXllckluZm8gbV9sYXllckluZm87CisgICAgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyU3RhdGUgbV9sYXllclN0YXRlOwogICAgIEdyYXBoaWNzTGF5ZXJUcmFu
c2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2NhY2hl
ZEludmVyc2VUcmFuc2Zvcm07CiAgICAgRmxvYXRTaXplIG1fcGl4ZWxBbGlnbm1lbnRPZmZzZXQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuY3BwCmluZGV4IDg2MjQ1MTMwNDkyZDliYjEwM2JlMGQ0MjMzMmIzZjYwMDUwY2ExNTguLjlm
MDgwNTMzYzY2YmFiZGIyYmZiOGUzZjE2MDRlOWFkYTNhMzhhNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCkBAIC0xOTYs
NTQgKzE5Niw2MyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YWRqdXN0UG9zaXRp
b25Gb3JGaXhlZExheWVycygpCiB9CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2Up
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQoR3Jh
cGhpY3NMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBz
dGF0ZSkKIHsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKLSAgICBHcmFwaGljc0xheWVy
KiBsYXllciA9IGxheWVyQnlJRChpZCk7Ci0gICAgQVNTRVJUKCFtX3N1cmZhY2VCYWNraW5nU3Rv
cmVzLmNvbnRhaW5zKGlkKSk7CisgICAgaWYgKCFzdGF0ZS5jYW52YXNUb2tlbi5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tp
bmdTdG9yZT4gY2FudmFzQmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0
b3JlOjpjcmVhdGUoKSk7Ci0gICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5zZXQoaWQsIGNhbnZh
c0JhY2tpbmdTdG9yZSk7CisgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5zZXQobGF5ZXIsIGNh
bnZhc0JhY2tpbmdTdG9yZSk7CiAKLSAgICBjYW52YXNCYWNraW5nU3RvcmUtPnNldEdyYXBoaWNz
U3VyZmFjZShzdXJmYWNlKTsKKyAgICBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIHN1cmZhY2VGbGFn
cyA9IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNUZXh0dXJlVGFyZ2V0IHwgR3JhcGhpY3NTdXJm
YWNlOjpTdXBwb3J0c1NoYXJpbmc7CisgICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGlj
c1N1cmZhY2UoR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoc3RhdGUuY2FudmFzU2l6ZSwgc3VyZmFj
ZUZsYWdzLCBzdGF0ZS5jYW52YXNUb2tlbikpOwogICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVk
aWEoY2FudmFzQmFja2luZ1N0b3JlLmdldCgpKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCBmcm9u
dEJ1ZmZlcikKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jQ2FudmFzSWZOZWVk
ZWQoR3JhcGhpY3NMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlJiBzdGF0ZSkKIHsKICAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKLSAgICBBU1NFUlQo
bV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkpOwogCi0gICAgU3VyZmFjZUJhY2tp
bmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmZpbmQoaWQp
OwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gY2FudmFzQmFj
a2luZ1N0b3JlID0gaXQtPnZhbHVlOworICAgIGlmIChzdGF0ZS5jYW52YXNDaGFuZ2VkKSB7Cisg
ICAgICAgIGRlc3Ryb3lDYW52YXNJZk5lZWRlZChsYXllciwgc3RhdGUpOworICAgICAgICBjcmVh
dGVDYW52YXNJZk5lZWRlZChsYXllciwgc3RhdGUpOworICAgIH0KIAotICAgIGNhbnZhc0JhY2tp
bmdTdG9yZS0+c3dhcEJ1ZmZlcnNJZk5lZWRlZChmcm9udEJ1ZmZlcik7CisgICAgaWYgKHN0YXRl
LmNhbnZhc1Nob3VsZFN3YXBCdWZmZXJzKSB7CisgICAgICAgIEFTU0VSVChtX3N1cmZhY2VCYWNr
aW5nU3RvcmVzLmNvbnRhaW5zKGxheWVyKSk7CisgICAgICAgIFN1cmZhY2VCYWNraW5nU3RvcmVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5maW5kKGxheWVyKTsKKyAg
ICAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiBjYW52YXNCYWNr
aW5nU3RvcmUgPSBpdC0+dmFsdWU7CisgICAgICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c3dhcEJ1
ZmZlcnNJZk5lZWRlZChzdGF0ZS5jYW52YXNGcm9udEJ1ZmZlcik7CisgICAgfQogfQogCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVy
SUQgaWQpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVzdHJveUNhbnZhc0lmTmVl
ZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJT
dGF0ZSYgc3RhdGUpCiB7Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAgR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotICAgIEFTU0VSVChtX3N1cmZhY2VCYWNr
aW5nU3RvcmVzLmNvbnRhaW5zKGlkKSk7CisgICAgaWYgKHN0YXRlLmNhbnZhc1Rva2VuLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5yZW1v
dmUoaWQpOworICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVyKTsKICAgICBs
YXllci0+c2V0Q29udGVudHNUb01lZGlhKDApOwogfQogI2VuZGlmCiAKLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQg
aWQsIGludCB2YWx1ZSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJl
cGFpbnRDb3VudElmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIg
PSBsYXllckJ5SUQoaWQpOwotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIp
LT5zZXRSZXBhaW50Q291bnQodmFsdWUpOworICAgIGlmICghbGF5ZXItPmlzU2hvd2luZ1JlcGFp
bnRDb3VudGVyKCkgfHwgIXN0YXRlLnJlcGFpbnRDb3VudENoYW5nZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRSZXBhaW50
Q291bnQoc3RhdGUucmVwYWludENvdW50KTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OnNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0
b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRJRHMpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJDaGlsZHJlbklmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOworICAgIGlmICghc3RhdGUuY2hpbGRyZW5D
aGFuZ2VkKQorICAgICAgICByZXR1cm47CisKICAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNo
aWxkcmVuOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZElEcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBDb29yZGluYXRlZExheWVySUQgY2hpbGRJRCA9IGNoaWxkSURzW2ldOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUuY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGNoaWxkSUQgPSBzdGF0ZS5jaGlsZHJlbltpXTsK
ICAgICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQoY2hpbGRJRCk7CiAgICAg
ICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7CiAgICAgfQpAQCAtMjUxLDE0ICsyNjAsMTUgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0
ZWRMYXllcklEIGlkLCBjb25zdCBWZWMKIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyRmlsdGVyc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIq
IGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOworICAgIGlmICghc3RhdGUu
ZmlsdGVyc0NoYW5nZWQpCisgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKLSAgICBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhmaWx0ZXJzKTsKKyAgICBp
bmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhzdGF0ZS5maWx0ZXJzKTsKICNlbmRpZgot
ICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworICAgIGxheWVyLT5zZXRGaWx0ZXJzKHN0
YXRlLmZpbHRlcnMpOwogfQogI2VuZGlmCiAKQEAgLTI5NCw0MyArMzA0LDgwIEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkK
IH0KICNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQURFUlMpCiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29v
cmRpbmF0ZWRMYXllckluZm8mIGxheWVySW5mbykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyU3RhdGUmIGxheWVyU3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fcm9vdExh
eWVySUQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7CiAgICAgR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllckJ5SUQoaWQpOwogCi0gICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVy
KGdldExheWVyQnlJRElmRXhpc3RzKGxheWVySW5mby5yZXBsaWNhKSk7Ci0gICAgbGF5ZXItPnNl
dE1hc2tMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllckluZm8ubWFzaykpOwotCi0gICAg
bGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVySW5mby5hbmNob3JQb2ludCk7Ci0gICAgbGF5ZXIt
PnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOwotICAgIGxheWVyLT5zZXRTaXplKGxheWVySW5m
by5zaXplKTsKLQotICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7
Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5z
Zm9ybSk7Ci0gICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllckluZm8uYmFja2Zh
Y2VWaXNpYmxlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRl
bnRzT3BhcXVlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVySW5mby5jb250ZW50
c1JlY3QpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1RvU29saWRDb2xvcihsYXllckluZm8uc29s
aWRDb2xvcik7Ci0gICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8uZHJhd3NDb250
ZW50KTsKLSAgICBsYXllci0+c2V0Q29udGVudHNWaXNpYmxlKGxheWVySW5mby5jb250ZW50c1Zp
c2libGUpOwotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRGaXhl
ZFRvVmlld3BvcnQobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCk7Ci0gICAgbGF5ZXItPnNldFNo
b3dEZWJ1Z0JvcmRlcihsYXllckluZm8uc2hvd0RlYnVnQm9yZGVycyk7Ci0gICAgbGF5ZXItPnNl
dERlYnVnQm9yZGVyKGxheWVySW5mby5kZWJ1Z0JvcmRlckNvbG9yLCBsYXllckluZm8uZGVidWdC
b3JkZXJXaWR0aCk7Ci0gICAgbGF5ZXItPnNldFNob3dSZXBhaW50Q291bnRlcihsYXllckluZm8u
c2hvd1JlcGFpbnRDb3VudGVyKTsKLQotICAgIGlmIChsYXllckluZm8uZml4ZWRUb1ZpZXdwb3J0
KQorICAgIGlmIChsYXllclN0YXRlLnBvc2l0aW9uQ2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNl
dFBvc2l0aW9uKGxheWVyU3RhdGUucG9zKTsKKworICAgIGlmIChsYXllclN0YXRlLmFuY2hvclBv
aW50Q2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVyU3RhdGUuYW5j
aG9yUG9pbnQpOworCisgICAgaWYgKGxheWVyU3RhdGUuc2l6ZUNoYW5nZWQpCisgICAgICAgIGxh
eWVyLT5zZXRTaXplKGxheWVyU3RhdGUuc2l6ZSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS50cmFu
c2Zvcm1DaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVyU3RhdGUudHJh
bnNmb3JtKTsKKworICAgIGlmIChsYXllclN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCkK
KyAgICAgICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVyU3RhdGUuY2hpbGRyZW5U
cmFuc2Zvcm0pOworCisgICAgaWYgKGxheWVyU3RhdGUuY29udGVudHNSZWN0Q2hhbmdlZCkKKyAg
ICAgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllclN0YXRlLmNvbnRlbnRzUmVjdCk7CisK
KyAgICBpZiAobGF5ZXJTdGF0ZS5vcGFjaXR5Q2hhbmdlZCkKKyAgICAgICAgbGF5ZXItPnNldE9w
YWNpdHkobGF5ZXJTdGF0ZS5vcGFjaXR5KTsKKworICAgIGlmIChsYXllclN0YXRlLnNvbGlkQ29s
b3JDaGFuZ2VkKQorICAgICAgICBsYXllci0+c2V0Q29udGVudHNUb1NvbGlkQ29sb3IobGF5ZXJT
dGF0ZS5zb2xpZENvbG9yKTsKKworICAgIGlmIChsYXllclN0YXRlLmRlYnVnQm9yZGVyQ29sb3JD
aGFuZ2VkIHx8IGxheWVyU3RhdGUuZGVidWdCb3JkZXJXaWR0aENoYW5nZWQpCisgICAgICAgIGxh
eWVyLT5zZXREZWJ1Z0JvcmRlcihsYXllclN0YXRlLmRlYnVnQm9yZGVyQ29sb3IsIGxheWVyU3Rh
dGUuZGVidWdCb3JkZXJXaWR0aCk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5yZXBsaWNhQ2hhbmdl
ZCkKKyAgICAgICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGdldExheWVyQnlJRElmRXhp
c3RzKGxheWVyU3RhdGUucmVwbGljYSkpOworCisgICAgaWYgKGxheWVyU3RhdGUubWFza0NoYW5n
ZWQpCisgICAgICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5
ZXJTdGF0ZS5tYXNrKSk7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5pbWFnZUNoYW5nZWQpCisgICAg
ICAgIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIobGF5ZXIsIGxheWVyU3RhdGUuaW1hZ2VJRCk7
CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQpIHsKKyAgICAgICAgbGF5ZXItPnNl
dENvbnRlbnRzT3BhcXVlKGxheWVyU3RhdGUuY29udGVudHNPcGFxdWUpOworICAgICAgICBsYXll
ci0+c2V0RHJhd3NDb250ZW50KGxheWVyU3RhdGUuZHJhd3NDb250ZW50KTsKKyAgICAgICAgbGF5
ZXItPnNldENvbnRlbnRzVmlzaWJsZShsYXllclN0YXRlLmNvbnRlbnRzVmlzaWJsZSk7CisgICAg
ICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJTdGF0ZS5iYWNrZmFjZVZpc2li
bGUpOworCisgICAgICAgIC8vIE5ldmVyIGNsaXAgdGhlIHJvb3QgbGF5ZXIuCisgICAgICAgIGxh
eWVyLT5zZXRNYXNrc1RvQm91bmRzKGxheWVyU3RhdGUuaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxh
eWVyU3RhdGUubWFza3NUb0JvdW5kcyk7CisgICAgICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChs
YXllclN0YXRlLnByZXNlcnZlczNEKTsKKworICAgICAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyKGxheWVyKS0+c2V0Rml4ZWRUb1ZpZXdwb3J0KGxheWVyU3RhdGUuZml4ZWRUb1ZpZXdw
b3J0KTsKKyAgICAgICAgbGF5ZXItPnNldFNob3dEZWJ1Z0JvcmRlcihsYXllclN0YXRlLnNob3dE
ZWJ1Z0JvcmRlcnMpOworICAgICAgICBsYXllci0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKGxheWVy
U3RhdGUuc2hvd1JlcGFpbnRDb3VudGVyKTsKKyAgICB9CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5m
aXhlZFRvVmlld3BvcnQpCiAgICAgICAgIG1fZml4ZWRMYXllcnMuYWRkKGlkLCBsYXllcik7CiAg
ICAgZWxzZQogICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7CiAKLSAgICBhc3NpZ25J
bWFnZUJhY2tpbmdUb0xheWVyKGlkLCBsYXllciwgbGF5ZXJJbmZvLmltYWdlSUQpOwogICAgIHBy
ZXBhcmVDb250ZW50QmFja2luZ1N0b3JlKGxheWVyKTsKIAotICAgIC8vIE5ldmVyIG1ha2UgdGhl
IHJvb3QgbGF5ZXIgY2xpcC4KLSAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8u
aXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKLSAgICBsYXll
ci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7Ci0gICAgbGF5ZXItPnNldFByZXNlcnZl
czNEKGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7CisgICAgLy8gQXBwbHkgT3BlcmF0aW9ucy4KKyAg
ICBzZXRMYXllckNoaWxkcmVuSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOworICAgIGNyZWF0
ZVRpbGVzSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOworICAgIHJlbW92ZVRpbGVzSWZOZWVk
ZWQobGF5ZXIsIGxheWVyU3RhdGUpOworICAgIHVwZGF0ZVRpbGVzSWZOZWVkZWQobGF5ZXIsIGxh
eWVyU3RhdGUpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBzZXRMYXllckZpbHRlcnNJ
Zk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7CisjZW5kaWYKKyAgICBzZXRMYXllckFuaW1hdGlv
bnNJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7CisgICAgc3luY0NhbnZhc0lmTmVlZGVkKGxh
eWVyLCBsYXllclN0YXRlKTsKKyAgICBzZXRMYXllclJlcGFpbnRDb3VudElmTmVlZGVkKGxheWVy
LCBsYXllclN0YXRlKTsKIH0KIAogR3JhcGhpY3NMYXllciogQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpnZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQgaWQpCkBAIC0zNjUs
NyArNDEyLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlbGV0ZUxheWVyKENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQogICAgIG1fYmFja2luZ1N0b3Jlcy5yZW1vdmUobGF5
ZXIuZ2V0KCkpOwogICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxheWVySUQpOwogI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVy
SUQpOworICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKICNl
bmRpZgogfQogCkBAIC00MTksMzYgKzQ2Niw1MSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUoR3JhcGhpY3NMYXllciogZwog
ICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsK
IH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVRpbGUoQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVGlsZXNJZk5lZWRlZChHcmFwaGljc0xheWVy
KiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQogewot
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIGlmIChz
dGF0ZS50aWxlc1RvQ3JlYXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgUmVm
UHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9y
ZXMuZ2V0KGxheWVyKTsKICAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKLSAgICBiYWNraW5nU3Rv
cmUtPmNyZWF0ZVRpbGUodGlsZUlELCBzY2FsZSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHN0YXRlLnRpbGVzVG9DcmVhdGUuc2l6ZSgpOyArK2kpCisgICAgICAgIGJhY2tpbmdTdG9y
ZS0+Y3JlYXRlVGlsZShzdGF0ZS50aWxlc1RvQ3JlYXRlW2ldLnRpbGVJRCwgc3RhdGUudGlsZXNU
b0NyZWF0ZVtpXS5zY2FsZSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpy
ZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZXNJZk5lZWRlZChHcmFwaGlj
c0xheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRl
KQogewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAg
IGlmIChzdGF0ZS50aWxlc1RvUmVtb3ZlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tp
bmdTdG9yZXMuZ2V0KGxheWVyKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYmFja2luZ1N0b3JlLT5yZW1vdmVUaWxlKHRpbGVJRCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzdGF0ZS50aWxlc1RvUmVtb3ZlLnNpemUoKTsgKytpKQorICAgICAg
ICBiYWNraW5nU3RvcmUtPnJlbW92ZVRpbGUoc3RhdGUudGlsZXNUb1JlbW92ZVtpXSk7CisKICAg
ICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7CiB9
CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVUaWxlKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0
ZSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVUaWxlc0lmTmVlZGVkKEdy
YXBoaWNzTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7
CisgICAgaWYgKHN0YXRlLnRpbGVzVG9VcGRhdGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1f
YmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwogICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOwogCi0g
ICAgU3VyZmFjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodXBkYXRlLmF0bGFz
SUQpOwotICAgIEFTU0VSVChpdCAhPSBtX3N1cmZhY2VzLmVuZCgpKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN0YXRlLnRpbGVzVG9VcGRhdGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgVGlsZVVwZGF0ZUluZm8mIHRpbGVJbmZvID0gc3RhdGUudGlsZXNUb1VwZGF0ZVtpXTsK
KyAgICAgICAgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvID0gdGls
ZUluZm8udXBkYXRlSW5mbzsKIAotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQs
IHVwZGF0ZS5zb3VyY2VSZWN0LCB1cGRhdGUudGlsZVJlY3QsIGl0LT52YWx1ZSwgdXBkYXRlLm9m
ZnNldCk7Ci0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5n
U3RvcmUpOworICAgICAgICBTdXJmYWNlTWFwOjppdGVyYXRvciBzdXJmYWNlSXQgPSBtX3N1cmZh
Y2VzLmZpbmQoc3VyZmFjZVVwZGF0ZUluZm8uYXRsYXNJRCk7CisgICAgICAgIEFTU0VSVChzdXJm
YWNlSXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7CisKKyAgICAgICAgYmFja2luZ1N0b3JlLT51cGRh
dGVUaWxlKHRpbGVJbmZvLnRpbGVJRCwgc3VyZmFjZVVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGls
ZUluZm8udGlsZVJlY3QsIHN1cmZhY2VJdC0+dmFsdWUsIHN1cmZhY2VVcGRhdGVJbmZvLnN1cmZh
Y2VPZmZzZXQpOworICAgICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRk
KGJhY2tpbmdTdG9yZSk7CisgICAgfQogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZFN1cmZhY2U+IHN1cmZhY2UpCkBAIC01MDQsMTAgKzU2NiwxMCBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZwogICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmFwcGVuZChtX2ltYWdlQmFj
a2luZ3MudGFrZShpbWFnZUlEKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Ojphc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgR3JhcGhp
Y3NMYXllciogbGF5ZXIsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3ZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBo
aWNzTGF5ZXIqIGxheWVyLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7CiAj
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaWYgKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMu
Y29udGFpbnMoaWQpKQorICAgIGlmIChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGxh
eWVyKSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKQEAgLTUzNCwxMyArNTk2LDI1IEBAIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3Bl
cmF0aW9ucygpCiAgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7
CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpmbHVzaExheWVyQ2hhbmdlcyhj
b25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpjb21taXRTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYg
c3RhdGUpCiB7Ci0gICAgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQ
b3NpdGlvbjsKKyAgICBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHN0YXRlLnNj
cm9sbFBvc2l0aW9uOwogCiAgICAgLy8gU2luY2UgdGhlIGZyYW1lIGhhcyBub3cgYmVlbiByZW5k
ZXJlZCwgd2UgY2FuIHNhZmVseSB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgdW50aWwgdGhlIG5leHQg
bGF5b3V0LgogICAgIHNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpOwogCisgICAgaWYgKHN0YXRl
LnJvb3RDb21wb3NpdGluZ0xheWVyICE9IG1fcm9vdExheWVySUQpCisgICAgICAgIHNldFJvb3RM
YXllcklEKHN0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyKTsKKworICAgIGlmIChzdGF0ZS5iYWNr
Z3JvdW5kQ29sb3IgIT0gbV9iYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgIHNldEJhY2tncm91bmRD
b2xvcihzdGF0ZS5iYWNrZ3JvdW5kQ29sb3IpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdGF0ZS5pbWFnZXNUb1VwZGF0ZS5zaXplKCk7ICsraSkKKyAgICAgICAgdXBkYXRlSW1hZ2VC
YWNraW5nKHN0YXRlLmltYWdlc1RvVXBkYXRlW2ldLmZpcnN0LCBzdGF0ZS5pbWFnZXNUb1VwZGF0
ZVtpXS5zZWNvbmQpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5sYXllcnNU
b1VwZGF0ZS5zaXplKCk7ICsraSkKKyAgICAgICAgc2V0TGF5ZXJTdGF0ZShzdGF0ZS5sYXllcnNU
b1VwZGF0ZVtpXS5maXJzdCwgc3RhdGUubGF5ZXJzVG9VcGRhdGVbaV0uc2Vjb25kKTsKKwogICAg
IG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOwogICAgIGNv
bW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7CiAgICAgcmVtb3ZlUmVsZWFzZWRJ
bWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKQEAgLTYxNiwxMiArNjkwLDE2IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogICAgICAgICBtX2NsaWVu
dC0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBHcmFw
aGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZChHcmFwaGljc0xheWVyKiBncmFwaGlj
c0xheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0g
ICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGxheWVyID0gdG9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcihsYXllckJ5SUQoaWQpKTsKKyAgICBpZiAoIXN0YXRlLmFuaW1hdGlvbnNDaGFu
Z2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciog
bGF5ZXIgPSB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5ZXIpOworCiAj
aWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0
aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVW
YWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZy
YW1lcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUuYW5pbWF0aW9ucy5hbmlt
YXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
IGtleWZyYW1lcyA9IHN0YXRlLmFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1l
cygpOwogICAgICAgICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0
eVdlYmtpdEZpbHRlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3IgKHNpemVf
dCBqID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7ICsraikgewpAQCAtNjMwLDcgKzcwOCw3IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBHCiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKLSAgICBs
YXllci0+c2V0QW5pbWF0aW9ucyhhbmltYXRpb25zKTsKKyAgICBsYXllci0+c2V0QW5pbWF0aW9u
cyhzdGF0ZS5hbmltYXRpb25zKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKaW5kZXggOWM5MjFhNzRmNmMzZjBk
ODM3MWMwYjkyOWY3ODEyYjQ4OWNmZjVkMS4uZWQ1ZGJlMDFlZmI3YTM5M2E0MmU5Zjk5NTliOGIx
YjhlMWIzM2I3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuaApAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmVfaAogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUg
IkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1N0
YXRlLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgpAQCAtNDYsNyArNDYsNiBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTsK
LWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOwogY2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbTsK
IGNsYXNzIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvOwogY2xhc3MgVGV4dHVyZU1hcHBlckxheWVy
OwpAQCAtNjQsMzEgKzYzLDExIEBAIHB1YmxpYzoKIAogY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZT4sIHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBzdHJ1Y3Qg
VGlsZVVwZGF0ZSB7Ci0gICAgICAgIEludFJlY3Qgc291cmNlUmVjdDsKLSAgICAgICAgSW50UmVj
dCB0aWxlUmVjdDsKLSAgICAgICAgdWludDMyX3QgYXRsYXNJRDsKLSAgICAgICAgSW50UG9pbnQg
b2Zmc2V0OwotICAgICAgICBUaWxlVXBkYXRlKGNvbnN0IEludFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW50UmVjdCYgdGlsZSwgdWludDMyX3QgYXRsYXMsIGNvbnN0IEludFBvaW50JiBuZXdPZmZzZXQp
Ci0gICAgICAgICAgICA6IHNvdXJjZVJlY3Qoc291cmNlKQotICAgICAgICAgICAgLCB0aWxlUmVj
dCh0aWxlKQotICAgICAgICAgICAgLCBhdGxhc0lEKGF0bGFzKQotICAgICAgICAgICAgLCBvZmZz
ZXQobmV3T2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwogICAgIGV4cGxpY2l0
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZShDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQq
KTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKICAgICB2b2lkIHBh
aW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQs
IGNvbnN0IEZsb2F0UmVjdCYsIFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgPSAwKTsKICAgICB2
b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKICAg
ICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4pOwotICAgIHZvaWQg
c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKTsKLSAg
ICB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSNlbmRpZgotICAgIHZv
aWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklELCBpbnQgdmFsdWUpOwot
CiAgICAgdm9pZCBkZXRhY2goKTsKICAgICB2b2lkIGFwcGVuZFVwZGF0ZShjb25zdCBGdW5jdGlv
bjx2b2lkKCk+Jik7CiAKQEAgLTk3LDMxICs3NiwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXJn
ZUdMUmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CiAKKyAgICB2b2lkIGNv
bW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJik7CisKICAgICB2
b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwogICAg
IHZvaWQgZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0g
ICAgdm9pZCBzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOwotICAgIHZvaWQgc2V0
TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRl
ZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
Y29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0g
ICAgdm9pZCBzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJik7Ci0jZW5kaWYKKwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICB2b2lk
IGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IGZpbHRlcnMpIGNvbnN0OwogICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQg
aWQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7CiAgICAgdm9pZCByZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7CiAjZW5kaWYKIAotICAgIHZvaWQgY3JlYXRlVGlsZShD
b29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgZmxvYXQgc2NhbGUpOwotICAgIHZv
aWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7Ci0gICAg
dm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25z
dCBUaWxlVXBkYXRlJik7CiAgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxh
c0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOwogICAgIHZvaWQgcmVtb3ZlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0gICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcyhj
b25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CiAgICAgdm9pZCBjcmVhdGVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCB1cGRhdGVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1
cmZhY2U+KTsKICAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRM
YXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwogICAgIHZvaWQgc2V0QW5p
bWF0aW9uc0xvY2tlZChib29sKTsKICAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBD
b2xvciYpOwogICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7IG1fc2V0
RHJhd3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9CkBAIC0xMzEsNiArMTAyLDIzIEBAIHB1YmxpYzoK
ICNlbmRpZgogCiBwcml2YXRlOgorICAgIHZvaWQgc2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRM
YXllcklEKTsKKyAgICB2b2lkIHNldExheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25z
dCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworICAgIHZvaWQgc2V0TGF5ZXJDaGls
ZHJlbklmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSYpOworICAgIHZvaWQgdXBkYXRlVGlsZXNJZk5lZWRlZChHcmFwaGljc0xheWVyKiwg
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyAgICB2b2lkIGNyZWF0ZVRp
bGVzSWZOZWVkZWQoR3JhcGhpY3NMYXllciosIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlJik7CisgICAgdm9pZCByZW1vdmVUaWxlc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKKyAgICB2b2lkIHNldExheWVyRmlsdGVyc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworI2VuZGlmCisgICAgdm9pZCBz
ZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZChHcmFwaGljc0xheWVyKiwgY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2
b2lkIGNyZWF0ZUNhbnZhc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworICAgIHZvaWQgc3luY0NhbnZhc0lmTmVlZGVkKEdyYXBo
aWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworICAgIHZv
aWQgZGVzdHJveUNhbnZhc0lmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworI2VuZGlmCisgICAgdm9pZCBzZXRMYXllclJlcGFpbnRD
b3VudElmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSYpOworCiAgICAgR3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2xheWVycy5jb250YWlucyhpZCkpOwpA
QCAtMTU5LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVMYXllcihDb29yZGlu
YXRlZExheWVySUQpOwogICAgIHZvaWQgZGVsZXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsK
IAotICAgIHZvaWQgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihDb29yZGluYXRlZExheWVySUQs
IEdyYXBoaWNzTGF5ZXIqLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIGFz
c2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoR3JhcGhpY3NMYXllciosIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpOwogICAgIHZvaWQgcmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQo
KTsKICAgICB2b2lkIGVuc3VyZVJvb3RMYXllcigpOwogICAgIHZvaWQgY29tbWl0UGVuZGluZ0Jh
Y2tpbmdTdG9yZU9wZXJhdGlvbnMoKTsKQEAgLTE4NSw3ICsxNzMsNyBAQCBwcml2YXRlOgogICAg
IEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0b3Jl
c1dpdGhQZW5kaW5nQnVmZmVyczsKIAogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHR5
cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZExheWVySUQsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3Vy
ZmFjZUJhY2tpbmdTdG9yZT4gPiBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOworICAgIHR5cGVkZWYg
SGFzaE1hcDxHcmFwaGljc0xheWVyKiwgUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2lu
Z1N0b3JlPiA+IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA7CiAgICAgU3VyZmFjZUJhY2tpbmdTdG9y
ZU1hcCBtX3N1cmZhY2VCYWNraW5nU3RvcmVzOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjg2
NjA1MTY2N2M3YWJhZWI0MjUwN2ExZmExYzYyMzhlYzQ1YTc5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZS5oCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICogQ29weXJpZ2h0IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlX2gKKyNkZWZp
bmUgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU3Vy
ZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisj
aWYgRU5BQkxFKENTU19GSUxURVJTKQorI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKKyNl
bmRpZgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJm
YWNlVG9rZW4uaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3Jk
aW5hdGVkU3VyZmFjZTsKKwordHlwZWRlZiB1aW50MzJfdCBDb29yZGluYXRlZExheWVySUQ7Citl
bnVtIHsgSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCA9IDAgfTsKKwordHlwZWRlZiB1aW50NjRf
dCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEOworZW51bSB7IEludmFsaWRDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEID0gMCB9OworCitzdHJ1Y3QgVGlsZVVwZGF0ZUluZm8geworICAgIHVpbnQz
Ml90IHRpbGVJRDsKKyAgICBJbnRSZWN0IHRpbGVSZWN0OworICAgIFdlYkNvcmU6OlN1cmZhY2VV
cGRhdGVJbmZvIHVwZGF0ZUluZm87Cit9OworCitzdHJ1Y3QgVGlsZUNyZWF0aW9uSW5mbyB7Cisg
ICAgdWludDMyX3QgdGlsZUlEOworICAgIGZsb2F0IHNjYWxlOworfTsKKworc3RydWN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlIHsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7
CisgICAgICAgICAgICBib29sIHBvc2l0aW9uQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wg
YW5jaG9yUG9pbnRDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBzaXplQ2hhbmdlZDogMTsK
KyAgICAgICAgICAgIGJvb2wgdHJhbnNmb3JtQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wg
Y2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBjb250ZW50c1Jl
Y3RDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBvcGFjaXR5Q2hhbmdlZDogMTsKKyAgICAg
ICAgICAgIGJvb2wgc29saWRDb2xvckNoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29sIGRlYnVn
Qm9yZGVyQ29sb3JDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBkZWJ1Z0JvcmRlcldpZHRo
Q2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wgcmVwbGljYUNoYW5nZWQ6IDE7CisgICAgICAg
ICAgICBib29sIG1hc2tDaGFuZ2VkOiAxOworICAgICAgICAgICAgYm9vbCBpbWFnZUNoYW5nZWQ6
IDE7CisgICAgICAgICAgICBib29sIGZsYWdzQ2hhbmdlZDogMTsKKyAgICAgICAgICAgIGJvb2wg
YW5pbWF0aW9uc0NoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29sIGZpbHRlcnNDaGFuZ2VkOiAx
OworICAgICAgICAgICAgYm9vbCBjaGlsZHJlbkNoYW5nZWQ6IDE7CisgICAgICAgICAgICBib29s
IHJlcGFpbnRDb3VudENoYW5nZWQgOiAxOworICAgICAgICAgICAgYm9vbCBjYW52YXNDaGFuZ2Vk
OiAxOworICAgICAgICAgICAgYm9vbCBjYW52YXNTaG91bGRTd2FwQnVmZmVyczogMTsKKyAgICAg
ICAgfTsKKyAgICAgICAgdW5zaWduZWQgY2hhbmdlTWFzazsKKyAgICB9OworICAgIHVuaW9uIHsK
KyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGJvb2wgY29udGVudHNPcGFxdWUgOiAxOwor
ICAgICAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQgOiAxOworICAgICAgICAgICAgYm9vbCBjb250
ZW50c1Zpc2libGUgOiAxOworICAgICAgICAgICAgYm9vbCBiYWNrZmFjZVZpc2libGUgOiAxOwor
ICAgICAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsKKyAgICAgICAgICAgIGJvb2wgcHJl
c2VydmVzM0QgOiAxOworICAgICAgICAgICAgYm9vbCBpc1Jvb3RMYXllcjogMTsKKyAgICAgICAg
ICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0IDogMTsKKyAgICAgICAgICAgIGJvb2wgc2hvd0RlYnVn
Qm9yZGVycyA6IDE7CisgICAgICAgICAgICBib29sIHNob3dSZXBhaW50Q291bnRlciA6IDE7Cisg
ICAgICAgIH07CisgICAgICAgIHVuc2lnbmVkIGZsYWdzOworICAgIH07CisKKyAgICBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSgpCisgICAgICAgIDogY2hhbmdlTWFzaygwKQorICAgICAg
ICAsIGNvbnRlbnRzT3BhcXVlKGZhbHNlKQorICAgICAgICAsIGRyYXdzQ29udGVudChmYWxzZSkK
KyAgICAgICAgLCBjb250ZW50c1Zpc2libGUodHJ1ZSkKKyAgICAgICAgLCBiYWNrZmFjZVZpc2li
bGUodHJ1ZSkKKyAgICAgICAgLCBtYXNrc1RvQm91bmRzKGZhbHNlKQorICAgICAgICAsIHByZXNl
cnZlczNEKGZhbHNlKQorICAgICAgICAsIGlzUm9vdExheWVyKGZhbHNlKQorICAgICAgICAsIGZp
eGVkVG9WaWV3cG9ydChmYWxzZSkKKyAgICAgICAgLCBzaG93RGVidWdCb3JkZXJzKGZhbHNlKQor
ICAgICAgICAsIHNob3dSZXBhaW50Q291bnRlcihmYWxzZSkKKyAgICAgICAgLCBvcGFjaXR5KDAp
CisgICAgICAgICwgZGVidWdCb3JkZXJXaWR0aCgwKQorICAgICAgICAsIHJlcGxpY2EoSW52YWxp
ZENvb3JkaW5hdGVkTGF5ZXJJRCkKKyAgICAgICAgLCBtYXNrKEludmFsaWRDb29yZGluYXRlZExh
eWVySUQpCisgICAgICAgICwgaW1hZ2VJRChJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCkKKyAgICAgICAgLCBjYW52YXNGcm9udEJ1ZmZlcigwKQorICAgIHsKKyAgICB9CisKKyAgICBG
bG9hdFBvaW50IHBvczsKKyAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CisgICAgRmxvYXRT
aXplIHNpemU7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOworICAgIEludFJlY3QgY29udGVudHNS
ZWN0OworICAgIGZsb2F0IG9wYWNpdHk7CisgICAgQ29sb3Igc29saWRDb2xvcjsKKyAgICBDb2xv
ciBkZWJ1Z0JvcmRlckNvbG9yOworICAgIGZsb2F0IGRlYnVnQm9yZGVyV2lkdGg7CisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQorICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKKyNlbmRpZgor
ICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnM7CisgICAgVmVjdG9yPHVpbnQz
Ml90PiBjaGlsZHJlbjsKKyAgICBWZWN0b3I8VGlsZUNyZWF0aW9uSW5mbz4gdGlsZXNUb0NyZWF0
ZTsKKyAgICBWZWN0b3I8dWludDMyX3Q+IHRpbGVzVG9SZW1vdmU7CisgICAgQ29vcmRpbmF0ZWRM
YXllcklEIHJlcGxpY2E7CisgICAgQ29vcmRpbmF0ZWRMYXllcklEIG1hc2s7CisgICAgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEOworCisgICAgdW5zaWduZWQgcmVwYWludENvdW50
OworICAgIFZlY3RvcjxUaWxlVXBkYXRlSW5mbz4gdGlsZXNUb1VwZGF0ZTsKKworI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorICAgIEludFNpemUgY2FudmFzU2l6ZTsKKyAgICBHcmFwaGljc1N1
cmZhY2VUb2tlbiBjYW52YXNUb2tlbjsKKyAgICB1aW50MzJfdCBjYW52YXNGcm9udEJ1ZmZlcjsK
KyNlbmRpZgorfTsKKworc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSB7CisgICAgdWlu
dDMyX3Qgcm9vdENvbXBvc2l0aW5nTGF5ZXI7CisgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwor
ICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb247CisgICAgSW50U2l6ZSBjb250ZW50c1NpemU7
CisgICAgSW50UmVjdCBjb3ZlcmVkUmVjdDsKKworICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29vcmRp
bmF0ZWRMYXllcklELCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZT4gPiBsYXllcnNUb1Vw
ZGF0ZTsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+ID4gPiBpbWFnZXNUb1VwZGF0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KworI2VuZGlmIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCmluZGV4IDViNWI1N2E2ZWNi
MTAxZWY3NWIyOTE5MWI1NzUwN2JlZGRhMmY3NjUuLjM2OWUyMzlmOWIwYTI5OGNkOWZjY2U0MjNk
YTRkMmYxZTVhMjFhNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEltYWdlQmFja2luZy5oCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nX2gKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRl
ICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkTGF5ZXJJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYTJhMTJl
ZDNmNDZjMDg0MjNiNGI5YzRkYzkxNjU2OWYwMzhiNzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw4NSArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2lmbmRlZiBDb29yZGluYXRlZExheWVySW5mb19oCi0jZGVmaW5lIENvb3JkaW5hdGVkTGF5ZXJJ
bmZvX2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkNvbG9y
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiB1aW50MzJfdCBDb29yZGluYXRlZExheWVySUQ7
Ci1lbnVtIHsgSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCA9IDAgfTsKLQotdHlwZWRlZiB1aW50
NjRfdCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEOwotZW51bSB7IEludmFsaWRDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEID0gMCB9OwotCi0vLyBOT1RFOiBDb29yZGluYXRlZExheWVySW5mbyBz
aG91bGQgb25seSB1c2UgUE9EIHR5cGVzLCBhcyB0byBtYWtlIHNlcmlhbGl6YXRpb24gZmFzdGVy
Lgotc3RydWN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvIHsKLSAgICBDb29yZGluYXRlZExheWVySW5m
bygpCi0gICAgICAgIDogcmVwbGljYShJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKQotICAgICAg
ICAsIG1hc2soSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKLSAgICAgICAgLCBpbWFnZUlEKElu
dmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKQotICAgICAgICAsIG9wYWNpdHkoMCkKLSAg
ICAgICAgLCBkZWJ1Z0JvcmRlcldpZHRoKDApCi0gICAgICAgICwgZmxhZ3MoMCkgeyB9Ci0KLSAg
ICBDb29yZGluYXRlZExheWVySUQgcmVwbGljYTsKLSAgICBDb29yZGluYXRlZExheWVySUQgbWFz
azsKLSAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQ7Ci0KLSAgICBGbG9hdFBv
aW50IHBvczsKLSAgICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7Ci0gICAgRmxvYXRTaXplIHNp
emU7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOwotICAgIEludFJlY3QgY29udGVudHNSZWN0Owot
ICAgIGZsb2F0IG9wYWNpdHk7Ci0gICAgQ29sb3Igc29saWRDb2xvcjsKLSAgICBDb2xvciBkZWJ1
Z0JvcmRlckNvbG9yOwotICAgIGZsb2F0IGRlYnVnQm9yZGVyV2lkdGg7Ci0KLSAgICB1bmlvbiB7
Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDogMTsK
LSAgICAgICAgICAgIGJvb2wgZHJhd3NDb250ZW50IDogMTsKLSAgICAgICAgICAgIGJvb2wgY29u
dGVudHNWaXNpYmxlIDogMTsKLSAgICAgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmxlIDogMTsK
LSAgICAgICAgICAgIGJvb2wgbWFza3NUb0JvdW5kcyA6IDE7Ci0gICAgICAgICAgICBib29sIHBy
ZXNlcnZlczNEIDogMTsKLSAgICAgICAgICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7Ci0gICAgICAg
ICAgICBib29sIGZpeGVkVG9WaWV3cG9ydCA6IDE7Ci0gICAgICAgICAgICBib29sIHNob3dEZWJ1
Z0JvcmRlcnMgOiAxOwotICAgICAgICAgICAgYm9vbCBzaG93UmVwYWludENvdW50ZXIgOiAxOwot
ICAgICAgICB9OwotICAgICAgICB1bnNpZ25lZCBmbGFnczsKLSAgICB9OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
Ci0jZW5kaWYgLy8gQ29vcmRpbmF0ZWRMYXllckluZm9faApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJ
bmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAppbmRleCA2YWIzODRhMTFlYWE1ZWEyNTQwODEzYzcwMjVl
NWZjOGMxN2QzOTEwLi41YWYwNjlhMmJkN2E3YTdlMmVlNzdhYzViMGMyOTgzODNjY2VhYmE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaApAQCAtMjMsMTIg
KzIzLDEwIEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFN1cmZhY2VVcGRhdGVJbmZvIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTdXJmYWNlVXBkYXRlSW5mbyk7CiAKIHB1YmxpYzoKICAgICBTdXJmYWNlVXBkYXRlSW5mbygp
IHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2Vz
LnB5IGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CmluZGV4IGI2
OTBhMDE4OWJlMWYxYmViZWU0MTdmMDVlMmI5YjhiZDMwYWZjYzguLjg2ODA0YjEzNzA1YmE4Njll
MzA3MDdiYjRlZGFkOGJkODIwOGJhMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Njcmlw
dHMvd2Via2l0Mi9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtp
dDIvbWVzc2FnZXMucHkKQEAgLTM5OCw3ICszOTgsNiBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0
eXBlKToKICAgICBzcGVjaWFsX2Nhc2VzID0gewogICAgICAgICAnV1RGOjpTdHJpbmcnOiBbJzx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkNvbXBvc2l0aW9uVW5k
ZXJsaW5lJzogWyc8V2ViQ29yZS9FZGl0b3IuaD4nXSwKLSAgICAgICAgJ1dlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCc6IFsnPFdlYkNvcmUvQ29vcmRpbmF0ZWRMYXllckluZm8uaD4nXSwKICAg
ICAgICAgJ1dlYkNvcmU6OkdyYW1tYXJEZXRhaWwnOiBbJzxXZWJDb3JlL1RleHRDaGVja2VyQ2xp
ZW50Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyc6IFsn
PFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPiddLAogICAgICAgICAnV2ViQ29yZTo6
S2V5ZnJhbWVWYWx1ZUxpc3QnOiBbJzxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4nXSwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCmlu
ZGV4IDVhMDZkMTE2OGMyMjc2MDJjYTIwYzFiYzI4MGQxNzY5NzI2YTA1ODguLjgwYzcyNTk4ZTBh
ZDgwMDk3M2JjODliMzk1NjY3NWIxMjc3ZThkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENv
ZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApAQCAtMjksMTAgKzI5LDExIEBA
CiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAKICNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9BbmltYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9Db29yZGluYXRlZExheWVySW5mby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50M0QuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg+CkBAIC03Myw5ICs3NCw3IEBACiAjZW5k
aWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQog
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLSNlbmRpZgogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAK
QEAgLTgxNSwyNCArODE0LDI2MSBAQCBib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhp
Y3NTdXJmYWNlVG9rZW4+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZAogfQogI2VuZGlm
CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxDb29yZGluYXRlZExheWVySW5mbz46OmVuY29kZShBcmd1
bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBjb29yZGlu
YXRlZExheWVySW5mbykKK3ZvaWQgQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmVu
Y29kZShBcmd1bWVudEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiBz
dXJmYWNlVXBkYXRlSW5mbykKIHsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPENvb3JkaW5hdGVk
TGF5ZXJJbmZvPjo6ZW5jb2RlKGVuY29kZXIsIGNvb3JkaW5hdGVkTGF5ZXJJbmZvKTsKKyAgICBT
aW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZW5jb2RlKGVuY29kZXIsIHN1
cmZhY2VVcGRhdGVJbmZvKTsKIH0KIAotYm9vbCBBcmd1bWVudENvZGVyPENvb3JkaW5hdGVkTGF5
ZXJJbmZvPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgQ29vcmRpbmF0ZWRMYXll
ckluZm8mIGNvb3JkaW5hdGVkTGF5ZXJJbmZvKQorYm9vbCBBcmd1bWVudENvZGVyPFN1cmZhY2VV
cGRhdGVJbmZvPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgU3VyZmFjZVVwZGF0
ZUluZm8mIHN1cmZhY2VVcGRhdGVJbmZvKQogewotICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENv
ZGVyPENvb3JkaW5hdGVkTGF5ZXJJbmZvPjo6ZGVjb2RlKGRlY29kZXIsIGNvb3JkaW5hdGVkTGF5
ZXJJbmZvKTsKKyAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5m
bz46OmRlY29kZShkZWNvZGVyLCBzdXJmYWNlVXBkYXRlSW5mbyk7CiB9CiAKLXZvaWQgQXJndW1l
bnRDb2RlcjxTdXJmYWNlVXBkYXRlSW5mbz46OmVuY29kZShBcmd1bWVudEVuY29kZXImIGVuY29k
ZXIsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiBzdXJmYWNlVXBkYXRlSW5mbykKK3ZvaWQgQXJn
dW1lbnRDb2RlcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZT46OmVuY29kZShBcmd1bWVu
dEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBz
dGF0ZSkKIHsKLSAgICBTaW1wbGVBcmd1bWVudENvZGVyPFN1cmZhY2VVcGRhdGVJbmZvPjo6ZW5j
b2RlKGVuY29kZXIsIHN1cmZhY2VVcGRhdGVJbmZvKTsKKyAgICBlbmNvZGVyIDw8IHN0YXRlLmNo
YW5nZU1hc2s7CisKKyAgICBpZiAoc3RhdGUuZmxhZ3NDaGFuZ2VkKQorICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLmZsYWdzOworCisgICAgaWYgKHN0YXRlLnBvc2l0aW9uQ2hhbmdlZCkKKyAgICAg
ICAgZW5jb2RlciA8PCBzdGF0ZS5wb3M7CisKKyAgICBpZiAoc3RhdGUuYW5jaG9yUG9pbnRDaGFu
Z2VkKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmFuY2hvclBvaW50OworCisgICAgaWYgKHN0
YXRlLnNpemVDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNpemU7CisKKyAgICBp
ZiAoc3RhdGUudHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS50cmFu
c2Zvcm07CisKKyAgICBpZiAoc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2VkKQorICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtOworCisgICAgaWYgKHN0YXRlLmNv
bnRlbnRzUmVjdENoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuY29udGVudHNSZWN0
OworCisgICAgaWYgKHN0YXRlLm9wYWNpdHlDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IHN0
YXRlLm9wYWNpdHk7CisKKyAgICBpZiAoc3RhdGUuc29saWRDb2xvckNoYW5nZWQpCisgICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuc29saWRDb2xvcjsKKworICAgIGlmIChzdGF0ZS5kZWJ1Z0JvcmRl
ckNvbG9yQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5kZWJ1Z0JvcmRlckNvbG9y
OworCisgICAgaWYgKHN0YXRlLmRlYnVnQm9yZGVyV2lkdGhDaGFuZ2VkKQorICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRlLmRlYnVnQm9yZGVyV2lkdGg7CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CisgICAgaWYgKHN0YXRlLmZpbHRlcnNDaGFuZ2VkKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRl
LmZpbHRlcnM7CisjZW5kaWYKKworICAgIGlmIChzdGF0ZS5hbmltYXRpb25zQ2hhbmdlZCkKKyAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5hbmltYXRpb25zOworCisgICAgaWYgKHN0YXRlLmNoaWxk
cmVuQ2hhbmdlZCkKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5jaGlsZHJlbjsKKworICAgIGVu
Y29kZXIgPDwgc3RhdGUudGlsZXNUb0NyZWF0ZTsKKyAgICBlbmNvZGVyIDw8IHN0YXRlLnRpbGVz
VG9SZW1vdmU7CisKKyAgICBpZiAoc3RhdGUucmVwbGljYUNoYW5nZWQpCisgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGUucmVwbGljYTsKKworICAgIGlmIChzdGF0ZS5tYXNrQ2hhbmdlZCkKKyAgICAg
ICAgZW5jb2RlciA8PCBzdGF0ZS5tYXNrOworCisgICAgaWYgKHN0YXRlLmltYWdlQ2hhbmdlZCkK
KyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5pbWFnZUlEOworCisgICAgaWYgKHN0YXRlLnJlcGFp
bnRDb3VudENoYW5nZWQpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUucmVwYWludENvdW50Owor
CisgICAgZW5jb2RlciA8PCBzdGF0ZS50aWxlc1RvVXBkYXRlOworCisjaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCisgICAgaWYgKHN0YXRlLmNhbnZhc0NoYW5nZWQpIHsKKyAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0ZS5jYW52YXNTaXplOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNhbnZhc1Rv
a2VuOworICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLmNhbnZhc0Zyb250QnVmZmVyOworICAgIH0K
KyNlbmRpZgogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8U3VyZmFjZVVwZGF0ZUluZm8+OjpkZWNv
ZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBTdXJmYWNlVXBkYXRlSW5mbyYgc3VyZmFjZVVw
ZGF0ZUluZm8pCitib29sIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3Rh
dGU+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZSYgc3RhdGUpCiB7Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8U3Vy
ZmFjZVVwZGF0ZUluZm8+OjpkZWNvZGUoZGVjb2Rlciwgc3VyZmFjZVVwZGF0ZUluZm8pOworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUuY2hhbmdlTWFzaykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChzdGF0ZS5mbGFnc0NoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0
YXRlLmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLnBvc2l0
aW9uQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUucG9zKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKHN0YXRlLmFuY2hvclBvaW50Q2hhbmdlZCAmJiAhZGVjb2Rlci5k
ZWNvZGUoc3RhdGUuYW5jaG9yUG9pbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoc3RhdGUuc2l6ZUNoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLnNpemUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3RhdGUudHJhbnNmb3JtQ2hhbmdlZCAmJiAh
ZGVjb2Rlci5kZWNvZGUoc3RhdGUudHJhbnNmb3JtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKHN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNv
ZGUoc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoc3RhdGUuY29udGVudHNSZWN0Q2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUu
Y29udGVudHNSZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLm9w
YWNpdHlDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5vcGFjaXR5KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLnNvbGlkQ29sb3JDaGFuZ2VkICYmICFkZWNv
ZGVyLmRlY29kZShzdGF0ZS5zb2xpZENvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKHN0YXRlLmRlYnVnQm9yZGVyQ29sb3JDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShz
dGF0ZS5kZWJ1Z0JvcmRlckNvbG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KHN0YXRlLmRlYnVnQm9yZGVyV2lkdGhDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5k
ZWJ1Z0JvcmRlcldpZHRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKENT
U19GSUxURVJTKQorICAgIGlmIChzdGF0ZS5maWx0ZXJzQ2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNv
ZGUoc3RhdGUuZmlsdGVycykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCisgICAg
aWYgKHN0YXRlLmFuaW1hdGlvbnNDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5hbmlt
YXRpb25zKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLmNoaWxkcmVu
Q2hhbmdlZCAmJiAhZGVjb2Rlci5kZWNvZGUoc3RhdGUuY2hpbGRyZW4pKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLnRpbGVzVG9DcmVhdGUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRl
LnRpbGVzVG9SZW1vdmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3RhdGUu
cmVwbGljYUNoYW5nZWQgJiYgIWRlY29kZXIuZGVjb2RlKHN0YXRlLnJlcGxpY2EpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3RhdGUubWFza0NoYW5nZWQgJiYgIWRlY29kZXIu
ZGVjb2RlKHN0YXRlLm1hc2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc3Rh
dGUuaW1hZ2VDaGFuZ2VkICYmICFkZWNvZGVyLmRlY29kZShzdGF0ZS5pbWFnZUlEKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0YXRlLnJlcGFpbnRDb3VudENoYW5nZWQgJiYg
IWRlY29kZXIuZGVjb2RlKHN0YXRlLnJlcGFpbnRDb3VudCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUudGlsZXNUb1VwZGF0ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlmIChz
dGF0ZS5jYW52YXNDaGFuZ2VkKSB7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGUu
Y2FudmFzU2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShzdGF0ZS5jYW52YXNUb2tlbikpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5jYW52YXNGcm9udEJ1ZmZl
cikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBBcmd1bWVudENvZGVyPFRpbGVVcGRhdGVJbmZvPjo6ZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgVGlsZVVwZGF0ZUluZm8mIHVwZGF0ZUlu
Zm8pCit7CisgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxUaWxlVXBkYXRlSW5mbz46OmVuY29kZShl
bmNvZGVyLCB1cGRhdGVJbmZvKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPFRpbGVVcGRhdGVJ
bmZvPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgVGlsZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCit7CisgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8VGlsZVVwZGF0ZUlu
Zm8+OjpkZWNvZGUoZGVjb2RlciwgdXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQgQXJndW1lbnRDb2Rl
cjxUaWxlQ3JlYXRpb25JbmZvPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29u
c3QgVGlsZUNyZWF0aW9uSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBTaW1wbGVBcmd1bWVudENv
ZGVyPFRpbGVDcmVhdGlvbkluZm8+OjplbmNvZGUoZW5jb2RlciwgdXBkYXRlSW5mbyk7Cit9CisK
K2Jvb2wgQXJndW1lbnRDb2RlcjxUaWxlQ3JlYXRpb25JbmZvPjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgVGlsZUNyZWF0aW9uSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICByZXR1
cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxUaWxlQ3JlYXRpb25JbmZvPjo6ZGVjb2RlKGRlY29kZXIs
IHVwZGF0ZUluZm8pOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8Q29vcmRpbmF0ZWRHcmFwaGlj
c1N0YXRlPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBlbmNvZGVyIDw8IHN0YXRlLnJvb3RDb21w
b3NpdGluZ0xheWVyOworICAgIGVuY29kZXIgPDwgc3RhdGUuYmFja2dyb3VuZENvbG9yOworICAg
IGVuY29kZXIgPDwgc3RhdGUuc2Nyb2xsUG9zaXRpb247CisgICAgZW5jb2RlciA8PCBzdGF0ZS5j
b250ZW50c1NpemU7CisgICAgZW5jb2RlciA8PCBzdGF0ZS5jb3ZlcmVkUmVjdDsKKyAgICBlbmNv
ZGVyIDw8IHN0YXRlLmxheWVyc1RvVXBkYXRlOworCisgICAgLy8gV2UgbmVlZCB0byBlbmNvZGUg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgcmlnaHQgYWZ0ZXIgaXQncyBjcmVhdGlvbi4K
KyAgICAvLyBUaGF0J3Mgd2h5IHdlIGNhbm5vdCB1c2Ugc2ltcGxlIHN0ZDo6cGFpciBlbmNvZGVy
LgorICAgIGVuY29kZXIgPDwgc3RhdGUuaW1hZ2VzVG9VcGRhdGUuc2l6ZSgpOworCisgICAgdHlw
ZWRlZiBWZWN0b3I8c3RkOjpwYWlyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+ID4gPiBTdXJmYWNlVXBkYXRlUGFpclZlY3RvcjsKKyAgICBTdXJm
YWNlVXBkYXRlUGFpclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RhdGUuaW1hZ2VzVG9V
cGRhdGUuZW5kKCk7CisgICAgZm9yIChTdXJmYWNlVXBkYXRlUGFpclZlY3Rvcjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBzdGF0ZS5pbWFnZXNUb1VwZGF0ZS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKworICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2UqIHdlYkNvb3JkaW5hdGVkU3VyZmFj
ZSA9IHN0YXRpY19jYXN0PFdlYkNvb3JkaW5hdGVkU3VyZmFjZSo+KGl0LT5zZWNvbmQuZ2V0KCkp
OworICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7CisgICAgICAg
IGlmICghd2ViQ29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBlbmNvZGVyIDw8IGl0LT5maXJzdDsKKyAgICAgICAg
ZW5jb2RlciA8PCBoYW5kbGU7CisgICAgfQorfQorCitib29sIEFyZ3VtZW50Q29kZXI8Q29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgQ29v
cmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHN0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5iYWNrZ3JvdW5kQ29sb3IpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRlLnNjcm9sbFBvc2l0
aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
dGF0ZS5jb250ZW50c1NpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHN0YXRlLmNvdmVyZWRSZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0ZS5sYXllcnNUb1VwZGF0ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHNpemVfdCBzaXplT2ZJbWFnZXNUb1VwZGF0ZTsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHNpemVPZkltYWdlc1RvVXBkYXRlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplT2ZJbWFnZXNUb1VwZGF0
ZTsgaSsrKSB7CisgICAgICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRDsKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpbWFnZUlEKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGU7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlID0gV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKTsKKyAgICAgICAgc3RhdGUuaW1hZ2Vz
VG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGltYWdlSUQsIHN1cmZhY2UucmVsZWFzZSgp
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIENvcmVJ
UEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
LmgKaW5kZXggOGU3ZGVlZmIzZmVhMTdmOTg1ZTU4M2U3MzEwM2VmOGJhYzI5NTExZS4uZDQyYWU3
OWRmMjRhMTAxZTM0NTBhMzU2NzE4MzIxMDIzYzk1MmJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3Vt
ZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKQEAgLTMyLDEzICszMiwxNiBA
QAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK3N0
cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZTsKK3N0cnVjdCBDb29yZGluYXRlZEdy
YXBoaWNzU3RhdGU7CiBjbGFzcyBGbG9hdFBvaW50M0Q7CiBjbGFzcyBHcmFwaGljc0xheWVyQW5p
bWF0aW9uOwogY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7CiBjbGFzcyBTdXJmYWNlVXBk
YXRlSW5mbzsKK3N0cnVjdCBUaWxlQ3JlYXRpb25JbmZvOworc3RydWN0IFRpbGVVcGRhdGVJbmZv
OwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25z
Owotc3RydWN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvOwogc3RydWN0IExlbmd0aDsKIAogI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKQEAgLTEwNywxNiArMTEwLDMxIEBAIHRlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4+IHsKIH07CiAjZW5k
aWYKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySW5mbz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbyYpOwotICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbyYpOwot
fTsKLQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpTdXJmYWNlVXBk
YXRlSW5mbz4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25z
dCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShB
cmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwogfTsKIAordGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZT4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworICAgIHN0YXRp
YyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJTdGF0ZSYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpUaWxlVXBkYXRlSW5mbz4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpUaWxlVXBkYXRlSW5mbyYpOworICAgIHN0YXRpYyBi
b29sIGRlY29kZShBcmd1bWVudERlY29kZXImLCBXZWJDb3JlOjpUaWxlVXBkYXRlSW5mbyYpOwor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUaWxlQ3JlYXRp
b25JbmZvPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0
IFdlYkNvcmU6OlRpbGVDcmVhdGlvbkluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyJiwgV2ViQ29yZTo6VGlsZUNyZWF0aW9uSW5mbyYpOworfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3Rh
dGU+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciYsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOwor
fTsKKwogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwogCiAjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuY3BwCmluZGV4IGM1ZjdlODc1YTZkOGJjZmRhNGI3MDM1ZTQxOTBjMmU1NTNlNzM2
YmEuLjAxOGJkMTdjNWI0MjkxZDFiNDc0N2I4ZDY1MGE0MGE1NDk2NzVlZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKQEAgLTI3
LDcgKzI3LDcgQEAKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRl
ICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db29y
ZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFj
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVwZGF0ZUluZm8uaD4KIApAQCAtNjIsMjIg
KzYyLDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRh
dGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3QKICAgICBtX3NjZW5lLT5hcHBlbmRVcGRh
dGUoZnVuY3Rpb24pOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpj
cmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6Y3JlYXRlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCB1cGRh
dGVJbmZvLnNjYWxlRmFjdG9yKSk7Ci0gICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRp
bGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJ
RCwgdGlsZUlELCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OlRpbGVVcGRhdGUodXBkYXRlSW5m
by51cGRhdGVSZWN0LCB0aWxlUmVjdCwgdXBkYXRlSW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1
cmZhY2VPZmZzZXQpKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnJlbW92ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6cmVtb3ZlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0K
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVp
bnQzMl90IGF0bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5k
bGUpCiB7CiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpjcmVhdGVVcGRhdGVBdGxhcywgbV9zY2VuZS5nZXQoKSwgYXRsYXNJRCwgV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkpOwpAQCAtOTgsMjggKzgyLDYgQEAgdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3Qg
VmVjdG9yPENvb3JkaW4KICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmRlbGV0ZUxheWVycywgbV9zY2VuZS5nZXQoKSwgaWRzKSk7CiB9CiAKLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OnNldFJvb3RMYXllcklELCBtX3NjZW5lLmdldCgpLCBpZCkpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xh
eWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5m
byYgaW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OnNldExheWVyU3RhdGUsIG1fc2NlbmUuZ2V0KCksIGlkLCBpbmZvKSk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGls
ZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVy
SUQ+JiBjaGlsZHJlbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRyZW4sIG1fc2NlbmUuZ2V0KCksIGlkLCBjaGlsZHJl
bikpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXll
cklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzLCBt
X3NjZW5lLmdldCgpLCBpZCwgZmlsdGVycykpOwotfQotI2VuZGlmCi0KICNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKIHsKQEAgLTEzMSwxNSArOTMsMTIgQEAgdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQg
aWQsIGNvbnN0IEN1c3QKIH0KICNlbmRpZgogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwg
Y29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRSZWN0JiBjb3ZlcmVkUmVjdCkK
K3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNvbW1pdENvb3JkaW5hdGVkR3Jh
cGhpY3NTdGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIGdyYXBoaWNzU3RhdGUp
CiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpm
bHVzaExheWVyQ2hhbmdlcywgbV9zY2VuZS5nZXQoKSwgc2Nyb2xsUG9zaXRpb24pKTsKKyAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNjZW5l
U3RhdGUsIG1fc2NlbmUuZ2V0KCksIGdyYXBoaWNzU3RhdGUpKTsKICAgICB1cGRhdGVWaWV3cG9y
dCgpOwogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbnRlbnRzU2l6ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGNv
dmVyZWRSZWN0KTsKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+ZGlkUmVuZGVyRnJh
bWUoZ3JhcGhpY3NTdGF0ZS5jb250ZW50c1NpemUsIGdyYXBoaWNzU3RhdGUuY292ZXJlZFJlY3Qp
OwogI2VuZGlmCiB9CiAKQEAgLTE2MywxMSArMTIyLDYgQEAgdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJl
bW92ZUltYWdlQmFja2luZywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCkpOwogfQogCi12b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0
ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNl
dExheWVyQW5pbWF0aW9ucywgbV9zY2VuZS5nZXQoKSwgaWQsIGFuaW1hdGlvbnMpKTsKLX0KLQog
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QW5pbWF0aW9uc0xvY2tlZChi
b29sIGxvY2tlZCkKIHsKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnNldEFuaW1hdGlvbnNMb2NrZWQsIG1fc2NlbmUuZ2V0KCksIGxvY2tlZCkpOwpA
QCAtMjA0LDI5ICsxNTgsNiBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojph
bmltYXRpb25GcmFtZVJlYWR5KCkKIH0KICNlbmRpZgogCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBjb25zdCBHcmFw
aGljc1N1cmZhY2VUb2tlbiYgdG9rZW4pCi17Ci0gICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBz
dXJmYWNlRmxhZ3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdy
YXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQ2FudmFzLCBtX3NjZW5lLmdldCgpLCBp
ZCwgY2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFzU2l6ZSwgc3VyZmFj
ZUZsYWdzLCB0b2tlbikpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVy
KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
c3luY0NhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGZyb250QnVmZmVyKSk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6ZGVzdHJveUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQpKTsKLX0KLSNlbmRpZgot
Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllclJlcGFpbnRDb3Vu
dChDb29yZGluYXRlZExheWVySUQgaWQsIGludCB2YWx1ZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyUmVwYWludENvdW50LCBt
X3NjZW5lLmdldCgpLCBpZCwgdmFsdWUpKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICAgICBtX2RyYXdpbmdBcmVhUHJv
eHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cGFnZUlEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5LmgKaW5kZXggOTQ2YjM5OTIwZDI4NDg4M2E4NDRhN2YxOTY2OTExYjA4NjllZjlmNS4u
ZDE2OGJjZGNkYTdhYmFjZGFhOTFhZjU4MjIzZGJjMDdiZTRiZmJiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCkBAIC00MSw3ICs0MSw4
IEBACiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBDb29yZGluYXRlZExheWVySW5mbzsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlOworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlOwogY2xhc3MgU3VyZmFjZVVwZGF0
ZUluZm87CiB9CiAKQEAgLTUzLDQzICs1NCwzMSBAQCBjbGFzcyBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbAog
cHVibGljOgogICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdp
bmdBcmVhUHJveHkqKTsKICAgICB2aXJ0dWFsIH5Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eSgpOwotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICB2
b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJDb3JlOjpDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0jaWYgRU5B
QkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
Jik7Ci0jZW5kaWYKKworICAgIC8vIE1lc3NhZ2VzIEZyb20gQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0CisgICAgdm9pZCBjcmVhdGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXll
cnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKICNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCiAgICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBp
ZCwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKICAgICB2b2lkIHJl
bW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKICNlbmRpZgotICAgIHZvaWQgY3JlYXRl
Q29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RD4mKTsKLSAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdM
YXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQpOwotICAgIHZvaWQgc2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsK
LSAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OlN1cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgcmVt
b3ZlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlEKTsKICAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7CiAgICAgdm9pZCByZW1vdmVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lEKTsKICAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhXZWJD
b3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2b2lkIHVwZGF0ZUltYWdlQmFj
a2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJDb29yZGlu
YXRlZFN1cmZhY2U6OkhhbmRsZSYpOwogICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50
cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKICAgICB2b2lkIHJlbW92ZUlt
YWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0ZUNhbnZhcyhXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpHcmFw
aGljc1N1cmZhY2VUb2tlbiYpOwotICAgIHZvaWQgc3luY0NhbnZhcyhXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52
YXMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKLSNlbmRpZgotICAgIHZvaWQgc2V0TGF5
ZXJSZXBhaW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBpbnQgdmFsdWUpOwot
ICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lKCkgY29uc3QgeyByZXR1cm4gbV9zY2VuZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0TGF5
ZXJBbmltYXRpb25zKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKKworICAgIHZvaWQgY29tbWl0Q29vcmRpbmF0ZWRH
cmFwaGljc1N0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOwog
ICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKICNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCiAgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKICNlbmRp
ZgogICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CiAK
KyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rvcik7CisgICAgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUo
KSBjb25zdCB7IHJldHVybiBtX3NjZW5lLmdldCgpOyB9CisKICAgICAvLyBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmVDbGllbnQgTWV0aG9kcy4KICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkZyYW1lUmVhZHkoKSBPVkVSUklERTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkubWVzc2FnZXMuaW4KaW5kZXggNWNlMTI4MzZiZjIzZjBkMGJjNjg3NDc4N2YxNjFiMmE4
OTQyNTg2Yy4uM2E3NjRmMTNjN2EyZTE0NDYyNjFhZjg2NWI3ZmQ2MDBkMWU3ZTY4MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkubWVzc2FnZXMuaW4KQEAgLTE5LDQzICsxOSwyOSBAQAogCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQogbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgewot
ICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBpZCwgV2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvKQotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJl
bih1aW50MzJfdCBpZCwgVmVjdG9yPHVpbnQzMl90PiBjaGlsZHJlbikKLSNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi0gICAgU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnModWludDMyX3QgaWQsIFdl
YkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVycykKLSNlbmRpZgorCisgICAgQ29tbWl0Q29v
cmRpbmF0ZWRHcmFwaGljc1N0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBz
dGF0ZSkKKworICAgIENyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRz
KQorICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRzKQorCiAj
aWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50
IGlkLCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbykKICAgICBS
ZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKICNlbmRpZgotICAgIFNldFJvb3RDb21w
b3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQotICAgIENyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZl
Y3Rvcjx1aW50MzJfdD4gaWRzKQotICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1
aW50MzJfdD4gaWRzKQotICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OlN1cmZh
Y2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgVXBkYXRlVGlsZUZvckxheWVyKHVpbnQzMl90
IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2Vi
Q29yZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxlRm9yTGF5
ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQogICAgIENyZWF0ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5k
bGUgaGFuZGxlKQogICAgIFJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCiAgICAg
Q3JlYXRlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQpCiAgICAgVXBkYXRlSW1hZ2VCYWNr
aW5nKHVpbnQ2NF90IGltYWdlSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5k
bGUgaGFuZGxlKQogICAgIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHModWludDY0X3QgaW1hZ2VJ
RCkKICAgICBSZW1vdmVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCkKLSAgICBEaWRSZW5k
ZXJGcmFtZShXZWJDb3JlOjpGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRT
aXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50UmVjdCBjb3ZlcmVkUmVjdCkKLSAgICBTZXRM
YXllckFuaW1hdGlvbnModWludDMyX3QgaWQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRp
b25zIGFuaW1hdGlvbnMpCisKICAgICBTZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQog
CiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIFJlcXVlc3RBbmltYXRp
b25GcmFtZSgpCiAjZW5kaWYKIAotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIENyZWF0
ZUNhbnZhcyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52YXNTaXplLCBXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbikKLSAgICBTeW5jQ2FudmFzKHVpbnQzMl90IGlk
LCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKLSAgICBEZXN0cm95Q2FudmFzKHVpbnQzMl90IGlkKQot
I2VuZGlmCi0KLSAgICBTZXRMYXllclJlcGFpbnRDb3VudCh1aW50MzJfdCBsYXllcklELCBpbnQg
dmFsdWUpCi0KICAgICBTZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29yZTo6Q29sb3IgY29sb3IpCiB9
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IDdhY2VmMzBiMzJjOTU0MjJlNGRjNTcxYjE1N2M5ZTBj
NGUxZjMyZjAuLjQ1ZmQzOTVhMTA5NjY4YTE4MTIwZTcwZGIwZmE0NjQyNGY4NWQyZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmNwcApAQCAtMzAxLDkgKzMwMSwxNSBAQCBib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKICAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUp
IHsKICAgICAgICAgZGlkU3luYyA9IHRydWU7CiAKLSAgICAgICAgSW50U2l6ZSBjb250ZW50c1Np
emUgPSByb3VuZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKSk7
Ci0gICAgICAgIEludFJlY3QgY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3ZlclJlY3QoKTsKLSAgICAg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6RGlkUmVuZGVyRnJhbWUobV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCksIGNvbnRl
bnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAgICAgICAgbV9zdGF0ZS5jb250ZW50c1NpemUgPSBy
b3VuZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKSk7CisgICAg
ICAgIG1fc3RhdGUuY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3ZlclJlY3QoKTsKKyAgICAgICAgbV9z
dGF0ZS5zY3JvbGxQb3NpdGlvbiA9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpOwor
CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OkNvbW1pdENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZShtX3N0YXRlKSk7CisKKyAg
ICAgICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5jbGVhcigpOworICAgICAgICBtX3N0YXRlLmlt
YWdlc1RvVXBkYXRlLmNsZWFyKCk7CisKICAgICAgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0g
dHJ1ZTsKICAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKICAgICB9IGVsc2UKQEAg
LTM1Niw2NiArMzYyLDQyIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFs
aXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpCiAgICAgaWYgKG1fZGlkSW5pdGlhbGl6
ZVJvb3RDb21wb3NpdGluZ0xheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRSb290Q29t
cG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQo
KSktPmlkKCkpKTsKKyAgICBtX3N0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyID0gdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpOwogICAgIG1fZGlkSW5p
dGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKICAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJT
dGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBp
bmZvKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGlu
Z0xheWVyU3RhdGUoaWQsIGluZm8pKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9y
PENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQsIGNoaWxkcmVuKSk7
Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVy
KiBjYW52YXNQbGF0Zm9ybUxheWVyKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbiA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPmdy
YXBoaWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgSW50U2l6ZSBjYW52YXNTaXplID0gY2FudmFzUGxh
dGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVDYW52YXMoaWQsIGNh
bnZhc1NpemUsIHRva2VuKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
eW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxh
dGZvcm1MYXllcikKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0
ZShDb29yZGluYXRlZExheWVySUQgaWQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBz
dGF0ZSkKIHsKICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgdWludDMyX3QgZnJv
bnRCdWZmZXIgPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpTeW5jQ2FudmFzKGlkLCBmcm9udEJ1ZmZlcikpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0g
ICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47CiAKLSAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveUNhbnZhcyhpZCkpOwotfQorI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKKyAgICBwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKHN0YXRlKTsK
ICNlbmRpZgogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJSZXBhaW50
Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0TGF5ZXJS
ZXBhaW50Q291bnQoaWQsIHZhbHVlKSk7CisgICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5hcHBl
bmQoc3RkOjptYWtlX3BhaXIoaWQsIHN0YXRlKSk7CiB9CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyRmlsdGVycyhDb29y
ZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAg
ICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94aWVzKGZpbHRlcnMpOwotI2VuZGlmCi0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKK3ZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpwcmVwYXJlQ3VzdG9tRmlsdGVyUHJveGllc0lmTmVlZGVkKENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoc3RhdGUuYW5pbWF0
aW9uc0NoYW5nZWQpIHsKKyAgICAgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFjdGl2ZUFu
aW1hdGlvbnMgPSBzdGF0ZS5hbmltYXRpb25zOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYWN0aXZlQW5pbWF0aW9u
cy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7CisgICAgICAgICAgICBpZiAoa2V5ZnJh
bWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5
ZnJhbWVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0
aW9uVmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9u
VmFsdWUqPihrZXlmcmFtZXMuYXQoaSkpOworICAgICAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3hpZXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzdGF0ZS5maWx0ZXJzQ2hhbmdlZCkKKyAgICAg
ICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhzdGF0ZS5maWx0ZXJzKTsKIH0KLSNl
bmRpZgogCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKIHsKICAgICAvLyBXZSBuZWVkIHRvIGNyZWF0ZSB0aGUgV2ViQ3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5IG9iamVjdHMgYmVmb3JlIHdlIGdldCB0byBzZXJpYWxpemUgdGhl
CkBAIC00NjYsNyArNDQ4LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpc2Nv
bm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpCiAgICAgZm9yICg7IGl0ZXIgIT0gbV9jdXN0b21G
aWx0ZXJQcm9ncmFtcy5lbmQoKTsgKytpdGVyKQogICAgICAgICAoKml0ZXIpLT5zZXRDbGllbnQo
MCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQURFUlMpCiAKIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXRhY2hMYXllcihDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqIGxheWVyKQogewpAQCAtNTg1LDcgKzU2Nyw4IEBAIGJvb2wgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Ojp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFn
CiAgICAgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlOwogICAgIGlmICghd2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OlVwZGF0ZUltYWdlQmFja2luZyhpbWFnZUlELCBoYW5kbGUpKTsKKworICAg
IG1fc3RhdGUuaW1hZ2VzVG9VcGRhdGUuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGltYWdlSUQsIGNv
b3JkaW5hdGVkU3VyZmFjZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC02NjgsMjYgKzY1
MSw2IEBAIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHRpbGVSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRl
SW5mbykpOwotfQotCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlVGlsZShD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3Jl
OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
dGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZVRp
bGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5
ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92
ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQpKTsKLX0KLQogYm9vbCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQ
dHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjb29yZGluYXRlZFN1cmZhY2UpCiB7CiAgICAgV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlKiB3ZWJDb29yZGluYXRlZFN1cmZhY2UgPSBzdGF0aWNfY2FzdDxXZWJD
b29yZGluYXRlZFN1cmZhY2UqPihjb29yZGluYXRlZFN1cmZhY2UuZ2V0KCkpOwpAQCAtNzEwLDI1
ICs2NzMsNiBAQCBXZWJDb3JlOjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp2
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKICAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNS
ZWN0OwogfQogCi0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRMYXllckFuaW1h
dGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmlt
YXRpb25zJiBhbmltYXRpb25zKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25zID0gYW5pbWF0aW9ucy5n
ZXRBY3RpdmVBbmltYXRpb25zKCk7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1h
dGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOwotICAgICAgICBpZiAoa2V5ZnJh
bWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1lcy5z
aXplKCk7ICsraikgewotICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqIGZp
bHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPihrZXlm
cmFtZXMuYXQoaSkpOwotICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGll
cygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
U2V0TGF5ZXJBbmltYXRpb25zKGxheWVySUQsIGFjdGl2ZUFuaW1hdGlvbnMpKTsKLX0KLQogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewog
ICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVjdG9yIGluZGljYXRlcyB0aGF0IHRpbGVzIGFsbCBh
cm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1ZXN0ZWQuCkBAIC04NTEsNyArNzk1LDggQEAgdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZp
cmVkKFRpbWVyPENvb3JkaW5hdGUKIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNl
dEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiB7Ci0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0
QmFja2dyb3VuZENvbG9yKGNvbG9yKSk7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwor
ICAgIG1fc3RhdGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaAppbmRleCBiNjA1Mjg5MDlmN2ViOWI2NzEzYzFlOTk2YThjZTg3MDE5NjUz
MjRlLi42NTM2YWQ3MGZiNmI3ZTA2YTE3MDllNGE1NjJjYjViODg0MTJjYjAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaApA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyRmFjdG9y
eS5oPgpAQCAtODAsMzkgKzgxLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VS
ZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJl
c3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1
c2goKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikg
T1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsgfQotICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJDb3JlOjpDb29y
ZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVw
ZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJl
bW92ZVRpbGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CiAgICAgdmlydHVhbCB2b2lk
IHB1cmdlQmFja2luZ1N0b3JlcygpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7
CiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXll
ckZhY3RvcnkoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsK
LSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRl
cnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zJik7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6
UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCkgT1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBh
aW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBpbnQpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqKTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBv
aW50Jik7Ci0KLSAgICAvLyBVcGRhdGVBdGxhc0NsaWVudAotICAgIHZpcnR1YWwgYm9vbCBjcmVh
dGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lEKTsKLQogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBPVkVSUklERTsKICNl
bmRpZgpAQCAtMTM5LDYgKzExNCwxOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmbHVzaFBlbmRp
bmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CiAKKyAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsgfQorICAgIHZpcnR1
YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0
ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciop
OworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2lu
Q29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6Q29vcmRpbmF0
ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50Jik7
CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJRCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKKworICAgIC8v
IFVwZGF0ZUF0bGFzQ2xpZW50CisgICAgdmlydHVhbCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVp
bnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0
bGFzSUQpOworCiAgICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CiAKQEAgLTE2Niw2ICsxNTMsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoV2ViQ29y
ZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopOwogCiAjaWYgRU5BQkxFKENTU19T
SEFERVJTKQorICAgIHZvaWQgcHJlcGFyZUN1c3RvbUZpbHRlclByb3hpZXNJZk5lZWRlZChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOworCiAgICAgLy8gV2ViQ3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5Q2xpZW50CiAgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kik7CiAKQEAgLTE4MSw2ICsxNzAs
OCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVs
bCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwogCisgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc1N0YXRlIG1fc3RhdGU7CisKICAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKICAgICBWZWN0b3I8V2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvQ3JlYXRlOwogICAgIFZlY3RvcjxXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>