<?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>75864</bug_id>
          
          <creation_ts>2012-01-09 10:06:08 -0800</creation_ts>
          <short_desc>[chromium] Push CCLayerIteratorPosition struct into CCLayerIterator class.</short_desc>
          <delta_ts>2012-02-23 15:03:20 -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>New Bugs</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>74203</dependson>
    
    <dependson>79275</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>532257</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-09 10:06:08 -0800</bug_when>
    <thetext>[chromium] Push CCLayerIteratorPosition struct into CCLayerIterator class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532261</commentid>
    <comment_count>1</comment_count>
      <attachid>121679</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-09 10:09:28 -0800</bug_when>
    <thetext>Created attachment 121679
Patch

This removes the CCLayerIteratorPosition struct, moving the data fields into the CCLayerIterator class.
I think it&apos;s a little less complicated this way and drops ~50 lines of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532623</commentid>
    <comment_count>2</comment_count>
      <attachid>121752</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-09 16:22:16 -0800</bug_when>
    <thetext>Created attachment 121752
Patch

This appears to compile on the mac and windows bots. The windows one keeps dying/timing out during compile (&gt;_&lt;) but it doesn&apos;t error on CCLayerIterator.cpp or webcore_platform at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533170</commentid>
    <comment_count>3</comment_count>
      <attachid>121752</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-10 10:22:18 -0800</bug_when>
    <thetext>Comment on attachment 121752
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:159
&gt;  // Orderings for iterating over the RenderSurface-Layer tree.

Rather than instantiating CCLayerIteratorActions, could we implement this by subclassing CCLayerIteratorActions? Giving us CCBackToFrontLayerIterator and CCFrontToBackLayerIterator. That way we can also add subclasses that hide the use of templates (e.g. CCBackToFrontLayerChromiumIterator) which I prefer over having to declare all template configurations that we use in the .cpp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533181</commentid>
    <comment_count>4</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-01-10 10:39:09 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 121752 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121752&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:159
&gt; &gt;  // Orderings for iterating over the RenderSurface-Layer tree.
&gt; 
&gt; Rather than instantiating CCLayerIteratorActions, could we implement this by subclassing CCLayerIteratorActions? Giving us CCBackToFrontLayerIterator and CCFrontToBackLayerIterator. That way we can also add subclasses that hide the use of templates (e.g. CCBackToFrontLayerChromiumIterator) which I prefer over having to declare all template configurations that we use in the .cpp file.

Personally I disagree... I see two disadvantages with this, which may be important:
 1. The explicit and clear distinction between back-to-front and front-to-back becomes visually hidden by being prefixed/suffixed.  This can make it more error-prone...
 2. There would be an explosion of different data types that the user of this code needs to be aware of - as it is now, the user&apos;s perspective is simpler, even if the internals are slightly more awkward, but personally I think its readable enough that the simplicity is worth it.

What do you think?  Or maybe I misunderstood what you&apos;re suggesting?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533199</commentid>
    <comment_count>5</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-10 10:59:30 -0800</bug_when>
    <thetext>My first version used subclassing, but with templates we got the same general code without virtual method overhead. It also didn&apos;t require a super class and I think is fewer lines of code. At least that was my intuition on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533236</commentid>
    <comment_count>6</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2012-01-10 11:32:38 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 121752 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121752&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerIterator.h:159
&gt; &gt; &gt;  // Orderings for iterating over the RenderSurface-Layer tree.
&gt; &gt; 
&gt; &gt; Rather than instantiating CCLayerIteratorActions, could we implement this by subclassing CCLayerIteratorActions? Giving us CCBackToFrontLayerIterator and CCFrontToBackLayerIterator. That way we can also add subclasses that hide the use of templates (e.g. CCBackToFrontLayerChromiumIterator) which I prefer over having to declare all template configurations that we use in the .cpp file.
&gt; 
&gt; Personally I disagree... I see two disadvantages with this, which may be important:
&gt;  1. The explicit and clear distinction between back-to-front and front-to-back becomes visually hidden by being prefixed/suffixed.  This can make it more error-prone...

I&apos;m not sure I understand what you mean by this. It would be CCBackToFrontLayerIterator instead of CCLayerIterator&lt;CCLayerIteratorActions::BackToFront&gt; and I&apos;m not sure I understand how that can be more error prone. Do you have an example?

&gt;  2. There would be an explosion of different data types that the user of this code needs to be aware of - as it is now, the user&apos;s perspective is simpler, even if the internals are slightly more awkward, but personally I think its readable enough that the simplicity is worth it.

Isn&apos;t the alternative just that the user needs to be aware of template types instead data types? This is the current usage:

typedef CCLayerIterator&lt;LayerChromium, RenderSurfaceChromium, CCLayerIteratorActions::FrontToBack&gt; CCLayerIteratorType;                                 
                                                                              
CCLayerIteratorType end = CCLayerIteratorType::end(&amp;renderSurfaceLayerList);                                                                            
for (CCLayerIteratorType it = CCLayerIteratorType::begin(&amp;renderSurfaceLayerList); it != end; ++it) { }

I think the need to use a typedef alone is a good indication that this isn&apos;t ideal. This is my suggested usage:

CCBackToFrontLayerChromiumIterator end = CCBackToFrontLayerChromiumIterator::end(&amp;renderSurfaceLayerList);                                                                            
for (CCBackToFrontLayerChromiumIterator it = CCBackToFrontLayerChromiumIterator::begin(&amp;renderSurfaceLayerList); it != end; ++it) { }

&gt; 
&gt; What do you think?  Or maybe I misunderstood what you&apos;re suggesting?

I generally dislike templates in an API unless necessary. Whenever there&apos;s limited set of template configurations used and the implementation is in a .cpp file, I prefer hiding the template usage in helper functions/classes instead of declaring each configuration used in the .cpp file.

In this specific case, I also dislike that ever iterator requires a heap allocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533424</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-10 15:45:32 -0800</bug_when>
    <thetext>Things I like about the template version:
- no branching (if type == fronttoback)
- no virtual functions (class named directly in template)
- single CCLayerIterator class
- compile error if you try compare a FrontToBack == BackToFront iterator
- easy to read

I tried making subclasses for the various Layer types, or for the various IteratorActions, or both.

It feels like it adds a lot of code to CCLayerIterator.h, making the interface harder to read, but the line length of 

CCLayerIteratorLayerChromium&lt;CCLayerIteratorActions::FrontToBack&gt; end = CCLayerIteratorLayerChromium&lt;CCLayerIteratorActions::FrontToBack&gt;::end(&amp;renderSurfaceLayerList); 

and

CCLayerIteratorFrontToBack&lt;LayerType, RenderSurfaceType&gt; end = CCLayerIteratorFrontToBack&lt;LayerType, RenderSurfaceType&gt;::end(&amp;renderSurfaceLayerList); 

are all still long enough that I&apos;d probably want to typedef it anyway for clarity. So I opt for just keeping it as templates as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533433</commentid>
    <comment_count>8</comment_count>
      <attachid>121923</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-10 15:50:53 -0800</bug_when>
    <thetext>Created attachment 121923
Patch

Got rid of the heap allocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538224</commentid>
    <comment_count>9</comment_count>
      <attachid>121923</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-18 15:15:19 -0800</bug_when>
    <thetext>Comment on attachment 121923
Patch

I think I&apos;m missing something obvious but I can&apos;t figure out the lifecycle for m_renderSurfaceLayerList. Who&apos;s supposed to allocate memory for this and who&apos;s supposed to delete it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538237</commentid>
    <comment_count>10</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-01-18 15:20:46 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 121923 [details])
&gt; I think I&apos;m missing something obvious but I can&apos;t figure out the lifecycle for m_renderSurfaceLayerList. Who&apos;s supposed to allocate memory for this and who&apos;s supposed to delete it?

Unless something has changed, here&apos;s what I understand:

(1) in CCLayerTreeHostImpl::calculateRenderPasses()

(2) in CCLayerTreeHost::updateLayers() --&gt; but here, it appears that those layerlists are owned by RenderSurfaceChromiums, so the renderSurfaceLayerList is actually owned by the root RenderSurfacechromium?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538238</commentid>
    <comment_count>11</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-01-18 15:21:20 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 121923 [details] [details])
&gt; &gt; I think I&apos;m missing something obvious but I can&apos;t figure out the lifecycle for m_renderSurfaceLayerList. Who&apos;s supposed to allocate memory for this and who&apos;s supposed to delete it?
&gt; 
&gt; Unless something has changed, here&apos;s what I understand:
&gt; 
&gt; (1) in CCLayerTreeHostImpl::calculateRenderPasses()
&gt; 
&gt; (2) in CCLayerTreeHost::updateLayers() --&gt; but here, it appears that those layerlists are owned by RenderSurfaceChromiums, so the renderSurfaceLayerList is actually owned by the root RenderSurfacechromium?

Sorry, for (1) I meant that its a local variable within that function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538287</commentid>
    <comment_count>12</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-01-18 15:54:37 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I think I&apos;m missing something obvious but I can&apos;t figure out the lifecycle for m_renderSurfaceLayerList. Who&apos;s supposed to allocate memory for this and who&apos;s supposed to delete it?

From the perspective of the iterators, it is a pointer passed to begin()/end() and something that needs to live at least as long as the iterators do.

It&apos;s assumed iterators are short-lived and this won&apos;t be a problem. But if it was the Vector* could be a RefPtr&lt;Vector&gt; instead (making it a RefPtr&lt;Vector&lt;RefPtr&lt;LayerType&gt; &gt; &gt;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561563</commentid>
    <comment_count>13</comment_count>
      <attachid>121923</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-21 20:52:07 -0800</bug_when>
    <thetext>Comment on attachment 121923
Patch

R=me. Looks correct as far as I can tell and if not hopefully we have enough test coverage now to let us know.

(I actually thought for some reason this had landed some time back, but I guess not).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561573</commentid>
    <comment_count>14</comment_count>
      <attachid>121923</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-21 21:07:28 -0800</bug_when>
    <thetext>Comment on attachment 121923
Patch

Yay, thanks! I kept thinking about bumping this. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561614</commentid>
    <comment_count>15</comment_count>
      <attachid>121923</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-21 22:16:16 -0800</bug_when>
    <thetext>Comment on attachment 121923
Patch

Rejecting attachment 121923 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
ium&apos;, &apos;--update-chromium&apos;]&quot; exit_code: 2
enderSurfaceLayer() const [with LayerType = WebCore::LayerChromium, RenderSurfaceType = WebCore::RenderSurfaceChromium, IteratorActionType = WebCore::CCLayerIteratorActions::FrontToBack]&apos; is private
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:563: error: within this context
make: *** [out/Debug/obj.target/webcore_platform/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.o] Error 1
make: *** Waiting for unfinished jobs....

Full output: http://queues.webkit.org/results/11558373</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562067</commentid>
    <comment_count>16</comment_count>
      <attachid>128234</attachid>
    <who name="W. James MacLean">wjmaclean</who>
    <bug_when>2012-02-22 09:56:33 -0800</bug_when>
    <thetext>Created attachment 128234
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562121</commentid>
    <comment_count>17</comment_count>
      <attachid>128234</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 10:35:35 -0800</bug_when>
    <thetext>Comment on attachment 128234
Patch for landing

Clearing flags on attachment: 128234

Committed r108518: &lt;http://trac.webkit.org/changeset/108518&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562122</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 10:35:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562216</commentid>
    <comment_count>19</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-22 12:02:37 -0800</bug_when>
    <thetext>Reverted r108518 for reason:

Breaks

Committed r108532: &lt;http://trac.webkit.org/changeset/108532&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562217</commentid>
    <comment_count>20</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-22 12:03:07 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Reverted r108518 for reason:
&gt; 
&gt; Breaks
&gt; 
&gt; Committed r108532: &lt;http://trac.webkit.org/changeset/108532&gt;

Er, that should have been breaks surfaceOcclusionWithOverlappingSiblingSurfaces in webkit_unit_tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563524</commentid>
    <comment_count>21</comment_count>
      <attachid>128234</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-23 15:03:14 -0800</bug_when>
    <thetext>Comment on attachment 128234
Patch for landing

Clearing flags on attachment: 128234

Committed r108678: &lt;http://trac.webkit.org/changeset/108678&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563525</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-23 15:03:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121679</attachid>
            <date>2012-01-09 10:09:28 -0800</date>
            <delta_ts>2012-01-09 16:22:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75864-20120109130926.patch</filename>
            <type>text/plain</type>
            <size>28680</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNw
cAppbmRleCAwNzY3ZmYwZTc2NmM5NjM0MDYzNTdlZGVmMjliYzZkNWE5MDg5MmY4Li45N2Q2ZDE4
NWEwNGM3MjExZWJiYjJhYzgyZjU1M2M0MjIzOTllZjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
dGVyYXRvci5jcHAKQEAgLTM1LDczICszNSw3MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBl
Pgotdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6YmVnaW4oQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0
eXBlbmFtZSBBY3Rpb25UeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9G
cm9udDo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUs
IEFjdGlvblR5cGU+JiBpdCkKIHsKLSAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5k
ZXggPSAwOwotICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclBvc2l0
aW9uVmFsdWU6OkxheWVySW5kZXhSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOworICAg
IGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSAwOworICAgIGl0Lm1fY3VycmVu
dExheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JWYWx1ZTo6TGF5ZXJJbmRleFJlcHJlc2VudGlu
Z1RhcmdldFJlbmRlclN1cmZhY2U7CiAKICAgICBtX2hpZ2hlc3RUYXJnZXRSZW5kZXJTdXJmYWNl
TGF5ZXIgPSAwOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBS
ZW5kZXJTdXJmYWNlVHlwZT4KLXZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJv
bnQ6OmVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlPiYgcG9zKQordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVy
U3VyZmFjZVR5cGUsIEFjdGlvblR5cGU+JiBpdCkKIHsKLSAgICBwb3MudGFyZ2V0UmVuZGVyU3Vy
ZmFjZUxheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpJbnZhbGlkVGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7Ci0gICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0g
MDsKKyAgICBpdC5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gQ0NMYXllckl0ZXJh
dG9yVmFsdWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKKyAgICBpdC5t
X2N1cnJlbnRMYXllckluZGV4ID0gMDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlw
ZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci12b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlv
bnM6OkJhY2tUb0Zyb250OjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwg
UmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0
eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KK3ZvaWQgQ0NM
YXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQoQ0NMYXllckl0ZXJhdG9yPExh
eWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFjdGlvblR5cGU+JiBpdCkKIHsKICAgICAvLyBJ
ZiB0aGUgY3VycmVudCBsYXllciBoYXMgYSBSUywgbW92ZSB0byBpdHMgbGF5ZXIgbGlzdC4gT3Ro
ZXJ3aXNlLCB2aXNpdCB0aGUgbmV4dCBsYXllciBpbiB0aGUgY3VycmVudCBSUyBsYXllciBsaXN0
LgotICAgIGlmIChwb3MuY3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1
cmZhY2UoKSkgeworICAgIGlmIChpdC5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5n
UmVuZGVyU3VyZmFjZSgpKSB7CiAgICAgICAgIC8vIFNhdmUgb3VyIHBvc2l0aW9uIGluIHRoZSBj
aGlsZExheWVyIGxpc3QgZm9yIHRoZSBSZW5kZXJTdXJmYWNlLCB0aGVuIGp1bXAgdG8gdGhlIG5l
eHQgUmVuZGVyU3VyZmFjZS4gU2F2ZSB3aGVyZSB3ZQogICAgICAgICAvLyBjYW1lIGZyb20gaW4g
dGhlIG5leHQgUmVuZGVyU3VyZmFjZSBzbyB3ZSBjYW4gZ2V0IGJhY2sgdG8gaXQuCi0gICAgICAg
IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0b3J5ID0g
cG9zLmN1cnJlbnRMYXllckluZGV4OwotICAgICAgICBpbnQgcHJldmlvdXNUYXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXIgPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisgICAgICAg
IGl0LnRhcmdldFJlbmRlclN1cmZhY2UoKS0+bV9jdXJyZW50TGF5ZXJJbmRleEhpc3RvcnkgPSBp
dC5tX2N1cnJlbnRMYXllckluZGV4OworICAgICAgICBpbnQgcHJldmlvdXNUYXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXIgPSBpdC5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4OwogCi0gICAg
ICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9ICsrbV9oaWdoZXN0VGFyZ2V0
UmVuZGVyU3VyZmFjZUxheWVyOwotICAgICAgICBwb3MuY3VycmVudExheWVySW5kZXggPSBDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpMYXllckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVu
ZGVyU3VyZmFjZTsKKyAgICAgICAgaXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9
ICsrbV9oaWdoZXN0VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgICAgICBpdC5tX2N1cnJl
bnRMYXllckluZGV4ID0gQ0NMYXllckl0ZXJhdG9yVmFsdWU6OkxheWVySW5kZXhSZXByZXNlbnRp
bmdUYXJnZXRSZW5kZXJTdXJmYWNlOwogCi0gICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNl
KCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5ID0gcHJldmlvdXNUYXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgICAgIGl0LnRhcmdldFJlbmRlclN1cmZhY2UoKS0+
bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3RvcnkgPSBwcmV2aW91c1RhcmdldFJl
bmRlclN1cmZhY2VMYXllcjsKICAgICB9IGVsc2UgewotICAgICAgICArK3Bvcy5jdXJyZW50TGF5
ZXJJbmRleDsKKyAgICAgICAgKytpdC5tX2N1cnJlbnRMYXllckluZGV4OwogCi0gICAgICAgIGlu
dCB0YXJnZXRSZW5kZXJTdXJmYWNlTnVtQ2hpbGRyZW4gPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFj
ZUNoaWxkcmVuKCkuc2l6ZSgpOwotICAgICAgICB3aGlsZSAocG9zLmN1cnJlbnRMYXllckluZGV4
ID09IHRhcmdldFJlbmRlclN1cmZhY2VOdW1DaGlsZHJlbikgeworICAgICAgICBpbnQgdGFyZ2V0
UmVuZGVyU3VyZmFjZU51bUNoaWxkcmVuID0gaXQudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVu
KCkuc2l6ZSgpOworICAgICAgICB3aGlsZSAoaXQubV9jdXJyZW50TGF5ZXJJbmRleCA9PSB0YXJn
ZXRSZW5kZXJTdXJmYWNlTnVtQ2hpbGRyZW4pIHsKICAgICAgICAgICAgIC8vIEp1bXAgYmFjayB0
byB0aGUgcHJldmlvdXMgUmVuZGVyU3VyZmFjZSwgYW5kIGdldCBiYWNrIHRoZSBwb3NpdGlvbiB3
aGVyZSB3ZSB3ZXJlIGluIHRoYXQgbGlzdCwgYW5kIG1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24g
dGhlcmUuCi0gICAgICAgICAgICBpZiAoIXBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRl
eCkgeworICAgICAgICAgICAgaWYgKCFpdC5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4
KSB7CiAgICAgICAgICAgICAgICAgLy8gRW5kIG9mIHRoZSBsaXN0Ci0gICAgICAgICAgICAgICAg
cG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRp
b25WYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4OwotICAgICAgICAg
ICAgICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgaXQubV90
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclZhbHVlOjpJbnZh
bGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisgICAgICAgICAgICAgICAgaXQubV9j
dXJyZW50TGF5ZXJJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gcG9z
LnRhcmdldFJlbmRlclN1cmZhY2UoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhp
c3Rvcnk7Ci0gICAgICAgICAgICBwb3MuY3VycmVudExheWVySW5kZXggPSBwb3MudGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5tX2N1cnJlbnRMYXllckluZGV4SGlzdG9yeSArIDE7CisgICAgICAgICAg
ICBpdC5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gaXQudGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpLT5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeTsKKyAgICAgICAg
ICAgIGl0Lm1fY3VycmVudExheWVySW5kZXggPSBpdC50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1f
Y3VycmVudExheWVySW5kZXhIaXN0b3J5ICsgMTsKIAotICAgICAgICAgICAgdGFyZ2V0UmVuZGVy
U3VyZmFjZU51bUNoaWxkcmVuID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpLnNp
emUoKTsKKyAgICAgICAgICAgIHRhcmdldFJlbmRlclN1cmZhY2VOdW1DaGlsZHJlbiA9IGl0LnRh
cmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpLnNpemUoKTsKICAgICAgICAgfQogICAgIH0KIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+Ci12b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbihDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQor
dGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUs
IHR5cGVuYW1lIEFjdGlvblR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250
VG9CYWNrOjpiZWdpbihDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlw
ZSwgQWN0aW9uVHlwZT4mIGl0KQogewotICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJ
bmRleCA9IDA7Ci0gICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gcG9zLnRhcmdldFJlbmRlclN1
cmZhY2VDaGlsZHJlbigpLnNpemUoKSAtIDE7Ci0gICAgZ29Ub0hpZ2hlc3RJblN1YnRyZWUocG9z
KTsKKyAgICBpdC5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gMDsKKyAgICBpdC5t
X2N1cnJlbnRMYXllckluZGV4ID0gaXQudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6
ZSgpIC0gMTsKKyAgICBnb1RvSGlnaGVzdEluU3VidHJlZShpdCk7CiB9CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotdm9pZCBDQ0xh
eWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0
aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9u
VHlwZT4KK3ZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmVuZChDQ0xh
eWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mIGl0
KQogewotICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uVmFsdWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsK
LSAgICBwb3MuY3VycmVudExheWVySW5kZXggPSAwOworICAgIGl0Lm1fdGFyZ2V0UmVuZGVyU3Vy
ZmFjZUxheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JWYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRl
clN1cmZhY2VMYXllckluZGV4OworICAgIGl0Lm1fY3VycmVudExheWVySW5kZXggPSAwOwogfQog
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlw
ZT4KLXZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQoQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0
eXBlbmFtZSBBY3Rpb25UeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRv
QmFjazo6bmV4dChDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwg
QWN0aW9uVHlwZT4mIGl0KQogewogICAgIC8vIE1vdmVzIHRvIHRoZSBwcmV2aW91cyBsYXllciBp
biB0aGUgY3VycmVudCBSUyBsYXllciBsaXN0LiBUaGVuIHdlIGNoZWNrIGlmIHRoZQogICAgIC8v
IG5ldyBjdXJyZW50IGxheWVyIGhhcyBpdHMgb3duIFJTLCBpbiB3aGljaCBjYXNlIHRoZXJlIGFy
ZSB0aGluZ3MgaW4gdGhhdCBSUyBsYXllciBsaXN0IHRoYXQgYXJlIGhpZ2hlciwgc28KQEAgLTEw
OSw2MSArMTA5LDYxIEBAIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6
Om5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlCiAgICAgLy8gSWYgd2UgbW92
ZSBiYWNrIHBhc3QgdGhlIGZyb250IG9mIHRoZSBsaXN0LCB3ZSBqdW1wIHVwIHRvIHRoZSBwcmV2
aW91cyBSUyBsYXllciBsaXN0LCBwaWNraW5nIHVwIGFnYWluIHdoZXJlIHdlCiAgICAgLy8gaGFk
IHByZXZpb3VzbHkgcmVjdXJzZWQgaW50byB0aGUgY3VycmVudCBSUyBsYXllciBsaXN0LgogCi0g
ICAgaWYgKCFwb3MuY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkg
eworICAgIGlmICghaXQuY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2Uo
KSkgewogICAgICAgICAvLyBTdWJ0cmFjdGluZyBvbmUgaGVyZSB3aWxsIGV2ZW50dWFsbHkgY2F1
c2UgdGhlIGN1cnJlbnQgbGF5ZXIgdG8gYmVjb21lIHRoYXQgbGF5ZXIKICAgICAgICAgLy8gcmVw
cmVzZW50aW5nIHRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UuCi0gICAgICAgIC0tcG9zLmN1cnJl
bnRMYXllckluZGV4OwotICAgICAgICBnb1RvSGlnaGVzdEluU3VidHJlZShwb3MpOworICAgICAg
ICAtLWl0Lm1fY3VycmVudExheWVySW5kZXg7CisgICAgICAgIGdvVG9IaWdoZXN0SW5TdWJ0cmVl
KGl0KTsKICAgICB9IGVsc2UgewotICAgICAgICB3aGlsZSAocG9zLmN1cnJlbnRMYXllclJlcHJl
c2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKLSAgICAgICAgICAgIGlmICghcG9zLnRhcmdl
dFJlbmRlclN1cmZhY2VMYXllckluZGV4KSB7CisgICAgICAgIHdoaWxlIChpdC5jdXJyZW50TGF5
ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7CisgICAgICAgICAgICBpZiAoIWl0
Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIHsKICAgICAgICAgICAgICAgICAvLyBF
bmQgb2YgdGhlIGxpc3QKLSAgICAgICAgICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVySW5kZXg7Ci0gICAgICAgICAgICAgICAgcG9zLmN1cnJlbnRMYXllcklu
ZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBpdC5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcklu
ZGV4ID0gQ0NMYXllckl0ZXJhdG9yVmFsdWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5
ZXJJbmRleDsKKyAgICAgICAgICAgICAgICBpdC5tX2N1cnJlbnRMYXllckluZGV4ID0gMDsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwb3MudGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5t
X3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeTsKLSAgICAgICAgICAgIHBvcy5j
dXJyZW50TGF5ZXJJbmRleCA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExh
eWVySW5kZXhIaXN0b3J5OworICAgICAgICAgICAgaXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5
ZXJJbmRleCA9IGl0LnRhcmdldFJlbmRlclN1cmZhY2UoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNl
TGF5ZXJJbmRleEhpc3Rvcnk7CisgICAgICAgICAgICBpdC5tX2N1cnJlbnRMYXllckluZGV4ID0g
aXQudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX2N1cnJlbnRMYXllckluZGV4SGlzdG9yeTsKICAg
ICAgICAgfQogICAgIH0KIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5h
bWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci12b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250
VG9CYWNrOjpnb1RvSGlnaGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXll
clR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQordGVtcGxhdGUgPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+Cit2
b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdEluU3Vi
dHJlZShDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9u
VHlwZT4mIGl0KQogewotICAgIGlmIChwb3MuY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJl
bmRlclN1cmZhY2UoKSkKKyAgICBpZiAoaXQuY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJl
bmRlclN1cmZhY2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHdoaWxlIChwb3MuY3VycmVudExh
eWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgeworICAgIHdoaWxlIChp
dC5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpKSB7CiAg
ICAgICAgIC8vIFNhdmUgd2hlcmUgd2Ugd2VyZSBpbiB0aGUgY3VycmVudCB0YXJnZXQgc3VyZmFj
ZSwgbW92ZSB0byB0aGUgbmV4dCBvbmUsIGFuZCBzYXZlIHRoZSB0YXJnZXQgc3VyZmFjZSB0aGF0
IHdlCiAgICAgICAgIC8vIGNhbWUgZnJvbSB0aGVyZSBzbyB3ZSBjYW4gZ28gYmFjayB0byBpdC4K
LSAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2UoKS0+bV9jdXJyZW50TGF5ZXJJbmRleEhp
c3RvcnkgPSBwb3MuY3VycmVudExheWVySW5kZXg7Ci0gICAgICAgIGludCBwcmV2aW91c1Rhcmdl
dFJlbmRlclN1cmZhY2VMYXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsK
KyAgICAgICAgaXQudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX2N1cnJlbnRMYXllckluZGV4SGlz
dG9yeSA9IGl0Lm1fY3VycmVudExheWVySW5kZXg7CisgICAgICAgIGludCBwcmV2aW91c1Rhcmdl
dFJlbmRlclN1cmZhY2VMYXllciA9IGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7
CiAKLSAgICAgICAgZm9yIChMYXllclR5cGUqIGxheWVyID0gcG9zLmN1cnJlbnRMYXllcigpOyBw
b3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgIT0gbGF5ZXI7ICsrcG9zLnRhcmdldFJlbmRl
clN1cmZhY2VMYXllckluZGV4KSB7IH0KLSAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0g
cG9zLnRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpLnNpemUoKSAtIDE7CisgICAgICAgIGZv
ciAoTGF5ZXJUeXBlKiBsYXllciA9IGl0LmN1cnJlbnRMYXllcigpOyBpdC50YXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXIoKSAhPSBsYXllcjsgKytpdC5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllcklu
ZGV4KSB7IH0KKyAgICAgICAgaXQubV9jdXJyZW50TGF5ZXJJbmRleCA9IGl0LnRhcmdldFJlbmRl
clN1cmZhY2VDaGlsZHJlbigpLnNpemUoKSAtIDE7CiAKLSAgICAgICAgcG9zLnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3RvcnkgPSBwcmV2
aW91c1RhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgaXQudGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpLT5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeSA9IHByZXZpb3Vz
VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOwogICAgIH0KIH0KIAogLy8gRGVjbGFyZSBlYWNoIG9m
IHRoZSBhYm92ZSBmdW5jdGlvbnMgZm9yIExheWVyQ2hyb21pdW0gYW5kIENDTGF5ZXJJbXBsIGNs
YXNzZXMgc28gdGhhdCB0aGV5IGFyZSBsaW5rZWQuCi10ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7Ci10ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yUG9z
aXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwotdGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7Ci0K
LXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2lu
KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7
Ci10ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQo
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsK
LXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQo
Q0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsK
LQotdGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4
dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0+Jik7Ci10ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9C
YWNrOjplbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtPiYpOwotdGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpG
cm9udFRvQmFjazo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwg
UmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwotdGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpGcm9udFRvQmFjazo6Z29Ub0hpZ2hlc3RJblN1YnRyZWUoQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwotCi10ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Ci10ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZT4mKTsKLXRlbXBs
YXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Ci10ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVz
dEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJT
dXJmYWNlPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9G
cm9udDo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bSwgQmFja1RvRnJvbnQ+ICYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0sIEJhY2tUb0Zyb250PiYpOwordGVtcGxhdGUgdm9pZCBDQ0xh
eWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xheWVySXRlcmF0b3I8TGF5
ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBCYWNrVG9Gcm9udD4mKTsKKwordGVt
cGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6YmVnaW4oQ0NM
YXllckl0ZXJhdG9yPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2UsIEJhY2tUb0Zyb250PiYp
OwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5k
KENDTGF5ZXJJdGVyYXRvcjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBCYWNrVG9Gcm9u
dD4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6
Om5leHQoQ0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2UsIEJhY2tU
b0Zyb250PiYpOworCit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250
VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0sIEZyb250VG9CYWNrPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpGcm9udFRvQmFjazo6ZW5kKENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0sIEZyb250VG9CYWNrPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xh
eWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yPExh
eWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgRnJvbnRUb0JhY2s+Jik7Cit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVz
dEluU3VidHJlZShDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNo
cm9taXVtLCBGcm9udFRvQmFjaz4mKTsKKwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpGcm9udFRvQmFjazo6bmV4dChDQ0xheWVySXRlcmF0b3I8Q0NMYXllckltcGwsIEND
UmVuZGVyU3VyZmFjZSwgRnJvbnRUb0JhY2s+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBs
LCBDQ1JlbmRlclN1cmZhY2UsIEZyb250VG9CYWNrPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yPENDTGF5
ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2UsIEZyb250VG9CYWNrPiYpOwordGVtcGxhdGUgdm9pZCBD
Q0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6Z29Ub0hpZ2hlc3RJblN1YnRyZWUo
Q0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2UsIEZyb250VG9CYWNr
PiYpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9y
LmgKaW5kZXggOGY0MTJjNDRkM2QxNDA0NzBmZDEyYTcyN2I5MTRlNGQ0NmZiZWIxNC4uN2VhYjZk
MTUwYjE5ZWExYjk5M2MxYzg4Y2MyYTQ1MWViMzZkYmEzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0
ZXJhdG9yLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpZm5kZWYgQ0NMYXllckl0ZXJhdG9yX2gKICNk
ZWZpbmUgQ0NMYXllckl0ZXJhdG9yX2gKIAotI2luY2x1ZGUgImNjL0NDTGF5ZXJJdGVyYXRvclBv
c2l0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAKICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTgyLDQz
ICs4Miw3OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAorLy8g
Tm9uLXRlbXBsYXRlZCBjb25zdGFudHMKK3N0cnVjdCBDQ0xheWVySXRlcmF0b3JWYWx1ZSB7Cisg
ICAgc3RhdGljIGNvbnN0IGludCBJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgg
PSAtMTsKKyAgICAvLyBUaGlzIG11c3QgYmUgLTEgc2luY2UgdGhlIGl0ZXJhdG9yIGFjdGlvbiBj
b2RlIGFzc3VtZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBiZQorICAgIC8vIHJlYWNoZWQgYnkgc3Vi
dHJhY3Rpbmcgb25lIGZyb20gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBsYXllciBpbiB0aGUg
Y3VycmVudAorICAgIC8vIHRhcmdldCBzdXJmYWNlJ3MgY2hpbGQgbGF5ZXIgbGlzdCwgd2hpY2gg
aXMgMC4KKyAgICBzdGF0aWMgY29uc3QgaW50IExheWVySW5kZXhSZXByZXNlbnRpbmdUYXJnZXRS
ZW5kZXJTdXJmYWNlID0gLTE7Cit9OworCiAvLyBBbiBpdGVyYXRvciBjbGFzcyBmb3Igd2Fsa2lu
ZyBvdmVyIGxheWVycyBpbiB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlLgogdGVtcGxhdGUg
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1l
IEl0ZXJhdG9yQWN0aW9uVHlwZT4KIGNsYXNzIENDTGF5ZXJJdGVyYXRvciB7CiAgICAgdHlwZWRl
ZiBDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgSXRlcmF0b3JB
Y3Rpb25UeXBlPiBDQ0xheWVySXRlcmF0b3JUeXBlOwogCiBwdWJsaWM6Ci0gICAgQ0NMYXllckl0
ZXJhdG9yKCkgeyB9CisgICAgQ0NMYXllckl0ZXJhdG9yKCkgOiBtX3JlbmRlclN1cmZhY2VMYXll
ckxpc3QoMCkgeyB9CiAKICAgICBzdGF0aWMgQ0NMYXllckl0ZXJhdG9yVHlwZSBiZWdpbihjb25z
dCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkgeyBy
ZXR1cm4gQ0NMYXllckl0ZXJhdG9yVHlwZShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCB0cnVlKTsg
fQogICAgIHN0YXRpYyBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZChjb25zdCBWZWN0b3I8UmVmUHRy
PExheWVyVHlwZT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkgeyByZXR1cm4gQ0NMYXllckl0
ZXJhdG9yVHlwZShyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBmYWxzZSk7IH0KIAotICAgIENDTGF5
ZXJJdGVyYXRvclR5cGUmIG9wZXJhdG9yKysoKSB7IEFTU0VSVChtX2FjdGlvbnMpOyBtX2FjdGlv
bnMtPm5leHQobV9wb3NpdGlvbik7IHJldHVybiAqdGhpczsgfQotICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBDQ0xheWVySXRlcmF0b3JUeXBlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wb3Np
dGlvbiA9PSBvdGhlci5tX3Bvc2l0aW9uOyB9CisgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3Bl
cmF0b3IrKygpIHsgQVNTRVJUKG1fYWN0aW9ucyk7IG1fYWN0aW9ucy0+bmV4dCgqdGhpcyk7IHJl
dHVybiAqdGhpczsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDQ0xheWVySXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVySW5kZXggPT0gb3RoZXIubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleAorICAg
ICAgICAgICAgJiYgbV9jdXJyZW50TGF5ZXJJbmRleCA9PSBvdGhlci5tX2N1cnJlbnRMYXllcklu
ZGV4OworICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ0NMYXllckl0ZXJhdG9yVHlw
ZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKLSAgICBMYXll
clR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLmN1cnJlbnRMYXll
cigpOyB9Ci0gICAgTGF5ZXJUeXBlKiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0
aW9uLmN1cnJlbnRMYXllcigpOyB9CisgICAgTGF5ZXJUeXBlKiBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gY3VycmVudExheWVyKCk7IH0KKyAgICBMYXllclR5cGUqIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuIGN1cnJlbnRMYXllcigpOyB9CiAKLSAgICBib29sIHJlcHJlc2VudHNUYXJn
ZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbi5jdXJyZW50TGF5ZXJS
ZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpOyB9Ci0gICAgYm9vbCByZXByZXNlbnRzQ29u
dHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuICFyZXByZXNlbnRzVGFyZ2V0
UmVuZGVyU3VyZmFjZSgpICYmIG1fcG9zaXRpb24uY3VycmVudExheWVyUmVwcmVzZW50c0NvbnRy
aWJ1dGluZ1JlbmRlclN1cmZhY2UoKTsgfQorICAgIGJvb2wgcmVwcmVzZW50c1RhcmdldFJlbmRl
clN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpOyB9CisgICAgYm9vbCByZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3Vy
ZmFjZSgpIGNvbnN0IHsgcmV0dXJuICFyZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpICYm
IGN1cnJlbnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCk7IH0KICAg
ICBib29sIHJlcHJlc2VudHNJdHNlbGYoKSBjb25zdCB7IHJldHVybiAhcmVwcmVzZW50c1Rhcmdl
dFJlbmRlclN1cmZhY2UoKSAmJiAhcmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2Uo
KTsgfQogCi0gICAgTGF5ZXJUeXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uLnRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpOyB9Ci0KIHByaXZh
dGU6CiAgICAgQ0NMYXllckl0ZXJhdG9yKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+
KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBib29sIHN0YXJ0KQotICAgICAgICA6IG1fcG9zaXRp
b24ocmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKLSAgICAgICAgLCBtX2FjdGlvbnMoYWRvcHRQdHIo
bmV3IEl0ZXJhdG9yQWN0aW9uVHlwZSgpKSkKKyAgICAgICAgOiBtX2FjdGlvbnMoYWRvcHRQdHIo
bmV3IEl0ZXJhdG9yQWN0aW9uVHlwZSgpKSkKKyAgICAgICAgLCBtX3JlbmRlclN1cmZhY2VMYXll
ckxpc3QocmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKICAgICB7CiAgICAgICAgIGlmIChzdGFydCAm
JiAhcmVuZGVyU3VyZmFjZUxheWVyTGlzdC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgbV9hY3Rp
b25zLT5iZWdpbihtX3Bvc2l0aW9uKTsKKyAgICAgICAgICAgIG1fYWN0aW9ucy0+YmVnaW4oKnRo
aXMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2FjdGlvbnMtPmVuZChtX3Bvc2l0aW9u
KTsKKyAgICAgICAgICAgIG1fYWN0aW9ucy0+ZW5kKCp0aGlzKTsKICAgICB9CiAKLSAgICBDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiBtX3Bvc2l0
aW9uOworICAgIGlubGluZSBMYXllclR5cGUqIGN1cnJlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJu
IGN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgPyB0YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXIoKSA6IHRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpW21fY3VycmVu
dExheWVySW5kZXhdLmdldCgpOyB9CisKKyAgICBpbmxpbmUgYm9vbCBjdXJyZW50TGF5ZXJSZXBy
ZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJUeXBl
PihjdXJyZW50TGF5ZXIoKSwgdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCktPmlkKCkpOyB9Cisg
ICAgaW5saW5lIGJvb2wgY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2Uo
KSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRMYXllckluZGV4ID09IENDTGF5ZXJJdGVyYXRvclZh
bHVlOjpMYXllckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQorCisgICAg
aW5saW5lIExheWVyVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgY29uc3QgeyByZXR1
cm4gKCptX3JlbmRlclN1cmZhY2VMYXllckxpc3QpW21fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
SW5kZXhdLmdldCgpOyB9CisgICAgaW5saW5lIFJlbmRlclN1cmZhY2VUeXBlKiB0YXJnZXRSZW5k
ZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCktPnJl
bmRlclN1cmZhY2UoKTsgfQorICAgIGlubGluZSBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlw
ZT4gPiYgdGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0
UmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKTsgfQorCiAgICAgT3duUHRyPEl0ZXJhdG9yQWN0
aW9uVHlwZT4gbV9hY3Rpb25zOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+
KiBtX3JlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKKyAgICAvLyBUaGUgaXRlcmF0b3IncyBjdXJy
ZW50IHBvc2l0aW9uLgorCisgICAgLy8gQSBwb3NpdGlvbiBpbiB0aGUgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC4gVGhpcyBwb2ludHMgdG8gYSBsYXllciB3aGljaCBvd25zIHRoZSBjdXJyZW50IHRh
cmdldCBzdXJmYWNlLgorICAgIC8vIFRoaXMgaXMgYSB2YWx1ZSBmcm9tIDAgdG8gbi0xIChuID0g
c2l6ZSBvZiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0ID0gbnVtYmVyIG9mIHN1cmZhY2VzKS4gQSB2
YWx1ZSBvdXRzaWRlIG9mCisgICAgLy8gdGhpcyByYW5nZSAoZm9yIGV4YW1wbGUsIENDTGF5ZXJJ
dGVyYXRvclZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIGlzIHVz
ZWQgdG8KKyAgICAvLyBpbmRpY2F0ZSBhIHBvc2l0aW9uIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0
aGUgdHJlZS4KKyAgICBpbnQgbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKKyAgICAv
LyBBIHBvc2l0aW9uIGluIHRoZSBsaXN0IG9mIGxheWVycyB0aGF0IGFyZSBjaGlsZHJlbiBvZiB0
aGUgY3VycmVudCB0YXJnZXQgc3VyZmFjZS4gV2hlbiBwb2ludGluZyB0byBvbmUgb2YKKyAgICAv
LyB0aGVzZSBsYXllcnMsIHRoaXMgaXMgYSB2YWx1ZSBmcm9tIDAgdG8gbi0xIChuID0gbnVtYmVy
IG9mIGNoaWxkcmVuKS4gU2luY2UgdGhlIGl0ZXJhdG9yIG11c3QgYWxzbyBzdG9wIGF0CisgICAg
Ly8gdGhlIGxheWVycyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBzdXJmYWNlLCB0aGlzIGlzIGRv
bmUgYnkgc2V0dGluZyB0aGUgY3VycmVudExheWVySW5kZXggdG8gYSB2YWx1ZSBvZgorICAgIC8v
IENDTGF5ZXJJdGVyYXRvclZhbHVlOjpMYXllclJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZh
Y2UuCisgICAgaW50IG1fY3VycmVudExheWVySW5kZXg7CisKKyAgICBmcmllbmQgc3RydWN0IEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM7CiB9OwogCiAvLyBPcmRlcmluZ3MgZm9yIGl0ZXJhdGluZyBv
dmVyIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRyZWUuCkBAIC0xMjYsMTQgKzE2MSwxNCBAQCBz
dHJ1Y3QgQ0NMYXllckl0ZXJhdG9yQWN0aW9ucyB7CiAgICAgLy8gV2Fsa3MgbGF5ZXJzIHNvcnRl
ZCBieSB6LW9yZGVyIGZyb20gYmFjayB0byBmcm9udC4KICAgICBjbGFzcyBCYWNrVG9Gcm9udCB7
CiAgICAgcHVibGljOgotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLSAgICAgICAgdm9pZCBiZWdpbihDQ0xheWVySXRlcmF0
b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlw
ZW5hbWUgQWN0aW9uVHlwZT4KKyAgICAgICAgdm9pZCBiZWdpbihDQ0xheWVySXRlcmF0b3I8TGF5
ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mKTsKIAotICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLSAg
ICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJT
dXJmYWNlVHlwZT4mKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlw
ZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+CisgICAgICAgIHZv
aWQgZW5kKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBBY3Rp
b25UeXBlPiYpOwogCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVu
YW1lIFJlbmRlclN1cmZhY2VUeXBlPgotICAgICAgICB2b2lkIG5leHQoQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVu
YW1lIEFjdGlvblR5cGU+CisgICAgICAgIHZvaWQgbmV4dChDQ0xheWVySXRlcmF0b3I8TGF5ZXJU
eXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIGludCBtX2hpZ2hlc3RUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CkBAIC0xNDIsMTgg
KzE3NywxOCBAQCBzdHJ1Y3QgQ0NMYXllckl0ZXJhdG9yQWN0aW9ucyB7CiAgICAgLy8gV2Fsa3Mg
bGF5ZXJzIHNvcnRlZCBieSB6LW9yZGVyIGZyb20gZnJvbnQgdG8gYmFjawogICAgIGNsYXNzIEZy
b250VG9CYWNrIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotICAgICAgICB2b2lkIGJlZ2luKEND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZh
Y2VUeXBlLCB0eXBlbmFtZSBBY3Rpb25UeXBlPgorICAgICAgICB2b2lkIGJlZ2luKENDTGF5ZXJJ
dGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBBY3Rpb25UeXBlPiYpOwogCi0g
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZh
Y2VUeXBlPgotICAgICAgICB2b2lkIGVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5
cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5
ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4K
KyAgICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFj
ZVR5cGUsIEFjdGlvblR5cGU+Jik7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci0gICAgICAgIHZvaWQgbmV4dChDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNl
VHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KKyAgICAgICAgdm9pZCBuZXh0KENDTGF5ZXJJdGVy
YXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBBY3Rpb25UeXBlPiYpOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUg
UmVuZGVyU3VyZmFjZVR5cGU+Ci0gICAgICAgIHZvaWQgZ29Ub0hpZ2hlc3RJblN1YnRyZWUoQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+CisgICAgICAgIHZvaWQgZ29Ub0hpZ2hlc3RJblN1
YnRyZWUoQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFjdGlv
blR5cGU+Jik7CiAgICAgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvclBvc2l0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3JQ
b3NpdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWY2M2M0NWY3NDJjMDNj
NjBkZWY5YjIxNzM4NDBhZmI4NmMzMjYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJdGVyYXRvclBvc2l0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uX2gKLSNk
ZWZpbmUgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25faAotCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIE5vbi10ZW1wbGF0ZWQgY29u
c3RhbnRzCi1zdHJ1Y3QgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZSB7Ci0gICAgc3RhdGlj
IGNvbnN0IGludCBJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSAtMTsKLSAg
ICAvLyBUaGlzIG11c3QgYmUgLTEgc2luY2UgdGhlIGl0ZXJhdG9yIGFjdGlvbiBjb2RlIGFzc3Vt
ZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBiZQotICAgIC8vIHJlYWNoZWQgYnkgc3VidHJhY3Rpbmcg
b25lIGZyb20gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBsYXllciBpbiB0aGUgY3VycmVudAot
ICAgIC8vIHRhcmdldCBzdXJmYWNlJ3MgY2hpbGQgbGF5ZXIgbGlzdCwgd2hpY2ggaXMgMC4KLSAg
ICBzdGF0aWMgY29uc3QgaW50IExheWVySW5kZXhSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJm
YWNlID0gLTE7Ci19OwotCi0vLyBBIHN0cnVjdCB0byBob2xkIHRoZSBpdGVyYXRvcidzIGN1cnJl
bnQgcG9zaXRpb24sIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgdmFyaW91cyBDQ0xheWVySXRlcmF0
b3JBY3Rpb24gZnVuY3Rpb25zLCBmb3IgdGhlbSB0bwotLy8gcmVhZCBhbmQgdXBkYXRlLiBUaGlz
IHN0cnVjdCBleGlzdHMgc28gdGhlIHRlbXBsYXRlZCBhY3Rpb24gZnVuY3Rpb25zIGRvbid0IG5l
ZWQgdG8gYWNjZXNzIHRoZSBDQ0xheWVySXRlcmF0b3IgY2xhc3MuCi0vLwotLy8gVGhlcmUgaXMg
YSAxOjEgcmVsYXRpb25zaGlwIGJldHdlZW4gYW4gaW5zdGFuY2Ugb2YgdGhlIENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uIGNsYXNzIGFuZCBhIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZvbyBjbGFz
cywKLS8vIHNvIGFuIGl0ZXJhdG9yIGFjdGlvbiBjbGFzcyBjYW4gaG9sZCBleHRyYSBwb3NpdGlv
biBkYXRhLCBpZiByZXF1aXJlZCwgaW4gaXRzIG93biBjbGFzcyBpbnN0YW5jZS4KLS8vCi0vLyBU
aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgaXRlcmF0b3IgaXMgaGVsZCBpbiB0d28gaW50ZWdl
ciB2YXJpYWJsZXMuCi0vLyAtIFRoZSB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCBpcyBh
IHBvc2l0aW9uIGluIHRoZSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LiBUaGlzIHBvaW50cyB0byBh
IGxheWVyIHdoaWNoIG93bnMgdGhlIGN1cnJlbnQKLS8vIHRhcmdldCBzdXJmYWNlLiBUaGlzIGlz
IGEgdmFsdWUgZnJvbSAwIHRvIG4tMSAobiA9IHNpemUgb2YgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCA9IG51bWJlciBvZiBzdXJmYWNlcykuIEEgdmFsdWUgb3V0c2lkZSBvZgotLy8gdGhpcyByYW5n
ZSAoZm9yIGV4YW1wbGUsIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWU6OkludmFsaWRUYXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCkgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHBvc2l0aW9u
Ci0vLyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhlIHRyZWUuCi0vLyAtIFRoZSBjdXJyZW50TGF5
ZXJJbmRleCBpcyBhIHBvc2l0aW9uIGluIHRoZSBsaXN0IG9mIGxheWVycyB0aGF0IGFyZSBjaGls
ZHJlbiBvZiB0aGUgY3VycmVudCB0YXJnZXQgc3VyZmFjZS4gV2hlbiBwb2ludGluZyB0bwotLy8g
b25lIG9mIHRoZXNlIGxheWVycywgdGhpcyBpcyBhIHZhbHVlIGZyb20gMCB0byBuLTEgKG4gPSBu
dW1iZXIgb2YgY2hpbGRyZW4pLiBTaW5jZSB0aGUgaXRlcmF0b3IgbXVzdCBhbHNvIHN0b3AgYXQg
dGhlIGxheWVycwotLy8gcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgc3VyZmFjZSwgdGhpcyBpcyBk
b25lIGJ5IHNldHRpbmcgdGhlIGN1cnJlbnRMYXllckluZGV4IHRvIGEgdmFsdWUgb2YKLS8vIEND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWU6OkxheWVyUmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVy
U3VyZmFjZS4KLXRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3Vy
ZmFjZVR5cGU+Ci1zdHJ1Y3QgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24gewotICAgIENDTGF5ZXJJ
dGVyYXRvclBvc2l0aW9uKCkgOiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KDApIHsgfQotICAgIGV4
cGxpY2l0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJU
eXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSA6IHJlbmRlclN1cmZhY2VMYXllckxpc3Qo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCkgeyB9Ci0KLSAgICBpbmxpbmUgTGF5ZXJUeXBlKiBjdXJy
ZW50TGF5ZXIoKSBjb25zdCB7IHJldHVybiBjdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpID8gdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCkgOiB0YXJnZXRSZW5kZXJT
dXJmYWNlQ2hpbGRyZW4oKVtjdXJyZW50TGF5ZXJJbmRleF0uZ2V0KCk7IH0KLQotICAgIGlubGlu
ZSBib29sIGN1cnJlbnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkg
Y29uc3QgeyByZXR1cm4gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJp
YnV0ZXNUb1RhcmdldDxMYXllclR5cGU+KGN1cnJlbnRMYXllcigpLCB0YXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXIoKS0+aWQoKSk7IH0KLSAgICBpbmxpbmUgYm9vbCBjdXJyZW50TGF5ZXJSZXByZXNl
bnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRMYXllckluZGV4
ID09IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWU6OkxheWVySW5kZXhSZXByZXNlbnRpbmdU
YXJnZXRSZW5kZXJTdXJmYWNlOyB9Ci0KLSAgICBpbmxpbmUgTGF5ZXJUeXBlKiB0YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXIoKSBjb25zdCB7IHJldHVybiAoKnJlbmRlclN1cmZhY2VMYXllckxpc3Qp
W3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4XS5nZXQoKTsgfQotICAgIGlubGluZSBSZW5k
ZXJTdXJmYWNlVHlwZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIHRhcmdl
dFJlbmRlclN1cmZhY2VMYXllcigpLT5yZW5kZXJTdXJmYWNlKCk7IH0KLSAgICBpbmxpbmUgY29u
c3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIHRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJl
bigpIGNvbnN0IHsgcmV0dXJuIHRhcmdldFJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCk7IH0K
LQotICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ0NMYXllckl0ZXJhdG9yUG9zaXRp
b24mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4ID09IG90aGVyLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4Ci0gICAg
ICAgICAgICAmJiBjdXJyZW50TGF5ZXJJbmRleCA9PSBvdGhlci5jdXJyZW50TGF5ZXJJbmRleDsK
LSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKLSAgICBpbnQgdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7Ci0g
ICAgaW50IGN1cnJlbnRMYXllckluZGV4OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121752</attachid>
            <date>2012-01-09 16:22:16 -0800</date>
            <delta_ts>2012-01-10 15:50:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75864-20120109192214.patch</filename>
            <type>text/plain</type>
            <size>31487</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmNkNWYwYmRlNGExYTE1
N2VmMmYwZjg1MGVmNTU1NDVmOGYxMzM3NC4uNDZhOGM3YzEyN2I0Y2E0N2VlYjUwMDFkNjliYmMx
NGY5ZDVkZTJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM2IEBACiAyMDEyLTAxLTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gUHVz
aCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbiBzdHJ1Y3QgaW50byBDQ0xheWVySXRlcmF0b3IgY2xh
c3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg2
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250
OjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250
VG9CYWNrOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpGcm9udFRvQmFjazo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdEluU3VidHJlZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OkNDTGF5ZXJJdGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OnJlcHJl
c2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvcjo6cmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckl0ZXJhdG9yOjpjdXJyZW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yOjpjdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVy
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OmN1cnJlbnRMYXll
clJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvcjo6dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvcjo6dGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySXRlcmF0b3I6OnRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24u
aDogUmVtb3ZlZC4KKworMjAxMi0wMS0wOSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVt
Lm9yZz4KKwogICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBpdGVyYXRvcnMgZm9yIHRoZSBSZW5k
ZXJTdXJmYWNlLUxheWVyIHRyZWUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc0MjAzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBkNmJkNmQ4OTE1NzlhZTBl
OGM2ZjE0MWIxM2EyNDJmYjRmNzk4ZjViLi41M2U4Y2FlMWQ4NWU0ZDU4Y2Y1NmExMzI1YzY3NTMy
ZGRjNGIxM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNjExLDcgKzM2MTEsNiBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
dGVyYXRvci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySXRlcmF0b3JQb3NpdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySXRlcmF0b3IuY3BwCmluZGV4IDA3NjdmZjBlNzY2Yzk2MzQwNjM1N2VkZWYyOWJjNmQ1YTkw
ODkyZjguLjk3ZDZkMTg1YTA0YzcyMTFlYmJiMmFjODJmNTUzYzQyMjM5OWVmNDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
dGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcApAQCAtMzUsNzMgKzM1LDczIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVu
ZGVyU3VyZmFjZVR5cGU+Ci12b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250
OjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlPiYgcG9zKQordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbihDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5k
ZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mIGl0KQogewotICAgIHBvcy50YXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXJJbmRleCA9IDA7Ci0gICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6TGF5ZXJJbmRleFJlcHJlc2VudGluZ1RhcmdldFJlbmRl
clN1cmZhY2U7CisgICAgaXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IDA7Cisg
ICAgaXQubV9jdXJyZW50TGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclZhbHVlOjpMYXllcklu
ZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsKIAogICAgIG1faGlnaGVzdFRhcmdl
dFJlbmRlclN1cmZhY2VMYXllciA9IDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5
cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rp
b25zOjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwg
UmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0
eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KK3ZvaWQgQ0NM
YXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmVuZChDQ0xheWVySXRlcmF0b3I8TGF5
ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mIGl0KQogewotICAgIHBvcy50
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFs
dWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKLSAgICBwb3MuY3VycmVu
dExheWVySW5kZXggPSAwOworICAgIGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgg
PSBDQ0xheWVySXRlcmF0b3JWYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllcklu
ZGV4OworICAgIGl0Lm1fY3VycmVudExheWVySW5kZXggPSAwOwogfQogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLXZvaWQgQ0NMYXll
ckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRp
b248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBBY3Rpb25U
eXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xh
eWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mIGl0
KQogewogICAgIC8vIElmIHRoZSBjdXJyZW50IGxheWVyIGhhcyBhIFJTLCBtb3ZlIHRvIGl0cyBs
YXllciBsaXN0LiBPdGhlcndpc2UsIHZpc2l0IHRoZSBuZXh0IGxheWVyIGluIHRoZSBjdXJyZW50
IFJTIGxheWVyIGxpc3QuCi0gICAgaWYgKHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJp
YnV0aW5nUmVuZGVyU3VyZmFjZSgpKSB7CisgICAgaWYgKGl0LmN1cnJlbnRMYXllclJlcHJlc2Vu
dHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKICAgICAgICAgLy8gU2F2ZSBvdXIgcG9z
aXRpb24gaW4gdGhlIGNoaWxkTGF5ZXIgbGlzdCBmb3IgdGhlIFJlbmRlclN1cmZhY2UsIHRoZW4g
anVtcCB0byB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlLiBTYXZlIHdoZXJlIHdlCiAgICAgICAgIC8v
IGNhbWUgZnJvbSBpbiB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlIHNvIHdlIGNhbiBnZXQgYmFjayB0
byBpdC4KLSAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2UoKS0+bV9jdXJyZW50TGF5ZXJJ
bmRleEhpc3RvcnkgPSBwb3MuY3VycmVudExheWVySW5kZXg7Ci0gICAgICAgIGludCBwcmV2aW91
c1RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJ
bmRleDsKKyAgICAgICAgaXQudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX2N1cnJlbnRMYXllcklu
ZGV4SGlzdG9yeSA9IGl0Lm1fY3VycmVudExheWVySW5kZXg7CisgICAgICAgIGludCBwcmV2aW91
c1RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
SW5kZXg7CiAKLSAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gKytt
X2hpZ2hlc3RUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7Ci0gICAgICAgIHBvcy5jdXJyZW50TGF5
ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWU6OkxheWVySW5kZXhSZXByZXNl
bnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOworICAgICAgICBpdC5tX3RhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4ID0gKyttX2hpZ2hlc3RUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAg
ICAgIGl0Lm1fY3VycmVudExheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JWYWx1ZTo6TGF5ZXJJ
bmRleFJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2U7CiAKLSAgICAgICAgcG9zLnRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3Rvcnkg
PSBwcmV2aW91c1RhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgaXQudGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeSA9IHBy
ZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICsr
cG9zLmN1cnJlbnRMYXllckluZGV4OworICAgICAgICArK2l0Lm1fY3VycmVudExheWVySW5kZXg7
CiAKLSAgICAgICAgaW50IHRhcmdldFJlbmRlclN1cmZhY2VOdW1DaGlsZHJlbiA9IHBvcy50YXJn
ZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCk7Ci0gICAgICAgIHdoaWxlIChwb3MuY3Vy
cmVudExheWVySW5kZXggPT0gdGFyZ2V0UmVuZGVyU3VyZmFjZU51bUNoaWxkcmVuKSB7CisgICAg
ICAgIGludCB0YXJnZXRSZW5kZXJTdXJmYWNlTnVtQ2hpbGRyZW4gPSBpdC50YXJnZXRSZW5kZXJT
dXJmYWNlQ2hpbGRyZW4oKS5zaXplKCk7CisgICAgICAgIHdoaWxlIChpdC5tX2N1cnJlbnRMYXll
ckluZGV4ID09IHRhcmdldFJlbmRlclN1cmZhY2VOdW1DaGlsZHJlbikgewogICAgICAgICAgICAg
Ly8gSnVtcCBiYWNrIHRvIHRoZSBwcmV2aW91cyBSZW5kZXJTdXJmYWNlLCBhbmQgZ2V0IGJhY2sg
dGhlIHBvc2l0aW9uIHdoZXJlIHdlIHdlcmUgaW4gdGhhdCBsaXN0LCBhbmQgbW92ZSB0byB0aGUg
bmV4dCBwb3NpdGlvbiB0aGVyZS4KLSAgICAgICAgICAgIGlmICghcG9zLnRhcmdldFJlbmRlclN1
cmZhY2VMYXllckluZGV4KSB7CisgICAgICAgICAgICBpZiAoIWl0Lm1fdGFyZ2V0UmVuZGVyU3Vy
ZmFjZUxheWVySW5kZXgpIHsKICAgICAgICAgICAgICAgICAvLyBFbmQgb2YgdGhlIGxpc3QKLSAg
ICAgICAgICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBDQ0xheWVy
SXRlcmF0b3JQb3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5k
ZXg7Ci0gICAgICAgICAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gMDsKKyAgICAgICAg
ICAgICAgICBpdC5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gQ0NMYXllckl0ZXJh
dG9yVmFsdWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKKyAgICAgICAg
ICAgICAgICBpdC5tX2N1cnJlbnRMYXllckluZGV4ID0gMDsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX3RhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4SGlzdG9yeTsKLSAgICAgICAgICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9
IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0b3J5ICsg
MTsKKyAgICAgICAgICAgIGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBpdC50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0
b3J5OworICAgICAgICAgICAgaXQubV9jdXJyZW50TGF5ZXJJbmRleCA9IGl0LnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+bV9jdXJyZW50TGF5ZXJJbmRleEhpc3RvcnkgKyAxOwogCi0gICAgICAgICAg
ICB0YXJnZXRSZW5kZXJTdXJmYWNlTnVtQ2hpbGRyZW4gPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFj
ZUNoaWxkcmVuKCkuc2l6ZSgpOworICAgICAgICAgICAgdGFyZ2V0UmVuZGVyU3VyZmFjZU51bUNo
aWxkcmVuID0gaXQudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpOwogICAgICAg
ICB9CiAgICAgfQogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBS
ZW5kZXJTdXJmYWNlVHlwZT4KLXZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFj
ZVR5cGU+JiBwb3MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5k
ZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KK3ZvaWQgQ0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlLCBBY3Rpb25UeXBlPiYgaXQpCiB7Ci0gICAgcG9zLnRhcmdldFJlbmRl
clN1cmZhY2VMYXllckluZGV4ID0gMDsKLSAgICBwb3MuY3VycmVudExheWVySW5kZXggPSBwb3Mu
dGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpIC0gMTsKLSAgICBnb1RvSGlnaGVz
dEluU3VidHJlZShwb3MpOworICAgIGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgg
PSAwOworICAgIGl0Lm1fY3VycmVudExheWVySW5kZXggPSBpdC50YXJnZXRSZW5kZXJTdXJmYWNl
Q2hpbGRyZW4oKS5zaXplKCkgLSAxOworICAgIGdvVG9IaWdoZXN0SW5TdWJ0cmVlKGl0KTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+Ci12b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0
eXBlbmFtZSBBY3Rpb25UeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRv
QmFjazo6ZW5kKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBB
Y3Rpb25UeXBlPiYgaXQpCiB7Ci0gICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4
ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4OwotICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IDA7CisgICAgaXQubV90
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclZhbHVlOjpJbnZh
bGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisgICAgaXQubV9jdXJyZW50TGF5ZXJJ
bmRleCA9IDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJl
bmRlclN1cmZhY2VUeXBlPgotdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFj
azo6bmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlPiYgcG9zKQordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRl
clN1cmZhY2VUeXBlLCBBY3Rpb25UeXBlPiYgaXQpCiB7CiAgICAgLy8gTW92ZXMgdG8gdGhlIHBy
ZXZpb3VzIGxheWVyIGluIHRoZSBjdXJyZW50IFJTIGxheWVyIGxpc3QuIFRoZW4gd2UgY2hlY2sg
aWYgdGhlCiAgICAgLy8gbmV3IGN1cnJlbnQgbGF5ZXIgaGFzIGl0cyBvd24gUlMsIGluIHdoaWNo
IGNhc2UgdGhlcmUgYXJlIHRoaW5ncyBpbiB0aGF0IFJTIGxheWVyIGxpc3QgdGhhdCBhcmUgaGln
aGVyLCBzbwpAQCAtMTA5LDYxICsxMDksNjEgQEAgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpGcm9udFRvQmFjazo6bmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUKICAg
ICAvLyBJZiB3ZSBtb3ZlIGJhY2sgcGFzdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3QsIHdlIGp1bXAg
dXAgdG8gdGhlIHByZXZpb3VzIFJTIGxheWVyIGxpc3QsIHBpY2tpbmcgdXAgYWdhaW4gd2hlcmUg
d2UKICAgICAvLyBoYWQgcHJldmlvdXNseSByZWN1cnNlZCBpbnRvIHRoZSBjdXJyZW50IFJTIGxh
eWVyIGxpc3QuCiAKLSAgICBpZiAoIXBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpKSB7CisgICAgaWYgKCFpdC5jdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0
UmVuZGVyU3VyZmFjZSgpKSB7CiAgICAgICAgIC8vIFN1YnRyYWN0aW5nIG9uZSBoZXJlIHdpbGwg
ZXZlbnR1YWxseSBjYXVzZSB0aGUgY3VycmVudCBsYXllciB0byBiZWNvbWUgdGhhdCBsYXllcgog
ICAgICAgICAvLyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZS4KLSAgICAg
ICAgLS1wb3MuY3VycmVudExheWVySW5kZXg7Ci0gICAgICAgIGdvVG9IaWdoZXN0SW5TdWJ0cmVl
KHBvcyk7CisgICAgICAgIC0taXQubV9jdXJyZW50TGF5ZXJJbmRleDsKKyAgICAgICAgZ29Ub0hp
Z2hlc3RJblN1YnRyZWUoaXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlIChwb3MuY3Vy
cmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgewotICAgICAgICAgICAg
aWYgKCFwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIHsKKyAgICAgICAgd2hpbGUg
KGl0LmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAg
ICAgICAgIGlmICghaXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCkgewogICAgICAg
ICAgICAgICAgIC8vIEVuZCBvZiB0aGUgbGlzdAotICAgICAgICAgICAgICAgIHBvcy50YXJnZXRS
ZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWU6Oklu
dmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKLSAgICAgICAgICAgICAgICBwb3Mu
Y3VycmVudExheWVySW5kZXggPSAwOworICAgICAgICAgICAgICAgIGl0Lm1fdGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JWYWx1ZTo6SW52YWxpZFRhcmdldFJl
bmRlclN1cmZhY2VMYXllckluZGV4OworICAgICAgICAgICAgICAgIGl0Lm1fY3VycmVudExheWVy
SW5kZXggPSAwOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5OwotICAg
ICAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+bV9jdXJyZW50TGF5ZXJJbmRleEhpc3Rvcnk7CisgICAgICAgICAgICBpdC5tX3RhcmdldFJl
bmRlclN1cmZhY2VMYXllckluZGV4ID0gaXQudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX3Rhcmdl
dFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeTsKKyAgICAgICAgICAgIGl0Lm1fY3VycmVu
dExheWVySW5kZXggPSBpdC50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5k
ZXhIaXN0b3J5OwogICAgICAgICB9CiAgICAgfQogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5
ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLXZvaWQgQ0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6RnJvbnRUb0JhY2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUg
QWN0aW9uVHlwZT4KK3ZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Omdv
VG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlLCBBY3Rpb25UeXBlPiYgaXQpCiB7Ci0gICAgaWYgKHBvcy5jdXJyZW50TGF5ZXJSZXBy
ZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKQorICAgIGlmIChpdC5jdXJyZW50TGF5ZXJSZXBy
ZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgd2hpbGUg
KHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpKSB7
CisgICAgd2hpbGUgKGl0LmN1cnJlbnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJT
dXJmYWNlKCkpIHsKICAgICAgICAgLy8gU2F2ZSB3aGVyZSB3ZSB3ZXJlIGluIHRoZSBjdXJyZW50
IHRhcmdldCBzdXJmYWNlLCBtb3ZlIHRvIHRoZSBuZXh0IG9uZSwgYW5kIHNhdmUgdGhlIHRhcmdl
dCBzdXJmYWNlIHRoYXQgd2UKICAgICAgICAgLy8gY2FtZSBmcm9tIHRoZXJlIHNvIHdlIGNhbiBn
byBiYWNrIHRvIGl0LgotICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX2N1cnJl
bnRMYXllckluZGV4SGlzdG9yeSA9IHBvcy5jdXJyZW50TGF5ZXJJbmRleDsKLSAgICAgICAgaW50
IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gcG9zLnRhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4OworICAgICAgICBpdC50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVu
dExheWVySW5kZXhIaXN0b3J5ID0gaXQubV9jdXJyZW50TGF5ZXJJbmRleDsKKyAgICAgICAgaW50
IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gaXQubV90YXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXJJbmRleDsKIAotICAgICAgICBmb3IgKExheWVyVHlwZSogbGF5ZXIgPSBwb3MuY3Vy
cmVudExheWVyKCk7IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSAhPSBsYXllcjsgKytw
b3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIHsgfQotICAgICAgICBwb3MuY3VycmVu
dExheWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpIC0g
MTsKKyAgICAgICAgZm9yIChMYXllclR5cGUqIGxheWVyID0gaXQuY3VycmVudExheWVyKCk7IGl0
LnRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpICE9IGxheWVyOyArK2l0Lm1fdGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySW5kZXgpIHsgfQorICAgICAgICBpdC5tX2N1cnJlbnRMYXllckluZGV4ID0g
aXQudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpIC0gMTsKIAotICAgICAgICBw
b3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4
SGlzdG9yeSA9IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgICAgICBpdC50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0
b3J5ID0gcHJldmlvdXNUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CiAgICAgfQogfQogCiAvLyBE
ZWNsYXJlIGVhY2ggb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucyBmb3IgTGF5ZXJDaHJvbWl1bSBhbmQg
Q0NMYXllckltcGwgY2xhc3NlcyBzbyB0aGF0IHRoZXkgYXJlIGxpbmtlZC4KLXRlbXBsYXRlIHZv
aWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2luKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKLXRl
bXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmVuZChDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+
Jik7Ci10ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250Ojpu
ZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT4mKTsKLQotdGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNr
VG9Gcm9udDo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVu
ZGVyU3VyZmFjZT4mKTsKLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFj
a1RvRnJvbnQ6OmVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5k
ZXJTdXJmYWNlPiYpOwotdGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNr
VG9Gcm9udDo6bmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5k
ZXJTdXJmYWNlPiYpOwotCi10ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZy
b250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJl
bmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0
aW9uczo6RnJvbnRUb0JhY2s6OmVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9t
aXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7Ci10ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7Ci10ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdEluU3VidHJlZShD
Q0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0+Jik7Ci0KLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s6Om5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3Vy
ZmFjZT4mKTsKLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s6OmVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJm
YWNlPiYpOwotdGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFj
azo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3Vy
ZmFjZT4mKTsKLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJ
bXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbihDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwg
UmVuZGVyU3VyZmFjZUNocm9taXVtLCBCYWNrVG9Gcm9udD4gJik7Cit0ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yPExh
eWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQmFja1RvRnJvbnQ+Jik7Cit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpuZXh0KENDTGF5
ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIEJhY2tUb0Zy
b250PiYpOworCit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zy
b250OjpiZWdpbihDQ0xheWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwg
QmFja1RvRnJvbnQ+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJh
Y2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZh
Y2UsIEJhY2tUb0Zyb250PiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xheWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDUmVuZGVy
U3VyZmFjZSwgQmFja1RvRnJvbnQ+Jik7CisKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQoQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0s
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgRnJvbnRUb0JhY2s+Jik7Cit0ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXllckl0ZXJhdG9yPExh
eWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgRnJvbnRUb0JhY2s+Jik7Cit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbihDQ0xh
eWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBGcm9udFRv
QmFjaz4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0sIEZyb250VG9CYWNrPiYpOworCit0ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRvcjxD
Q0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBGcm9udFRvQmFjaz4mKTsKK3RlbXBsYXRlIHZv
aWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmVuZChDQ0xheWVySXRlcmF0
b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgRnJvbnRUb0JhY2s+Jik7Cit0ZW1wbGF0
ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbihDQ0xheWVy
SXRlcmF0b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgRnJvbnRUb0JhY2s+Jik7Cit0
ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGln
aGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZSwgRnJvbnRUb0JhY2s+Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0
ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySXRlcmF0b3IuaAppbmRleCA4ZjQxMmM0NGQzZDE0MDQ3MGZkMTJhNzI3YjkxNGU0ZDQ2
ZmJlYjE0Li43ZWFiNmQxNTBiMTllYTFiOTkzYzFjODhjYzJhNDUxZWIzNmRiYTM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySXRlcmF0b3IuaApAQCAtMjUsNyArMjUsNyBAQAogI2lmbmRlZiBDQ0xheWVy
SXRlcmF0b3JfaAogI2RlZmluZSBDQ0xheWVySXRlcmF0b3JfaAogCi0jaW5jbHVkZSAiY2MvQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtODIsNDMgKzgyLDc4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwogCisvLyBOb24tdGVtcGxhdGVkIGNvbnN0YW50cworc3RydWN0IENDTGF5ZXJJdGVy
YXRvclZhbHVlIHsKKyAgICBzdGF0aWMgY29uc3QgaW50IEludmFsaWRUYXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXJJbmRleCA9IC0xOworICAgIC8vIFRoaXMgbXVzdCBiZSAtMSBzaW5jZSB0aGUgaXRl
cmF0b3IgYWN0aW9uIGNvZGUgYXNzdW1lcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGJlCisgICAgLy8g
cmVhY2hlZCBieSBzdWJ0cmFjdGluZyBvbmUgZnJvbSB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0
IGxheWVyIGluIHRoZSBjdXJyZW50CisgICAgLy8gdGFyZ2V0IHN1cmZhY2UncyBjaGlsZCBsYXll
ciBsaXN0LCB3aGljaCBpcyAwLgorICAgIHN0YXRpYyBjb25zdCBpbnQgTGF5ZXJJbmRleFJlcHJl
c2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2UgPSAtMTsKK307CisKIC8vIEFuIGl0ZXJhdG9yIGNs
YXNzIGZvciB3YWxraW5nIG92ZXIgbGF5ZXJzIGluIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRy
ZWUuCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNl
VHlwZSwgdHlwZW5hbWUgSXRlcmF0b3JBY3Rpb25UeXBlPgogY2xhc3MgQ0NMYXllckl0ZXJhdG9y
IHsKICAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlLCBJdGVyYXRvckFjdGlvblR5cGU+IENDTGF5ZXJJdGVyYXRvclR5cGU7CiAKIHB1YmxpYzoK
LSAgICBDQ0xheWVySXRlcmF0b3IoKSB7IH0KKyAgICBDQ0xheWVySXRlcmF0b3IoKSA6IG1fcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCgwKSB7IH0KIAogICAgIHN0YXRpYyBDQ0xheWVySXRlcmF0b3JU
eXBlIGJlZ2luKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KSB7IHJldHVybiBDQ0xheWVySXRlcmF0b3JUeXBlKHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHRydWUpOyB9CiAgICAgc3RhdGljIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kKGNvbnN0
IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSB7IHJl
dHVybiBDQ0xheWVySXRlcmF0b3JUeXBlKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGZhbHNlKTsg
fQogCi0gICAgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3BlcmF0b3IrKygpIHsgQVNTRVJUKG1fYWN0
aW9ucyk7IG1fYWN0aW9ucy0+bmV4dChtX3Bvc2l0aW9uKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENDTGF5ZXJJdGVyYXRvclR5cGUmIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uID09IG90aGVyLm1fcG9zaXRpb247IH0KKyAgICBDQ0xheWVySXRl
cmF0b3JUeXBlJiBvcGVyYXRvcisrKCkgeyBBU1NFUlQobV9hY3Rpb25zKTsgbV9hY3Rpb25zLT5u
ZXh0KCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEND
TGF5ZXJJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90YXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9PSBvdGhlci5tX3RhcmdldFJlbmRlclN1cmZhY2VM
YXllckluZGV4CisgICAgICAgICAgICAmJiBtX2N1cnJlbnRMYXllckluZGV4ID09IG90aGVyLm1f
Y3VycmVudExheWVySW5kZXg7CisgICAgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDQ0xh
eWVySXRlcmF0b3JUeXBlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
IH0KIAotICAgIExheWVyVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRp
b24uY3VycmVudExheWVyKCk7IH0KLSAgICBMYXllclR5cGUqIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KKyAgICBMYXllclR5cGUqIG9wZXJh
dG9yLT4oKSBjb25zdCB7IHJldHVybiBjdXJyZW50TGF5ZXIoKTsgfQorICAgIExheWVyVHlwZSog
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gY3VycmVudExheWVyKCk7IH0KIAotICAgIGJvb2wg
cmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9u
LmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCk7IH0KLSAgICBib29s
IHJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gIXJl
cHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgJiYgbV9wb3NpdGlvbi5jdXJyZW50TGF5ZXJS
ZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpOyB9CisgICAgYm9vbCByZXByZXNl
bnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRMYXllclJlcHJl
c2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCk7IH0KKyAgICBib29sIHJlcHJlc2VudHNDb250cmli
dXRpbmdSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gIXJlcHJlc2VudHNUYXJnZXRSZW5k
ZXJTdXJmYWNlKCkgJiYgY3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1
cmZhY2UoKTsgfQogICAgIGJvb2wgcmVwcmVzZW50c0l0c2VsZigpIGNvbnN0IHsgcmV0dXJuICFy
ZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpICYmICFyZXByZXNlbnRzQ29udHJpYnV0aW5n
UmVuZGVyU3VyZmFjZSgpOyB9CiAKLSAgICBMYXllclR5cGUqIHRhcmdldFJlbmRlclN1cmZhY2VM
YXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24udGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
KCk7IH0KLQogcHJpdmF0ZToKICAgICBDQ0xheWVySXRlcmF0b3IoY29uc3QgVmVjdG9yPFJlZlB0
cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGJvb2wgc3RhcnQpCi0gICAg
ICAgIDogbV9wb3NpdGlvbihyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQotICAgICAgICAsIG1fYWN0
aW9ucyhhZG9wdFB0cihuZXcgSXRlcmF0b3JBY3Rpb25UeXBlKCkpKQorICAgICAgICA6IG1fYWN0
aW9ucyhhZG9wdFB0cihuZXcgSXRlcmF0b3JBY3Rpb25UeXBlKCkpKQorICAgICAgICAsIG1fcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogICAgIHsKICAgICAg
ICAgaWYgKHN0YXJ0ICYmICFyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LT5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBtX2FjdGlvbnMtPmJlZ2luKG1fcG9zaXRpb24pOworICAgICAgICAgICAgbV9hY3Rp
b25zLT5iZWdpbigqdGhpcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fYWN0aW9ucy0+
ZW5kKG1fcG9zaXRpb24pOworICAgICAgICAgICAgbV9hY3Rpb25zLT5lbmQoKnRoaXMpOwogICAg
IH0KIAotICAgIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFj
ZVR5cGU+IG1fcG9zaXRpb247CisgICAgaW5saW5lIExheWVyVHlwZSogY3VycmVudExheWVyKCkg
Y29uc3QgeyByZXR1cm4gY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2Uo
KSA/IHRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpIDogdGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxk
cmVuKClbbV9jdXJyZW50TGF5ZXJJbmRleF0uZ2V0KCk7IH0KKworICAgIGlubGluZSBib29sIGN1
cnJlbnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyBy
ZXR1cm4gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1Rh
cmdldDxMYXllclR5cGU+KGN1cnJlbnRMYXllcigpLCB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIo
KS0+aWQoKSk7IH0KKyAgICBpbmxpbmUgYm9vbCBjdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0
UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudExheWVySW5kZXggPT0gQ0NM
YXllckl0ZXJhdG9yVmFsdWU6OkxheWVySW5kZXhSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJm
YWNlOyB9CisKKyAgICBpbmxpbmUgTGF5ZXJUeXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIo
KSBjb25zdCB7IHJldHVybiAoKm1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdClbbV90YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBpbmxpbmUgUmVuZGVyU3VyZmFjZVR5
cGUqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiB0YXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOyB9CisgICAgaW5saW5lIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8TGF5ZXJUeXBlPiA+JiB0YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKSBjb25zdCB7
IHJldHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpOyB9CisKICAgICBPd25Q
dHI8SXRlcmF0b3JBY3Rpb25UeXBlPiBtX2FjdGlvbnM7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxMYXllclR5cGU+ID4qIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKworICAgIC8vIFRoZSBp
dGVyYXRvcidzIGN1cnJlbnQgcG9zaXRpb24uCisKKyAgICAvLyBBIHBvc2l0aW9uIGluIHRoZSBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LiBUaGlzIHBvaW50cyB0byBhIGxheWVyIHdoaWNoIG93bnMg
dGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UuCisgICAgLy8gVGhpcyBpcyBhIHZhbHVlIGZyb20g
MCB0byBuLTEgKG4gPSBzaXplIG9mIHJlbmRlclN1cmZhY2VMYXllckxpc3QgPSBudW1iZXIgb2Yg
c3VyZmFjZXMpLiBBIHZhbHVlIG91dHNpZGUgb2YKKyAgICAvLyB0aGlzIHJhbmdlIChmb3IgZXhh
bXBsZSwgQ0NMYXllckl0ZXJhdG9yVmFsdWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5
ZXJJbmRleCkgaXMgdXNlZCB0bworICAgIC8vIGluZGljYXRlIGEgcG9zaXRpb24gb3V0c2lkZSB0
aGUgYm91bmRzIG9mIHRoZSB0cmVlLgorICAgIGludCBtX3RhcmdldFJlbmRlclN1cmZhY2VMYXll
ckluZGV4OworICAgIC8vIEEgcG9zaXRpb24gaW4gdGhlIGxpc3Qgb2YgbGF5ZXJzIHRoYXQgYXJl
IGNoaWxkcmVuIG9mIHRoZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlLiBXaGVuIHBvaW50aW5nIHRv
IG9uZSBvZgorICAgIC8vIHRoZXNlIGxheWVycywgdGhpcyBpcyBhIHZhbHVlIGZyb20gMCB0byBu
LTEgKG4gPSBudW1iZXIgb2YgY2hpbGRyZW4pLiBTaW5jZSB0aGUgaXRlcmF0b3IgbXVzdCBhbHNv
IHN0b3AgYXQKKyAgICAvLyB0aGUgbGF5ZXJzIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHN1cmZh
Y2UsIHRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBjdXJyZW50TGF5ZXJJbmRleCB0byBhIHZh
bHVlIG9mCisgICAgLy8gQ0NMYXllckl0ZXJhdG9yVmFsdWU6OkxheWVyUmVwcmVzZW50aW5nVGFy
Z2V0UmVuZGVyU3VyZmFjZS4KKyAgICBpbnQgbV9jdXJyZW50TGF5ZXJJbmRleDsKKworICAgIGZy
aWVuZCBzdHJ1Y3QgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczsKIH07CiAKIC8vIE9yZGVyaW5ncyBm
b3IgaXRlcmF0aW5nIG92ZXIgdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZS4KQEAgLTEyNiwx
NCArMTYxLDE0IEBAIHN0cnVjdCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zIHsKICAgICAvLyBXYWxr
cyBsYXllcnMgc29ydGVkIGJ5IHotb3JkZXIgZnJvbSBiYWNrIHRvIGZyb250LgogICAgIGNsYXNz
IEJhY2tUb0Zyb250IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBM
YXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotICAgICAgICB2b2lkIGJlZ2lu
KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlLCB0eXBlbmFtZSBBY3Rpb25UeXBlPgorICAgICAgICB2b2lkIGJlZ2luKENDTGF5
ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBBY3Rpb25UeXBlPiYpOwog
Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlPgotICAgICAgICB2b2lkIGVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXll
clR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlw
ZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3Vy
ZmFjZVR5cGUsIEFjdGlvblR5cGU+Jik7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExh
eWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci0gICAgICAgIHZvaWQgbmV4dChD
Q0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOwor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KKyAgICAgICAgdm9pZCBuZXh0KENDTGF5ZXJJ
dGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBBY3Rpb25UeXBlPiYpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgaW50IG1faGlnaGVzdFRhcmdldFJlbmRlclN1cmZhY2VMYXll
cjsKQEAgLTE0MiwxOCArMTc3LDE4IEBAIHN0cnVjdCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zIHsK
ICAgICAvLyBXYWxrcyBsYXllcnMgc29ydGVkIGJ5IHotb3JkZXIgZnJvbSBmcm9udCB0byBiYWNr
CiAgICAgY2xhc3MgRnJvbnRUb0JhY2sgewogICAgIHB1YmxpYzoKLSAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci0gICAgICAg
IHZvaWQgYmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJm
YWNlVHlwZT4mKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5h
bWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+CisgICAgICAgIHZvaWQg
YmVnaW4oQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFjdGlv
blR5cGU+Jik7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5h
bWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci0gICAgICAgIHZvaWQgZW5kKENDTGF5ZXJJdGVyYXRvclBv
c2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7CisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFt
ZSBBY3Rpb25UeXBlPgorICAgICAgICB2b2lkIGVuZChDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBl
LCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mKTsKIAotICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLSAgICAgICAg
dm9pZCBuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFj
ZVR5cGU+Jik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1l
IFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBBY3Rpb25UeXBlPgorICAgICAgICB2b2lkIG5l
eHQoQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFjdGlvblR5
cGU+Jik7CiAKICAgICBwcml2YXRlOgotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJU
eXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLSAgICAgICAgdm9pZCBnb1RvSGlnaGVz
dEluU3VidHJlZShDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlPiYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFt
ZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KKyAgICAgICAgdm9pZCBn
b1RvSGlnaGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJm
YWNlVHlwZSwgQWN0aW9uVHlwZT4mKTsKICAgICB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yUG9z
aXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIx
ZjYzYzQ1Zjc0MmMwM2M2MGRlZjliMjE3Mzg0MGFmYjg2YzMyNjMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24uaAorKysgL2Rldi9udWxs
CkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb25faAotI2RlZmluZSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbl9oCi0KLSNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKLQotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gTm9u
LXRlbXBsYXRlZCBjb25zdGFudHMKLXN0cnVjdCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVl
IHsKLSAgICBzdGF0aWMgY29uc3QgaW50IEludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJ
bmRleCA9IC0xOwotICAgIC8vIFRoaXMgbXVzdCBiZSAtMSBzaW5jZSB0aGUgaXRlcmF0b3IgYWN0
aW9uIGNvZGUgYXNzdW1lcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGJlCi0gICAgLy8gcmVhY2hlZCBi
eSBzdWJ0cmFjdGluZyBvbmUgZnJvbSB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGxheWVyIGlu
IHRoZSBjdXJyZW50Ci0gICAgLy8gdGFyZ2V0IHN1cmZhY2UncyBjaGlsZCBsYXllciBsaXN0LCB3
aGljaCBpcyAwLgotICAgIHN0YXRpYyBjb25zdCBpbnQgTGF5ZXJJbmRleFJlcHJlc2VudGluZ1Rh
cmdldFJlbmRlclN1cmZhY2UgPSAtMTsKLX07Ci0KLS8vIEEgc3RydWN0IHRvIGhvbGQgdGhlIGl0
ZXJhdG9yJ3MgY3VycmVudCBwb3NpdGlvbiwgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSB2YXJpb3Vz
IENDTGF5ZXJJdGVyYXRvckFjdGlvbiBmdW5jdGlvbnMsIGZvciB0aGVtIHRvCi0vLyByZWFkIGFu
ZCB1cGRhdGUuIFRoaXMgc3RydWN0IGV4aXN0cyBzbyB0aGUgdGVtcGxhdGVkIGFjdGlvbiBmdW5j
dGlvbnMgZG9uJ3QgbmVlZCB0byBhY2Nlc3MgdGhlIENDTGF5ZXJJdGVyYXRvciBjbGFzcy4KLS8v
Ci0vLyBUaGVyZSBpcyBhIDE6MSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhbiBpbnN0YW5jZSBvZiB0
aGUgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24gY2xhc3MgYW5kIGEgQ0NMYXllckl0ZXJhdG9yQWN0
aW9uczo6Rm9vIGNsYXNzLAotLy8gc28gYW4gaXRlcmF0b3IgYWN0aW9uIGNsYXNzIGNhbiBob2xk
IGV4dHJhIHBvc2l0aW9uIGRhdGEsIGlmIHJlcXVpcmVkLCBpbiBpdHMgb3duIGNsYXNzIGluc3Rh
bmNlLgotLy8KLS8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBpdGVyYXRvciBpcyBoZWxk
IGluIHR3byBpbnRlZ2VyIHZhcmlhYmxlcy4KLS8vIC0gVGhlIHRhcmdldFJlbmRlclN1cmZhY2VM
YXllckluZGV4IGlzIGEgcG9zaXRpb24gaW4gdGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QuIFRo
aXMgcG9pbnRzIHRvIGEgbGF5ZXIgd2hpY2ggb3ducyB0aGUgY3VycmVudAotLy8gdGFyZ2V0IHN1
cmZhY2UuIFRoaXMgaXMgYSB2YWx1ZSBmcm9tIDAgdG8gbi0xIChuID0gc2l6ZSBvZiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0ID0gbnVtYmVyIG9mIHN1cmZhY2VzKS4gQSB2YWx1ZSBvdXRzaWRlIG9m
Ci0vLyB0aGlzIHJhbmdlIChmb3IgZXhhbXBsZSwgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1
ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4KSBpcyB1c2VkIHRvIGluZGlj
YXRlIGEgcG9zaXRpb24KLS8vIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgdHJlZS4KLS8vIC0g
VGhlIGN1cnJlbnRMYXllckluZGV4IGlzIGEgcG9zaXRpb24gaW4gdGhlIGxpc3Qgb2YgbGF5ZXJz
IHRoYXQgYXJlIGNoaWxkcmVuIG9mIHRoZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlLiBXaGVuIHBv
aW50aW5nIHRvCi0vLyBvbmUgb2YgdGhlc2UgbGF5ZXJzLCB0aGlzIGlzIGEgdmFsdWUgZnJvbSAw
IHRvIG4tMSAobiA9IG51bWJlciBvZiBjaGlsZHJlbikuIFNpbmNlIHRoZSBpdGVyYXRvciBtdXN0
IGFsc28gc3RvcCBhdCB0aGUgbGF5ZXJzCi0vLyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBzdXJm
YWNlLCB0aGlzIGlzIGRvbmUgYnkgc2V0dGluZyB0aGUgY3VycmVudExheWVySW5kZXggdG8gYSB2
YWx1ZSBvZgotLy8gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6TGF5ZXJSZXByZXNlbnRp
bmdUYXJnZXRSZW5kZXJTdXJmYWNlLgotdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLXN0cnVjdCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbiB7
Ci0gICAgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24oKSA6IHJlbmRlclN1cmZhY2VMYXllckxpc3Qo
MCkgeyB9Ci0gICAgZXhwbGljaXQgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24oY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpIDogcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSB7IH0KLQotICAgIGlubGluZSBM
YXllclR5cGUqIGN1cnJlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRMYXllclJlcHJl
c2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgPyB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSA6
IHRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpW2N1cnJlbnRMYXllckluZGV4XS5nZXQoKTsg
fQotCi0gICAgaW5saW5lIGJvb2wgY3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1Jl
bmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBDQ0xheWVyVHJlZUhvc3RDb21tb246OnJlbmRl
clN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0PExheWVyVHlwZT4oY3VycmVudExheWVyKCksIHRh
cmdldFJlbmRlclN1cmZhY2VMYXllcigpLT5pZCgpKTsgfQotICAgIGlubGluZSBib29sIGN1cnJl
bnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gY3Vy
cmVudExheWVySW5kZXggPT0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6TGF5ZXJJbmRl
eFJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2U7IH0KLQotICAgIGlubGluZSBMYXllclR5
cGUqIHRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpIGNvbnN0IHsgcmV0dXJuICgqcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdClbdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhdLmdldCgpOyB9Ci0g
ICAgaW5saW5lIFJlbmRlclN1cmZhY2VUeXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3Qg
eyByZXR1cm4gdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKCktPnJlbmRlclN1cmZhY2UoKTsgfQot
ICAgIGlubGluZSBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYgdGFyZ2V0UmVuZGVy
U3VyZmFjZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5s
YXllckxpc3QoKTsgfQotCi0gICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDQ0xheWVy
SXRlcmF0b3JQb3NpdGlvbiYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPT0gb3RoZXIudGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVySW5kZXgKLSAgICAgICAgICAgICYmIGN1cnJlbnRMYXllckluZGV4ID09IG90aGVyLmN1cnJl
bnRMYXllckluZGV4OwotICAgIH0KLQotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBl
PiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIGludCB0YXJnZXRSZW5kZXJTdXJmYWNl
TGF5ZXJJbmRleDsKLSAgICBpbnQgY3VycmVudExheWVySW5kZXg7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121923</attachid>
            <date>2012-01-10 15:50:53 -0800</date>
            <delta_ts>2012-02-22 09:56:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75864-20120110185052.patch</filename>
            <type>text/plain</type>
            <size>31443</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmU2NWE0Njg3NWRhZTg1
NDJkZjVhOGNhMTQ5NmNhMjAwOGEwODg3Zi4uODNmMTAyYTRlN2RmM2MzM2Y3OTk5OWJhMDNjN2I3
ZDIwODllZjVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM2IEBACiAyMDEyLTAxLTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gUHVz
aCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbiBzdHJ1Y3QgaW50byBDQ0xheWVySXRlcmF0b3IgY2xh
c3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg2
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250
OjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250
VG9CYWNrOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpGcm9udFRvQmFjazo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdEluU3VidHJlZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OkNDTGF5ZXJJdGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OnJlcHJl
c2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvcjo6cmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckl0ZXJhdG9yOjpjdXJyZW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yOjpjdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVy
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OmN1cnJlbnRMYXll
clJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvcjo6dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvcjo6dGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySXRlcmF0b3I6OnRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24u
aDogUmVtb3ZlZC4KKworMjAxMi0wMS0wOSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVt
Lm9yZz4KKwogICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBpdGVyYXRvcnMgZm9yIHRoZSBSZW5k
ZXJTdXJmYWNlLUxheWVyIHRyZWUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc0MjAzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxMjkxODFhZmIzYmIxODM4
ZjM2YjhjM2JjMWRmZjU0ZGU2YWIzY2FiLi42MTg5ZGEzODZjNDA1MTk1MThkNzZiZTg0ZjMxNzMy
ODZjNmI3YjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNjIzLDcgKzM2MjMsNiBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
dGVyYXRvci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySXRlcmF0b3JQb3NpdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyUXVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySXRlcmF0b3IuY3BwCmluZGV4IDA3NjdmZjBlNzY2Yzk2MzQwNjM1N2VkZWYyOWJjNmQ1YTkw
ODkyZjguLjk3ZDZkMTg1YTA0YzcyMTFlYmJiMmFjODJmNTUzYzQyMjM5OWVmNDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
dGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcApAQCAtMzUsNzMgKzM1LDczIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVu
ZGVyU3VyZmFjZVR5cGU+Ci12b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250
OjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlPiYgcG9zKQordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbihDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5k
ZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mIGl0KQogewotICAgIHBvcy50YXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXJJbmRleCA9IDA7Ci0gICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6TGF5ZXJJbmRleFJlcHJlc2VudGluZ1RhcmdldFJlbmRl
clN1cmZhY2U7CisgICAgaXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IDA7Cisg
ICAgaXQubV9jdXJyZW50TGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclZhbHVlOjpMYXllcklu
ZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsKIAogICAgIG1faGlnaGVzdFRhcmdl
dFJlbmRlclN1cmZhY2VMYXllciA9IDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5
cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rp
b25zOjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwg
UmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0
eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KK3ZvaWQgQ0NM
YXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmVuZChDQ0xheWVySXRlcmF0b3I8TGF5
ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mIGl0KQogewotICAgIHBvcy50
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFs
dWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKLSAgICBwb3MuY3VycmVu
dExheWVySW5kZXggPSAwOworICAgIGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgg
PSBDQ0xheWVySXRlcmF0b3JWYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllcklu
ZGV4OworICAgIGl0Lm1fY3VycmVudExheWVySW5kZXggPSAwOwogfQogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLXZvaWQgQ0NMYXll
ckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRp
b248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBBY3Rpb25U
eXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xh
eWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mIGl0
KQogewogICAgIC8vIElmIHRoZSBjdXJyZW50IGxheWVyIGhhcyBhIFJTLCBtb3ZlIHRvIGl0cyBs
YXllciBsaXN0LiBPdGhlcndpc2UsIHZpc2l0IHRoZSBuZXh0IGxheWVyIGluIHRoZSBjdXJyZW50
IFJTIGxheWVyIGxpc3QuCi0gICAgaWYgKHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJp
YnV0aW5nUmVuZGVyU3VyZmFjZSgpKSB7CisgICAgaWYgKGl0LmN1cnJlbnRMYXllclJlcHJlc2Vu
dHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKICAgICAgICAgLy8gU2F2ZSBvdXIgcG9z
aXRpb24gaW4gdGhlIGNoaWxkTGF5ZXIgbGlzdCBmb3IgdGhlIFJlbmRlclN1cmZhY2UsIHRoZW4g
anVtcCB0byB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlLiBTYXZlIHdoZXJlIHdlCiAgICAgICAgIC8v
IGNhbWUgZnJvbSBpbiB0aGUgbmV4dCBSZW5kZXJTdXJmYWNlIHNvIHdlIGNhbiBnZXQgYmFjayB0
byBpdC4KLSAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2UoKS0+bV9jdXJyZW50TGF5ZXJJ
bmRleEhpc3RvcnkgPSBwb3MuY3VycmVudExheWVySW5kZXg7Ci0gICAgICAgIGludCBwcmV2aW91
c1RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJ
bmRleDsKKyAgICAgICAgaXQudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX2N1cnJlbnRMYXllcklu
ZGV4SGlzdG9yeSA9IGl0Lm1fY3VycmVudExheWVySW5kZXg7CisgICAgICAgIGludCBwcmV2aW91
c1RhcmdldFJlbmRlclN1cmZhY2VMYXllciA9IGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
SW5kZXg7CiAKLSAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gKytt
X2hpZ2hlc3RUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7Ci0gICAgICAgIHBvcy5jdXJyZW50TGF5
ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWU6OkxheWVySW5kZXhSZXByZXNl
bnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOworICAgICAgICBpdC5tX3RhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4ID0gKyttX2hpZ2hlc3RUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAg
ICAgIGl0Lm1fY3VycmVudExheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JWYWx1ZTo6TGF5ZXJJ
bmRleFJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2U7CiAKLSAgICAgICAgcG9zLnRhcmdl
dFJlbmRlclN1cmZhY2UoKS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3Rvcnkg
PSBwcmV2aW91c1RhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgaXQudGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpLT5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeSA9IHBy
ZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICsr
cG9zLmN1cnJlbnRMYXllckluZGV4OworICAgICAgICArK2l0Lm1fY3VycmVudExheWVySW5kZXg7
CiAKLSAgICAgICAgaW50IHRhcmdldFJlbmRlclN1cmZhY2VOdW1DaGlsZHJlbiA9IHBvcy50YXJn
ZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCk7Ci0gICAgICAgIHdoaWxlIChwb3MuY3Vy
cmVudExheWVySW5kZXggPT0gdGFyZ2V0UmVuZGVyU3VyZmFjZU51bUNoaWxkcmVuKSB7CisgICAg
ICAgIGludCB0YXJnZXRSZW5kZXJTdXJmYWNlTnVtQ2hpbGRyZW4gPSBpdC50YXJnZXRSZW5kZXJT
dXJmYWNlQ2hpbGRyZW4oKS5zaXplKCk7CisgICAgICAgIHdoaWxlIChpdC5tX2N1cnJlbnRMYXll
ckluZGV4ID09IHRhcmdldFJlbmRlclN1cmZhY2VOdW1DaGlsZHJlbikgewogICAgICAgICAgICAg
Ly8gSnVtcCBiYWNrIHRvIHRoZSBwcmV2aW91cyBSZW5kZXJTdXJmYWNlLCBhbmQgZ2V0IGJhY2sg
dGhlIHBvc2l0aW9uIHdoZXJlIHdlIHdlcmUgaW4gdGhhdCBsaXN0LCBhbmQgbW92ZSB0byB0aGUg
bmV4dCBwb3NpdGlvbiB0aGVyZS4KLSAgICAgICAgICAgIGlmICghcG9zLnRhcmdldFJlbmRlclN1
cmZhY2VMYXllckluZGV4KSB7CisgICAgICAgICAgICBpZiAoIWl0Lm1fdGFyZ2V0UmVuZGVyU3Vy
ZmFjZUxheWVySW5kZXgpIHsKICAgICAgICAgICAgICAgICAvLyBFbmQgb2YgdGhlIGxpc3QKLSAg
ICAgICAgICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBDQ0xheWVy
SXRlcmF0b3JQb3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5k
ZXg7Ci0gICAgICAgICAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gMDsKKyAgICAgICAg
ICAgICAgICBpdC5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gQ0NMYXllckl0ZXJh
dG9yVmFsdWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKKyAgICAgICAg
ICAgICAgICBpdC5tX2N1cnJlbnRMYXllckluZGV4ID0gMDsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX3RhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4SGlzdG9yeTsKLSAgICAgICAgICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9
IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0b3J5ICsg
MTsKKyAgICAgICAgICAgIGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBpdC50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0
b3J5OworICAgICAgICAgICAgaXQubV9jdXJyZW50TGF5ZXJJbmRleCA9IGl0LnRhcmdldFJlbmRl
clN1cmZhY2UoKS0+bV9jdXJyZW50TGF5ZXJJbmRleEhpc3RvcnkgKyAxOwogCi0gICAgICAgICAg
ICB0YXJnZXRSZW5kZXJTdXJmYWNlTnVtQ2hpbGRyZW4gPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFj
ZUNoaWxkcmVuKCkuc2l6ZSgpOworICAgICAgICAgICAgdGFyZ2V0UmVuZGVyU3VyZmFjZU51bUNo
aWxkcmVuID0gaXQudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpOwogICAgICAg
ICB9CiAgICAgfQogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBS
ZW5kZXJTdXJmYWNlVHlwZT4KLXZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFj
ZVR5cGU+JiBwb3MpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5k
ZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KK3ZvaWQgQ0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJl
bmRlclN1cmZhY2VUeXBlLCBBY3Rpb25UeXBlPiYgaXQpCiB7Ci0gICAgcG9zLnRhcmdldFJlbmRl
clN1cmZhY2VMYXllckluZGV4ID0gMDsKLSAgICBwb3MuY3VycmVudExheWVySW5kZXggPSBwb3Mu
dGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpIC0gMTsKLSAgICBnb1RvSGlnaGVz
dEluU3VidHJlZShwb3MpOworICAgIGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgg
PSAwOworICAgIGl0Lm1fY3VycmVudExheWVySW5kZXggPSBpdC50YXJnZXRSZW5kZXJTdXJmYWNl
Q2hpbGRyZW4oKS5zaXplKCkgLSAxOworICAgIGdvVG9IaWdoZXN0SW5TdWJ0cmVlKGl0KTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+Ci12b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXll
ckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0
eXBlbmFtZSBBY3Rpb25UeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRv
QmFjazo6ZW5kKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBB
Y3Rpb25UeXBlPiYgaXQpCiB7Ci0gICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4
ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4OwotICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IDA7CisgICAgaXQubV90
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclZhbHVlOjpJbnZh
bGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisgICAgaXQubV9jdXJyZW50TGF5ZXJJ
bmRleCA9IDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJl
bmRlclN1cmZhY2VUeXBlPgotdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFj
azo6bmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlPiYgcG9zKQordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRl
clN1cmZhY2VUeXBlLCBBY3Rpb25UeXBlPiYgaXQpCiB7CiAgICAgLy8gTW92ZXMgdG8gdGhlIHBy
ZXZpb3VzIGxheWVyIGluIHRoZSBjdXJyZW50IFJTIGxheWVyIGxpc3QuIFRoZW4gd2UgY2hlY2sg
aWYgdGhlCiAgICAgLy8gbmV3IGN1cnJlbnQgbGF5ZXIgaGFzIGl0cyBvd24gUlMsIGluIHdoaWNo
IGNhc2UgdGhlcmUgYXJlIHRoaW5ncyBpbiB0aGF0IFJTIGxheWVyIGxpc3QgdGhhdCBhcmUgaGln
aGVyLCBzbwpAQCAtMTA5LDYxICsxMDksNjEgQEAgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpGcm9udFRvQmFjazo6bmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUKICAg
ICAvLyBJZiB3ZSBtb3ZlIGJhY2sgcGFzdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3QsIHdlIGp1bXAg
dXAgdG8gdGhlIHByZXZpb3VzIFJTIGxheWVyIGxpc3QsIHBpY2tpbmcgdXAgYWdhaW4gd2hlcmUg
d2UKICAgICAvLyBoYWQgcHJldmlvdXNseSByZWN1cnNlZCBpbnRvIHRoZSBjdXJyZW50IFJTIGxh
eWVyIGxpc3QuCiAKLSAgICBpZiAoIXBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpKSB7CisgICAgaWYgKCFpdC5jdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0
UmVuZGVyU3VyZmFjZSgpKSB7CiAgICAgICAgIC8vIFN1YnRyYWN0aW5nIG9uZSBoZXJlIHdpbGwg
ZXZlbnR1YWxseSBjYXVzZSB0aGUgY3VycmVudCBsYXllciB0byBiZWNvbWUgdGhhdCBsYXllcgog
ICAgICAgICAvLyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZS4KLSAgICAg
ICAgLS1wb3MuY3VycmVudExheWVySW5kZXg7Ci0gICAgICAgIGdvVG9IaWdoZXN0SW5TdWJ0cmVl
KHBvcyk7CisgICAgICAgIC0taXQubV9jdXJyZW50TGF5ZXJJbmRleDsKKyAgICAgICAgZ29Ub0hp
Z2hlc3RJblN1YnRyZWUoaXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlIChwb3MuY3Vy
cmVudExheWVyUmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgewotICAgICAgICAgICAg
aWYgKCFwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIHsKKyAgICAgICAgd2hpbGUg
KGl0LmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICAg
ICAgICAgIGlmICghaXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCkgewogICAgICAg
ICAgICAgICAgIC8vIEVuZCBvZiB0aGUgbGlzdAotICAgICAgICAgICAgICAgIHBvcy50YXJnZXRS
ZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWU6Oklu
dmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKLSAgICAgICAgICAgICAgICBwb3Mu
Y3VycmVudExheWVySW5kZXggPSAwOworICAgICAgICAgICAgICAgIGl0Lm1fdGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JWYWx1ZTo6SW52YWxpZFRhcmdldFJl
bmRlclN1cmZhY2VMYXllckluZGV4OworICAgICAgICAgICAgICAgIGl0Lm1fY3VycmVudExheWVy
SW5kZXggPSAwOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IHBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5OwotICAg
ICAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+bV9jdXJyZW50TGF5ZXJJbmRleEhpc3Rvcnk7CisgICAgICAgICAgICBpdC5tX3RhcmdldFJl
bmRlclN1cmZhY2VMYXllckluZGV4ID0gaXQudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX3Rhcmdl
dFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeTsKKyAgICAgICAgICAgIGl0Lm1fY3VycmVu
dExheWVySW5kZXggPSBpdC50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5k
ZXhIaXN0b3J5OwogICAgICAgICB9CiAgICAgfQogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5
ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLXZvaWQgQ0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6RnJvbnRUb0JhY2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUg
QWN0aW9uVHlwZT4KK3ZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Omdv
VG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlLCBBY3Rpb25UeXBlPiYgaXQpCiB7Ci0gICAgaWYgKHBvcy5jdXJyZW50TGF5ZXJSZXBy
ZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKQorICAgIGlmIChpdC5jdXJyZW50TGF5ZXJSZXBy
ZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgd2hpbGUg
KHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpKSB7
CisgICAgd2hpbGUgKGl0LmN1cnJlbnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJT
dXJmYWNlKCkpIHsKICAgICAgICAgLy8gU2F2ZSB3aGVyZSB3ZSB3ZXJlIGluIHRoZSBjdXJyZW50
IHRhcmdldCBzdXJmYWNlLCBtb3ZlIHRvIHRoZSBuZXh0IG9uZSwgYW5kIHNhdmUgdGhlIHRhcmdl
dCBzdXJmYWNlIHRoYXQgd2UKICAgICAgICAgLy8gY2FtZSBmcm9tIHRoZXJlIHNvIHdlIGNhbiBn
byBiYWNrIHRvIGl0LgotICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX2N1cnJl
bnRMYXllckluZGV4SGlzdG9yeSA9IHBvcy5jdXJyZW50TGF5ZXJJbmRleDsKLSAgICAgICAgaW50
IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gcG9zLnRhcmdldFJlbmRlclN1cmZh
Y2VMYXllckluZGV4OworICAgICAgICBpdC50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVu
dExheWVySW5kZXhIaXN0b3J5ID0gaXQubV9jdXJyZW50TGF5ZXJJbmRleDsKKyAgICAgICAgaW50
IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyID0gaXQubV90YXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXJJbmRleDsKIAotICAgICAgICBmb3IgKExheWVyVHlwZSogbGF5ZXIgPSBwb3MuY3Vy
cmVudExheWVyKCk7IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSAhPSBsYXllcjsgKytw
b3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIHsgfQotICAgICAgICBwb3MuY3VycmVu
dExheWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpIC0g
MTsKKyAgICAgICAgZm9yIChMYXllclR5cGUqIGxheWVyID0gaXQuY3VycmVudExheWVyKCk7IGl0
LnRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpICE9IGxheWVyOyArK2l0Lm1fdGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySW5kZXgpIHsgfQorICAgICAgICBpdC5tX2N1cnJlbnRMYXllckluZGV4ID0g
aXQudGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkuc2l6ZSgpIC0gMTsKIAotICAgICAgICBw
b3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4
SGlzdG9yeSA9IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOworICAgICAgICBpdC50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0
b3J5ID0gcHJldmlvdXNUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CiAgICAgfQogfQogCiAvLyBE
ZWNsYXJlIGVhY2ggb2YgdGhlIGFib3ZlIGZ1bmN0aW9ucyBmb3IgTGF5ZXJDaHJvbWl1bSBhbmQg
Q0NMYXllckltcGwgY2xhc3NlcyBzbyB0aGF0IHRoZXkgYXJlIGxpbmtlZC4KLXRlbXBsYXRlIHZv
aWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2luKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKLXRl
bXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmVuZChDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+
Jik7Ci10ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250Ojpu
ZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT4mKTsKLQotdGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNr
VG9Gcm9udDo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVu
ZGVyU3VyZmFjZT4mKTsKLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFj
a1RvRnJvbnQ6OmVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5k
ZXJTdXJmYWNlPiYpOwotdGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNr
VG9Gcm9udDo6bmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5k
ZXJTdXJmYWNlPiYpOwotCi10ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZy
b250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJl
bmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0
aW9uczo6RnJvbnRUb0JhY2s6OmVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9t
aXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7Ci10ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+Jik7Ci10ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdEluU3VidHJlZShD
Q0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0+Jik7Ci0KLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s6Om5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3Vy
ZmFjZT4mKTsKLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s6OmVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJm
YWNlPiYpOwotdGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFj
azo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3Vy
ZmFjZT4mKTsKLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJ
bXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbihDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwg
UmVuZGVyU3VyZmFjZUNocm9taXVtLCBCYWNrVG9Gcm9udD4gJik7Cit0ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yPExh
eWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQmFja1RvRnJvbnQ+Jik7Cit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpuZXh0KENDTGF5
ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIEJhY2tUb0Zy
b250PiYpOworCit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zy
b250OjpiZWdpbihDQ0xheWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwg
QmFja1RvRnJvbnQ+Jik7Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJh
Y2tUb0Zyb250OjplbmQoQ0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZh
Y2UsIEJhY2tUb0Zyb250PiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpCYWNrVG9Gcm9udDo6bmV4dChDQ0xheWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDUmVuZGVy
U3VyZmFjZSwgQmFja1RvRnJvbnQ+Jik7CisKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9y
QWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQoQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0s
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgRnJvbnRUb0JhY2s+Jik7Cit0ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXllckl0ZXJhdG9yPExh
eWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgRnJvbnRUb0JhY2s+Jik7Cit0ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbihDQ0xh
eWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCBGcm9udFRv
QmFjaz4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0Jh
Y2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0sIEZyb250VG9CYWNrPiYpOworCit0ZW1wbGF0ZSB2b2lkIEND
TGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVyYXRvcjxD
Q0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBGcm9udFRvQmFjaz4mKTsKK3RlbXBsYXRlIHZv
aWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmVuZChDQ0xheWVySXRlcmF0
b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgRnJvbnRUb0JhY2s+Jik7Cit0ZW1wbGF0
ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbihDQ0xheWVy
SXRlcmF0b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgRnJvbnRUb0JhY2s+Jik7Cit0
ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGln
aGVzdEluU3VidHJlZShDQ0xheWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZSwgRnJvbnRUb0JhY2s+Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0
ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySXRlcmF0b3IuaAppbmRleCA4ZjQxMmM0NGQzZDE0MDQ3MGZkMTJhNzI3YjkxNGU0ZDQ2
ZmJlYjE0Li4zZjM1YTYzODhkZWU0YjVmMzczMWMyMTg5YzI5NWNmMDVlM2Y5ZmY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySXRlcmF0b3IuaApAQCAtMjUsNyArMjUsNyBAQAogI2lmbmRlZiBDQ0xheWVy
SXRlcmF0b3JfaAogI2RlZmluZSBDQ0xheWVySXRlcmF0b3JfaAogCi0jaW5jbHVkZSAiY2MvQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtODIsNDMgKzgyLDc3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwogCisvLyBOb24tdGVtcGxhdGVkIGNvbnN0YW50cworc3RydWN0IENDTGF5ZXJJdGVy
YXRvclZhbHVlIHsKKyAgICBzdGF0aWMgY29uc3QgaW50IEludmFsaWRUYXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXJJbmRleCA9IC0xOworICAgIC8vIFRoaXMgbXVzdCBiZSAtMSBzaW5jZSB0aGUgaXRl
cmF0b3IgYWN0aW9uIGNvZGUgYXNzdW1lcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGJlCisgICAgLy8g
cmVhY2hlZCBieSBzdWJ0cmFjdGluZyBvbmUgZnJvbSB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0
IGxheWVyIGluIHRoZSBjdXJyZW50CisgICAgLy8gdGFyZ2V0IHN1cmZhY2UncyBjaGlsZCBsYXll
ciBsaXN0LCB3aGljaCBpcyAwLgorICAgIHN0YXRpYyBjb25zdCBpbnQgTGF5ZXJJbmRleFJlcHJl
c2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2UgPSAtMTsKK307CisKIC8vIEFuIGl0ZXJhdG9yIGNs
YXNzIGZvciB3YWxraW5nIG92ZXIgbGF5ZXJzIGluIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRy
ZWUuCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNl
VHlwZSwgdHlwZW5hbWUgSXRlcmF0b3JBY3Rpb25UeXBlPgogY2xhc3MgQ0NMYXllckl0ZXJhdG9y
IHsKICAgICB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlLCBJdGVyYXRvckFjdGlvblR5cGU+IENDTGF5ZXJJdGVyYXRvclR5cGU7CiAKIHB1YmxpYzoK
LSAgICBDQ0xheWVySXRlcmF0b3IoKSB7IH0KKyAgICBDQ0xheWVySXRlcmF0b3IoKSA6IG1fcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCgwKSB7IH0KIAogICAgIHN0YXRpYyBDQ0xheWVySXRlcmF0b3JU
eXBlIGJlZ2luKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KSB7IHJldHVybiBDQ0xheWVySXRlcmF0b3JUeXBlKHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHRydWUpOyB9CiAgICAgc3RhdGljIENDTGF5ZXJJdGVyYXRvclR5cGUgZW5kKGNvbnN0
IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KSB7IHJl
dHVybiBDQ0xheWVySXRlcmF0b3JUeXBlKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGZhbHNlKTsg
fQogCi0gICAgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3BlcmF0b3IrKygpIHsgQVNTRVJUKG1fYWN0
aW9ucyk7IG1fYWN0aW9ucy0+bmV4dChtX3Bvc2l0aW9uKTsgcmV0dXJuICp0aGlzOyB9Ci0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENDTGF5ZXJJdGVyYXRvclR5cGUmIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uID09IG90aGVyLm1fcG9zaXRpb247IH0KKyAgICBDQ0xheWVySXRl
cmF0b3JUeXBlJiBvcGVyYXRvcisrKCkgeyBtX2FjdGlvbnMubmV4dCgqdGhpcyk7IHJldHVybiAq
dGhpczsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDQ0xheWVySXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
SW5kZXggPT0gb3RoZXIubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleAorICAgICAgICAg
ICAgJiYgbV9jdXJyZW50TGF5ZXJJbmRleCA9PSBvdGhlci5tX2N1cnJlbnRMYXllckluZGV4Owor
ICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKLSAgICBMYXllclR5cGUq
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLmN1cnJlbnRMYXllcigpOyB9
Ci0gICAgTGF5ZXJUeXBlKiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLmN1
cnJlbnRMYXllcigpOyB9CisgICAgTGF5ZXJUeXBlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gY3VycmVudExheWVyKCk7IH0KKyAgICBMYXllclR5cGUqIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuIGN1cnJlbnRMYXllcigpOyB9CiAKLSAgICBib29sIHJlcHJlc2VudHNUYXJnZXRSZW5k
ZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbi5jdXJyZW50TGF5ZXJSZXByZXNl
bnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpOyB9Ci0gICAgYm9vbCByZXByZXNlbnRzQ29udHJpYnV0
aW5nUmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuICFyZXByZXNlbnRzVGFyZ2V0UmVuZGVy
U3VyZmFjZSgpICYmIG1fcG9zaXRpb24uY3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGlu
Z1JlbmRlclN1cmZhY2UoKTsgfQorICAgIGJvb2wgcmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZh
Y2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpOyB9CisgICAgYm9vbCByZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuICFyZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpICYmIGN1cnJl
bnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCk7IH0KICAgICBib29s
IHJlcHJlc2VudHNJdHNlbGYoKSBjb25zdCB7IHJldHVybiAhcmVwcmVzZW50c1RhcmdldFJlbmRl
clN1cmZhY2UoKSAmJiAhcmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKTsgfQog
Ci0gICAgTGF5ZXJUeXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX3Bvc2l0aW9uLnRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpOyB9Ci0KIHByaXZhdGU6CiAg
ICAgQ0NMYXllckl0ZXJhdG9yKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBib29sIHN0YXJ0KQotICAgICAgICA6IG1fcG9zaXRpb24ocmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCkKLSAgICAgICAgLCBtX2FjdGlvbnMoYWRvcHRQdHIobmV3IEl0
ZXJhdG9yQWN0aW9uVHlwZSgpKSkKKyAgICAgICAgOiBtX3JlbmRlclN1cmZhY2VMYXllckxpc3Qo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKICAgICB7CiAgICAgICAgIGlmIChzdGFydCAmJiAhcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgbV9hY3Rpb25zLT5i
ZWdpbihtX3Bvc2l0aW9uKTsKKyAgICAgICAgICAgIG1fYWN0aW9ucy5iZWdpbigqdGhpcyk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fYWN0aW9ucy0+ZW5kKG1fcG9zaXRpb24pOworICAg
ICAgICAgICAgbV9hY3Rpb25zLmVuZCgqdGhpcyk7CiAgICAgfQogCi0gICAgQ0NMYXllckl0ZXJh
dG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4gbV9wb3NpdGlvbjsKLSAg
ICBPd25QdHI8SXRlcmF0b3JBY3Rpb25UeXBlPiBtX2FjdGlvbnM7CisgICAgaW5saW5lIExheWVy
VHlwZSogY3VycmVudExheWVyKCkgY29uc3QgeyByZXR1cm4gY3VycmVudExheWVyUmVwcmVzZW50
c1RhcmdldFJlbmRlclN1cmZhY2UoKSA/IHRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpIDogdGFy
Z2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKClbbV9jdXJyZW50TGF5ZXJJbmRleF0uZ2V0KCk7IH0K
KworICAgIGlubGluZSBib29sIGN1cnJlbnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5k
ZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpyZW5kZXJT
dXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxMYXllclR5cGU+KGN1cnJlbnRMYXllcigpLCB0YXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKS0+aWQoKSk7IH0KKyAgICBpbmxpbmUgYm9vbCBjdXJyZW50
TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
cmVudExheWVySW5kZXggPT0gQ0NMYXllckl0ZXJhdG9yVmFsdWU6OkxheWVySW5kZXhSZXByZXNl
bnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOyB9CisKKyAgICBpbmxpbmUgTGF5ZXJUeXBlKiB0YXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSBjb25zdCB7IHJldHVybiAoKm1fcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdClbbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleF0uZ2V0KCk7IH0KKyAgICBp
bmxpbmUgUmVuZGVyU3VyZmFjZVR5cGUqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJl
dHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOyB9CisgICAg
aW5saW5lIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiB0YXJnZXRSZW5kZXJTdXJm
YWNlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlKCktPmxheWVy
TGlzdCgpOyB9CisKKyAgICBJdGVyYXRvckFjdGlvblR5cGUgbV9hY3Rpb25zOworICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiBtX3JlbmRlclN1cmZhY2VMYXllckxpc3Q7CisK
KyAgICAvLyBUaGUgaXRlcmF0b3IncyBjdXJyZW50IHBvc2l0aW9uLgorCisgICAgLy8gQSBwb3Np
dGlvbiBpbiB0aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC4gVGhpcyBwb2ludHMgdG8gYSBsYXll
ciB3aGljaCBvd25zIHRoZSBjdXJyZW50IHRhcmdldCBzdXJmYWNlLgorICAgIC8vIFRoaXMgaXMg
YSB2YWx1ZSBmcm9tIDAgdG8gbi0xIChuID0gc2l6ZSBvZiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
ID0gbnVtYmVyIG9mIHN1cmZhY2VzKS4gQSB2YWx1ZSBvdXRzaWRlIG9mCisgICAgLy8gdGhpcyBy
YW5nZSAoZm9yIGV4YW1wbGUsIENDTGF5ZXJJdGVyYXRvclZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVySW5kZXgpIGlzIHVzZWQgdG8KKyAgICAvLyBpbmRpY2F0ZSBhIHBvc2l0
aW9uIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgdHJlZS4KKyAgICBpbnQgbV90YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXJJbmRleDsKKyAgICAvLyBBIHBvc2l0aW9uIGluIHRoZSBsaXN0IG9mIGxh
eWVycyB0aGF0IGFyZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCB0YXJnZXQgc3VyZmFjZS4gV2hl
biBwb2ludGluZyB0byBvbmUgb2YKKyAgICAvLyB0aGVzZSBsYXllcnMsIHRoaXMgaXMgYSB2YWx1
ZSBmcm9tIDAgdG8gbi0xIChuID0gbnVtYmVyIG9mIGNoaWxkcmVuKS4gU2luY2UgdGhlIGl0ZXJh
dG9yIG11c3QgYWxzbyBzdG9wIGF0CisgICAgLy8gdGhlIGxheWVycyByZXByZXNlbnRpbmcgdGhl
IHRhcmdldCBzdXJmYWNlLCB0aGlzIGlzIGRvbmUgYnkgc2V0dGluZyB0aGUgY3VycmVudExheWVy
SW5kZXggdG8gYSB2YWx1ZSBvZgorICAgIC8vIENDTGF5ZXJJdGVyYXRvclZhbHVlOjpMYXllclJl
cHJlc2VudGluZ1RhcmdldFJlbmRlclN1cmZhY2UuCisgICAgaW50IG1fY3VycmVudExheWVySW5k
ZXg7CisKKyAgICBmcmllbmQgc3RydWN0IENDTGF5ZXJJdGVyYXRvckFjdGlvbnM7CiB9OwogCiAv
LyBPcmRlcmluZ3MgZm9yIGl0ZXJhdGluZyBvdmVyIHRoZSBSZW5kZXJTdXJmYWNlLUxheWVyIHRy
ZWUuCkBAIC0xMjYsMTQgKzE2MCwxNCBAQCBzdHJ1Y3QgQ0NMYXllckl0ZXJhdG9yQWN0aW9ucyB7
CiAgICAgLy8gV2Fsa3MgbGF5ZXJzIHNvcnRlZCBieSB6LW9yZGVyIGZyb20gYmFjayB0byBmcm9u
dC4KICAgICBjbGFzcyBCYWNrVG9Gcm9udCB7CiAgICAgcHVibGljOgotICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLSAgICAg
ICAgdm9pZCBiZWdpbihDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlPiYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KKyAgICAgICAgdm9p
ZCBiZWdpbihDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0
aW9uVHlwZT4mKTsKIAotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLSAgICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVu
YW1lIEFjdGlvblR5cGU+CisgICAgICAgIHZvaWQgZW5kKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5
cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBBY3Rpb25UeXBlPiYpOwogCi0gICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotICAgICAg
ICB2b2lkIG5leHQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJm
YWNlVHlwZT4mKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5h
bWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+CisgICAgICAgIHZvaWQg
bmV4dChDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9u
VHlwZT4mKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGludCBtX2hpZ2hlc3RUYXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXI7CkBAIC0xNDIsMTggKzE3NiwxOCBAQCBzdHJ1Y3QgQ0NMYXllckl0ZXJh
dG9yQWN0aW9ucyB7CiAgICAgLy8gV2Fsa3MgbGF5ZXJzIHNvcnRlZCBieSB6LW9yZGVyIGZyb20g
ZnJvbnQgdG8gYmFjawogICAgIGNsYXNzIEZyb250VG9CYWNrIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VU
eXBlPgotICAgICAgICB2b2lkIGJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBBY3Rpb25UeXBlPgor
ICAgICAgICB2b2lkIGJlZ2luKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlLCBBY3Rpb25UeXBlPiYpOwogCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotICAgICAgICB2b2lkIGVuZChDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOworICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNl
VHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KKyAgICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJh
dG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFjdGlvblR5cGU+Jik7CiAKLSAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5
cGU+Ci0gICAgICAgIHZvaWQgbmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUs
IFJlbmRlclN1cmZhY2VUeXBlPiYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJU
eXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KKyAg
ICAgICAgdm9pZCBuZXh0KENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlLCBBY3Rpb25UeXBlPiYpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci0gICAgICAgIHZv
aWQgZ29Ub0hpZ2hlc3RJblN1YnRyZWUoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBl
LCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVy
VHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+Cisg
ICAgICAgIHZvaWQgZ29Ub0hpZ2hlc3RJblN1YnRyZWUoQ0NMYXllckl0ZXJhdG9yPExheWVyVHlw
ZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFjdGlvblR5cGU+Jik7CiAgICAgfTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3JQb3NpdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiMWY2M2M0NWY3NDJjMDNjNjBkZWY5YjIxNzM4NDBhZmI4NmMzMjYzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvclBvc2l0aW9uLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uX2gKLSNkZWZpbmUgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25f
aAotCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCi0KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIE5vbi10ZW1wbGF0ZWQgY29uc3RhbnRzCi1zdHJ1Y3QgQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb25WYWx1ZSB7Ci0gICAgc3RhdGljIGNvbnN0IGludCBJbnZhbGlkVGFyZ2V0UmVuZGVy
U3VyZmFjZUxheWVySW5kZXggPSAtMTsKLSAgICAvLyBUaGlzIG11c3QgYmUgLTEgc2luY2UgdGhl
IGl0ZXJhdG9yIGFjdGlvbiBjb2RlIGFzc3VtZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBiZQotICAg
IC8vIHJlYWNoZWQgYnkgc3VidHJhY3Rpbmcgb25lIGZyb20gdGhlIHBvc2l0aW9uIG9mIHRoZSBm
aXJzdCBsYXllciBpbiB0aGUgY3VycmVudAotICAgIC8vIHRhcmdldCBzdXJmYWNlJ3MgY2hpbGQg
bGF5ZXIgbGlzdCwgd2hpY2ggaXMgMC4KLSAgICBzdGF0aWMgY29uc3QgaW50IExheWVySW5kZXhS
ZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlID0gLTE7Ci19OwotCi0vLyBBIHN0cnVjdCB0
byBob2xkIHRoZSBpdGVyYXRvcidzIGN1cnJlbnQgcG9zaXRpb24sIHdoaWNoIGlzIHBhc3NlZCB0
byB0aGUgdmFyaW91cyBDQ0xheWVySXRlcmF0b3JBY3Rpb24gZnVuY3Rpb25zLCBmb3IgdGhlbSB0
bwotLy8gcmVhZCBhbmQgdXBkYXRlLiBUaGlzIHN0cnVjdCBleGlzdHMgc28gdGhlIHRlbXBsYXRl
ZCBhY3Rpb24gZnVuY3Rpb25zIGRvbid0IG5lZWQgdG8gYWNjZXNzIHRoZSBDQ0xheWVySXRlcmF0
b3IgY2xhc3MuCi0vLwotLy8gVGhlcmUgaXMgYSAxOjEgcmVsYXRpb25zaGlwIGJldHdlZW4gYW4g
aW5zdGFuY2Ugb2YgdGhlIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uIGNsYXNzIGFuZCBhIENDTGF5
ZXJJdGVyYXRvckFjdGlvbnM6OkZvbyBjbGFzcywKLS8vIHNvIGFuIGl0ZXJhdG9yIGFjdGlvbiBj
bGFzcyBjYW4gaG9sZCBleHRyYSBwb3NpdGlvbiBkYXRhLCBpZiByZXF1aXJlZCwgaW4gaXRzIG93
biBjbGFzcyBpbnN0YW5jZS4KLS8vCi0vLyBUaGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgaXRl
cmF0b3IgaXMgaGVsZCBpbiB0d28gaW50ZWdlciB2YXJpYWJsZXMuCi0vLyAtIFRoZSB0YXJnZXRS
ZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCBpcyBhIHBvc2l0aW9uIGluIHRoZSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LiBUaGlzIHBvaW50cyB0byBhIGxheWVyIHdoaWNoIG93bnMgdGhlIGN1cnJlbnQK
LS8vIHRhcmdldCBzdXJmYWNlLiBUaGlzIGlzIGEgdmFsdWUgZnJvbSAwIHRvIG4tMSAobiA9IHNp
emUgb2YgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9IG51bWJlciBvZiBzdXJmYWNlcykuIEEgdmFs
dWUgb3V0c2lkZSBvZgotLy8gdGhpcyByYW5nZSAoZm9yIGV4YW1wbGUsIENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uVmFsdWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCkgaXMg
dXNlZCB0byBpbmRpY2F0ZSBhIHBvc2l0aW9uCi0vLyBvdXRzaWRlIHRoZSBib3VuZHMgb2YgdGhl
IHRyZWUuCi0vLyAtIFRoZSBjdXJyZW50TGF5ZXJJbmRleCBpcyBhIHBvc2l0aW9uIGluIHRoZSBs
aXN0IG9mIGxheWVycyB0aGF0IGFyZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCB0YXJnZXQgc3Vy
ZmFjZS4gV2hlbiBwb2ludGluZyB0bwotLy8gb25lIG9mIHRoZXNlIGxheWVycywgdGhpcyBpcyBh
IHZhbHVlIGZyb20gMCB0byBuLTEgKG4gPSBudW1iZXIgb2YgY2hpbGRyZW4pLiBTaW5jZSB0aGUg
aXRlcmF0b3IgbXVzdCBhbHNvIHN0b3AgYXQgdGhlIGxheWVycwotLy8gcmVwcmVzZW50aW5nIHRo
ZSB0YXJnZXQgc3VyZmFjZSwgdGhpcyBpcyBkb25lIGJ5IHNldHRpbmcgdGhlIGN1cnJlbnRMYXll
ckluZGV4IHRvIGEgdmFsdWUgb2YKLS8vIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWU6Okxh
eWVyUmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZS4KLXRlbXBsYXRlPHR5cGVuYW1lIExh
eWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci1zdHJ1Y3QgQ0NMYXllckl0ZXJh
dG9yUG9zaXRpb24gewotICAgIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uKCkgOiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KDApIHsgfQotICAgIGV4cGxpY2l0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9u
KGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+KiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KSA6IHJlbmRlclN1cmZhY2VMYXllckxpc3QocmVuZGVyU3VyZmFjZUxheWVyTGlzdCkgeyB9Ci0K
LSAgICBpbmxpbmUgTGF5ZXJUeXBlKiBjdXJyZW50TGF5ZXIoKSBjb25zdCB7IHJldHVybiBjdXJy
ZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8gdGFyZ2V0UmVuZGVyU3Vy
ZmFjZUxheWVyKCkgOiB0YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKVtjdXJyZW50TGF5ZXJJ
bmRleF0uZ2V0KCk7IH0KLQotICAgIGlubGluZSBib29sIGN1cnJlbnRMYXllclJlcHJlc2VudHND
b250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpyZW5kZXJTdXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldDxMYXllclR5cGU+KGN1cnJl
bnRMYXllcigpLCB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKS0+aWQoKSk7IH0KLSAgICBpbmxp
bmUgYm9vbCBjdXJyZW50TGF5ZXJSZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0
IHsgcmV0dXJuIGN1cnJlbnRMYXllckluZGV4ID09IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFs
dWU6OkxheWVySW5kZXhSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJmYWNlOyB9Ci0KLSAgICBp
bmxpbmUgTGF5ZXJUeXBlKiB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSBjb25zdCB7IHJldHVy
biAoKnJlbmRlclN1cmZhY2VMYXllckxpc3QpW3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4
XS5nZXQoKTsgfQotICAgIGlubGluZSBSZW5kZXJTdXJmYWNlVHlwZSogdGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpIGNvbnN0IHsgcmV0dXJuIHRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpLT5yZW5kZXJT
dXJmYWNlKCk7IH0KLSAgICBpbmxpbmUgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4m
IHRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIHRhcmdldFJlbmRl
clN1cmZhY2UoKS0+bGF5ZXJMaXN0KCk7IH0KLQotICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24mIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID09IG90aGVyLnRhcmdldFJl
bmRlclN1cmZhY2VMYXllckluZGV4Ci0gICAgICAgICAgICAmJiBjdXJyZW50TGF5ZXJJbmRleCA9
PSBvdGhlci5jdXJyZW50TGF5ZXJJbmRleDsKLSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPExheWVyVHlwZT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBpbnQgdGFyZ2V0
UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7Ci0gICAgaW50IGN1cnJlbnRMYXllckluZGV4OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128234</attachid>
            <date>2012-02-22 09:56:33 -0800</date>
            <delta_ts>2012-02-23 15:03:14 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-75864-20120222125632.patch</filename>
            <type>text/plain</type>
            <size>31417</size>
            <attacher name="W. James MacLean">wjmaclean</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmY3N2U1OWZkNTNlZDRi
NmQwNmZiZjY5M2M5NGY5YzQ2YWFkZTM3Ni4uODJlMGRlZTM0MDBjZmIzNDg2ZjdkZTQ3ZjUxZDk0
YzFiNjlmMWZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTAxLTA5ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUHVz
aCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbiBzdHJ1Y3QgaW50byBDQ0xheWVySXRlcmF0b3IgY2xh
c3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTg2
NAorCisgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250
OjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250
VG9CYWNrOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpGcm9udFRvQmFjazo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVyYXRvckFj
dGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpnb1RvSGlnaGVzdEluU3VidHJlZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OkNDTGF5ZXJJdGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OnJlcHJl
c2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJdGVy
YXRvcjo6cmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllckl0ZXJhdG9yOjpjdXJyZW50TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckl0ZXJhdG9yOjpjdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVy
U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySXRlcmF0b3I6OmN1cnJlbnRMYXll
clJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJJdGVyYXRvcjo6dGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJdGVyYXRvcjo6dGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySXRlcmF0b3I6OnRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yUG9zaXRpb24u
aDogUmVtb3ZlZC4KKwogMjAxMi0wMi0yMiAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGZpeCBtZW1vcnkgY291bnRlcnMgYW5k
IHN0YXJ0LWF0LXplcm8gbW9kZXMgb2YgdGltZWxpbmUgcGFuZWxzIHRvIGNvLWV4aXN0IG5pY2Vs
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDU4Y2FhYTFjOGNmNjBmYTYwYjA2YmMxZTE0M2JiNWVhOTZh
YmEyNzEuLjY2OGM2ZmY0NzE0OGJkNzIwNmY5OWM3OTE5Njk1MmI3M2M4MmYxNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTMyNjcsNyArMzI2Nyw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmgnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvclBvc2l0
aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJRdWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclF1YWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclNvcnRlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5jcHAKaW5k
ZXggMDc2N2ZmMGU3NjZjOTYzNDA2MzU3ZWRlZjI5YmM2ZDVhOTA4OTJmOC4uOTdkNmQxODVhMDRj
NzIxMWViYmIyYWM4MmY1NTNjNDIyMzk5ZWY0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0
b3IuY3BwCkBAIC0zNSw3MyArMzUsNzMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLXZv
aWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2luKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5h
bWUgQWN0aW9uVHlwZT4KK3ZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6
OmJlZ2luKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBBY3Rp
b25UeXBlPiYgaXQpCiB7Ci0gICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0g
MDsKLSAgICBwb3MuY3VycmVudExheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZh
bHVlOjpMYXllckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3VyZmFjZTsKKyAgICBpdC5t
X3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gMDsKKyAgICBpdC5tX2N1cnJlbnRMYXll
ckluZGV4ID0gQ0NMYXllckl0ZXJhdG9yVmFsdWU6OkxheWVySW5kZXhSZXByZXNlbnRpbmdUYXJn
ZXRSZW5kZXJTdXJmYWNlOwogCiAgICAgbV9oaWdoZXN0VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
ID0gMDsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVy
U3VyZmFjZVR5cGU+Ci12b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250Ojpl
bmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4m
IHBvcykKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZh
Y2VUeXBlLCB0eXBlbmFtZSBBY3Rpb25UeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25z
OjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlLCBBY3Rpb25UeXBlPiYgaXQpCiB7Ci0gICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VM
YXllckluZGV4ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6SW52YWxpZFRhcmdldFJl
bmRlclN1cmZhY2VMYXllckluZGV4OwotICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IDA7Cisg
ICAgaXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclZh
bHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisgICAgaXQubV9jdXJy
ZW50TGF5ZXJJbmRleCA9IDA7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5
cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpC
YWNrVG9Gcm9udDo6bmV4dChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRl
clN1cmZhY2VUeXBlPiYgcG9zKQordGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5h
bWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+Cit2b2lkIENDTGF5ZXJJ
dGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpuZXh0KENDTGF5ZXJJdGVyYXRvcjxMYXllclR5
cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBBY3Rpb25UeXBlPiYgaXQpCiB7CiAgICAgLy8gSWYgdGhl
IGN1cnJlbnQgbGF5ZXIgaGFzIGEgUlMsIG1vdmUgdG8gaXRzIGxheWVyIGxpc3QuIE90aGVyd2lz
ZSwgdmlzaXQgdGhlIG5leHQgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgUlMgbGF5ZXIgbGlzdC4KLSAg
ICBpZiAocG9zLmN1cnJlbnRMYXllclJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNl
KCkpIHsKKyAgICBpZiAoaXQuY3VycmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRl
clN1cmZhY2UoKSkgewogICAgICAgICAvLyBTYXZlIG91ciBwb3NpdGlvbiBpbiB0aGUgY2hpbGRM
YXllciBsaXN0IGZvciB0aGUgUmVuZGVyU3VyZmFjZSwgdGhlbiBqdW1wIHRvIHRoZSBuZXh0IFJl
bmRlclN1cmZhY2UuIFNhdmUgd2hlcmUgd2UKICAgICAgICAgLy8gY2FtZSBmcm9tIGluIHRoZSBu
ZXh0IFJlbmRlclN1cmZhY2Ugc28gd2UgY2FuIGdldCBiYWNrIHRvIGl0LgotICAgICAgICBwb3Mu
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX2N1cnJlbnRMYXllckluZGV4SGlzdG9yeSA9IHBvcy5j
dXJyZW50TGF5ZXJJbmRleDsKLSAgICAgICAgaW50IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVyID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4OworICAgICAgICBpdC50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0b3J5ID0gaXQubV9j
dXJyZW50TGF5ZXJJbmRleDsKKyAgICAgICAgaW50IHByZXZpb3VzVGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVyID0gaXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKIAotICAgICAgICBw
b3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSArK21faGlnaGVzdFRhcmdldFJlbmRl
clN1cmZhY2VMYXllcjsKLSAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb25WYWx1ZTo6TGF5ZXJJbmRleFJlcHJlc2VudGluZ1RhcmdldFJlbmRlclN1
cmZhY2U7CisgICAgICAgIGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSArK21f
aGlnaGVzdFRhcmdldFJlbmRlclN1cmZhY2VMYXllcjsKKyAgICAgICAgaXQubV9jdXJyZW50TGF5
ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclZhbHVlOjpMYXllckluZGV4UmVwcmVzZW50aW5nVGFy
Z2V0UmVuZGVyU3VyZmFjZTsKIAotICAgICAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5t
X3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4SGlzdG9yeSA9IHByZXZpb3VzVGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVyOworICAgICAgICBpdC50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5ID0gcHJldmlvdXNUYXJnZXRSZW5kZXJT
dXJmYWNlTGF5ZXI7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgKytwb3MuY3VycmVudExheWVySW5k
ZXg7CisgICAgICAgICsraXQubV9jdXJyZW50TGF5ZXJJbmRleDsKIAotICAgICAgICBpbnQgdGFy
Z2V0UmVuZGVyU3VyZmFjZU51bUNoaWxkcmVuID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2VDaGls
ZHJlbigpLnNpemUoKTsKLSAgICAgICAgd2hpbGUgKHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9PSB0
YXJnZXRSZW5kZXJTdXJmYWNlTnVtQ2hpbGRyZW4pIHsKKyAgICAgICAgaW50IHRhcmdldFJlbmRl
clN1cmZhY2VOdW1DaGlsZHJlbiA9IGl0LnRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpLnNp
emUoKTsKKyAgICAgICAgd2hpbGUgKGl0Lm1fY3VycmVudExheWVySW5kZXggPT0gdGFyZ2V0UmVu
ZGVyU3VyZmFjZU51bUNoaWxkcmVuKSB7CiAgICAgICAgICAgICAvLyBKdW1wIGJhY2sgdG8gdGhl
IHByZXZpb3VzIFJlbmRlclN1cmZhY2UsIGFuZCBnZXQgYmFjayB0aGUgcG9zaXRpb24gd2hlcmUg
d2Ugd2VyZSBpbiB0aGF0IGxpc3QsIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IHBvc2l0aW9uIHRoZXJl
LgotICAgICAgICAgICAgaWYgKCFwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIHsK
KyAgICAgICAgICAgIGlmICghaXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCkgewog
ICAgICAgICAgICAgICAgIC8vIEVuZCBvZiB0aGUgbGlzdAotICAgICAgICAgICAgICAgIHBvcy50
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFs
dWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleDsKLSAgICAgICAgICAgICAg
ICBwb3MuY3VycmVudExheWVySW5kZXggPSAwOworICAgICAgICAgICAgICAgIGl0Lm1fdGFyZ2V0
UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JWYWx1ZTo6SW52YWxpZFRh
cmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4OworICAgICAgICAgICAgICAgIGl0Lm1fY3VycmVu
dExheWVySW5kZXggPSAwOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IHBvcy50YXJn
ZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5
OwotICAgICAgICAgICAgcG9zLmN1cnJlbnRMYXllckluZGV4ID0gcG9zLnRhcmdldFJlbmRlclN1
cmZhY2UoKS0+bV9jdXJyZW50TGF5ZXJJbmRleEhpc3RvcnkgKyAxOworICAgICAgICAgICAgaXQu
bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IGl0LnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3Rvcnk7CisgICAgICAgICAgICBp
dC5tX2N1cnJlbnRMYXllckluZGV4ID0gaXQudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX2N1cnJl
bnRMYXllckluZGV4SGlzdG9yeSArIDE7CiAKLSAgICAgICAgICAgIHRhcmdldFJlbmRlclN1cmZh
Y2VOdW1DaGlsZHJlbiA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCk7
CisgICAgICAgICAgICB0YXJnZXRSZW5kZXJTdXJmYWNlTnVtQ2hpbGRyZW4gPSBpdC50YXJnZXRS
ZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXRl
bXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgot
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6YmVnaW4oQ0NMYXllckl0
ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3RlbXBs
YXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBl
bmFtZSBBY3Rpb25UeXBlPgordm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFj
azo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFj
dGlvblR5cGU+JiBpdCkKIHsKLSAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgg
PSAwOwotICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IHBvcy50YXJnZXRSZW5kZXJTdXJmYWNl
Q2hpbGRyZW4oKS5zaXplKCkgLSAxOwotICAgIGdvVG9IaWdoZXN0SW5TdWJ0cmVlKHBvcyk7Cisg
ICAgaXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9IDA7CisgICAgaXQubV9jdXJy
ZW50TGF5ZXJJbmRleCA9IGl0LnRhcmdldFJlbmRlclN1cmZhY2VDaGlsZHJlbigpLnNpemUoKSAt
IDE7CisgICAgZ29Ub0hpZ2hlc3RJblN1YnRyZWUoaXQpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLXZvaWQgQ0NMYXllckl0
ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmVuZChDQ0xheWVySXRlcmF0b3JQb3NpdGlvbjxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYgcG9zKQordGVtcGxhdGUgPHR5cGVuYW1lIExh
eWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+
Cit2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjplbmQoQ0NMYXllckl0
ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFjdGlvblR5cGU+JiBpdCkKIHsK
LSAgICBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggPSBDQ0xheWVySXRlcmF0b3JQ
b3NpdGlvblZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7Ci0gICAg
cG9zLmN1cnJlbnRMYXllckluZGV4ID0gMDsKKyAgICBpdC5tX3RhcmdldFJlbmRlclN1cmZhY2VM
YXllckluZGV4ID0gQ0NMYXllckl0ZXJhdG9yVmFsdWU6OkludmFsaWRUYXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXJJbmRleDsKKyAgICBpdC5tX2N1cnJlbnRMYXllckluZGV4ID0gMDsKIH0KIAotdGVt
cGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci12
b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0KENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+JiBwb3MpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5h
bWUgQWN0aW9uVHlwZT4KK3ZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6
Om5leHQoQ0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFjdGlv
blR5cGU+JiBpdCkKIHsKICAgICAvLyBNb3ZlcyB0byB0aGUgcHJldmlvdXMgbGF5ZXIgaW4gdGhl
IGN1cnJlbnQgUlMgbGF5ZXIgbGlzdC4gVGhlbiB3ZSBjaGVjayBpZiB0aGUKICAgICAvLyBuZXcg
Y3VycmVudCBsYXllciBoYXMgaXRzIG93biBSUywgaW4gd2hpY2ggY2FzZSB0aGVyZSBhcmUgdGhp
bmdzIGluIHRoYXQgUlMgbGF5ZXIgbGlzdCB0aGF0IGFyZSBoaWdoZXIsIHNvCkBAIC0xMDksNjEg
KzEwOSw2MSBAQCB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpuZXh0
KENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZQogICAgIC8vIElmIHdlIG1vdmUgYmFj
ayBwYXN0IHRoZSBmcm9udCBvZiB0aGUgbGlzdCwgd2UganVtcCB1cCB0byB0aGUgcHJldmlvdXMg
UlMgbGF5ZXIgbGlzdCwgcGlja2luZyB1cCBhZ2FpbiB3aGVyZSB3ZQogICAgIC8vIGhhZCBwcmV2
aW91c2x5IHJlY3Vyc2VkIGludG8gdGhlIGN1cnJlbnQgUlMgbGF5ZXIgbGlzdC4KIAotICAgIGlm
ICghcG9zLmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsKKyAg
ICBpZiAoIWl0LmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkpIHsK
ICAgICAgICAgLy8gU3VidHJhY3Rpbmcgb25lIGhlcmUgd2lsbCBldmVudHVhbGx5IGNhdXNlIHRo
ZSBjdXJyZW50IGxheWVyIHRvIGJlY29tZSB0aGF0IGxheWVyCiAgICAgICAgIC8vIHJlcHJlc2Vu
dGluZyB0aGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlLgotICAgICAgICAtLXBvcy5jdXJyZW50TGF5
ZXJJbmRleDsKLSAgICAgICAgZ29Ub0hpZ2hlc3RJblN1YnRyZWUocG9zKTsKKyAgICAgICAgLS1p
dC5tX2N1cnJlbnRMYXllckluZGV4OworICAgICAgICBnb1RvSGlnaGVzdEluU3VidHJlZShpdCk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHBvcy5jdXJyZW50TGF5ZXJSZXByZXNlbnRz
VGFyZ2V0UmVuZGVyU3VyZmFjZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIXBvcy50YXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXJJbmRleCkgeworICAgICAgICB3aGlsZSAoaXQuY3VycmVudExheWVyUmVw
cmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgaWYgKCFpdC5tX3Rh
cmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4KSB7CiAgICAgICAgICAgICAgICAgLy8gRW5kIG9m
IHRoZSBsaXN0Ci0gICAgICAgICAgICAgICAgcG9zLnRhcmdldFJlbmRlclN1cmZhY2VMYXllcklu
ZGV4ID0gQ0NMYXllckl0ZXJhdG9yUG9zaXRpb25WYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1
cmZhY2VMYXllckluZGV4OwotICAgICAgICAgICAgICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9
IDA7CisgICAgICAgICAgICAgICAgaXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9
IENDTGF5ZXJJdGVyYXRvclZhbHVlOjpJbnZhbGlkVGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5k
ZXg7CisgICAgICAgICAgICAgICAgaXQubV9jdXJyZW50TGF5ZXJJbmRleCA9IDA7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcG9zLnRhcmdldFJl
bmRlclN1cmZhY2VMYXllckluZGV4ID0gcG9zLnRhcmdldFJlbmRlclN1cmZhY2UoKS0+bV90YXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3Rvcnk7Ci0gICAgICAgICAgICBwb3MuY3VycmVu
dExheWVySW5kZXggPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5tX2N1cnJlbnRMYXllcklu
ZGV4SGlzdG9yeTsKKyAgICAgICAgICAgIGl0Lm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5k
ZXggPSBpdC50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVy
SW5kZXhIaXN0b3J5OworICAgICAgICAgICAgaXQubV9jdXJyZW50TGF5ZXJJbmRleCA9IGl0LnRh
cmdldFJlbmRlclN1cmZhY2UoKS0+bV9jdXJyZW50TGF5ZXJJbmRleEhpc3Rvcnk7CiAgICAgICAg
IH0KICAgICB9CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJl
bmRlclN1cmZhY2VUeXBlPgotdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFj
azo6Z29Ub0hpZ2hlc3RJblN1YnRyZWUoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBl
LCBSZW5kZXJTdXJmYWNlVHlwZT4mIHBvcykKK3RlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUs
IHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBBY3Rpb25UeXBlPgordm9pZCBD
Q0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6Z29Ub0hpZ2hlc3RJblN1YnRyZWUo
Q0NMYXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFjdGlvblR5cGU+
JiBpdCkKIHsKLSAgICBpZiAocG9zLmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJT
dXJmYWNlKCkpCisgICAgaWYgKGl0LmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJT
dXJmYWNlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB3aGlsZSAocG9zLmN1cnJlbnRMYXllclJl
cHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkpIHsKKyAgICB3aGlsZSAoaXQuY3Vy
cmVudExheWVyUmVwcmVzZW50c0NvbnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKSkgewogICAgICAg
ICAvLyBTYXZlIHdoZXJlIHdlIHdlcmUgaW4gdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UsIG1v
dmUgdG8gdGhlIG5leHQgb25lLCBhbmQgc2F2ZSB0aGUgdGFyZ2V0IHN1cmZhY2UgdGhhdCB3ZQog
ICAgICAgICAvLyBjYW1lIGZyb20gdGhlcmUgc28gd2UgY2FuIGdvIGJhY2sgdG8gaXQuCi0gICAg
ICAgIHBvcy50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm1fY3VycmVudExheWVySW5kZXhIaXN0b3J5
ID0gcG9zLmN1cnJlbnRMYXllckluZGV4OwotICAgICAgICBpbnQgcHJldmlvdXNUYXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXIgPSBwb3MudGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisgICAg
ICAgIGl0LnRhcmdldFJlbmRlclN1cmZhY2UoKS0+bV9jdXJyZW50TGF5ZXJJbmRleEhpc3Rvcnkg
PSBpdC5tX2N1cnJlbnRMYXllckluZGV4OworICAgICAgICBpbnQgcHJldmlvdXNUYXJnZXRSZW5k
ZXJTdXJmYWNlTGF5ZXIgPSBpdC5tX3RhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4OwogCi0g
ICAgICAgIGZvciAoTGF5ZXJUeXBlKiBsYXllciA9IHBvcy5jdXJyZW50TGF5ZXIoKTsgcG9zLnRh
cmdldFJlbmRlclN1cmZhY2VMYXllcigpICE9IGxheWVyOyArK3Bvcy50YXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXJJbmRleCkgeyB9Ci0gICAgICAgIHBvcy5jdXJyZW50TGF5ZXJJbmRleCA9IHBvcy50
YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRyZW4oKS5zaXplKCkgLSAxOworICAgICAgICBmb3IgKExh
eWVyVHlwZSogbGF5ZXIgPSBpdC5jdXJyZW50TGF5ZXIoKTsgaXQudGFyZ2V0UmVuZGVyU3VyZmFj
ZUxheWVyKCkgIT0gbGF5ZXI7ICsraXQubV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCkg
eyB9CisgICAgICAgIGl0Lm1fY3VycmVudExheWVySW5kZXggPSBpdC50YXJnZXRSZW5kZXJTdXJm
YWNlQ2hpbGRyZW4oKS5zaXplKCkgLSAxOwogCi0gICAgICAgIHBvcy50YXJnZXRSZW5kZXJTdXJm
YWNlKCktPm1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXhIaXN0b3J5ID0gcHJldmlvdXNU
YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXI7CisgICAgICAgIGl0LnRhcmdldFJlbmRlclN1cmZhY2Uo
KS0+bV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleEhpc3RvcnkgPSBwcmV2aW91c1Rhcmdl
dFJlbmRlclN1cmZhY2VMYXllcjsKICAgICB9CiB9CiAKIC8vIERlY2xhcmUgZWFjaCBvZiB0aGUg
YWJvdmUgZnVuY3Rpb25zIGZvciBMYXllckNocm9taXVtIGFuZCBDQ0xheWVySW1wbCBjbGFzc2Vz
IHNvIHRoYXQgdGhleSBhcmUgbGlua2VkLgotdGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpCYWNrVG9Gcm9udDo6YmVnaW4oQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwotdGVtcGxhdGUgdm9pZCBDQ0xheWVy
SXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9u
PExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKLXRlbXBsYXRlIHZvaWQg
Q0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQoQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtPiYpOwotCi10ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpiZWdpbihDQ0xh
eWVySXRlcmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYpOwotdGVt
cGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpCYWNrVG9Gcm9udDo6ZW5kKENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Ci10ZW1w
bGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpuZXh0KENDTGF5
ZXJJdGVyYXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Ci0KLXRl
bXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6Om5leHQoQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVt
PiYpOwotdGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6
ZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bT4mKTsKLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRU
b0JhY2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyQ2hyb21pdW0sIFJlbmRl
clN1cmZhY2VDaHJvbWl1bT4mKTsKLXRlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9u
czo6RnJvbnRUb0JhY2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5ZXJJdGVyYXRvclBvc2l0
aW9uPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bT4mKTsKLQotdGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6bmV4dChDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYpOwotdGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6ZW5kKENDTGF5ZXJJdGVy
YXRvclBvc2l0aW9uPENDTGF5ZXJJbXBsLCBDQ1JlbmRlclN1cmZhY2U+Jik7Ci10ZW1wbGF0ZSB2
b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrOjpiZWdpbihDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlPiYpOwotdGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6Z29Ub0hpZ2hlc3RJblN1
YnRyZWUoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFj
ZT4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6
OmJlZ2luKENDTGF5ZXJJdGVyYXRvcjxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0sIEJhY2tUb0Zyb250PiAmKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9u
czo6QmFja1RvRnJvbnQ6OmVuZChDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVy
U3VyZmFjZUNocm9taXVtLCBCYWNrVG9Gcm9udD4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0
ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6Om5leHQoQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hy
b21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgQmFja1RvRnJvbnQ+Jik7CisKK3RlbXBsYXRl
IHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmJlZ2luKENDTGF5ZXJJ
dGVyYXRvcjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBCYWNrVG9Gcm9udD4mKTsKK3Rl
bXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6QmFja1RvRnJvbnQ6OmVuZChDQ0xh
eWVySXRlcmF0b3I8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgQmFja1RvRnJvbnQ+Jik7
Cit0ZW1wbGF0ZSB2b2lkIENDTGF5ZXJJdGVyYXRvckFjdGlvbnM6OkJhY2tUb0Zyb250OjpuZXh0
KENDTGF5ZXJJdGVyYXRvcjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBCYWNrVG9Gcm9u
dD4mKTsKKwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFj
azo6bmV4dChDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9t
aXVtLCBGcm9udFRvQmFjaz4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9u
czo6RnJvbnRUb0JhY2s6OmVuZChDQ0xheWVySXRlcmF0b3I8TGF5ZXJDaHJvbWl1bSwgUmVuZGVy
U3VyZmFjZUNocm9taXVtLCBGcm9udFRvQmFjaz4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0
ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRvcjxMYXllckNo
cm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIEZyb250VG9CYWNrPiYpOwordGVtcGxhdGUg
dm9pZCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFjazo6Z29Ub0hpZ2hlc3RJblN1
YnRyZWUoQ0NMYXllckl0ZXJhdG9yPExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSwgRnJvbnRUb0JhY2s+Jik7CisKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJhdG9yQWN0aW9u
czo6RnJvbnRUb0JhY2s6Om5leHQoQ0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBsLCBDQ1JlbmRl
clN1cmZhY2UsIEZyb250VG9CYWNrPiYpOwordGVtcGxhdGUgdm9pZCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpGcm9udFRvQmFjazo6ZW5kKENDTGF5ZXJJdGVyYXRvcjxDQ0xheWVySW1wbCwgQ0NS
ZW5kZXJTdXJmYWNlLCBGcm9udFRvQmFjaz4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXllckl0ZXJh
dG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmJlZ2luKENDTGF5ZXJJdGVyYXRvcjxDQ0xheWVySW1w
bCwgQ0NSZW5kZXJTdXJmYWNlLCBGcm9udFRvQmFjaz4mKTsKK3RlbXBsYXRlIHZvaWQgQ0NMYXll
ckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s6OmdvVG9IaWdoZXN0SW5TdWJ0cmVlKENDTGF5
ZXJJdGVyYXRvcjxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBGcm9udFRvQmFjaz4mKTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oCmlu
ZGV4IDhmNDEyYzQ0ZDNkMTQwNDcwZmQxMmE3MjdiOTE0ZTRkNDZmYmViMTQuLmJlOTg1ZTE1MzEw
M2Y1MDhlYTQ1MjJiOTk5OGY5MGEwOTRkNWE2NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJdGVyYXRv
ci5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIENDTGF5ZXJJdGVyYXRvcl9oCiAjZGVmaW5l
IENDTGF5ZXJJdGVyYXRvcl9oCiAKLSNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3JQb3NpdGlv
bi5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogCiAjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC04Miw0MyArODIs
NzggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKKy8vIE5vbi10
ZW1wbGF0ZWQgY29uc3RhbnRzCitzdHJ1Y3QgQ0NMYXllckl0ZXJhdG9yVmFsdWUgeworICAgIHN0
YXRpYyBjb25zdCBpbnQgSW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gLTE7
CisgICAgLy8gVGhpcyBtdXN0IGJlIC0xIHNpbmNlIHRoZSBpdGVyYXRvciBhY3Rpb24gY29kZSBh
c3N1bWVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gYmUKKyAgICAvLyByZWFjaGVkIGJ5IHN1YnRyYWN0
aW5nIG9uZSBmcm9tIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgbGF5ZXIgaW4gdGhlIGN1cnJl
bnQKKyAgICAvLyB0YXJnZXQgc3VyZmFjZSdzIGNoaWxkIGxheWVyIGxpc3QsIHdoaWNoIGlzIDAu
CisgICAgc3RhdGljIGNvbnN0IGludCBMYXllckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVy
U3VyZmFjZSA9IC0xOworfTsKKwogLy8gQW4gaXRlcmF0b3IgY2xhc3MgZm9yIHdhbGtpbmcgb3Zl
ciBsYXllcnMgaW4gdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZS4KIHRlbXBsYXRlIDx0eXBl
bmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBJdGVy
YXRvckFjdGlvblR5cGU+CiBjbGFzcyBDQ0xheWVySXRlcmF0b3IgewogICAgIHR5cGVkZWYgQ0NM
YXllckl0ZXJhdG9yPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEl0ZXJhdG9yQWN0aW9u
VHlwZT4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKIAogcHVibGljOgotICAgIENDTGF5ZXJJdGVyYXRv
cigpIHsgfQorICAgIENDTGF5ZXJJdGVyYXRvcigpIDogbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KDApIHsgfQogCiAgICAgc3RhdGljIENDTGF5ZXJJdGVyYXRvclR5cGUgYmVnaW4oY29uc3QgVmVj
dG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpIHsgcmV0dXJu
IENDTGF5ZXJJdGVyYXRvclR5cGUocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgdHJ1ZSk7IH0KICAg
ICBzdGF0aWMgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXll
clR5cGU+ID4qIHJlbmRlclN1cmZhY2VMYXllckxpc3QpIHsgcmV0dXJuIENDTGF5ZXJJdGVyYXRv
clR5cGUocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZmFsc2UpOyB9CiAKLSAgICBDQ0xheWVySXRl
cmF0b3JUeXBlJiBvcGVyYXRvcisrKCkgeyBBU1NFUlQobV9hY3Rpb25zKTsgbV9hY3Rpb25zLT5u
ZXh0KG1fcG9zaXRpb24pOyByZXR1cm4gKnRoaXM7IH0KLSAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ0NMYXllckl0ZXJhdG9yVHlwZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24g
PT0gb3RoZXIubV9wb3NpdGlvbjsgfQorICAgIENDTGF5ZXJJdGVyYXRvclR5cGUmIG9wZXJhdG9y
KysoKSB7IG1fYWN0aW9ucy5uZXh0KCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9CisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENDTGF5ZXJJdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV90YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleCA9PSBvdGhlci5tX3Rh
cmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4CisgICAgICAgICAgICAmJiBtX2N1cnJlbnRMYXll
ckluZGV4ID09IG90aGVyLm1fY3VycmVudExheWVySW5kZXg7CisgICAgfQogICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBDQ0xheWVySXRlcmF0b3JUeXBlJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7IH0KIAotICAgIExheWVyVHlwZSogb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KLSAgICBMYXllclR5cGUqIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24uY3VycmVudExheWVyKCk7IH0KKyAg
ICBMYXllclR5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBjdXJyZW50TGF5ZXIoKTsg
fQorICAgIExheWVyVHlwZSogb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gY3VycmVudExheWVy
KCk7IH0KIAotICAgIGJvb2wgcmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uLmN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJm
YWNlKCk7IH0KLSAgICBib29sIHJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkg
Y29uc3QgeyByZXR1cm4gIXJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgJiYgbV9wb3Np
dGlvbi5jdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpOyB9
CisgICAgYm9vbCByZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJu
IGN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCk7IH0KKyAgICBib29s
IHJlcHJlc2VudHNDb250cmlidXRpbmdSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gIXJl
cHJlc2VudHNUYXJnZXRSZW5kZXJTdXJmYWNlKCkgJiYgY3VycmVudExheWVyUmVwcmVzZW50c0Nv
bnRyaWJ1dGluZ1JlbmRlclN1cmZhY2UoKTsgfQogICAgIGJvb2wgcmVwcmVzZW50c0l0c2VsZigp
IGNvbnN0IHsgcmV0dXJuICFyZXByZXNlbnRzVGFyZ2V0UmVuZGVyU3VyZmFjZSgpICYmICFyZXBy
ZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgpOyB9CiAKLSAgICBMYXllclR5cGUqIHRh
cmdldFJlbmRlclN1cmZhY2VMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb24udGFyZ2V0
UmVuZGVyU3VyZmFjZUxheWVyKCk7IH0KKyAgICBMYXllclR5cGUqIHRhcmdldFJlbmRlclN1cmZh
Y2VMYXllcigpIGNvbnN0IHsgcmV0dXJuICgqbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KVttX3Rh
cmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4XS5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIEND
TGF5ZXJJdGVyYXRvcihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiogcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgYm9vbCBzdGFydCkKLSAgICAgICAgOiBtX3Bvc2l0aW9uKHJlbmRlclN1
cmZhY2VMYXllckxpc3QpCi0gICAgICAgICwgbV9hY3Rpb25zKGFkb3B0UHRyKG5ldyBJdGVyYXRv
ckFjdGlvblR5cGUoKSkpCisgICAgICAgIDogbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KHJlbmRl
clN1cmZhY2VMYXllckxpc3QpCiAgICAgewogICAgICAgICBpZiAoc3RhcnQgJiYgIXJlbmRlclN1
cmZhY2VMYXllckxpc3QtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fYWN0aW9ucy0+YmVnaW4o
bV9wb3NpdGlvbik7CisgICAgICAgICAgICBtX2FjdGlvbnMuYmVnaW4oKnRoaXMpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2FjdGlvbnMtPmVuZChtX3Bvc2l0aW9uKTsKKyAgICAgICAg
ICAgIG1fYWN0aW9ucy5lbmQoKnRoaXMpOwogICAgIH0KIAotICAgIENDTGF5ZXJJdGVyYXRvclBv
c2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+IG1fcG9zaXRpb247Ci0gICAgT3du
UHRyPEl0ZXJhdG9yQWN0aW9uVHlwZT4gbV9hY3Rpb25zOworICAgIGlubGluZSBMYXllclR5cGUq
IGN1cnJlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnRMYXllclJlcHJlc2VudHNUYXJn
ZXRSZW5kZXJTdXJmYWNlKCkgPyB0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKSA6IHRhcmdldFJl
bmRlclN1cmZhY2VDaGlsZHJlbigpW21fY3VycmVudExheWVySW5kZXhdLmdldCgpOyB9CisKKyAg
ICBpbmxpbmUgYm9vbCBjdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3Vy
ZmFjZSgpIGNvbnN0IHsgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFj
ZUNvbnRyaWJ1dGVzVG9UYXJnZXQ8TGF5ZXJUeXBlPihjdXJyZW50TGF5ZXIoKSwgdGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVyKCktPmlkKCkpOyB9CisgICAgaW5saW5lIGJvb2wgY3VycmVudExheWVy
UmVwcmVzZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRM
YXllckluZGV4ID09IENDTGF5ZXJJdGVyYXRvclZhbHVlOjpMYXllckluZGV4UmVwcmVzZW50aW5n
VGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQorCisgICAgaW5saW5lIFJlbmRlclN1cmZhY2VUeXBlKiB0
YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0UmVuZGVyU3VyZmFjZUxh
eWVyKCktPnJlbmRlclN1cmZhY2UoKTsgfQorICAgIGlubGluZSBjb25zdCBWZWN0b3I8UmVmUHRy
PExheWVyVHlwZT4gPiYgdGFyZ2V0UmVuZGVyU3VyZmFjZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1
cm4gdGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKTsgfQorCisgICAgSXRlcmF0b3JB
Y3Rpb25UeXBlIG1fYWN0aW9uczsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4g
PiogbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCisgICAgLy8gVGhlIGl0ZXJhdG9yJ3MgY3Vy
cmVudCBwb3NpdGlvbi4KKworICAgIC8vIEEgcG9zaXRpb24gaW4gdGhlIHJlbmRlclN1cmZhY2VM
YXllckxpc3QuIFRoaXMgcG9pbnRzIHRvIGEgbGF5ZXIgd2hpY2ggb3ducyB0aGUgY3VycmVudCB0
YXJnZXQgc3VyZmFjZS4KKyAgICAvLyBUaGlzIGlzIGEgdmFsdWUgZnJvbSAwIHRvIG4tMSAobiA9
IHNpemUgb2YgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9IG51bWJlciBvZiBzdXJmYWNlcykuIEEg
dmFsdWUgb3V0c2lkZSBvZgorICAgIC8vIHRoaXMgcmFuZ2UgKGZvciBleGFtcGxlLCBDQ0xheWVy
SXRlcmF0b3JWYWx1ZTo6SW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4KSBpcyB1
c2VkIHRvCisgICAgLy8gaW5kaWNhdGUgYSBwb3NpdGlvbiBvdXRzaWRlIHRoZSBib3VuZHMgb2Yg
dGhlIHRyZWUuCisgICAgaW50IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXg7CisgICAg
Ly8gQSBwb3NpdGlvbiBpbiB0aGUgbGlzdCBvZiBsYXllcnMgdGhhdCBhcmUgY2hpbGRyZW4gb2Yg
dGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UuIFdoZW4gcG9pbnRpbmcgdG8gb25lIG9mCisgICAg
Ly8gdGhlc2UgbGF5ZXJzLCB0aGlzIGlzIGEgdmFsdWUgZnJvbSAwIHRvIG4tMSAobiA9IG51bWJl
ciBvZiBjaGlsZHJlbikuIFNpbmNlIHRoZSBpdGVyYXRvciBtdXN0IGFsc28gc3RvcCBhdAorICAg
IC8vIHRoZSBsYXllcnMgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgc3VyZmFjZSwgdGhpcyBpcyBk
b25lIGJ5IHNldHRpbmcgdGhlIGN1cnJlbnRMYXllckluZGV4IHRvIGEgdmFsdWUgb2YKKyAgICAv
LyBDQ0xheWVySXRlcmF0b3JWYWx1ZTo6TGF5ZXJSZXByZXNlbnRpbmdUYXJnZXRSZW5kZXJTdXJm
YWNlLgorICAgIGludCBtX2N1cnJlbnRMYXllckluZGV4OworCisgICAgZnJpZW5kIHN0cnVjdCBD
Q0xheWVySXRlcmF0b3JBY3Rpb25zOwogfTsKIAogLy8gT3JkZXJpbmdzIGZvciBpdGVyYXRpbmcg
b3ZlciB0aGUgUmVuZGVyU3VyZmFjZS1MYXllciB0cmVlLgpAQCAtMTI2LDE0ICsxNjEsMTQgQEAg
c3RydWN0IENDTGF5ZXJJdGVyYXRvckFjdGlvbnMgewogICAgIC8vIFdhbGtzIGxheWVycyBzb3J0
ZWQgYnkgei1vcmRlciBmcm9tIGJhY2sgdG8gZnJvbnQuCiAgICAgY2xhc3MgQmFja1RvRnJvbnQg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlw
ZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci0gICAgICAgIHZvaWQgYmVnaW4oQ0NMYXllckl0ZXJh
dG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5
cGVuYW1lIEFjdGlvblR5cGU+CisgICAgICAgIHZvaWQgYmVnaW4oQ0NMYXllckl0ZXJhdG9yPExh
eWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFjdGlvblR5cGU+Jik7CiAKLSAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci0g
ICAgICAgIHZvaWQgZW5kKENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVy
U3VyZmFjZVR5cGU+Jik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5
cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBBY3Rpb25UeXBlPgorICAgICAgICB2
b2lkIGVuZChDQ0xheWVySXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0
aW9uVHlwZT4mKTsKIAotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBl
bmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLSAgICAgICAgdm9pZCBuZXh0KENDTGF5ZXJJdGVyYXRv
clBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7CisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBl
bmFtZSBBY3Rpb25UeXBlPgorICAgICAgICB2b2lkIG5leHQoQ0NMYXllckl0ZXJhdG9yPExheWVy
VHlwZSwgUmVuZGVyU3VyZmFjZVR5cGUsIEFjdGlvblR5cGU+Jik7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBpbnQgbV9oaWdoZXN0VGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVyOwpAQCAtMTQyLDE4
ICsxNzcsMTggQEAgc3RydWN0IENDTGF5ZXJJdGVyYXRvckFjdGlvbnMgewogICAgIC8vIFdhbGtz
IGxheWVycyBzb3J0ZWQgYnkgei1vcmRlciBmcm9tIGZyb250IHRvIGJhY2sKICAgICBjbGFzcyBG
cm9udFRvQmFjayB7CiAgICAgcHVibGljOgotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5
ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZT4KLSAgICAgICAgdm9pZCBiZWdpbihD
Q0xheWVySXRlcmF0b3JQb3NpdGlvbjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPiYpOwor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZSwgdHlwZW5hbWUgQWN0aW9uVHlwZT4KKyAgICAgICAgdm9pZCBiZWdpbihDQ0xheWVy
SXRlcmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mKTsKIAot
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJm
YWNlVHlwZT4KLSAgICAgICAgdm9pZCBlbmQoQ0NMYXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJU
eXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExh
eWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+
CisgICAgICAgIHZvaWQgZW5kKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZh
Y2VUeXBlLCBBY3Rpb25UeXBlPiYpOwogCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXll
clR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotICAgICAgICB2b2lkIG5leHQoQ0NM
YXllckl0ZXJhdG9yUG9zaXRpb248TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT4mKTsKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgUmVuZGVyU3VyZmFj
ZVR5cGUsIHR5cGVuYW1lIEFjdGlvblR5cGU+CisgICAgICAgIHZvaWQgbmV4dChDQ0xheWVySXRl
cmF0b3I8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgQWN0aW9uVHlwZT4mKTsKIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1l
IFJlbmRlclN1cmZhY2VUeXBlPgotICAgICAgICB2b2lkIGdvVG9IaWdoZXN0SW5TdWJ0cmVlKEND
TGF5ZXJJdGVyYXRvclBvc2l0aW9uPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Jik7Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1cmZh
Y2VUeXBlLCB0eXBlbmFtZSBBY3Rpb25UeXBlPgorICAgICAgICB2b2lkIGdvVG9IaWdoZXN0SW5T
dWJ0cmVlKENDTGF5ZXJJdGVyYXRvcjxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlLCBBY3Rp
b25UeXBlPiYpOwogICAgIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySXRlcmF0b3JQb3NpdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckl0ZXJhdG9y
UG9zaXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFmNjNjNDVmNzQyYzAz
YzYwZGVmOWIyMTczODQwYWZiODZjMzI2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySXRlcmF0b3JQb3NpdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbl9oCi0j
ZGVmaW5lIENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uX2gKLQotI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5oIgotCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBOb24tdGVtcGxhdGVkIGNv
bnN0YW50cwotc3RydWN0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uVmFsdWUgewotICAgIHN0YXRp
YyBjb25zdCBpbnQgSW52YWxpZFRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4ID0gLTE7Ci0g
ICAgLy8gVGhpcyBtdXN0IGJlIC0xIHNpbmNlIHRoZSBpdGVyYXRvciBhY3Rpb24gY29kZSBhc3N1
bWVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gYmUKLSAgICAvLyByZWFjaGVkIGJ5IHN1YnRyYWN0aW5n
IG9uZSBmcm9tIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgbGF5ZXIgaW4gdGhlIGN1cnJlbnQK
LSAgICAvLyB0YXJnZXQgc3VyZmFjZSdzIGNoaWxkIGxheWVyIGxpc3QsIHdoaWNoIGlzIDAuCi0g
ICAgc3RhdGljIGNvbnN0IGludCBMYXllckluZGV4UmVwcmVzZW50aW5nVGFyZ2V0UmVuZGVyU3Vy
ZmFjZSA9IC0xOwotfTsKLQotLy8gQSBzdHJ1Y3QgdG8gaG9sZCB0aGUgaXRlcmF0b3IncyBjdXJy
ZW50IHBvc2l0aW9uLCB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIHZhcmlvdXMgQ0NMYXllckl0ZXJh
dG9yQWN0aW9uIGZ1bmN0aW9ucywgZm9yIHRoZW0gdG8KLS8vIHJlYWQgYW5kIHVwZGF0ZS4gVGhp
cyBzdHJ1Y3QgZXhpc3RzIHNvIHRoZSB0ZW1wbGF0ZWQgYWN0aW9uIGZ1bmN0aW9ucyBkb24ndCBu
ZWVkIHRvIGFjY2VzcyB0aGUgQ0NMYXllckl0ZXJhdG9yIGNsYXNzLgotLy8KLS8vIFRoZXJlIGlz
IGEgMToxIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFuIGluc3RhbmNlIG9mIHRoZSBDQ0xheWVySXRl
cmF0b3JQb3NpdGlvbiBjbGFzcyBhbmQgYSBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGb28gY2xh
c3MsCi0vLyBzbyBhbiBpdGVyYXRvciBhY3Rpb24gY2xhc3MgY2FuIGhvbGQgZXh0cmEgcG9zaXRp
b24gZGF0YSwgaWYgcmVxdWlyZWQsIGluIGl0cyBvd24gY2xhc3MgaW5zdGFuY2UuCi0vLwotLy8g
VGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIGl0ZXJhdG9yIGlzIGhlbGQgaW4gdHdvIGludGVn
ZXIgdmFyaWFibGVzLgotLy8gLSBUaGUgdGFyZ2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXggaXMg
YSBwb3NpdGlvbiBpbiB0aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC4gVGhpcyBwb2ludHMgdG8g
YSBsYXllciB3aGljaCBvd25zIHRoZSBjdXJyZW50Ci0vLyB0YXJnZXQgc3VyZmFjZS4gVGhpcyBp
cyBhIHZhbHVlIGZyb20gMCB0byBuLTEgKG4gPSBzaXplIG9mIHJlbmRlclN1cmZhY2VMYXllckxp
c3QgPSBudW1iZXIgb2Ygc3VyZmFjZXMpLiBBIHZhbHVlIG91dHNpZGUgb2YKLS8vIHRoaXMgcmFu
Z2UgKGZvciBleGFtcGxlLCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpJbnZhbGlkVGFy
Z2V0UmVuZGVyU3VyZmFjZUxheWVySW5kZXgpIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBwb3NpdGlv
bgotLy8gb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSB0cmVlLgotLy8gLSBUaGUgY3VycmVudExh
eWVySW5kZXggaXMgYSBwb3NpdGlvbiBpbiB0aGUgbGlzdCBvZiBsYXllcnMgdGhhdCBhcmUgY2hp
bGRyZW4gb2YgdGhlIGN1cnJlbnQgdGFyZ2V0IHN1cmZhY2UuIFdoZW4gcG9pbnRpbmcgdG8KLS8v
IG9uZSBvZiB0aGVzZSBsYXllcnMsIHRoaXMgaXMgYSB2YWx1ZSBmcm9tIDAgdG8gbi0xIChuID0g
bnVtYmVyIG9mIGNoaWxkcmVuKS4gU2luY2UgdGhlIGl0ZXJhdG9yIG11c3QgYWxzbyBzdG9wIGF0
IHRoZSBsYXllcnMKLS8vIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IHN1cmZhY2UsIHRoaXMgaXMg
ZG9uZSBieSBzZXR0aW5nIHRoZSBjdXJyZW50TGF5ZXJJbmRleCB0byBhIHZhbHVlIG9mCi0vLyBD
Q0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpMYXllclJlcHJlc2VudGluZ1RhcmdldFJlbmRl
clN1cmZhY2UuCi10ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5cGVuYW1lIFJlbmRlclN1
cmZhY2VUeXBlPgotc3RydWN0IENDTGF5ZXJJdGVyYXRvclBvc2l0aW9uIHsKLSAgICBDQ0xheWVy
SXRlcmF0b3JQb3NpdGlvbigpIDogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCgwKSB7IH0KLSAgICBl
eHBsaWNpdCBDQ0xheWVySXRlcmF0b3JQb3NpdGlvbihjb25zdCBWZWN0b3I8UmVmUHRyPExheWVy
VHlwZT4gPiogcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkgOiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KHJlbmRlclN1cmZhY2VMYXllckxpc3QpIHsgfQotCi0gICAgaW5saW5lIExheWVyVHlwZSogY3Vy
cmVudExheWVyKCkgY29uc3QgeyByZXR1cm4gY3VycmVudExheWVyUmVwcmVzZW50c1RhcmdldFJl
bmRlclN1cmZhY2UoKSA/IHRhcmdldFJlbmRlclN1cmZhY2VMYXllcigpIDogdGFyZ2V0UmVuZGVy
U3VyZmFjZUNoaWxkcmVuKClbY3VycmVudExheWVySW5kZXhdLmdldCgpOyB9Ci0KLSAgICBpbmxp
bmUgYm9vbCBjdXJyZW50TGF5ZXJSZXByZXNlbnRzQ29udHJpYnV0aW5nUmVuZGVyU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6cmVuZGVyU3VyZmFjZUNvbnRy
aWJ1dGVzVG9UYXJnZXQ8TGF5ZXJUeXBlPihjdXJyZW50TGF5ZXIoKSwgdGFyZ2V0UmVuZGVyU3Vy
ZmFjZUxheWVyKCktPmlkKCkpOyB9Ci0gICAgaW5saW5lIGJvb2wgY3VycmVudExheWVyUmVwcmVz
ZW50c1RhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50TGF5ZXJJbmRl
eCA9PSBDQ0xheWVySXRlcmF0b3JQb3NpdGlvblZhbHVlOjpMYXllckluZGV4UmVwcmVzZW50aW5n
VGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQotCi0gICAgaW5saW5lIExheWVyVHlwZSogdGFyZ2V0UmVu
ZGVyU3VyZmFjZUxheWVyKCkgY29uc3QgeyByZXR1cm4gKCpyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KVt0YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleF0uZ2V0KCk7IH0KLSAgICBpbmxpbmUgUmVu
ZGVyU3VyZmFjZVR5cGUqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiB0YXJn
ZXRSZW5kZXJTdXJmYWNlTGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOyB9Ci0gICAgaW5saW5lIGNv
bnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiB0YXJnZXRSZW5kZXJTdXJmYWNlQ2hpbGRy
ZW4oKSBjb25zdCB7IHJldHVybiB0YXJnZXRSZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpOyB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENDTGF5ZXJJdGVyYXRvclBvc2l0
aW9uJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB0YXJnZXRSZW5kZXJTdXJm
YWNlTGF5ZXJJbmRleCA9PSBvdGhlci50YXJnZXRSZW5kZXJTdXJmYWNlTGF5ZXJJbmRleAotICAg
ICAgICAgICAgJiYgY3VycmVudExheWVySW5kZXggPT0gb3RoZXIuY3VycmVudExheWVySW5kZXg7
Ci0gICAgfQotCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4qIHJlbmRlclN1
cmZhY2VMYXllckxpc3Q7Ci0gICAgaW50IHRhcmdldFJlbmRlclN1cmZhY2VMYXllckluZGV4Owot
ICAgIGludCBjdXJyZW50TGF5ZXJJbmRleDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>