<?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>232469</bug_id>
          
          <creation_ts>2021-10-28 22:35:49 -0700</creation_ts>
          <short_desc>[GPU Process] [Filters 4/23] Make CSSFilter be a composite of FilterFunctions</short_desc>
          <delta_ts>2022-05-08 20:12:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=233008</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=234918</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>231253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1809961</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-28 22:35:49 -0700</bug_when>
    <thetext>This will make CSSFilter have an item of SVGFilter in this list of FilterFunctions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809966</commentid>
    <comment_count>1</comment_count>
      <attachid>442784</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-28 22:55:27 -0700</bug_when>
    <thetext>Created attachment 442784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1809967</commentid>
    <comment_count>2</comment_count>
      <attachid>442785</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-28 22:59:10 -0700</bug_when>
    <thetext>Created attachment 442785
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810180</commentid>
    <comment_count>3</comment_count>
      <attachid>442785</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-29 12:03:34 -0700</bug_when>
    <thetext>Comment on attachment 442785
Patch for review

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        In this patch, the CSS referenced filter is built as an SVGFilter and it

&quot;reference filter&quot;

&gt; Source/WebCore/css/CSSFilterImageValue.cpp:120
&gt; +    auto texture = ImageBuffer::create(size, renderingMode, 1, DestinationColorSpace::SRGB(), PixelFormat::BGRA8);

texture is a weird name for this.

&gt; Source/WebCore/css/CSSFilterImageValue.cpp:130
&gt; +    auto cssFilter = CSSFilter::create(m_filterOperations, renderingMode);
&gt; +    
&gt;      cssFilter-&gt;setSourceImageRect(imageRect);
&gt;      if (!cssFilter-&gt;build(renderer, m_filterOperations, FilterConsumer::FilterFunction))

Why do we have to pass m_filterOperations both to the constructor, and to the build() function?

&gt; Source/WebCore/rendering/CSSFilter.cpp:223
&gt; +    auto builder = makeUnique&lt;SVGFilterBuilder&gt;();

Can SVGFilterBuilder just be on the stack?

&gt; Source/WebCore/rendering/RenderLayerFilters.h:66
&gt; +    GraphicsContext* beginFilterEffect(RenderElement&amp;, const LayoutRect&amp; filterBoxRect, const LayoutRect&amp; dirtyRect, const LayoutRect&amp; layerRepaintRect, GraphicsContext&amp; destinationContext);

I tend to prefer GraphicsContext&amp; destinationContext as the first argument.

&gt; Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp:436
&gt; +        auto builder = makeUnique&lt;SVGFilterBuilder&gt;();

Can this live on the stack?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810530</commentid>
    <comment_count>4</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-31 17:18:41 -0700</bug_when>
    <thetext>Some of the layout tests are failing because of the need to set the sourceImageRect before building the CSSFilter. The sourceImageRect has to include the Outsets of the FilterEffects. So currently to fix these tests we need to set the sourceImageRect twice and to build the CSSFilter twice. The plan to remove this dependency and be able to build the CSSFilter without having to set sourceImageRect and have the FilterEffects be able to calculate the outsets without knowing the sourceImageRect.

The reset of the failures are happing because of the color space which should be fixed once the calculation of the result color space out of the operating color space. So for now, I am going to skip these few tests and remove them by the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810534</commentid>
    <comment_count>5</comment_count>
      <attachid>442946</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-10-31 18:01:03 -0700</bug_when>
    <thetext>Created attachment 442946
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1812076</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-04 22:36:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/85047148&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813759</commentid>
    <comment_count>7</comment_count>
      <attachid>443851</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-10 12:39:25 -0800</bug_when>
    <thetext>Created attachment 443851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813800</commentid>
    <comment_count>8</comment_count>
      <attachid>443864</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-10 14:38:21 -0800</bug_when>
    <thetext>Created attachment 443864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813893</commentid>
    <comment_count>9</comment_count>
      <attachid>443899</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-11-10 19:58:07 -0800</bug_when>
    <thetext>Created attachment 443899
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1813899</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-10 20:31:14 -0800</bug_when>
    <thetext>Committed r285618 (244119@main): &lt;https://commits.webkit.org/244119@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 443899.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442784</attachid>
            <date>2021-10-28 22:55:27 -0700</date>
            <delta_ts>2021-10-31 18:01:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232469-20211028225526.patch</filename>
            <type>text/plain</type>
            <size>155242</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0Nzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjIxNTA4ZWVkN2ExM2Rm
OWU0M2NiMDIwZDg0MzVkY2FmMGQ0YjY0Yi4uZTNjOTZiNDg2M2EzMGFmM2RlMDZmMDZkNTIxN2Q2
ZGU0MGIzNGEzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMyBAQAorMjAyMS0xMC0yOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1ha2UgQ1NTRmlsdGVyIGhvbGRzIGEgbGlzdCBvZiBGaWx0ZXJGdW5jdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQ2OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIHRo
ZSBDU1MgcmVmZXJlbmNlZCBmaWx0ZXIgaXMgYnVpbHQgYXMgYW4gU1ZHRmlsdGVyIGFuZCBpdAor
ICAgICAgICBpcyBrZXB0IGFzIGEgRmlsdGVyRnVuY3Rpb24gaW4gdGhlIENTU0ZpbHRlciBmdW5j
dGlvbnMnIGxpc3QuIFRoZSBGaWx0ZXIgCisgICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmls
dGVyRWZmZWN0cyBvZiB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIgd2lsbCBiZSBhbgorICAgICAgICBT
VkdGaWx0ZXIgaW5zdGVhZCBvZiBoYXZpbmcgYSBDU1NGaWx0ZXIuIFRoaXMgd2lsbCBhbGxvdyBo
YXZpbmcgY29sb3IKKyAgICAgICAgc3BhY2luZyBmb3IgdGhlIHJlZmVyZW5jZWQgZmlsdGVycyBk
aWZmZXJlbnQgZnJvbSB0aGUgY29sb3Igc3BhY2luZyBvZgorICAgICAgICBDU1NGaWx0ZXIuIAor
CisgICAgICAgIEFsc28gdGhpcyBwYXRjaCBtYWtlcyBhIHNpbmdsZSBmdW5jdGlvbiBmb3IgYnVp
bGRpbmcgdGhlIHByaW1pdGl2ZXMgb2YKKyAgICAgICAgdGhlIFNWR0ZpbHRlciBpbnN0ZWFkIG9m
IGhhdmluZyB0d28gZnVuY3Rpb25zLgorCisgICAgICAgIFRvIGFsbG93IG9wZXJhdGluZyB0aHJv
dWdoIHRoZSBTVkdGaWx0ZXIgYXMgYSBGaWx0ZXJGdW5jdGlvbiBvd25lZCBieQorICAgICAgICBD
U1NGaWx0ZXIsIHRoZSBTVkdGaWx0ZXIgd2lsbCBoYXZlIGEgcG9pbnRlciB0byBpdHMgbGFzdEVm
ZmVjdC4KKworICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjpzZXRNYXhFZmZlY3RSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6b3V0c2V0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVu
Y3Rpb246Om91dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsdXJFZmZlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcm9w
U2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlTY2FsZUVmZmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU9wYWNp
dHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVFZmZlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwTGFzdEVmZmVjdFByb3BlcnRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjpsYXN0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkUmVm
ZXJlbmNlRmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0
cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0TWF4
RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRw
dXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpi
dWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2lu
RmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YXBw
bHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVp
bGRQcmltaXRpdmVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVTVkdSZXNvdXJj
ZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMp
OgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpidWlsZEZpbHRlckVmZmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcik6IERlbGV0
ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgor
CisyMDIxLTEwLTI4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAg
ICAgIFtHUFUgUHJvY2Vzc10gTWFrZSBTVkdGaWx0ZXIgYW5kIENTU0ZpbHRlciB3b3JrIGluIHRo
ZSBzYW1lIGNvb3JkaW5hdGVzIHN5c3RlbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IFNWR0ZpbHRlciBzZXRzIHRoZSBmb2xsb3dpbmcg
bWVtYmVycyBvZiBGaWx0ZXIKKworICAgICAgICAxLiBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0
ZVRyYW5zZm9ybTogdGhpcyBpcyB0aGUgc2NhbGluZyBwYXJ0IGZyb20gdGhlCisgICAgICAgICAg
IHRyYW5zZm9ybWF0aW9uIGZyb20gdGhlIHRhcmdldCBlbGVtZW50IHRvIHRoZSBvdXRlcm1vc3Qg
Y29vcmRpbmF0ZSBzeXN0ZW0KKyAgICAgICAgMi4gRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlv
bjogdGhpcyBpcyB0aGUgY2xhbXBpbmcgc2NhbGUgaWYgdGhlIHNpemUKKyAgICAgICAgICAgb2Yg
dGhlIHJlc3VsdCBJbWFnZUJ1ZmZlcnMgZXhjZWVkcyBNYXhDbGFtcGVkQXJlYQorCisgICAgICAg
IEFuZCB0aGUgQ1NTRmlsdGVyIHNldHMgdGhlIGZvbGxvd2luZyBtZW1iZXIgb2YgRmlsdGVyOgor
CisgICAgICAgIDEuIGZsb2F0IG1fZmlsdGVyU2NhbGU6IHRoaXMgaXMgdGhlIGRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKQorCisgICAgICAgIFRoZSBkaXNjcmVwYW5jeSBoYXBwZW5zIGFs
c28gd2hlbiBjcmVhdGluZyB0aGUgcmVzdWx0IEltYWdlQnVmZmVycy4gRm9yIAorICAgICAgICBT
VkdGaWx0ZXIsIHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVGYWN0b3I9MS4gVGhpcyBtZWFucyB0
aGUgbG9naWNhbFNpemUKKyAgICAgICAgPT0gYmFja2VuZFNpemUuIEJ1dCBmb3IgQ1NTRmlsdGVy
IHdlIGNyZWF0ZSB0aGVtIHdpdGggc2NhbGVGYWN0b3IKKyAgICAgICAgPSBtX2ZpbHRlclNjYWxl
LiBUaGlzIG1lYW5zIHRoZSBsb2dpY2FsU2l6ZSAhPSBiYWNrZW5kU2l6ZSBpbiB0aGlzIGNhc2Uu
CisKKyAgICAgICAgV2UgbmVlZCB0byB1bmlmeSB0aGUgY29vcmRpbmF0ZXMgc3lzdGVtIGZvciBi
b3RoIGZpbHRlcnMuIFdlIG5lZWQgYWxzbyB0bworICAgICAgICByZXBsYWNlIHRoZSB0aHJlZSBt
ZW1iZXJzIGJ5IGEgc2luZ2xlIEZsb2F0U2l6ZSBjYWxsZWQgIm1fZmlsdGVyU2NhbGUiLgorCisg
ICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpyZW5kZXJUb0ltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2Vt
ZW50TWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OmNh
bGN1bGF0ZUtlcm5lbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6ZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZzZXQ6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlcjo6c2V0RmlsdGVyU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzb3Vy
Y2VJbWFnZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRGaWx0ZXJS
ZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpmaWx0ZXJSZWdpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlcjo6RmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVy
UmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNl
dEZpbHRlclJlc29sdXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjph
YnNvbHV0ZVRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXI6OmlzU1ZHRmlsdGVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
cjo6aXNDU1NGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
OjpzY2FsZWRCeUZpbHRlclJlc29sdXRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0Ojpjb3B5SW1hZ2VCeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNvbnZlcnRQaXhlbEJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3Jh
cGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkUmVm
ZXJlbmNlRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3Vi
cmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0UmVjdCBjb25zdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpi
dWlsZEZpbHRlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBw
bHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVy
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFn
ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFn
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJTY2FsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0
ZXI6OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmg6CisKKzIwMjEtMTAtMjcgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBJbnRy
b2R1Y2UgRmlsdGVyRnVuY3Rpb24gYW5kIG1ha2UgaXQgdGhlIGJhc2UgY2xhc3Mgb2YgRmlsdGVy
IGFuZCBGaWx0ZXJFZmZlY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzMjQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgYWxsb3dzIENTU0ZpbHRlciB0byBob2xkIGEgbGlzdCBvZiBGaWx0ZXJG
dW5jdGlvbnMuIFRoZSBGaWx0ZXIgaW4KKyAgICAgICAgdGhpcyBjYXNlIHdpbGwgYWN0IGxpa2Ug
YSBjb21wb3NpdGUgcGF0dGVybiBvZiB0aGUgRmlsdGVyRWZmZWN0LgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbworICAgICAgICAxLiBSZW1vdmVzIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIGZpbHRl
ck5hbWUoKSBmcm9tIGFsbCB0aGUgRmlsdGVyRWZmZWN0CisgICAgICAgICAgIGNsYXNzZXMuIEl0
IHJlcGxhY2VzIGl0IHdpdGggYSBzdGF0aWMgZnVuY3Rpb24gaW4gRmlsdGVyRnVuY3Rpb24uCisg
ICAgICAgIDIuIFJlbW92ZXMgdGhlIHZpcnR1YWwgZnVuY3Rpb24gZmlsdGVyRWZmZWN0VHlwZSgp
IGFuZCB0aGUgZnVuY3Rpb24KKyAgICAgICAgICAgRmlsdGVyRWZmZWN0OjpmaWx0ZXJFZmZlY3RD
bGFzc1R5cGUoKSBzaW5jZSB0aGV5IGNhbiBib3RoIGJlIHJlcGxhY2VkCisgICAgICAgICAgIGJ5
IEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJUeXBlKCkuCisgICAgICAgIDMuIEFkZHMgdHJhaXQgbWFj
cm9zIGZvciBhbGwgRmlsdGVyRWZmZWN0cyBhbmQgdGhlIFNWR0ZpbHRlcnMgY2xhc3MuCisKKyAg
ICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
UmVuZGVyZXJDb3JlSW1hZ2U6OnN1cHBvcnRzQ29yZUltYWdlUmVuZGVyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpjb25uZWN0Q0lGaWx0ZXJz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6RkVCbGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpGRUNvbG9yTWF0cml4KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaDoKKyAgICAgICAgKGlzVHlwZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29t
cG9uZW50VHJhbnNmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5oOgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlm
ZnVzZUxpZ2h0aW5nOjpGRURpZmZ1c2VMaWdodGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEaXNwbGFjZW1lbnRNYXA6OkZFRGlzcGxhY2VtZW50TWFwKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3cpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUZsb29kOjpGRUZsb29kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpGRUdhdXNzaWFu
Qmx1cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTWVyZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNZXJnZTo6RkVNZXJnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICgpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVPZmZzZXQ6OkZFT2Zmc2V0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFU3BlY3VsYXJMaWdodGluZzo6RkVTcGVjdWxhckxpZ2h0aW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFVGlsZTo6RkVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXI6OkZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpGaWx0ZXJFZmZl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAgICAoaXNUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0VHlwZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdENsYXNzVHlw
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OkZpbHRlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbHRlck5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1lKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZpbHRlclR5cGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmlzQ1NTRmlsdGVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckZ1bmN0aW9uOjppc1NWR0ZpbHRlciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNGaWx0ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OmlzRmlsdGVyRWZmZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpzb3VyY2VBbHBoYU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRnVuY3Rpb246OnNvdXJjZUdyYXBoaWNOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpmaWx0ZXJOYW1lIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhh
OjpTb3VyY2VBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6OmVmZmVjdE5hbWUpOgorICAg
ICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6ZWZmZWN0
TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OlNvdXJjZUdyYXBoaWMpOgorICAg
ICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OkNT
U0ZpbHRlcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpGRUltYWdlKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmg6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6U1ZHRmlsdGVy
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoK
KwogMjAyMS0xMC0yNSAgWmlyYW4gU3VuICA8enN1bkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtj
c3Mtd3JpdGluZy1tb2Rlc10gRml4IHNpemluZyBvZiBvcnRob2dvbmFsIGVsZW1lbnRzIHdpdGgg
cGVyY2VudGFnZSBtYXJnaW5zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDRiZWExNGY0NGZiZjUyMTE5MGY2
MzNhYjY3MzA2OTEyMzNhNTViZjQuLjk0NzU3N2Y1MDUzNGI2NTZhMzlhYjJkMDgxZGZmMzExMTll
ZDQxMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMDY1LDYgKzIwNjUsNyBAQCBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJPcGVyYXRpb25zLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Qb2ludExpZ2h0
U291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDZiNjRiOWFiMDgxNGZiZTNmMzc5NGU0OWFhMjc3YjEwM2E5NDkzNDEu
LjE3MGRhODcxN2RmNGZlOWFkZjNkYTA3NWFjZDlhNDVhMzU5ZTRmMDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNTY2LDYg
KzEwNTY2LDggQEAKIAkJNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZpdHlTdGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjUyMzk2QjI1NENBREMyMDBGNUZCMTUgLyogTmF0aXZlSW1hZ2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTmF0aXZlSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmlsdGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI2NkYwMTMyMjQxQkNFMjAwODMzOTc1IC8qIFNWR1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDE0MjI0MUJGQjIwMDgzMzk3NSAvKiBTVkdQcmlt
aXRpdmVQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQ
cm9wZXJ0eUFuaW1hdG9ySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2
RjAxNTIyNDFDMDk4MDA4MzM5NzUgLyogU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNTI5OSw2ICsyNTMwMSw4IEBACiAJCQkJMDhDOTI1MTgwRkND
N0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAogCQkJCTJDODU2NTM4MjRDMTBCMEIw
MEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJCQkJMkM4NTY1MzMyNEMw
RjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8sCisJCQkJNzI2MkQ3NTcy
NzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLywKKwkJCQk3MjYyRDc1NjI3
MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLywKIAkJCQk0OUVDRUI2MzE0OTk3
OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJCQk0OUVDRUI2NDE0OTk3
OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJNDlFQ0VCNjUxNDk5Nzkw
RDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IDhjZjkwOWFlOWU1MzcyNGI5MWRiNGFjZTE0
YWUyODU3MWRkOTU1MjYuLjYwMDc1YTE3M2U0Nzg0N2JmYmFlMTgyYWJmYmQzNzFiZmVjYWZjODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTExNiwx
OSArMTE2LDIxIEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0g
SW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZm
ZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRv
IHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6
QkdSQTgpOworICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQ7CisgICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5k
ZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6
OkJHUkE4KTsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJ
bWFnZSgpOwogCiAgICAgYXV0byBpbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsK
ICAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKIAot
ICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0ZXIt
PnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVyZSkpOworICAgIGF1dG8gY3NzRmlsdGVyID0g
Q1NTRmlsdGVyOjpjcmVhdGUobV9maWx0ZXJPcGVyYXRpb25zLCByZW5kZXJpbmdNb2RlKTsKKyAg
ICAKICAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAgIGNz
c0ZpbHRlci0+c2V0RmlsdGVyUmVnaW9uKGltYWdlUmVjdCk7CiAgICAgaWYgKCFjc3NGaWx0ZXIt
PmJ1aWxkKHJlbmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0
ZXJGdW5jdGlvbikpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOworCisgICAg
Y3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKICAgICBjc3NGaWx0
ZXItPmFwcGx5KCk7CiAKICAgICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXItPm91dHB1dCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0Zp
bHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCmluZGV4
IDk3ZTExMzdiMjlkNzFjMmI1NDQxNTczMDY3MjQwMGI4MjQyOGIzNjEuLjk5YjE2OWEzODFlMTIy
MTc3NjAyYTJhNzMyMzFiNDBiMWI4ZWU5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVy
RWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW0KQEAgLTcyLDExICs3MiwxMSBAQCBzdGF0aWMgYm9v
bCBpc051bGxPckxpbmVhckNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24oY29uc3QgRkVDb21wb25l
bnRUcmFuc2ZlciYgZQogYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9y
dHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCiB7CiAgICAgLy8gRklY
TUU6IGNoYW5nZSByZXR1cm4gdmFsdWUgdG8gdHJ1ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVk
Ci0gICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKKyAgICBzd2l0
Y2ggKGVmZmVjdC5maWx0ZXJUeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
U291cmNlR3JhcGhpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKKyAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6RkVDb2xvck1hdHJpeDogewogICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZF
Q29sb3JNYXRyaXg+KGVmZmVjdCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJ
WF9UWVBFX1VOS05PV046CiAgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5D
RVRPQUxQSEE6CkBAIC04OCwyNiArODgsMTAgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNv
cmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmYKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRU
cmFuc2ZlcjoKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjoKICAgICAgICAgcmV0dXJuIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bihkb3duY2FzdDxGRUNvbXBvbmVudFRyYW5zZmVyPihlZmZlY3QpKTsKIAotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29t
cG9zaXRlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkRyb3BTaGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdo
dGluZzoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6
Ok9mZnNldDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVj
dDo6VHlwZTo6VHVyYnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNl
QWxwaGE6CisgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMzcsMzIgKzEyMSwxNCBAQCBSZXRhaW5QdHI8Q0lJbWFnZT4gRmls
dGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0
JgogICAgIGlmIChlZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LmZp
bHRlckVmZmVjdENsYXNzVHlwZSgpKSB7CisgICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyVHlwZSgp
KSB7CiAgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CiAgICAgICAg
IHJldHVybiBpbWFnZUZvclNvdXJjZUdyYXBoaWMoZG93bmNhc3Q8U291cmNlR3JhcGhpYz4oZWZm
ZWN0KSk7Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OgorICAgIGNh
c2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbG9yTWF0cml4OgogICAgICAgICByZXR1cm4gaW1h
Z2VGb3JGRUNvbG9yTWF0cml4KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0
SW1hZ2VzKTsKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6
CisgICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CiAgICAg
ICAgIHJldHVybiBpbWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25l
bnRUcmFuc2Zlcj4oZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwogCi0gICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aG9zZSBmaWx0ZXJzIHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJl
dHVybnMgYSB2YWxpZCBDSUltYWdlCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5k
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpEaWZmdXNlTGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3Bs
YWNlbWVudE1hcDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkdhdXNzaWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6
Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVy
RWZmZWN0OjpUeXBlOjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhv
bG9neToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0
OjpUeXBlOjpUaWxlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgot
ICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKICAgICBkZWZhdWx0Ogog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0yNzYsNyArMjQyLDcgQEAgSW1hZ2VC
dWZmZXIqIEZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAogdm9p
ZCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0
ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCiB7CiAgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1h
Z2VCdWZmZXI6OmNsYW1wZWRTaXplKGxhc3RFZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXpl
KCkpOwotICAgIG1fb3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGNsYW1wZWRTaXplLCBsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCksIGxhc3RF
ZmZlY3QucmVzdWx0Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIG1fb3V0
cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXpl
LCAxLCBsYXN0RWZmZWN0LnJlc3VsdENvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsK
ICAgICBpZiAoIW1fb3V0cHV0SW1hZ2VCdWZmZXIpIHsKICAgICAgICAgY2xlYXJSZXN1bHQoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjg4LDcgKzI1NCw2IEBAIHZvaWQgRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0RWZm
ZWN0CiBGbG9hdFJlY3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNv
bnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKIHsKICAgICBJbnRTaXplIGRlc3RT
aXplID0gbGFzdEVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkZXN0U2l6
ZS5zY2FsZShsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogICAgIEZsb2F0UmVj
dCBkZXN0UmVjdCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RTaXplKTsKICAgICByZXR1
cm4gZGVzdFJlY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUJsZW5kLmNwcAppbmRleCBjZGVhYTY1ZTY3MDRjZDY3ZmIwYTdhZmU5YWYx
OGZiYjYyYzJjZWQ5Li45MWQ4Y2E2Y2I1NWVjNDBmMzkwODc4MjRkYWQyNDkzZDI5YjNlNjdlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRkVCbGVu
ZDo6RkVCbGVuZChGaWx0ZXImIGZpbHRlciwgQmxlbmRNb2RlIG1vZGUpCi0gICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyLCBUeXBlOjpCbGVuZCkKKyAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIEZp
bHRlckVmZmVjdDo6VHlwZTo6RkVCbGVuZCkKICAgICAsIG1fbW9kZShtb2RlKQogewogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApp
bmRleCA3MGU4NDA3YmY1YzIwMGQ0NTIxNmI4ZjljMDg1MTdiNTA3OWU3OTY2Li5iODRjOGRkMjgw
NThmZjQ1ZDU0Y2RmOGE3M2EyYmE3MTcyNWZkZTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApAQCAtMzYsOCArMzYsNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlKTsKIAogcHJpdmF0ZToKLSAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQmxlbmQi
OyB9Ci0KICAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwogICAgIHZv
aWQgcGxhdGZvcm1BcHBseUdlbmVyaWModW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVu
c2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7
CkBAIC01MywzICs1MSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQmxlbmQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcAppbmRleCAzODA2NWNiOTZjN2I0YjRiMDNmYzZiMGVlZDg1YWM0YjZjOTY4YTU0Li5i
ZmNkNmEzMjI1YmFmMGEwN2M4YjM2ODU4NjEzZjBhMTM0Y2NlOWViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJp
eC5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRkVDb2xvck1h
dHJpeDo6RkVDb2xvck1hdHJpeChGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRyaXhUeXBlIHR5cGUs
IFZlY3RvcjxmbG9hdD4mJiB2YWx1ZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpDb2xvck1hdHJpeCkKKyAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6
VHlwZTo6RkVDb2xvck1hdHJpeCkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV92YWx1ZXMo
V1RGTW92ZSh2YWx1ZXMpKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAyOWU0MWE4YWVkMWU0ZjBi
NTM5NzAzYWM0ZGI1NTI0ZWZhNGMxMjNmLi45OTJlNzVmOWU4MTUwYzYxN2EyZWYwN2M2NTkzNjE2
MDA1ZTQwZjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaApAQCAtNTIsOCArNTIsNiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0
b3I8ZmxvYXQ+JiYpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJGRUNvbG9yTWF0cml4IjsgfQotCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOwpAQCAtOTMsNyArOTEsNCBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxh
dGVIdWVSb3RhdGVDb21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdAogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
RkVDb2xvck1hdHJpeCkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Rmls
dGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUo
KSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OyB9Ci1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VG
RkVDVChGRUNvbG9yTWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXgg
ODQ3ZWE1OGY1ZjliMDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uY2UwMGNjMTk4Mjk3OWI0
MDk0MDRkNWNmZGNjMDNhNmVkMzM1YzNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwCkBAIC0zMyw5ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25l
bnRUcmFuc2Zlcjo6RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBh
bHBoYUZ1bmN0aW9uKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50
VHJhbnNmZXIpCitGRUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRl
ciYgZmlsdGVyLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9uKQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwg
RmlsdGVyRWZmZWN0OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyKQogICAgICwgbV9yZWRGdW5j
dGlvbihyZWRGdW5jdGlvbikKICAgICAsIG1fZ3JlZW5GdW5jdGlvbihncmVlbkZ1bmN0aW9uKQog
ICAgICwgbV9ibHVlRnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNm
ZXIuaAppbmRleCAyYjU4NmRlZjdmYjQyYTM3YjJlMTIzZWRhODcxMTljNGViMzQ4YTUxLi4zYjlk
MjYwOGIwOTc0ZDgyNTVlY2FhNDJhODNjMmFmZGY2MzhhM2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50
VHJhbnNmZXIuaApAQCAtNjUsOCArNjUsNiBAQCBwcml2YXRlOgogICAgIEZFQ29tcG9uZW50VHJh
bnNmZXIoRmlsdGVyJiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAogICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7CiAKLSAgICAgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvbmVudFRyYW5z
ZmVyIjsgfQotCiAgICAgdXNpbmcgTG9va3VwVGFibGUgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj47CiAKICAgICBzdGF0aWMgdm9pZCBjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYs
IGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKQEAgLTg5LDYgKzg3LDQgQEAgcHJp
dmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXIpCi0gICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3Qu
ZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpD
b21wb25lbnRUcmFuc2ZlcjsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQ29tcG9uZW50VHJhbnNmZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwCmluZGV4IDhiNTllNjZkZTlmZThkNjM5MTZjYmU1Y2U2ZGQ0MDM4ZmE0Y2IyYTgu
LjU0YTJkODllOWIzMTEzOGQ4MGM2YjU1MjVlMDgzNTMzODUyMDUwNDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUu
Y3BwCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFQ29tcG9zaXRl
OjpGRUNvbXBvc2l0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlw
ZSYgdHlwZSwgZmxvYXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCisgICAgOiBGaWx0ZXJFZmZlY3Qo
ZmlsdGVyLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9zaXRlKQogICAgICwgbV90eXBlKHR5
cGUpCiAgICAgLCBtX2sxKGsxKQogICAgICwgbV9rMihrMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCA3ZDA4
ZTFmNzEwN2I0Yjk2OGM1OGUzYTM3YzMyYWUyZjc2YWVhMGMzLi4zOTIzN2ZlYjEyN2FkMWZmMWRl
MjE4MzRiZDdiMmI3MzdmYWFmMzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC02NCw4ICs2NCw2IEBAIHBy
b3RlY3RlZDoKIHByaXZhdGU6CiAgICAgRkVDb21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAotICAgIGNv
bnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUi
OyB9Ci0KICAgICB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKIApAQCAtOTAs
MyArODgsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbXBvc2l0ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguY3BwCmluZGV4IDNiYmU3ODM1OThkNzA5MzVhOTVjNmYxNTZlYzI5MzNjMGU5OWYwNTAu
LmU4NmYxMjljNTRiMWQ4ZmQ4ZWQ5Mjk0NmUyY2UxYjY5ODIzMDNiZWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZv
bHZlTWF0cml4LmNwcApAQCAtMzIsMTAgKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1GRUNvbnZvbHZlTWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25z
dCBJbnRTaXplJiBrZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNv
bnN0IEludFBvaW50JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBj
b25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNv
bnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0
ZXIsIFR5cGU6OkNvbnZvbHZlTWF0cml4KQorRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1h
dHJpeChGaWx0ZXImIGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2
aXNvciwgZmxvYXQgYmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVU
eXBlIGVkZ2VNb2RlLCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHBy
ZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCkK
ICAgICAsIG1fa2VybmVsU2l6ZShrZXJuZWxTaXplKQogICAgICwgbV9kaXZpc29yKGRpdmlzb3Ip
CiAgICAgLCBtX2JpYXMoYmlhcykKQEAgLTM4OCw4ICszODYsNyBAQCB2b2lkIEZFQ29udm9sdmVN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIElu
dFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRT
aXplLnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwotCisgICAgCiAgICAgUGFpbnRpbmdE
YXRhIHBhaW50aW5nRGF0YSA9IHsKICAgICAgICAgKnNvdXJjZVBpeGVsQXJyYXksCiAgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggNjdkNGM2
NTY3ZmNlNmIyN2VlNWFiODk1YTZlMWU1MDA1NGUxM2RiYS4uYzFhNWM1Yjg2NzU2MmYyNmFmODA3
ZDQ1YzViNDAwOTZkYjFjZmZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKQEAgLTgwLDggKzgw
LDYgQEAgcHJpdmF0ZToKICAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYsIGNvbnN0IEludFNp
emUmLCBmbG9hdCwgZmxvYXQsCiAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2Rl
VHlwZSwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKIAot
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb252
b2x2ZU1hdHJpeCI7IH0KLQogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBv
dmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0
UmVjdCgpKSk7IH0KIAogICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7
CkBAIC0xMTUsMyArMTEzLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb252b2x2ZU1hdHJpeCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
aWZmdXNlTGlnaHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKaW5kZXggZWViMTcyOGRiMzVlOGFjMzAyYjI3ZTRj
M2ZmMzRjYjg4NTViOWQwOS4uNDRlMmU2MjE0YTM3NmE0ZGExZWU3NzNjZGQ0MTc2NTc3NDA5YjFl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpZmZ1c2VMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKEZp
bHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNj
YWxlLCBmbG9hdCBkaWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9h
dCBrZXJuZWxVbml0TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAg
IDogRkVMaWdodGluZyhmaWx0ZXIsIERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3Vy
ZmFjZVNjYWxlLCBkaWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJu
ZWxVbml0TGVuZ3RoWSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OkRpZmZ1c2VMaWdodGlu
ZykKKyAgICA6IEZFTGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29s
b3IsIHN1cmZhY2VTY2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3Ro
WCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nKQogewogfQogCkBAIC0zNyw4ICszNyw2IEBAIFJlZjxG
RURpZmZ1c2VMaWdodGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRl
ciwgY29uc3QgQ29sb3ImIGxpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGln
aHRpbmcoZmlsdGVyLCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFu
dCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291
cmNlKSkpOwogfQogCi1GRURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkgPSBk
ZWZhdWx0OwotCiBib29sIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQoZmxv
YXQgZGlmZnVzZUNvbnN0YW50KQogewogICAgIGlmIChtX2RpZmZ1c2VDb25zdGFudCA9PSBkaWZm
dXNlQ29uc3RhbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYz
ZTExMjhiODQyNjE1ZTQ3NTEzYTBkZGRjMy4uMjczN2Y2MGY0YzNmNGIzNjI0ZGY4MGViYjk5ODM3
YmE2NTlmYTBiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURpZmZ1c2VMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaApAQCAtMzAsNyArMzAsNiBAQCBj
bGFzcyBMaWdodFNvdXJjZTsKIGNsYXNzIEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVibGljIEZFTGln
aHRpbmcgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0
ZShGaWx0ZXImLCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8
TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFRGlmZnVzZUxpZ2h0aW5nKCk7CiAKICAg
ICBmbG9hdCBkaWZmdXNlQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2RpZmZ1c2VDb25zdGFu
dDsgfQogICAgIGJvb2wgc2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0KTsKQEAgLTQzLDMgKzQyLDQg
QEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVEaWZmdXNlTGlnaHRpbmcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1l
bnRNYXAuY3BwCmluZGV4IDA0NzQ5MzM5MmJiMjgxNDZkOGIxNjliYTBhN2MzMmIxNmM1NjNmYTEu
LjI0YTQ2MjZjNmExYzgxZmM3NzRkYTYyMzc2YzEyOWJkODZkNzFlMjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEZFRGlzcGxhY2VtZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChGaWx0ZXImIGZpbHRlciwgQ2hh
bm5lbFNlbGVjdG9yVHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlD
aGFubmVsU2VsZWN0b3IsIGZsb2F0IHNjYWxlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwg
VHlwZTo6RGlzcGxhY2VtZW50TWFwKQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgRmlsdGVy
RWZmZWN0OjpUeXBlOjpGRURpc3BsYWNlbWVudE1hcCkKICAgICAsIG1feENoYW5uZWxTZWxlY3Rv
cih4Q2hhbm5lbFNlbGVjdG9yKQogICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2Vs
ZWN0b3IpCiAgICAgLCBtX3NjYWxlKHNjYWxlKQpAQCAtMTE5LDkgKzExOSw4IEBAIHZvaWQgRkVE
aXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBGaWx0ZXImIGZp
bHRlciA9IHRoaXMtPmZpbHRlcigpOwogICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlci5maWx0ZXJTY2Fs
ZSgpKTsKIAotICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29s
dXRpb24oeyBtX3NjYWxlLCBtX3NjYWxlIH0pOworICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRl
ci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKICAgICBmbG9hdCBz
Y2FsZUZvckNvbG9yWCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKICAgICBmbG9hdCBzY2FsZUZv
ckNvbG9yWSA9IHNjYWxlLmhlaWdodCgpIC8gMjU1LjA7CiAgICAgZmxvYXQgc2NhbGVkT2Zmc2V0
WCA9IDAuNSAtIHNjYWxlLndpZHRoKCkgKiAwLjU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5k
ZXggZGQ3MzJhODgxMDczZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uYWE1YjZkNDZiYzQ2
NGZjNmQwNjBkODZhZjZiYWUwZWYwN2VjOWU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApA
QCAtNTQsOCArNTQsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFRGlzcGxhY2VtZW50TWFw
KEZpbHRlciYsIENoYW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNl
bGVjdG9yVHlwZSB5Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CiAKLSAgICBjb25zdCBjaGFyKiBm
aWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxhY2VtZW50TWFwIjsgfQot
CiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRS
ZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KQEAgLTcyLDMgKzcwLDQg
QEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVEaXNwbGFjZW1lbnRNYXApCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAK
aW5kZXggNWNlN2JlM2E0NzFiNDdiOGRkNTQyNmQ5NjViYmZlNzg5ZjZiYmRkOC4uZDNjNDM3Yzdk
MmZjMTVmMzEwN2QyMzVkYjJhZTA4ODA2NmRhNjFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAt
MzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogRkVEcm9wU2hhZG93OjpG
RURyb3BTaGFkb3coRmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0
IGR4LCBmbG9hdCBkeSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFj
aXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKKyAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEcm9wU2hhZG93KQog
ICAgICwgbV9zdGRYKHN0ZFgpCiAgICAgLCBtX3N0ZFkoc3RkWSkKICAgICAsIG1fZHgoZHgpCkBA
IC01Myw3ICs1Myw3IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpCiAKICAgICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgw
KS0+YWJzb2x1dGVQYWludFJlY3QoKTsKICAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWlu
dFJlY3QoYWJzb2x1dGVQYWludFJlY3QpOwotICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1v
dmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOworICAg
IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUo
eyBtX2R4LCBtX2R5IH0pKTsKICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNvbHV0ZU9m
ZnNldFBhaW50UmVjdCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNzaWFuQmx1
cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CkBAIC04
MCw5ICs4MCw4IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
CiAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICAKLSAgICBGbG9hdFNp
emUgYmx1clJhZGl1cyA9IDIgKiBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9z
dGRYLCBtX3N0ZFkgfSk7Ci0gICAgYmx1clJhZGl1cy5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7Ci0gICAgRmxvYXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRp
b24oeyBtX2R4LCBtX2R5IH0pOworICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRl
ci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgRmxvYXRTaXpl
IG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9keCwgbV9keSB9KTsKIAog
ICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShp
bi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRo
T2Zmc2V0KGRyYXdpbmdSZWdpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggYjRlMGEyMDEyZmVkYjdi
NzdiZjNlMDU3MzRlZTg4YTI5ZWZmMzg0Yy4uMmI2ZTY2MTNiNWFlMTc4NGE3MTAyZDU0NmRkYmJj
YmQ2MTM4NThmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCkBAIC01MCw4ICs1MCw2IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgRkVEcm9wU2hhZG93KEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZs
b2F0LCBjb25zdCBDb2xvciYsIGZsb2F0KTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQotCiAgICAgdm9pZCBwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKSBvdmVycmlkZTsKQEAgLTcwLDMgKzY4LDQgQEAgcHJpdmF0ZToKICAgICAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJf
RUZGRUNUKEZFRHJvcFNoYWRvdykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0
ODYxNzk5MjM4MGYzYjZiMDEuLmE3ODQyMTk2NzRlMWFlOTc5OTM0NDM4ZGE1NGExYTcxYzk4MDQ4
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmNwcApAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBG
RUZsb29kOjpGRUZsb29kKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwg
ZmxvYXQgZmxvb2RPcGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Rmxv
b2QpCisgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRmxv
b2QpCiAgICAgLCBtX2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKICAgICAsIG1fZmxvb2RPcGFjaXR5
KGZsb29kT3BhY2l0eSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0Njgy
ZmEwNjE3MzQ4ZS4uMDhhNGU5NTkzNTg1ZDJmYTA3MjY4NGQ0NWQ1Zjg5MzBmM2FlZWYwYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmgKQEAgLTQ3LDggKzQ3LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUZsb29kKEZpbHRl
ciYsIGNvbnN0IENvbG9yJiwgZmxvYXQpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUZsb29kIjsgfQotCiAgICAgdm9pZCBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
bWF4RWZmZWN0UmVjdCgpKSk7IH0KQEAgLTYxLDMgKzU5LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1Qo
RkVGbG9vZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMDhlODVhMDhhYTAxYjA4MTIyM2Yz
NmViYjZiYmI4YWIzNjM5NDM2NS4uYjYyM2RjYmQ2MjM0NGNmYzg3Nzg4MzM5YmFlYWI2ZGRlYzA5
ODA0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgaW5saW5lIHZv
aWQga2VybmVsUG9zaXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGlu
dCYgZGVsdGFMZWZ0LAogfQogCiBGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoRmlsdGVy
JiBmaWx0ZXIsIGZsb2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLSAgICA6
IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkdhdXNzaWFuQmx1cikKKyAgICA6IEZpbHRlckVm
ZmVjdChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVHYXVzc2lhbkJsdXIpCiAgICAgLCBt
X3N0ZFgoeCkKICAgICAsIG1fc3RkWSh5KQogICAgICwgbV9lZGdlTW9kZShlZGdlTW9kZSkKQEAg
LTQ4NSw3ICs0ODUsNyBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxl
ZEtlcm5lbFNpemUoRmxvYXRTaXplIHN0ZERldmlhdGlvbikKIAogSW50U2l6ZSBGRUdhdXNzaWFu
Qmx1cjo6Y2FsY3VsYXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXpl
IHN0ZERldmlhdGlvbikKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXpl
KGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSk7CisgICAgcmV0
dXJuIGNhbGN1bGF0ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2Fs
ZShzdGREZXZpYXRpb24pKTsKIH0KIAogSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
T3V0c2V0U2l6ZShGbG9hdFNpemUgc3RkRGV2aWF0aW9uKQpAQCAtNTM3LDEwICs1MzcsOCBAQCB2
b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICByZXR1
cm47CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRl
cigpLCB7IG1fc3RkWCwgbV9zdGRZIH0pOwotICAgIGtlcm5lbFNpemUuc2NhbGUoZmlsdGVyKCku
ZmlsdGVyU2NhbGUoKSk7CiAKICAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRS
ZWN0KCkuc2l6ZSgpOwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgp
KTsKICAgICBhdXRvIHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKHBhaW50U2l6ZS5hcmVhKCkgKiA0KTsKICAgICBpZiAoIXRtcEltYWdlRGF0
YSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmluZGV4IDVmYjk3ZmZiMDcwYzJk
YWViNmViMjgzYmVhYWExNzY0N2NiYjJkM2UuLjYzMWQ4OTUxNjA3ZmY2ODU3N2YwOWY5YjdiMjU5
NGM3NmFhYzhiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTQ3LDggKzQ3LDYgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBGRUdhdXNzaWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVk
Z2VNb2RlVHlwZSk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIkZFR2F1c3NpYW5CbHVyIjsgfQotCiAgICAgc3RhdGljIGNvbnN0IGludCBzX21p
bmltYWxSZWN0RGltZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBm
b3IgcGFyYWxsZWwgam9icwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTgzLDMg
KzgxLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVHYXVzc2lhbkJsdXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmluZGV4
IDBmZmZjZDA2NDM5NmQ4ZjRiNjQwODIyNjljYzIwNzRmN2M5ZGJkYmMuLjUzNDAyN2M0MTRkMjUy
NDNhMjAxMTBhOWI3MWUwODVlZTY5MGJkNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0xMzMsOCArMTMzLDYg
QEAgcHJvdGVjdGVkOgogCiAgICAgRkVMaWdodGluZyhGaWx0ZXImLCBMaWdodGluZ1R5cGUsIGNv
bnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVm
PExpZ2h0U291cmNlPiYmLCBUeXBlKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiAiRkVMaWdodGluZyI7IH0KLQogICAgIGJvb2wgZHJhd0xpZ2h0
aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiwgaW50LCBpbnQpOwogCiAgICAgdm9pZCBzZXRQaXhlbChp
bnQgb2Zmc2V0LCBjb25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRp
bmdEYXRhJiwgaW50IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRT
aXplIG5vcm1hbFZlY3Rvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAppbmRleCAwYTIwMDAxYjE3M2JkOGZkZjZiYmE2MzZj
ZDIzY2U0NzAyNmU3YjNmLi42OTdkMmUxNWNjYmYxYWVmZWQwZTg5ZmRhMzRlNzAzMjkzMDdmNzNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRkVN
ZXJnZTo6RkVNZXJnZShGaWx0ZXImIGZpbHRlcikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6Ok1lcmdlKQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgRmlsdGVyRWZmZWN0OjpU
eXBlOjpGRU1lcmdlKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCmluZGV4IDVjZmM1Y2I3OTgxOWNlY2VkNTA3M2U1N2Iw
MTk0ZWJjZjE4ZjI2MDcuLjI3NTBjNGQ1MjRkM2EwZjVhZTk3NDFmNjQ4MDQ0OTQ1MzQ1ZDFhYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
ZXJnZS5oCkBAIC0zMyw4ICszMyw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVNZXJnZShG
aWx0ZXImKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiRkVNZXJnZSI7IH0KLQogICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7CiAKICAgICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RG
OjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKQEAgLTQy
LDMgKzQwLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVNZXJnZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApp
bmRleCA4YTdlNWI2NjdhYjc3M2I5MGI4OTBlMzgzODYzOTM1NjJiOWQ4ZGY1Li42MGM2ODUxNDAz
OWIwOTZhODc3ZjdiZTQ3Y2Y0OTIwNjczZDlhN2JiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0z
Niw3ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFTW9ycGhvbG9neTo6RkVNb3Jw
aG9sb2d5KEZpbHRlciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0
IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBl
OjpNb3JwaG9sb2d5KQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgRmlsdGVyRWZmZWN0OjpU
eXBlOjpGRU1vcnBob2xvZ3kpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fcmFkaXVzWChy
YWRpdXNYKQogICAgICwgbV9yYWRpdXNZKHJhZGl1c1kpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQg
RkVNb3JwaG9sb2d5OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiB7CiAgICAgRmxvYXRS
ZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAg
IEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUo
ZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0p
KTsKKyAgICBwYWludFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1f
cmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKICAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQogICAgICAg
ICBwYWludFJlY3QuaW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CiAgICAgZWxzZQpAQCAtMjYz
LDcgKzI2Myw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgIGlmICghc291cmNlUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmFkaXVz
ID0gZmxvb3JlZEludFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFk
aXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIu
c2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKICAgICBpbnQg
cmFkaXVzWCA9IHN0ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMu
d2lkdGgoKSk7CiAgICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5o
ZWlnaHQoKSAtIDEsIHJhZGl1cy5oZWlnaHQoKSk7CiAKQEAgLTI3MywxMCArMjczLDEwIEBAIHZv
aWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIFBhaW50aW5nRGF0
YSBwYWludGluZ0RhdGE7CiAgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBzb3VyY2VQ
aXhlbEFycmF5LmdldCgpOwogICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gJmRlc3Rp
bmF0aW9uUGl4ZWxBcnJheTsKLSAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihlZmZlY3RE
cmF3aW5nUmVjdC53aWR0aCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5n
RGF0YS5oZWlnaHQgPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAqIGZpbHRlci5m
aWx0ZXJTY2FsZSgpKTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1gg
KiBmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWls
ZihyYWRpdXNZICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIHBhaW50aW5nRGF0YS53aWR0
aCA9IGNlaWxmKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkpOworICAgIHBhaW50aW5nRGF0YS5o
ZWlnaHQgPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSk7CisgICAgcGFpbnRpbmdE
YXRhLnJhZGl1c1ggPSBjZWlsZihyYWRpdXNYKTsKKyAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9
IGNlaWxmKHJhZGl1c1kpOwogCiAgICAgcGxhdGZvcm1BcHBseShwYWludGluZ0RhdGEpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1v
cnBob2xvZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVN
b3JwaG9sb2d5LmgKaW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2YxNGVkZjA3NWRlMzljNWEx
MS4uMWI2OWM2MzI2Y2IwYjkyMzZhOTBkM2QxNDI1M2FlMGIzZWUxNDk4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9n
eS5oCkBAIC00OCw4ICs0OCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVNb3JwaG9sb2d5
KEZpbHRlciYsIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJh
ZGl1c1kpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuICJGRU1vcnBob2xvZ3kiOyB9Ci0KICAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
IG92ZXJyaWRlOwogCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJy
aWRlOwpAQCAtODYsMyArODQsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU1vcnBob2xvZ3kpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zm
c2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZz
ZXQuY3BwCmluZGV4IDAyNzBkYjkyNDgxYTMzOTJkM2Q1YTFlOTE3YzJkNjVhYTQxNDBmNjkuLjAy
OGNiYzYwYTQ0N2YzNjliY2NlZGEwMDVjOTE3NWIzMWIxOGQ4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC0z
MSw3ICszMSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFT2Zmc2V0OjpGRU9mZnNldChG
aWx0ZXImIGZpbHRlciwgZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZp
bHRlciwgVHlwZTo6T2Zmc2V0KQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpGRU9mZnNldCkKICAgICAsIG1fZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogewpA
QCAtNTYsNyArNTYsNyBAQCB2b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpCiB7CiAgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0
ZVBhaW50UmVjdCgpOwogICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAg
cGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1f
ZHkgfSkpOworICAgIHBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsg
bV9keCwgbV9keSB9KSk7CiAgICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKICAgICAgICAgcGFpbnRS
ZWN0LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwogICAgIGVsc2UKQEAgLTc3LDcgKzc3LDcg
QEAgdm9pZCBGRU9mZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CiAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBk
cmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgs
IG1fZHkgfSkpOworICAgIGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJT
Y2FsZSh7IG1fZHgsIG1fZHkgfSkpOwogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbik7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAppbmRleCA2NWFi
ZGE5MGE0N2IxYmZlNzZhZTVjNzRhYWI1YWExNjdmYjFlNjllLi5kYjczMjI1NWVlNzhkMzM2ODA5
ZGI0MjE3ODVhOTJmODQ1Yjk1MjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCkBAIC0zOSw4ICszOSw2IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKIAot
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVPZmZz
ZXQiOyB9Ci0KICAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwogICAg
IAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKQEAgLTUz
LDMgKzUxLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJM
aWdodGluZy5jcHAKaW5kZXggNTk5NzIzMDY4ODZhNjNmYTQxMmI1YjcxNDFmNzRmOWM0ODdhMTQ0
Yy4uNTJmNDUwODQwOTBhZGNiMDRkN2U0NTEyMDU4ZWE3YTJhY2RhOGYzYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVT
cGVjdWxhckxpZ2h0aW5nLmNwcApAQCAtMjgsNyArMjgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBGRVNwZWN1bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImIGZpbHRl
ciwgY29uc3QgQ29sb3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQg
c3BlY3VsYXJDb25zdGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5p
dExlbmd0aFgsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGln
aHRTb3VyY2UpCi0gICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgU3BlY3VsYXJMaWdodGluZywgbGln
aHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4
cG9uZW50LCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGln
aHRTb3VyY2UpLCBUeXBlOjpTcGVjdWxhckxpZ2h0aW5nKQorICAgIDogRkVMaWdodGluZyhmaWx0
ZXIsIFNwZWN1bGFyTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3Bl
Y3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5l
bFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RVNwZWN1bGFyTGlnaHRpbmcpCiB7CiB9CiAKQEAgLTM3LDggKzM3LDYgQEAgUmVmPEZFU3BlY3Vs
YXJMaWdodGluZz4gRkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IENvbG9yJgogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhm
aWx0ZXIsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3Bl
Y3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZN
b3ZlKGxpZ2h0U291cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGlnaHRpbmc6On5GRVNwZWN1bGFy
TGlnaHRpbmcoKSA9IGRlZmF1bHQ7Ci0KIGJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVj
dWxhckNvbnN0YW50KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCiB7CiAgICAgaWYgKG1fc3BlY3Vs
YXJDb25zdGFudCA9PSBzcGVjdWxhckNvbnN0YW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgK
aW5kZXggZTk5OGE3NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5ODE4YmYzYjI0OTU4YS4uOWJiYmE4YThm
MWZjNmYwMTA0NTc2MGRhODBkMzVmOGNkMjc3Y2UxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGlu
Zy5oCkBAIC0yOCw3ICsyOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZFU3BlY3Vs
YXJMaWdodGluZyA6IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PEZFU3BlY3VsYXJMaWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZp
cnR1YWwgfkZFU3BlY3VsYXJMaWdodGluZygpOwogCiAgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQogICAgIGJvb2wgc2V0U3Bl
Y3VsYXJDb25zdGFudChmbG9hdCk7CkBAIC00NCwzICs0Myw0IEBAIHByaXZhdGU6CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNU
KEZFU3BlY3VsYXJMaWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2NDJkYzFlN2Rj
YTBjNWRiMmZjYWMyMGFkLi4zZTUwZmI2YzAwZWNmMzgzOTg1YzYyOTc5ODRmNmU5Nzg1Y2U0MjRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuY3BwCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFVGls
ZTo6RkVUaWxlKEZpbHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlw
ZTo6VGlsZSkKKyAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVUaWxlKQogewogfQogCkBAIC01OCwxMCArNTgsMTAgQEAgdm9pZCBGRVRpbGU6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJl
Y3QoKTsKICAgICBGbG9hdFBvaW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2Nh
dGlvbigpOwogICAgIEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0
KCkubG9jYXRpb24oKTsKLSAgICBpZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJF
ZmZlY3RUeXBlU291cmNlSW5wdXQpIHsKKyAgICBpZiAoaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWMgfHwgaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKSB7CiAgICAgICAgIEZpbHRlciYgZmlsdGVyID0g
dGhpcy0+ZmlsdGVyKCk7CiAgICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigp
OwotICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRo
KCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworICAgICAgICB0aWxlUmVj
dC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgfQogCiAgICAgYXV0byB0aWxlSW1h
Z2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGls
ZVJlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdN
b2RlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmgKaW5kZXggNDliZDk5ZjA5NDQ3ZGFlMWNmMDlhZjEyMzU4YzZkZTg0MDY4NzcxNC4u
NWM0OGVmNDUxNTBlYzJjZjg3OWZkZGI3ZTQ4ZTllOWU4ZDUwMjQxZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCkBAIC0zMywxMCAr
MzMsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFVGlsZShGaWx0ZXImKTsKIAotICAgIGNv
bnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUaWxlIjsgfQot
Ci0gICAgRmlsdGVyRWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVRpbGU7IH0KLQogICAgIHZvaWQgcGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkgb3ZlcnJpZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1h
eEVmZmVjdFJlY3QoKSkpOyB9CkBAIC00NiwzICs0Miw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZF
VGlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUdXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcAppbmRleCBhYzIzNDZlOGE0YmE1OGFhYTkyNGE2ZDY3YmQ1
ZTRiNzdkZDIyNjhmLi41YzZhYmQ1NDNjYTMzNjhhMzkwMTg4MTNjZWQxNzM1NWE4OGE2NTVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBjb25zdCBpbnQgc19y
YW5kUSA9IDEyNzc3MzsgLy8gbSAvIGEKIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7
IC8vIG0gJSBhCiAKIEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBU
dXJidWxlbmNlVHlwZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1
ZW5jeVksIGludCBudW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAg
IDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VHVyYnVsZW5jZSkKKyAgICA6IEZpbHRlckVm
ZmVjdChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVUdXJidWxlbmNlKQogICAgICwgbV90
eXBlKHR5cGUpCiAgICAgLCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQogICAgICwg
bV9iYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSkKQEAgLTM3MSwxNyArMzcxLDE2IEBAIHZv
aWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5
LCBjb25zdCBQYWludGluZ0RhdGEmCiAgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwogCiAgICAg
SW50UmVjdCBmaWx0ZXJSZWdpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIGZpbHRlclJl
Z2lvbi5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKICAgICBGbG9hdFBvaW50IHBvaW50
KDAsIGZpbHRlclJlZ2lvbi55KCkgKyBzdGFydFkpOwogICAgIGludCBpbmRleE9mUGl4ZWxDaGFu
bmVsID0gc3RhcnRZICogKGZpbHRlclJlZ2lvbi53aWR0aCgpIDw8IDIpOwotICAgIEFmZmluZVRy
YW5zZm9ybSBpbnZlcnNlVHJhbnNmcm9tID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5p
bnZlcnNlKCkudmFsdWVfb3IoQWZmaW5lVHJhbnNmb3JtKCkpOworICAgIEZsb2F0U2l6ZSBpbnZl
cnNlU2NhbGUgPSB7IDEgLyBmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0
ZXIoKS5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH07CiAKICAgICBmb3IgKGludCB5ID0gc3RhcnRZ
OyB5IDwgZW5kWTsgKyt5KSB7CiAgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CiAg
ICAgICAgIHBvaW50LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7CiAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgZmlsdGVyUmVnaW9uLndpZHRoKCk7ICsreCkgewogICAgICAgICAgICAgcG9pbnQu
c2V0WChwb2ludC54KCkgKyAxKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9
IGludmVyc2VUcmFuc2Zyb20ubWFwUG9pbnQocG9pbnQpOworICAgICAgICAgICAgRmxvYXRQb2lu
dCBsb2NhbFBvaW50ID0gcG9pbnQuc2NhbGVkKGludmVyc2VTY2FsZS53aWR0aCgpLCBpbnZlcnNl
U2NhbGUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJi
dWxlbmNlVmFsdWVGb3JQb2ludChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQp
OwogICAgICAgICAgICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRh
KCksIDQsIGluZGV4T2ZQaXhlbENoYW5uZWwpOwogICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hh
bm5lbCArPSA0OwpAQCAtNDAzLDcgKzQwMiw2IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3Rp
bmF0aW9uUGl4ZWxCdWZmZXItPmRhdGEoKTsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShmaWx0ZXIoKS5m
aWx0ZXJTY2FsZSgpKTsKIAogICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewogICAgICAg
ICBkZXN0aW5hdGlvblBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IDRk
NTM2YjM3YTgwYWFkZjkxMWViZmNlODk3NzRjZDNjY2VjYjVjZmIuLjU4MWZiZWYwYTdkNmMxYjQz
YjdhMThlMDc4ZmYyOTczY2UxMGNhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtMTA4LDggKzEwOCw2
IEBAIHByaXZhdGU6CiAKICAgICBGRVR1cmJ1bGVuY2UoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUs
IGZsb2F0LCBmbG9hdCwgaW50LCBmbG9hdCwgYm9vbCk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KLQogICAgIHZv
aWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlOwpAQCAtMTMyLDMgKzEzMCw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZF
VHVyYnVsZW5jZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5oCmluZGV4IGEyZDk5NzkzYjBkYjIyNThiYzQ3NmRkY2MyOWMwY2UyNjExMGJj
MWYuLjU0MjExMGE4OGZlYzFmNTYzZmZiMDcxMGNmNTNkNTY2ZGM5YWFiZjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtMSw2
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSw1OCArMjIsNTYgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVz
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbHRlckVmZmVjdDsKIAotY2xhc3Mg
RmlsdGVyIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7CitjbGFzcyBGaWx0ZXIgOiBwdWJs
aWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgotICAgIEZpbHRlcihjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBmbG9hdCBmaWx0ZXJTY2FsZSA9IDEpCi0gICAgICAg
IDogbV9hYnNvbHV0ZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAgICAgLCBtX2Zp
bHRlclNjYWxlKGZpbHRlclNjYWxlKQotICAgIHsgfQotICAgIHZpcnR1YWwgfkZpbHRlcigpID0g
ZGVmYXVsdDsKKyAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2Zp
bHRlclNjYWxlOyB9CisgICAgdm9pZCBzZXRGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmIGZp
bHRlclNjYWxlKSB7IG1fZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsgfQorCisgICAgRmxvYXRS
ZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSW1hZ2VSZWN0OyB9
CisgICAgdm9pZCBzZXRGaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24p
IHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247IH0KKyAgICAKKyAgICBGbG9hdFJlY3Qg
ZmlsdGVyUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KKyAgICB2b2lk
IHNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkgeyBt
X3NvdXJjZUltYWdlUmVjdCA9IHNvdXJjZUltYWdlUmVjdDsgfQogCisgICAgdmlydHVhbCBGbG9h
dFNpemUgc2NhbGVkQnlGaWx0ZXJTY2FsZShGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4g
c2l6ZSAqIG1fZmlsdGVyU2NhbGU7IH0KKyAgICAKICAgICB2b2lkIHNldFNvdXJjZUltYWdlKFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4mJiBzb3VyY2VJbWFnZSkgeyBtX3NvdXJjZUltYWdlID0gV1RGTW92
ZShzb3VyY2VJbWFnZSk7IH0KICAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UoKSB7IHJldHVy
biBtX3NvdXJjZUltYWdlLmdldCgpOyB9CiAKLSAgICBGbG9hdFNpemUgZmlsdGVyUmVzb2x1dGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyUmVzb2x1dGlvbjsgfQotICAgIHZvaWQgc2V0Rmls
dGVyUmVzb2x1dGlvbihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29sdXRpb24pIHsgbV9maWx0
ZXJSZXNvbHV0aW9uID0gZmlsdGVyUmVzb2x1dGlvbjsgfQotCi0gICAgZmxvYXQgZmlsdGVyU2Nh
bGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclNjYWxlOyB9Ci0gICAgdm9pZCBzZXRGaWx0ZXJT
Y2FsZShmbG9hdCBzY2FsZSkgeyBtX2ZpbHRlclNjYWxlID0gc2NhbGU7IH0KLQotICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2Fi
c29sdXRlVHJhbnNmb3JtOyB9Ci0KICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlcmluZ01vZGU7IH0KICAgICB2b2lkIHNldFJlbmRlcmluZ01v
ZGUoUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSB7IG1fcmVuZGVyaW5nTW9kZSA9IHJlbmRl
cmluZ01vZGU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgRmxvYXRTaXplIHNjYWxlZEJ5RmlsdGVyUmVzb2x1
dGlvbihGbG9hdFNpemUgc2l6ZSkgY29uc3QgeyByZXR1cm4gc2l6ZSAqIG1fZmlsdGVyUmVzb2x1
dGlvbjsgfQotICAgIAotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBmaWx0ZXJSZWdpb24oKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCA9
IDA7Ci0KIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBm
aWx0ZXJSZXNvbHV0aW9uKQotICAgICAgICA6IG1fZmlsdGVyUmVzb2x1dGlvbihmaWx0ZXJSZXNv
bHV0aW9uKQorICAgIEZpbHRlcihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgY29uc3QgRmxvYXRT
aXplJiBmaWx0ZXJTY2FsZSkKKyAgICAgICAgOiBGaWx0ZXJGdW5jdGlvbihmaWx0ZXJUeXBlKQor
ICAgICAgICAsIG1fZmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpCisgICAgeworICAgIH0KKworICAg
IEZpbHRlcihGaWx0ZXI6OlR5cGUgZmlsdGVyVHlwZSwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJT
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVnaW9uKQorICAgICAgICA6IEZpbHRlckZ1bmN0aW9uKGZpbHRlclR5cGUpCisgICAg
ICAgICwgbV9maWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSkKKyAgICAgICAgLCBtX3NvdXJjZUltYWdl
UmVjdChzb3VyY2VJbWFnZVJlY3QpCisgICAgICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVyUmVn
aW9uKQogICAgIHsKICAgICB9CiAKIHByaXZhdGU6CisgICAgRmxvYXRTaXplIG1fZmlsdGVyU2Nh
bGU7CisgICAgRmxvYXRSZWN0IG1fc291cmNlSW1hZ2VSZWN0OworICAgIEZsb2F0UmVjdCBtX2Zp
bHRlclJlZ2lvbjsKKwogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKLSAg
ICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fi
c29sdXRlVHJhbnNmb3JtOwogICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwotICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAx
IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXgg
ZmI2Nzc1NGU0ZmM1YmJjYTUxYzM0OGVjN2Y2M2U0Y2M5MjdkYjEwOC4uNDBkMjMwMGUxMWUxYzEy
NmY3NmI4NTgyZGEyOTk0Y2Q1OWUzNmI1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtNDUsMTQg
KzQ1LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmlsdGVyRWZmZWN0OjpGaWx0ZXJF
ZmZlY3QoRmlsdGVyJiBmaWx0ZXIsIFR5cGUgdHlwZSkKLSAgICA6IG1fZmlsdGVyKGZpbHRlcikK
LSAgICAsIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKHR5cGUpCitGaWx0ZXJFZmZlY3Q6OkZpbHRl
ckVmZmVjdChGaWx0ZXImIGZpbHRlciwgRmlsdGVyRWZmZWN0OjpUeXBlIHR5cGUpCisgICAgOiBG
aWx0ZXJGdW5jdGlvbih0eXBlKQorICAgICwgbV9maWx0ZXIoZmlsdGVyKQogewogfQogCi1GaWx0
ZXJFZmZlY3Q6On5GaWx0ZXJFZmZlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsdGVyRWZmZWN0
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiB7CiAgICAgbV9hYnNvbHV0ZVBhaW50UmVj
dCA9IEludFJlY3QoKTsKQEAgLTEwNywxMSArMTA1LDExIEBAIEZsb2F0UmVjdCBGaWx0ZXJFZmZl
Y3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCiAgICAgICAgICAgICBzdWJy
ZWdpb24udW5pdGUoaW5wdXRQcmltaXRpdmVTdWJyZWdpb24pOwogICAgICAgICB9CiAgICAgfSBl
bHNlCi0gICAgICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNl
KCk7CisgICAgICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbigpOwogCiAgICAg
Ly8gQWZ0ZXIgY2FsbGluZyBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gb24gdGhl
IHRhcmdldCBlZmZlY3QsIHJlc2V0IHRoZSBzdWJyZWdpb24gYWdhaW4gZm9yIDxmZVRpbGU+Lgot
ICAgIGlmIChmaWx0ZXJFZmZlY3RUeXBlKCkgPT0gRmlsdGVyRWZmZWN0VHlwZVRpbGUpCi0gICAg
ICAgIHN1YnJlZ2lvbiA9IG1fZmlsdGVyLmZpbHRlclJlZ2lvbkluVXNlclNwYWNlKCk7CisgICAg
aWYgKGZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFVGlsZSkKKyAgICAgICAg
c3VicmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uKCk7CiAKICAgICBhdXRvIGJvdW5kYXJp
ZXMgPSBlZmZlY3RCb3VuZGFyaWVzKCk7CiAgICAgaWYgKGhhc1goKSkKQEAgLTEyNSwxNSArMTIz
LDE0IEBAIEZsb2F0UmVjdCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbigpCiAKICAgICBzZXRGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oc3VicmVnaW9uKTsK
IAotICAgIGF1dG8gYWJzb2x1dGVTdWJyZWdpb24gPSBtX2ZpbHRlci5hYnNvbHV0ZVRyYW5zZm9y
bSgpLm1hcFJlY3Qoc3VicmVnaW9uKTsKLSAgICBhdXRvIGZpbHRlclJlc29sdXRpb24gPSBtX2Zp
bHRlci5maWx0ZXJSZXNvbHV0aW9uKCk7Ci0gICAgYWJzb2x1dGVTdWJyZWdpb24uc2NhbGUoZmls
dGVyUmVzb2x1dGlvbik7CisgICAgYXV0byBhYnNvbHV0ZVN1YnJlZ2lvbiA9IHN1YnJlZ2lvbjsK
KyAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAg
ICAvLyBTYXZlIHRoaXMgYmVmb3JlIGNsaXBwaW5nIHNvIHdlIGNhbiB1c2UgaXQgdG8gbWFwIGxp
Z2h0aW5nIHBvaW50cyBmcm9tIHVzZXIgc3BhY2UgdG8gYnVmZmVyIGNvb3JkaW5hdGVzLgogICAg
IHNldFVuY2xpcHBlZEFic29sdXRlU3VicmVnaW9uKGFic29sdXRlU3VicmVnaW9uKTsKIAogICAg
IC8vIENsaXAgZXZlcnkgZmlsdGVyIGVmZmVjdCB0byB0aGUgZmlsdGVyIHJlZ2lvbi4KICAgICBh
dXRvIGFic29sdXRlU2NhbGVkRmlsdGVyUmVnaW9uID0gbV9maWx0ZXIuZmlsdGVyUmVnaW9uKCk7
Ci0gICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUoZmlsdGVyUmVzb2x1dGlvbik7
CisgICAgYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24uc2NhbGUobV9maWx0ZXIuZmlsdGVyU2Nh
bGUoKSk7CiAgICAgYWJzb2x1dGVTdWJyZWdpb24uaW50ZXJzZWN0KGFic29sdXRlU2NhbGVkRmls
dGVyUmVnaW9uKTsKIAogICAgIHNldE1heEVmZmVjdFJlY3QoYWJzb2x1dGVTdWJyZWdpb24pOwpA
QCAtMTgxLDcgKzE3OCw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCiAgICAgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKTsKICAgICBzZXRSZXN1bHRDb2xvclNwYWNlKG1fb3BlcmF0
aW5nQ29sb3JTcGFjZSk7CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8
ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBs
eSgpOlxuICBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbiA8PCAiXG4gIGVmZmVjdEJvdW5kYXJpZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMg
PDwgIlxuICBhYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBw
ZWRTdWJyZWdpb24gPDwgIlxuICBhYnNvbHV0ZVBhaW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQYWlu
dFJlY3QgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIgPDwgbV9tYXhFZmZlY3RSZWN0IDw8ICJcbiAg
ZmlsdGVyIHNjYWxlICIgPDwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSA8PCAiXG4gIGZpbHRlciBy
ZXNvbHV0aW9uICIgPDwgbV9maWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpKTsKKyAgICBMT0dfV0lU
SF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1l
KCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBhcHBseSgpOlxuICBmaWx0ZXJQcmltaXRpdmVTdWJyZWdp
b24gIiA8PCBtX2ZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiA8PCAiXG4gIGVmZmVjdEJvdW5kYXJp
ZXMgIiA8PCBtX2VmZmVjdEJvdW5kYXJpZXMgPDwgIlxuICBhYnNvbHV0ZVVuY2xpcHBlZFN1YnJl
Z2lvbiAiIDw8IG1fYWJzb2x1dGVVbmNsaXBwZWRTdWJyZWdpb24gPDwgIlxuICBhYnNvbHV0ZVBh
aW50UmVjdCAiIDw8IG1fYWJzb2x1dGVQYWludFJlY3QgPDwgIlxuICBtYXhFZmZlY3RSZWN0ICIg
PDwgbV9tYXhFZmZlY3RSZWN0IDw8ICJcbiAgZmlsdGVyIHNjYWxlICIgPDwgbV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7CiAKICAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkgfHwg
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjczLDcgKzI3MCw3IEBAIEltYWdlQnVmZmVyKiBGaWx0
ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3Vs
dCkKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiAKLSAgICBtX2lt
YWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgp
LCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAgbV9pbWFnZUJ1
ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCksIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgMSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhl
bEZvcm1hdDo6QkdSQTgpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKQEAgLTI4OSw3ICsyODYsNiBAQCBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEZpbHRlckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJlY3QmIHJl
Y3QsCiB7CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQo
IUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAgc2NhbGVk
U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBhdXRvIGNoZWNrZWRBcmVh
ID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKICAgICBpZiAoY2hlY2tl
ZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMwNCw3
ICszMDAsNiBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6cHJlbXVs
dGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LAogewogICAgIEludFNpemUgc2NhbGVk
U2l6ZShyZWN0LnNpemUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoc2NhbGVkU2l6ZSkpOwotICAgIHNjYWxlZFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVy
U2NhbGUoKSk7CiAgICAgYXV0byBjaGVja2VkQXJlYSA9IHNjYWxlZFNpemUuYXJlYTxSZWNvcmRP
dmVyZmxvdz4oKSAqIDQ7CiAgICAgaWYgKGNoZWNrZWRBcmVhLmhhc092ZXJmbG93ZWQoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zMTgsOSArMzEzLDcgQEAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OnByZW11bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVj
dCYgcmVjdCwKIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcyhjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgSW50UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwot
ICAgIHNjYWxlZFJlY3Quc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgSW50U2l6
ZSBzY2FsZWRQYWludFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIHNjYWxl
ZFBhaW50U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgIC8vIEluaXRp
YWxpemUgdGhlIGRlc3RpbmF0aW9uIHRvIHRyYW5zcGFyZW50IGJsYWNrLCBpZiBub3QgZW50aXJl
bHkgY292ZXJlZCBieSB0aGUgc291cmNlLgogICAgIGlmIChzY2FsZWRSZWN0LngoKSA8IDAgfHwg
c2NhbGVkUmVjdC55KCkgPCAwIHx8IHNjYWxlZFJlY3QubWF4WCgpID4gc2NhbGVkUGFpbnRTaXpl
LndpZHRoKCkgfHwgc2NhbGVkUmVjdC5tYXhZKCkgPiBzY2FsZWRQYWludFNpemUuaGVpZ2h0KCkp
CkBAIC00NDQsMTAgKzQzNyw5IEBAIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+IEZpbHRlckVm
ZmVjdDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKGNvbnN0IERlCiAgICAgLy8gRklY
TUU6IFVzaW5nIGFuIEltYWdlQnVmZmVyIHRvIHBlcmZvcm0gdGhlIGNvbG9yIHNwYWNlIGNvbnZl
cnNpb24gaXMgdW5uZWNlc3NhcnkuIFdlIGNhbiBkbyBpdCBkaXJlY3RseS4KIAogICAgIEludFJl
Y3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIHBpeGVsQnVmZmVyLnNpemUoKSk7Ci0gICAg
ZGVzdGluYXRpb25SZWN0LnNjYWxlKDEgLyBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBG
bG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUoZGVzdGluYXRp
b25SZWN0LnNpemUoKSk7CiAgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHRvIHN0b3JlIGlu
Y29taW5nIFBpeGVsQnVmZmVyCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNj
YWxlKCksIG9wZXJhdGluZ0NvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBh
dXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJl
bmRlcmluZ01vZGUoKSwgMSwgb3BlcmF0aW5nQ29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdS
QTgpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IGJ1ZmZlci0+cHV0UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7CkBA
IC00NjEsNyArNDUzLDcgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0
Ojpjb252ZXJ0SW1hZ2VCdWZmZXJUb0NvbG9yU3BhY2UoY29uc3QgRGUKICAgICBGbG9hdFNpemUg
Y2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpOwogCiAg
ICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVmZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2Ug
YW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KLSAgICBhdXRv
IGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmls
dGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JT
cGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwg
MSwgdGFyZ2V0Q29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIWNvbnZl
cnRlZEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIApAQCAtNTEzLDcgKzUw
NSw2IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAg
ICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkp
OwotICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2UgPT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKICAgICAgICAg
ICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsK
QEAgLTU1Miw3ICs1NDMsNiBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRS
ZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7CiAKICAgICAgICAgICAgIEFTU0VSVChtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LT5mb3JtYXQoKS5jb2xvclNwYWNlID09IG1fcmVzdWx0Q29sb3JTcGFjZSk7CiAgICAgICAg
ICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwpA
QCAtNTcyLDcgKzU2Miw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJl
c3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAKIEltYWdlQnVmZmVy
KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKIHsKLSAgICBMT0coRmls
dGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCAlZHglZCIs
IGZpbHRlck5hbWUoKSwgdGhpcywgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkud2lkdGgoKSwg
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkuaGVpZ2h0KCkpOworICAgIExPRyhGaWx0ZXJzLCAi
RmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVy
TmFtZSgpLmNoYXJhY3RlcnM4KCksIHRoaXMsIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLndp
ZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKIAogICAgIC8vIE9u
bHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7
CkBAIC01ODAsMTMgKzU3MCwxMyBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgRmxvYXRT
aXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpKTsKLSAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0
ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CisgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1f
ZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgMSwgbV9yZXN1bHRDb2xvclNwYWNlLCBQaXhlbEZvcm1h
dDo6QkdSQTgpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCiBz
dGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpCiB7Ci0gICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAg
Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOworICAg
IExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0IiwgZmlsdGVyTmFtZSgpLmNoYXJhY3RlcnM4KCksIHRoaXMpOwogCiAgICAgLy8gT25s
eSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsK
QEAgLTU5Nyw3ICs1ODcsNiBAQCBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZm
ZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAKICAgICBJbnRTaXplIHJlc3Vs
dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKLSAgICByZXN1bHRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZvcm1hdCB7
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgUGl4ZWxGb3JtYXQ6OlJH
QkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gUGl4ZWxCdWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwogICAgIHJldHVy
biBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwpAQCAtNjA1LDcgKzU5NCw3IEBAIHN0ZDo6b3B0
aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCkKIAogc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKLSAgICBMT0coRmlsdGVycywgIkZpbHRl
ckVmZmVjdCAlcyAlcCBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1l
KCksIHRoaXMpOworICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKS5jaGFyYWN0ZXJzOCgpLCB0aGlz
KTsKIAogICAgIC8vIE9ubHkgb25lIHJlc3VsdCB0eXBlIGlzIGFsbG93ZWQuCiAgICAgQVNTRVJU
KCFoYXNSZXN1bHQoKSk7CkBAIC02MTYsNyArNjA1LDYgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1
ZmZlcj4mIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIAog
ICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAg
QVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwotICAg
IHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgUGl4ZWxCdWZm
ZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OlJHQkE4LCBtX3Jlc3VsdENvbG9yU3BhY2UgfTsKICAgICBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCA9IFBpeGVsQnVmZmVyOjp0cnlDcmVhdGUoZm9ybWF0LCByZXN1bHRT
aXplKTsKICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aAppbmRleCAxMmRlZDI2NWE2NTVjMzdlNzdlMmNmMDViNTI3NzNmMmI5NmI0NzFjLi5iODM2YWI0
N2FlYWRjYjMxNzc4YmNhOGNjNzBhZDFlZjRhOTY2ODFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTI0
LDEzICsyNCwxMyBAQAogCiAjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgogI2lu
Y2x1ZGUgIkRlc3RpbmF0aW9uQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZpbHRlckZ1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1
ZGUgIkludFJlY3RFeHRlbnQuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDYsNDAgKzQ2LDkgQEAgY2xhc3MgSW1hZ2VCdWZm
ZXI7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RW
ZWN0b3I7CiAKLWVudW0gRmlsdGVyRWZmZWN0VHlwZSB7Ci0gICAgRmlsdGVyRWZmZWN0VHlwZVVu
a25vd24sCi0gICAgRmlsdGVyRWZmZWN0VHlwZUltYWdlLAotICAgIEZpbHRlckVmZmVjdFR5cGVU
aWxlLAotICAgIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dAotfTsKLQotY2xhc3MgRmlsdGVy
RWZmZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRWZmZWN0PiB7CitjbGFzcyBGaWx0ZXJF
ZmZlY3QgOiBwdWJsaWMgRmlsdGVyRnVuY3Rpb24gewogcHVibGljOgotICAgIGVudW0gY2xhc3Mg
VHlwZSA6IHVpbnQ4X3QgewotICAgICAgICBCbGVuZCwKLSAgICAgICAgQ29sb3JNYXRyaXgsCi0g
ICAgICAgIENvbXBvbmVudFRyYW5zZmVyLAotICAgICAgICBDb21wb3NpdGUsCi0gICAgICAgIENv
bnZvbHZlTWF0cml4LAotICAgICAgICBEaWZmdXNlTGlnaHRpbmcsCi0gICAgICAgIERpc3BsYWNl
bWVudE1hcCwKLSAgICAgICAgRHJvcFNoYWRvdywKLSAgICAgICAgRmxvb2QsCi0gICAgICAgIEdh
dXNzaWFuQmx1ciwKLSAgICAgICAgSW1hZ2UsCi0gICAgICAgIExpZ2h0aW5nLAotICAgICAgICBN
ZXJnZSwKLSAgICAgICAgTW9ycGhvbG9neSwKLSAgICAgICAgT2Zmc2V0LAotICAgICAgICBTcGVj
dWxhckxpZ2h0aW5nLAotICAgICAgICBUaWxlLAotICAgICAgICBUdXJidWxlbmNlLAotICAgICAg
ICBTb3VyY2VBbHBoYSwKLSAgICAgICAgU291cmNlR3JhcGhpYwotICAgIH07Ci0gICAgdmlydHVh
bCB+RmlsdGVyRWZmZWN0KCk7Ci0KLSAgICB2b2lkIGNsZWFyUmVzdWx0KCk7CisgICAgdm9pZCBj
bGVhclJlc3VsdCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7
CiAKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKQEAgLTExNCw3ICs4Myw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNvbnN0IEludFJlY3Qm
IGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBhYnNvbHV0ZVBhaW50
UmVjdDsgfQogCiAgICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X21heEVmZmVjdFJlY3Q7IH0KLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7IH0g
CisgICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVj
dCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RSZWN0OyB9CiAKICAgICB2b2lkIGFwcGx5
KCk7CiAKQEAgLTEyNSwxMCArOTQsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKIAotICAgIHZpcnR1YWwgRmlsdGVyRWZmZWN0VHlw
ZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3QgeyByZXR1cm4gRmlsdGVyRWZmZWN0VHlwZVVua25v
d247IH0KLQotICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4g
SW50T3V0c2V0cygpOyB9Ci0KICAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRl
c3RPdXRwdXQsIERlYnVnZ2luZyB9OwogICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRl
cm5hbFJlcHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9
IFJlcHJlc2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7CiAKQEAgLTE1Niw4ICsxMjEs
NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgRmxvYXRQb2ludCBtYXBQb2ludEZyb21Vc2VyU3BhY2VU
b0J1ZmZlcihGbG9hdFBvaW50KSBjb25zdDsKICAgICAKLSAgICBUeXBlIGZpbHRlckVmZmVjdENs
YXNzVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Q2xhc3NUeXBlOyB9Ci0KICAg
ICBGaWx0ZXImIGZpbHRlcigpIHsgcmV0dXJuIG1fZmlsdGVyOyB9CiAgICAgY29uc3QgRmlsdGVy
JiBmaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcjsgfQogCkBAIC0xODMsOCArMTQ2LDYg
QEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIEZpbHRlckVmZmVjdChGaWx0ZXImLCBUeXBlKTsK
ICAgICAKLSAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7Ci0K
ICAgICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAg
ICBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CkBAIC0yNDgsMTEgKzIwOSwxNyBAQCBwcml2YXRlOgogICAgIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSB9OwogI2VuZGlmCiAgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fcmVzdWx0Q29sb3JT
cGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07Ci0gICAgCi0gICAgY29uc3Qg
VHlwZSBtX2ZpbHRlckVmZmVjdENsYXNzVHlwZTsKIH07CiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBGaWx0ZXJFZmZl
Y3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYkNvcmU6OkZpbHRlckVmZmVjdCkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb24mIGZ1bmN0aW9uKSB7IHJldHVybiBmdW5jdGlvbi5p
c0ZpbHRlckVmZmVjdCgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNkZWZp
bmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKENsYXNzTmFtZSkgXAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpDbGFzc05hbWUpIFwKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0
dXJuIGVmZmVjdC5maWx0ZXJUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpD
bGFzc05hbWU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yZjViYjE1NjM4MWRlYzFlMGJhYzIyZDkxMTljMmUwZWQ4MGU0
YWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0
cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGaWx0ZXJGdW5jdGlvbjo6Rmls
dGVyRnVuY3Rpb24oVHlwZSBmaWx0ZXJUeXBlKQorICAgIDogbV9maWx0ZXJUeXBlKGZpbHRlclR5
cGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgYXV0byYgZmlsdGVyTmFtZXMoKQorewor
ICAgIHVzaW5nIEZpbHRlck5hbWVNYXAgPSBIYXNoTWFwPEZpbHRlckZ1bmN0aW9uOjpUeXBlLCBB
dG9tU3RyaW5nLCBXVEY6OkludEhhc2g8RmlsdGVyRnVuY3Rpb246OlR5cGU+LCBXVEY6OlN0cm9u
Z0VudW1IYXNoVHJhaXRzPEZpbHRlckZ1bmN0aW9uOjpUeXBlPj47CisKKyAgICBzdGF0aWMgYXV0
byBmaWx0ZXJOYW1lcyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CisgICAgICAgIEZpbHRlck5h
bWVNYXAgZmlsdGVyTmFtZXMgPSB7CisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBl
OjpDU1NGaWx0ZXIsICAgICAgICAgICAiQ1NTRmlsdGVyIl9zICAgICAgICAgICB9LAorICAgICAg
ICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6U1ZHRmlsdGVyLCAgICAgICAgICAgIlNWR0Zp
bHRlciJfcyAgICAgICAgICAgfSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgeyBGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVCbGVuZCwgICAgICAgICAgICAgIkZFQmxlbmQiX3MgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXgs
ICAgICAgICJGRUNvbG9yTWF0cml4Il9zICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyLCAiRkVDb21wb25lbnRUcmFuc2ZlciJf
cyB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGUsICAg
ICAgICAgIkZFQ29tcG9zaXRlIl9zICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFQ29udm9sdmVNYXRyaXgsICAgICJGRUNvbnZvbHZlTWF0cml4Il9zICAg
IH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpZmZ1c2VMaWdodGlu
ZywgICAiRkVEaWZmdXNlTGlnaHRpbmciX3MgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsICAgIkZFRGlzcGxhY2VtZW50TWFwIl9zICAg
fSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRvdywgICAg
ICAgICJGRURyb3BTaGFkb3ciX3MgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRUZsb29kLCAgICAgICAgICAgICAiRkVGbG9vZCJfcyAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVHYXVzc2lhbkJsdXIsICAg
ICAgIkZFR2F1c3NpYW5CbHVyIl9zICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFSW1hZ2UsICAgICAgICAgICAgICJGRUltYWdlIl9zICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdlLCAgICAgICAgICAg
ICAiRkVNZXJnZSJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVNb3JwaG9sb2d5LCAgICAgICAgIkZFTW9ycGhvbG9neSJfcyAgICAgICAgfSwK
KyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LCAgICAgICAgICAg
ICJGRU9mZnNldCJfcyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsICAiRkVTcGVjdWxhckxpZ2h0aW5nIl9zICB9LAor
ICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLCAgICAgICAgICAgICAg
IkZFVGlsZSJfcyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFVHVyYnVsZW5jZSwgICAgICAgICJGRVR1cmJ1bGVuY2UiX3MgICAgICAgIH0sCisK
KyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUFscGhhLCAgICAgICAg
ICJTb3VyY2VBbHBoYSJfcyAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpTb3VyY2VHcmFwaGljLCAgICAgICAiU291cmNlR3JhcGhpYyJfcyAgICAgICB9CisK
KyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIGZpbHRlck5hbWVzOworICAgIH0oKSk7CisgICAg
CisgICAgcmV0dXJuIGZpbHRlck5hbWVzLmdldCgpOworfQorCitjb25zdCBBdG9tU3RyaW5nJiBG
aWx0ZXJGdW5jdGlvbjo6ZmlsdGVyTmFtZShUeXBlIGZpbHRlclR5cGUpCit7CisgICAgYXV0byBp
dCA9IGZpbHRlck5hbWVzKCkuZmluZChmaWx0ZXJUeXBlKTsKKyAgICBBU1NFUlQoaXQgIT0gZmls
dGVyTmFtZXMoKS5lbmQoKSk7CisgICAgcmV0dXJuIGl0LT52YWx1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1NTEwNTZmNzQ0OGIz
Y2E5NjY0NmJmZjg0ZWM5ZWFkNjExZmZhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTAsMCAr
MSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9tU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworY2xhc3MgVGV4dFN0cmVhbTsKK30K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJGdW5jdGlvbiA6IHB1YmxpYyBS
ZWZDb3VudGVkPEZpbHRlckZ1bmN0aW9uPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBUeXBl
IDogdWludDhfdCB7CisgICAgICAgIENTU0ZpbHRlciwKKyAgICAgICAgU1ZHRmlsdGVyLAorCisg
ICAgICAgIEZFTWluaW11bSwKKworICAgICAgICBGRUJsZW5kID0gRkVNaW5pbXVtLAorICAgICAg
ICBGRUNvbG9yTWF0cml4LAorICAgICAgICBGRUNvbXBvbmVudFRyYW5zZmVyLAorICAgICAgICBG
RUNvbXBvc2l0ZSwKKyAgICAgICAgRkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAgRkVEaWZmdXNl
TGlnaHRpbmcsCisgICAgICAgIEZFRGlzcGxhY2VtZW50TWFwLAorICAgICAgICBGRURyb3BTaGFk
b3csCisgICAgICAgIEZFRmxvb2QsCisgICAgICAgIEZFR2F1c3NpYW5CbHVyLAorICAgICAgICBG
RUltYWdlLAorICAgICAgICBGRU1lcmdlLAorICAgICAgICBGRU1vcnBob2xvZ3ksCisgICAgICAg
IEZFT2Zmc2V0LAorICAgICAgICBGRVNwZWN1bGFyTGlnaHRpbmcsCisgICAgICAgIEZFVGlsZSwK
KyAgICAgICAgRkVUdXJidWxlbmNlLAorICAgICAgICBTb3VyY2VBbHBoYSwKKyAgICAgICAgU291
cmNlR3JhcGhpYywKKworICAgICAgICBGRU1heGltdW0gPSBTb3VyY2VHcmFwaGljCisgICAgfTsK
KworICAgIEZpbHRlckZ1bmN0aW9uKFR5cGUpOworICAgIHZpcnR1YWwgfkZpbHRlckZ1bmN0aW9u
KCkgPSBkZWZhdWx0OworCisgICAgVHlwZSBmaWx0ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9m
aWx0ZXJUeXBlOyB9CisKKyAgICBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9m
aWx0ZXJUeXBlID09IFR5cGU6OkNTU0ZpbHRlcjsgfQorICAgIGJvb2wgaXNTVkdGaWx0ZXIoKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGUgPT0gVHlwZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9v
bCBpc0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlwZSA9PSBUeXBlOjpDU1NGaWx0
ZXIgfHwgbV9maWx0ZXJUeXBlID09IFR5cGU6OlNWR0ZpbHRlcjsgfQorICAgIGJvb2wgaXNGaWx0
ZXJFZmZlY3QoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGUgPj0gVHlwZTo6RkVNaW5pbXVt
ICYmIG1fZmlsdGVyVHlwZSA8PSBUeXBlOjpGRU1heGltdW07IH0KKworICAgIHN0YXRpYyBjb25z
dCBBdG9tU3RyaW5nJiBmaWx0ZXJOYW1lKFR5cGUpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3Ry
aW5nJiBzb3VyY2VBbHBoYU5hbWUoKSB7IHJldHVybiBmaWx0ZXJOYW1lKFR5cGU6OlNvdXJjZUFs
cGhhKTsgfQorICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5nJiBzb3VyY2VHcmFwaGljTmFtZSgp
IHsgcmV0dXJuIGZpbHRlck5hbWUoVHlwZTo6U291cmNlR3JhcGhpYyk7IH0KKyAgICBjb25zdCBB
dG9tU3RyaW5nJiBmaWx0ZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gZmlsdGVyTmFtZShtX2ZpbHRl
clR5cGUpOyB9CisKKyAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0
dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlc3VsdCgpIHsgfQorCitwcml2YXRl
OgorICAgIFR5cGUgbV9maWx0ZXJUeXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlLAorCisgICAgICAgIFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpDU1NGaWx0ZXIsCisgICAgICAgIFdlYkNvcmU6OkZp
bHRlckZ1bmN0aW9uOjpUeXBlOjpTVkdGaWx0ZXIsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFQmxlbmQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRUNvbG9yTWF0cml4LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rp
b246OlR5cGU6OkZFQ29tcG9zaXRlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
VHlwZTo6RkVDb252b2x2ZU1hdHJpeCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246
OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6VHlwZTo6RkVEaXNwbGFjZW1lbnRNYXAsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRURyb3BTaGFkb3csCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRUZsb29kLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6
RkVHYXVzc2lhbkJsdXIsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RUltYWdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVNZXJnZSwK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFTW9ycGhvbG9neSwKKyAg
ICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFT2Zmc2V0LAorICAgICAgICBX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVTcGVjdWxhckxpZ2h0aW5nLAorICAgICAg
ICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUaWxlLAorICAgICAgICBXZWJDb3Jl
OjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLAorICAgICAgICBXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6VHlwZTo6U291cmNlQWxwaGEsCisgICAgICAgIFdlYkNvcmU6OkZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpTb3VyY2VHcmFwaGljCisgICAgPjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUFscGhhLmNwcAppbmRleCA3NjQ5ZjA1OGFjODY5YjU1NGFmMGRjNTA3ZmZm
OTA5MGFkNmNmM2EzLi45OTY5NDM3MjU3OTNlOTk2NDZmYzNlNWIyMmFkMTUxZmJkZmRlOWNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUFscGhhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmNwcApAQCAtMjMsMTAgKzIzLDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgog
I2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzUsMTAgKzMyLDExIEBAIFJl
ZjxTb3VyY2VBbHBoYT4gU291cmNlQWxwaGE6OmNyZWF0ZShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVm
ZmVjdCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb3VyY2VBbHBoYShzb3VyY2VFZmZlY3Qp
KTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKQorU291
cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQorICAgIDog
RmlsdGVyRWZmZWN0KHNvdXJjZUVmZmVjdC5maWx0ZXIoKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpT
b3VyY2VBbHBoYSkKIHsKLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21TdHJpbmc+IHNfZWZmZWN0TmFtZSgiU291cmNlQWxwaGEiLCBBdG9tU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKKyAgICBzZXRPcGVy
YXRpbmdDb2xvclNwYWNlKHNvdXJjZUVmZmVjdC5vcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAg
IGlucHV0RWZmZWN0cygpLmFwcGVuZCgmc291cmNlRWZmZWN0KTsKIH0KIAogdm9pZCBTb3VyY2VB
bHBoYTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKQpAQCAtNjksMTEgKzY3LDQgQEAgVGV4
dFN0cmVhbSYgU291cmNlQWxwaGE6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYg
dHMsIFJlcHJlc2VudGF0aW9uVHkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNvdXJjZUFscGhhOjpT
b3VyY2VBbHBoYShGaWx0ZXJFZmZlY3QmIHNvdXJjZUVmZmVjdCkKLSAgICA6IEZpbHRlckVmZmVj
dChzb3VyY2VFZmZlY3QuZmlsdGVyKCksIFR5cGU6OlNvdXJjZUFscGhhKQotewotICAgIHNldE9w
ZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZmZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7Ci0g
ICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZzb3VyY2VFZmZlY3QpOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKaW5kZXggNjYyOWEzNjdmZDQzMjQyZDFjNGFhZGU2NGM1
NjFlODY0YTM5NDkwZi4uN2JiYmY4MWQ2ODUyNTg0YWM2Y2Y3MWFkNWViZTU1MDdkZjZkYzFlZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlQWxwaGEuaApAQCAtMTcsOCArMTcsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VBbHBoYV9oCi0jZGVmaW5lIFNvdXJjZUFscGhh
X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAKQEAgLTI4LDEz
ICsyNywxMCBAQCBjbGFzcyBTb3VyY2VBbHBoYSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVi
bGljOiAgICAgICAgCiAgICAgc3RhdGljIFJlZjxTb3VyY2VBbHBoYT4gY3JlYXRlKEZpbHRlckVm
ZmVjdCYpOwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUoKTsKKyAg
ICBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpIHsgcmV0dXJuIEZpbHRlckVm
ZmVjdDo6c291cmNlQWxwaGFOYW1lKCk7IH0KIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTb3Vy
Y2VBbHBoYShGaWx0ZXJFZmZlY3QmKTsKLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVj
dFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5w
dXQ7IH0KLQotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biAiU291cmNlQWxwaGEiOyB9CiAKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92
ZXJyaWRlOwogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsK
QEAgLTQzLDQgKzM5LDQgQEAgcHJpdmF0ZToKIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZiAvLyBTb3VyY2VBbHBoYV9oCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZF
Q1QoU291cmNlQWxwaGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAppbmRleCA4OGEzNmE0MTAyNmJkM2E1
ODU0NDc4MjAyNzRjMTEwN2Q3ODM5MmU5Li5lMTIzZGNkOGZmMjFkZGM3NzMzZTU3ZTUxNWVmMzEx
ZTdjOTAxNTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAKQEAgLTIyLDEwICsyMiw3IEBACiAKICNp
bmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM0LDE3ICszMSwxMCBAQCBSZWY8
U291cmNlR3JhcGhpYz4gU291cmNlR3JhcGhpYzo6Y3JlYXRlKEZpbHRlciYgZmlsdGVyKQogICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNvdXJjZUdyYXBoaWMoZmlsdGVyKSk7CiB9CiAKLWNvbnN0
IEF0b21TdHJpbmcmIFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKQotewotICAgIHN0YXRpYyBN
YWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1lKCJT
b3VyY2VHcmFwaGljIiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIHJl
dHVybiBzX2VmZmVjdE5hbWU7Ci19Ci0KIHZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKQogewogICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7
CiAgICAgRmxvYXRSZWN0IHBhaW50UmVjdCA9IGZpbHRlci5zb3VyY2VJbWFnZVJlY3QoKTsKLSAg
ICBwYWludFJlY3Quc2NhbGUoZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0
ZXIuZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKTsKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVj
dChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCmluZGV4
IDMwY2Q1NGYyNDUzYmJhOGEzNzc2MzIxMzI4ZWYyMTA2YjdmY2E1YmYuLjUyZGNiN2U4NjhlNWM1
YjUyYTExY2JiNjk2ODNiMmU4YjQyMzRiMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCkBAIC0xOCwxMSAr
MTgsOSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBT
b3VyY2VHcmFwaGljX2gKLSNkZWZpbmUgU291cmNlR3JhcGhpY19oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgotI2luY2x1ZGUgIkZpbHRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTMwLDI5ICsyOCwyMCBAQCBjbGFzcyBTb3VyY2VHcmFwaGljIDog
cHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKICAgICBzdGF0aWMgUmVmPFNv
dXJjZUdyYXBoaWM+IGNyZWF0ZShGaWx0ZXImKTsKIAotICAgIHN0YXRpYyBjb25zdCBBdG9tU3Ry
aW5nJiBlZmZlY3ROYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5h
bWUoKSB7IHJldHVybiBGaWx0ZXJFZmZlY3Q6OnNvdXJjZUdyYXBoaWNOYW1lKCk7IH0KIAogcHJp
dmF0ZToKICAgICBTb3VyY2VHcmFwaGljKEZpbHRlciYgZmlsdGVyKQotICAgICAgICA6IEZpbHRl
ckVmZmVjdChmaWx0ZXIsIFR5cGU6OlNvdXJjZUdyYXBoaWMpCisgICAgICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgRmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljKQogICAgIHsKICAg
ICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7CiAgICAgfQogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJTb3VyY2VHcmFwaGljIjsgfQotCiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3Zl
cnJpZGU7CiAgICAgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6
VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBG
aWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBGaWx0ZXJFZmZlY3RUeXBlU291cmNlSW5wdXQ7IH0KIH07CiAKIH0gLy9uYW1lc3BhY2UgV2Vi
Q29yZQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUdyYXBo
aWMpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckVmZmVjdCYg
ZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgPT0gV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VHcmFwaGljOyB9Ci1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCi0KLQotI2VuZGlmIC8vIFNvdXJjZUdyYXBoaWNfaAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKFNvdXJjZUdyYXBoaWMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IGY0NGFlMTI5ZDA3MzhkMzBjNzZlNzEwODViMmFlYzA1
YTdiNmYxZGEuLjM5NTcyMTVlODcxYzc1MDFjNGE1YjJhNDcxNTU0MzQ3ZTJiZjdhZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0yNyw5ICsyNyw2IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAKLSNpbmNsdWRlICJDYWNo
ZWRTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgi
Ci0jaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRkVDb2xvck1hdHJpeC5o
IgogI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKICNpbmNsdWRlICJGRURyb3BTaGFk
b3cuaCIKQEAgLTM4LDQ1ICszNSwxODMgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3RSZW5kZXJl
ci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZWZlcmVuY2VkU1ZHUmVzb3Vy
Y2VzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50Lmgi
CisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVy
LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aCIKLSNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIK
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotI2lm
IFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxkMmQxLmg+Ci0jZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1SZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZSgpCitSZWY8Q1NTRmls
dGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25z
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9yKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZpbHRlcik7CisgICAgYm9vbCBoYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAg
IGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBv
cGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2lu
KCk7CisKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKGhhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscywgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJp
dHlPcmlnaW4sIHNjYWxlRmFjdG9yKSk7CisKKyAgICBmaWx0ZXItPnNldFJlbmRlcmluZ01vZGUo
cmVuZGVyaW5nTW9kZSk7CisgICAgcmV0dXJuIGZpbHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NG
aWx0ZXIoKQotICAgIDogRmlsdGVyKEZsb2F0U2l6ZSB7IDEsIDEgfSkKK0NTU0ZpbHRlcjo6Q1NT
RmlsdGVyKGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luLCBmbG9hdCBzY2FsZUZhY3RvcikKKyAg
ICA6IEZpbHRlcihGaWx0ZXI6OlR5cGU6OkNTU0ZpbHRlciwgRmxvYXRTaXplIHsgc2NhbGVGYWN0
b3IsIHNjYWxlRmFjdG9yIH0pCisgICAgLCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyhoYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMpCisgICAgLCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luKGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNl
Y3VyaXR5T3JpZ2luKQogICAgICwgbV9zb3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWM6OmNyZWF0
ZSgqdGhpcykpCiB7CiB9CiAKLUNTU0ZpbHRlcjo6fkNTU0ZpbHRlcigpID0gZGVmYXVsdDsKK3N0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KENTU0ZpbHRlciYgZmls
dGVyLCBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uLCBGaWx0ZXJDb25z
dW1lciBjb25zdW1lcikKK3sKKyAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9y
TGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOworICAgIHJldHVybiBGRUdh
dXNzaWFuQmx1cjo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNv
bnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUg
OiBFREdFTU9ERV9EVVBMSUNBVEUpOworfQogCi1HcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6
aW5wdXRDb250ZXh0KCkKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRu
ZXNzRWZmZWN0KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKIHsKLSAgICByZXR1
cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOwor
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFu
c2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAg
IHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVu
dFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVy
Y2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
KyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgdHJhbnNmZXJG
dW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9u
KTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUNvbnRyYXN0RWZmZWN0
KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBl
ID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgp
KTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVu
Y3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsKKworICAgIENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUoZmlsdGVyLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0
cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChDU1NGaWx0ZXImIGZpbHRlciwgY29uc3Qg
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09wZXJhdGlvbikKK3sKKyAgICBm
bG9hdCBzdGQgPSBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpOworICAgIHJldHVy
biBGRURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0ZXIsIHN0ZCwgc3RkLCBkcm9wU2hhZG93T3BlcmF0
aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uY29s
b3IoKSwgMSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVHcmF5U2Nh
bGVFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51c0Ft
b3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEu
MCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3Rp
cC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZv
cm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRl
cnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAw
LjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAw
LAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAu
Mjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgw
LjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAs
CisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVN
aW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43
MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
MDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwK
KworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAg
ICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlciwg
RkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30K
Kworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdChDU1NG
aWx0ZXImIGZpbHRlciwgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29s
b3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMg
eyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9
OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBGRUNPTE9STUFUUklY
X1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMg
UmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlSW52ZXJ0RWZmZWN0KENTU0ZpbHRlciYgZmlsdGVy
LCBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRU
cmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5z
ZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFO
U0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1
bmN0aW9uLnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRl
cmNlcHQgPSBhbW91bnQ7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgdHJh
bnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZU9wYWNpdHlF
ZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3Vu
dCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1v
dW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNm
ZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShm
aWx0ZXIsIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRyYW5zZmVy
RnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2F0dXJh
dGVFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIFZlY3RvcjxmbG9hdD4gaW5w
dXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlciwg
RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOwor
fQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2VwaWFFZmZlY3QoQ1NTRmls
dGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9y
TWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8o
MSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBT
ZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4
Lmh0bWwjc2VwaWFFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRl
cnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAs
CisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0
cml4OjpjcmVhdGUoZmlsdGVyLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlu
cHV0UGFyYW1ldGVycykpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6OmJ1
aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3Qm
IHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlv
bikKK3N0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGVTVkdGaWx0ZXIoQ1NTRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uLCBS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCkKIHsK
LSAgICBhdXRvKiBmaWx0ZXJFbGVtZW50ID0gcmVuZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jl
c291cmNlcygpLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZp
bHRlck9wZXJhdGlvbik7CisgICAgYXV0byYgcmVmZXJlbmNlZFNWR1Jlc291cmNlcyA9IHJlbmRl
cmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKTsKKyAgICBhdXRvKiBmaWx0ZXJFbGVt
ZW50ID0gcmVmZXJlbmNlZFNWR1Jlc291cmNlcy5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5k
ZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworCiAgICAgaWYgKCFmaWx0ZXJFbGVt
ZW50KSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkNTU0Zp
bHRlciAiIDw8IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGZpbmQg
ZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNvdXJjZSAiIDw8IGZpbHRlck9wZXJh
dGlvbi5mcmFnbWVudCgpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVh
bSA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVy
ZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50
KCkpOwogICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZpbmQgdGhlIHJlZmVyZW5jZWQg
ZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9jdW1lbnQuCiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmplY3RzLiA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMTMxMDg1PgogICAgICAgICAvLyBGSVhNRTogVW5jbGVhciBpZiB0aGlzIGRvZXMg
YW55dGhpbmcuCkBAIC04NSwyMzEgKzIyMCwxMTcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NT
RmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYXV0byBidWlsZGVyID0gbWFr
ZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZlY3QpOwotICAgIG1fc291cmNl
QWxwaGEgPSBidWlsZGVyLT5nZXRFZmZlY3RCeUlkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCkp
OwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8Rmls
dGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKLQotICAgIGZvciAoYXV0byYgZWZmZWN0RWxl
bWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQuYnVp
bGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwg
dGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQgZWZmZWN0IGZy
b20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9CisgICAgYXV0byBidWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigp
OworICAgIHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgKmJ1aWxkZXIs
IGZpbHRlci5maWx0ZXJTY2FsZSgpLCBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCksIGZpbHRlci5m
aWx0ZXJSZWdpb24oKSwgcHJldmlvdXNFZmZlY3QpOworfQogCi0gICAgICAgIGVmZmVjdEVsZW1l
bnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmIChlZmZl
Y3RFbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BB
Q0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3Bh
Y2UoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRl
cnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVz
dGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0g
ICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBlZmZlY3QpOwotICAg
ICAgICByZWZlcmVuY2VFZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICB9Ci0gICAgCi0gICAg
bV9lZmZlY3RzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKHJlZmVyZW5jZUVmZmVjdHMpKTsKLSAgICBy
ZXR1cm4gZWZmZWN0Oworc3RhdGljIHZvaWQgc2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcyhGaWx0
ZXJFZmZlY3QmIGVmZmVjdCwgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIpCit7CisgICAgLy8gVW5s
aWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24g
dGhlIGZpbHRlcgorICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVyZSBzaG91bGQgbm90IGNsaXAg
dG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJlZ2lvbnMuCisgICAgZWZmZWN0LnNldENsaXBzVG9Cb3Vu
ZHMoY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKTsKKyAgICBlZmZl
Y3Quc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7
CiB9CiAKIGJvb2wgQ1NTRmlsdGVyOjpidWlsZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIp
CiB7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscygpOwotICAgIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7Ci0KLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsKKyAgICBt
X2Z1bmN0aW9ucy5jbGVhcigpOwogICAgIG1fb3V0c2V0cyA9IHsgfTsKIAogICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IHByZXZpb3VzRWZmZWN0ID0gbV9zb3VyY2VHcmFwaGljLnB0cigpOworICAg
IFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKKwogICAgIGZvciAoYXV0byYgb3BlcmF0aW9uIDog
b3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKICAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
ZWZmZWN0OwotICAgICAgICBhdXRvJiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9uOwotICAg
ICAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlJFRkVSRU5DRTogewotICAgICAgICAgICAgYXV0byYgcmVmZXJlbmNlT3Bl
cmF0aW9uID0gZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwotICAgICAgICAgICAgZWZmZWN0ID0gYnVpbGRSZWZlcmVuY2VGaWx0ZXIocmVuZGVyZXIs
ICpwcmV2aW91c0VmZmVjdCwgcmVmZXJlbmNlT3BlcmF0aW9uKTsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNv
bG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0
cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNs
YW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAg
ICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlw
L2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBm
b3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICog
b25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwK
LQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAot
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JN
YXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShp
bnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkJMVVI6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZmZWN0KCp0
aGlzLCBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY29uc3VtZXIp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNFUElBOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9
IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlv
bik7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xv
ck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBT
ZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4
Lmh0bWwjc2VwaWFFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24g
cGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMg
ewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAq
IG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuNzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAotICAgICAg
ICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAg
ICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51
c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAt
IDAuMTY4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIg
LSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAg
ICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAg
ICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9U
WVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgICAgIGVmZmVj
dCA9IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoKnRoaXMsIGRvd25jYXN0PEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewot
ICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0Nv
bG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAg
VmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNv
bG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVD
b2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdU
Rk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkNPTlRSQVNUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZlY3QoKnRo
aXMsIGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJp
eE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVy
cyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkp
IH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZF
Q09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgor
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdCgqdGhpcywgZG93bmNh
c3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDog
ewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24p
OwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9u
OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZF
Ul9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50OwotICAgICAgICAgICAg
dHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0KLSAgICAgICAgICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0g
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFu
c2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgICAgICAg
ICBlZmZlY3QgPSBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoKnRoaXMsIGRvd25jYXN0PEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRf
TElHSFRORVNTOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEFQUExFX0lO
VkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1maWx0ZXIuCisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CisgICAg
ICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoKnRoaXMsIGRvd25jYXN0PEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogewotICAgICAg
ICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0Nv
bXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAg
ICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJ
TkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
Y29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNm
ZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24u
aW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBu
dWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpj
cmVhdGUoKnRoaXMsIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIHRy
YW5zZmVyRnVuY3Rpb24pOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6
CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVJbnZlcnRFZmZlY3QoKnRoaXMsIGRvd25jYXN0
PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCUklHSFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJh
dGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRy
YW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlv
bi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAw
OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywg
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
T1BBQ0lUWToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZU9wYWNpdHlFZmZlY3QoKnRoaXMs
IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRp
b24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0
aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBl
ID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFt
b3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24u
YW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsK
LSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCAr
IDAuNTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVy
OjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5z
ZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpTQVRVUkFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KCp0
aGlzLCBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9u
KSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRvd25j
YXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBm
bG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3Rk
RGV2aWF0aW9uKCksIDApOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNy
ZWF0ZSgqdGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRl
ckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBM
SUNBVEUpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJ
QToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNlcGlhRWZmZWN0KCp0aGlzLCBkb3duY2Fz
dDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJP
UF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1dG8mIGRyb3BTaGFkb3dPcGVyYXRpb24gPSBkb3du
Y2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoKnRoaXMsIGRyb3BTaGFkb3dPcGVy
YXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCks
Ci0gICAgICAgICAgICAgICAgZHJvcFNoYWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVy
YXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCksIDEpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAgICAg
ICAgZmlsdGVyID0gY3JlYXRlU1ZHRmlsdGVyKCp0aGlzLCBkb3duY2FzdDxSZWZlcmVuY2VGaWx0
ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0KTsKKyAg
ICAgICAgICAgIGVmZmVjdCA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisg
ICAgICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgICAgICAgIGVmZmVjdCA9IGZpbHRlci0+bGFzdEVm
ZmVjdCgpOworICAgICAgICAgICAgc2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcygqZWZmZWN0LCBj
b25zdW1lcik7CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVhc2VO
b25OdWxsKCkpOworICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaWYg
KGVmZmVjdCkgewotICAgICAgICAgICAgLy8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0
ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24gdGhlIGZpbHRlcgotICAgICAgICAgICAgLy8g
cHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUg
c3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1l
ciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwotICAgICAgICAgICAgZWZmZWN0
LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0g
RmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgICAgICBlZmZlY3QtPmlu
cHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OwotICAgICAgICAgICAg
ICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKCplZmZlY3QsIGNvbnN1bWVyKTsKKyAgICAgICAg
ICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07
CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogICAgICAgICAg
ICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdl
IGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKG1f
ZnVuY3Rpb25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9lZmZl
Y3RzLnNocmlua1RvRml0KCk7CisgICAgbV9mdW5jdGlvbnMuc2hyaW5rVG9GaXQoKTsKIAotICAg
IHNldE1heEVmZmVjdFJlY3RzKG1fc291cmNlRHJhd2luZ1JlZ2lvbik7CiAjaWYgVVNFKENPUkVf
SU1BR0UpCiAgICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJlbmRl
cmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygp
LmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMubGFz
dCgpLmdldCgpKTsKKyAgICAgICAgbV9maWx0ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJlbmRl
cmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGluZ3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRlZEZp
bHRlclJlbmRlckVuYWJsZWQoKSwgKmxhc3RFZmZlY3QoKSk7CiAjZW5kaWYKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorR3JhcGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCgpCit7
CisgICAgcmV0dXJuIHNvdXJjZUltYWdlKCkgPyAmc291cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDog
bnVsbHB0cjsKK30KKwogYm9vbCBDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KQogewogICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1wdHko
KSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkpKQpA
QCAtMzMxLDUzICszNTIsNjYgQEAgdm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3Jl
SWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXgKICAgICBpZiAobV9n
cmFwaGljc0J1ZmZlckF0dGFjaGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIGxv
Z2ljYWxTaXplIHsgbV9zb3VyY2VEcmF3aW5nUmVnaW9uLnNpemUoKSB9OworICAgIEludFNpemUg
bG9naWNhbFNpemUgeyBzb3VyY2VJbWFnZVJlY3QoKS5zaXplKCkgfTsKICAgICBpZiAoIXNvdXJj
ZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAhPSBsb2dpY2FsU2l6ZSkg
ewogI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6
OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4dCwgZmls
dGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpC
R1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2lj
YWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCAxLCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZWxzZQogICAgICAgICBV
TlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIFJlbmRlcmluZ01vZGUgbW9kZSA9
IG1fZmlsdGVyUmVuZGVyZXIgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IHJlbmRlcmlu
Z01vZGUoKTsKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dp
Y2FsU2l6ZSwgbW9kZSwgZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZW5kaWYKKyAgICAgICAgaWYgKGF1dG8g
Y29udGV4dCA9IGlucHV0Q29udGV4dCgpKQorICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmls
dGVyU2NhbGUoKSk7CiAgICAgfQogICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7
CiB9CiAKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6bGFzdEVmZmVjdCgpCit7Cisg
ICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvJiBmdW5jdGlvbiA9IG1fZnVuY3Rpb25zLmxhc3QoKTsKKyAgICBpZiAoZnVuY3Rp
b24tPmlzU1ZHRmlsdGVyKCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdGaWx0ZXI+KGZ1
bmN0aW9uLnB0cigpKS0+bGFzdEVmZmVjdCgpOworCisgICAgcmV0dXJuIGRvd25jYXN0PEZpbHRl
ckVmZmVjdD4oZnVuY3Rpb24ucHRyKCkpOworfQorCisKIHZvaWQgQ1NTRmlsdGVyOjpkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQogewotICAgIGF1dG8mIGxhc3RFZmZlY3QgPSBt
X2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJp
bWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZlY3Qu
bWF4RWZmZWN0UmVjdCgpOworICAgIGF1dG8gZWZmZWN0ID0gbGFzdEVmZmVjdCgpOworICAgIGVm
ZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CisgICAgRmxvYXRSZWN0
IHN1YlJlZ2lvbiA9IGVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOwogICAgIC8vIEF0IGxlYXN0IG9u
ZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLCByZWNhbGN1bGF0ZSB0aGUg
ZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAgRmxvYXRTaXplIHNjYWxl
OwotICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUo
KSwgc2NhbGUpKSB7Ci0gICAgICAgIHNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOwotICAgICAg
ICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIEZs
b2F0U2l6ZSBmaWx0ZXJTY2FsZSB7IDEsIDEgfTsKKyAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIGZpbHRlclNjYWxlKSkgeworICAgICAgICBz
ZXRGaWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSk7CisgICAgICAgIGVmZmVjdC0+ZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiAgICAgfQogfQogCiB2b2lkIENTU0ZpbHRlcjo6Y2xl
YXJJbnRlcm1lZGlhdGVSZXN1bHRzKCkKIHsKICAgICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFyUmVz
dWx0KCk7Ci0gICAgaWYgKG1fc291cmNlQWxwaGEpCi0gICAgICAgIG1fc291cmNlQWxwaGEtPmNs
ZWFyUmVzdWx0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAg
IGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5j
dGlvbnMpCisgICAgICAgIGZ1bmN0aW9uLT5jbGVhclJlc3VsdCgpOwogfQogCiB2b2lkIENTU0Zp
bHRlcjo6YXBwbHkoKQogewotICAgIGF1dG8mIGVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0
KCk7CisgICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7CiAgICAgaWYgKG1fZmlsdGVyUmVu
ZGVyZXIpIHsKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKGVmZmVjdCk7
CisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cygqZWZmZWN0KTsKICAgICAg
ICAgaWYgKG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKSB7Ci0gICAgICAgICAgICBlZmZl
Y3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7CisgICAgICAgICAgICBlZmZlY3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgfQotICAgIGVmZmVjdC5hcHBseSgpOwotICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICBlZmZlY3QtPmFw
cGx5KCk7CisgICAgZWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpKTsKIH0KIAogTGF5b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVT
b3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVj
dCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQpAQCAtMzkwLDM0ICs0MjQsMzAgQEAgTGF5
b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgZmlsdGUKICAgICByZXR1cm4gcmVjdEZvclJlcGFpbnQ7CiB9CiAKLUlt
YWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpIGNvbnN0CitJbWFnZUJ1ZmZlciogQ1NTRmls
dGVyOjpvdXRwdXQoKQogewogICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVyUmVu
ZGVyZXItPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbV9maWx0ZXJSZW5kZXJlci0+b3V0
cHV0KCk7CiAgICAgCi0gICAgcmV0dXJuIG1fZWZmZWN0cy5sYXN0KCktPmltYWdlQnVmZmVyUmVz
dWx0KCk7CisgICAgcmV0dXJuIGxhc3RFZmZlY3QoKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKIH0K
IAogdm9pZCBDU1NGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCkKIHsKLSAgICBtX3NvdXJjZURyYXdpbmdSZWdpb24gPSBzb3VyY2VJbWFn
ZVJlY3Q7Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBzZXRG
aWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNo
ZWQgPSBmYWxzZTsKLX0KKyAgICBhdXRvIHNjYWxlZFNvdXJjZUltYWdlUmVjdCA9IHNvdXJjZUlt
YWdlUmVjdDsKKyAgICBzY2FsZWRTb3VyY2VJbWFnZVJlY3Quc2NhbGUoZmlsdGVyU2NhbGUoKSk7
CiAKLXZvaWQgQ1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9hdFJlY3QmIGVm
ZmVjdFJlY3QpCi17Ci0gICAgZm9yIChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAg
IGVmZmVjdC0+c2V0TWF4RWZmZWN0UmVjdChlZmZlY3RSZWN0KTsKKyAgICBGaWx0ZXI6OnNldEZp
bHRlclJlZ2lvbihzb3VyY2VJbWFnZVJlY3QpOworICAgIEZpbHRlcjo6c2V0U291cmNlSW1hZ2VS
ZWN0KHNjYWxlZFNvdXJjZUltYWdlUmVjdCk7CisgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVk
ID0gZmFsc2U7CiB9CiAKLUludFJlY3QgQ1NTRmlsdGVyOjpvdXRwdXRSZWN0KCkgY29uc3QKK0lu
dFJlY3QgQ1NTRmlsdGVyOjpvdXRwdXRSZWN0KCkKIHsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0g
bV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKKyAgICBhdXRvIGVmZmVjdCA9IGxhc3RFZmZlY3QoKTsK
ICAgICAKLSAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1bHQoKSB8fCAobV9maWx0ZXJSZW5kZXJl
ciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCi0gICAgICAgIHJldHVybiBsYXN0
RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRSZWN0IHsgbV9maWx0
ZXJSZWdpb24gfSk7CisgICAgaWYgKGVmZmVjdC0+aGFzUmVzdWx0KCkgfHwgKG1fZmlsdGVyUmVu
ZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpKQorICAgICAgICByZXR1cm4g
ZWZmZWN0LT5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoSW50UmVjdCB7IGZpbHRl
clJlZ2lvbigpIH0pOwogICAgIAogICAgIHJldHVybiB7IH07CiB9CkBAIC00MzAsOCArNDYwLDkg
QEAgSW50T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25zdAogICAgIGlmICghbV9vdXRz
ZXRzLmlzWmVybygpKQogICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwogCi0gICAgZm9yIChhdXRv
JiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0c2V0cyArPSBlZmZlY3QtPm91dHNl
dHMoKTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIG1f
b3V0c2V0cyArPSBmdW5jdGlvbi0+b3V0c2V0cygpOworCiAgICAgcmV0dXJuIG1fb3V0c2V0czsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4IDAwYjkxOTE3YjgwNGM5
MmQ5NDA4Yjc1OGUzNzVjMjUyZjI5ZGIwYzUuLmI1NDVlNzc5ODJlNTY3YTczMzMzZTMwMDIyNDY3
ZDQ4OWE2MzIxZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKQEAgLTM4LDY5
ICszOCw1MCBAQCBjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogY2xhc3MgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOwogY2xhc3MgUmVuZGVyRWxlbWVudDsK
LWNsYXNzIFNvdXJjZUFscGhhOwogY2xhc3MgU291cmNlR3JhcGhpYzsKIAogZW51bSBjbGFzcyBG
aWx0ZXJDb25zdW1lciB7IEZpbHRlclByb3BlcnR5LCBGaWx0ZXJGdW5jdGlvbiB9OwogCiBjbGFz
cyBDU1NGaWx0ZXIgZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLSAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8Q1NTRmlsdGVyPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUmVmPENTU0Zp
bHRlcj4gY3JlYXRlKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBSZW5kZXJpbmdNb2RlLCBmbG9h
dCBzY2FsZUZhY3RvciA9IDEpOwogCiAgICAgdm9pZCBzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRGaWx0ZXJSZWdpb24oY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24pIHsgbV9maWx0ZXJSZWdpb24gPSBmaWx0ZXJSZWdpb247IH0KLQotICAgIElt
YWdlQnVmZmVyKiBvdXRwdXQoKSBjb25zdDsKLQotICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVu
dCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7Ci0gICAgdm9pZCBj
bGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB2b2lkIGFwcGx5KCk7CiAKICAgICBib29s
IGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhh
dE1vdmVzUGl4ZWxzOyB9CiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVk
QnlTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdFNob3VsZEJl
UmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW47IH0KIAorICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxl
bWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7CiAgICAgdm9p
ZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91
dHNldHMoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBDU1NGaWx0ZXIoKTsKLSAgICB2aXJ0dWFs
IH5DU1NGaWx0ZXIoKTsKLQotICAgIGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiB0cnVlOyB9Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9zb3VyY2VEcmF3aW5nUmVnaW9uOyB9Ci0KLSAgICBGbG9hdFJlY3QgZmls
dGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBG
bG9hdFJlY3QgZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2ZpbHRlclJlZ2lvbjsgfQotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRSZWZlcmVu
Y2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJl
ZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYpOwotCi0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0cyhj
b25zdCBGbG9hdFJlY3QmKTsKIAorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3Qo
KTsKICAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOworICAgIEludE91dHNldHMg
b3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlh
dGVSZXN1bHRzKCk7CisgICAgdm9pZCBhcHBseSgpOworCisgICAgSW1hZ2VCdWZmZXIqIG91dHB1
dCgpOworICAgIEludFJlY3Qgb3V0cHV0UmVjdCgpOwogCiAgICAgYm9vbCB1cGRhdGVCYWNraW5n
U3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVjdCk7CiAgICAgdm9pZCBhbGxvY2F0
ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgSW50
UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7Ci0KICAgICBMYXlvdXRSZWN0IGNvbXB1dGVTb3VyY2VJ
bWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29u
c3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KTsKIAotICAgIEZsb2F0UmVjdCBtX3NvdXJjZURyYXdp
bmdSZWdpb247Ci0gICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOworcHJpdmF0ZToKKyAgICBD
U1NGaWx0ZXIoYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhh
dFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9yKTsK
KworICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKKyAgICBib29s
IG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzRmls
dGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwogCi0g
ICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7CiAgICAgUmVmPFNvdXJjZUdy
YXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX3NvdXJj
ZUFscGhhOworICAgIFZlY3RvcjxSZWY8RmlsdGVyRnVuY3Rpb24+PiBtX2Z1bmN0aW9uczsKIAog
ICAgIG11dGFibGUgSW50T3V0c2V0cyBtX291dHNldHM7CiAKLSAgICBib29sIG1fZ3JhcGhpY3NC
dWZmZXJBdHRhY2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1Bp
eGVscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0
ZWRCeVNlY3VyaXR5T3JpZ2luIHsgZmFsc2UgfTsKLSAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RmlsdGVyRWZmZWN0UmVuZGVyZXI+IG1fZmlsdGVyUmVuZGVyZXI7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBlOGMwMzgzY2U5ZTExMDRjZWQzNTE4
YmM2Mjg2YjQyZmJkYzU0MDYyLi5iMzdjODRkNDMzNmE4Y2FiNTM4ODVmMWIyZWJiYTBhMWU0N2Qx
OTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMyMjYs
NyArMzIyNiw3IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyhH
cmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwKIAogICAgIGF1dG8gcm9vdFJlbGF0
aXZlQm91bmRzID0gY2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZvLnJvb3RMYXllciwg
b2Zmc2V0RnJvbVJvb3QsIHsgfSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRl
eHQgPSBwYWludGluZ0ZpbHRlcnMtPmJlZ2luRmlsdGVyRWZmZWN0KGRlc3RpbmF0aW9uQ29udGV4
dCwgZW5jbG9zaW5nSW50UmVjdChyb290UmVsYXRpdmVCb3VuZHMpLCBlbmNsb3NpbmdJbnRSZWN0
KHBhaW50aW5nSW5mby5wYWludERpcnR5UmVjdCksIGVuY2xvc2luZ0ludFJlY3QoZmlsdGVyUmVw
YWludFJlY3QpKTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGZpbHRlckNvbnRleHQgPSBwYWludGlu
Z0ZpbHRlcnMtPmJlZ2luRmlsdGVyRWZmZWN0KHJlbmRlcmVyKCksIGVuY2xvc2luZ0ludFJlY3Qo
cm9vdFJlbGF0aXZlQm91bmRzKSwgZW5jbG9zaW5nSW50UmVjdChwYWludGluZ0luZm8ucGFpbnRE
aXJ0eVJlY3QpLCBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlcGFpbnRSZWN0KSwgZGVzdGluYXRp
b25Db250ZXh0KTsKICAgICBpZiAoIWZpbHRlckNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMu
Y3BwCmluZGV4IDI1MGE3ZDVjMGJhYTBhYzc0MWE5MGM4MThiNjFhMDVmOTViOTY0YTQuLjlkNmNj
YWRhZDlkN2MwZTZkOThjMDA0MWIwMTI4NDI3YTYwZDFlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCkBAIC0xMTgsMjMgKzExOCwxMSBA
QCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygp
CiAKIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjpidWlsZEZpbHRlcihSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgZmxvYXQgc2NhbGVGYWN0b3IsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkK
IHsKLSAgICBpZiAoIW1fZmlsdGVyKSB7Ci0gICAgICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpj
cmVhdGUoKTsKLSAgICAgICAgbV9maWx0ZXItPnNldEZpbHRlclNjYWxlKHNjYWxlRmFjdG9yKTsK
LSAgICAgICAgbV9maWx0ZXItPnNldFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7Ci0gICAg
fSBlbHNlIGlmIChtX2ZpbHRlci0+ZmlsdGVyU2NhbGUoKSAhPSBzY2FsZUZhY3RvcikgewotICAg
ICAgICBtX2ZpbHRlci0+c2V0RmlsdGVyU2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBtX2Zp
bHRlci0+Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhl
IGZpbHRlciBmYWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxs
IHN0aWxsIGF0dGVtcHQgdG8KLSAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAo
ZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KICAgICAvLyBGSVhN
RTogdGhpcyByZWJ1aWxkcyB0aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBpZiB0aGUgZmls
dGVyIHN0eWxlIGRpZG4ndCBjaGFuZ2UuCi0gICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVuZGVy
ZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9w
ZXJ0eSkpCi0gICAgICAgIG1fZmlsdGVyID0gbnVsbHB0cjsKKyAgICBtX2ZpbHRlciA9IENTU0Zp
bHRlcjo6Y3JlYXRlKHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIHJlbmRlcmluZ01vZGUsIHNj
YWxlRmFjdG9yKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJl
Z2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25z
dCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3Qs
IGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCitHcmFwaGljc0NvbnRleHQqIFJl
bmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRp
cnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCwgR3JhcGhpY3NDb250
ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpCiB7CiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0xNDUsNiArMTMzLDEzIEBAIEdyYXBoaWNzQ29udGV4dCogUmVu
ZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3Rp
bmF0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYm9vbCBoYXNVcGRhdGVkQmFja2lu
Z1N0b3JlID0gZmlsdGVyLnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoZmlsdGVyU291cmNlUmVjdCk7
CisgICAgaWYgKGhhc1VwZGF0ZWRCYWNraW5nU3RvcmUgfHwgIW1fZmlsdGVyLT5sYXN0RWZmZWN0
KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBmYWlscyB0byBidWlsZCwgcmVtb3ZlIGl0
IGZyb20gdGhlIGxheWVyLiBJdCB3aWxsIHN0aWxsIGF0dGVtcHQgdG8KKyAgICAgICAgLy8gZ28g
dGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBidXQgbmV2ZXIg
YXBwbHkgYW55dGhpbmcuCisgICAgICAgIGlmICghbV9maWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCBy
ZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAgIGlmICghZmls
dGVyLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpKQogICAgICAgICBtX3JlcGFpbnRSZWN0ID0g
ZGlydHlSZWN0OwogICAgIGVsc2UgewpAQCAtMTkwLDggKzE4NSwxMSBAQCB2b2lkIFJlbmRlckxh
eWVyRmlsdGVyczo6YXBwbHlGaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlv
bkNvbnRleHQpCiAgICAgTGF5b3V0UmVjdCBkZXN0UmVjdCA9IGZpbHRlci5vdXRwdXRSZWN0KCk7
CiAgICAgZGVzdFJlY3QubW92ZShtX3BhaW50T2Zmc2V0LngoKSwgbV9wYWludE9mZnNldC55KCkp
OwogCi0gICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRwdXQoKSkKKyAgICBp
ZiAoYXV0byogb3V0cHV0QnVmZmVyID0gZmlsdGVyLm91dHB1dCgpKSB7CisgICAgICAgIGRlc3Rp
bmF0aW9uQ29udGV4dC5zY2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAx
IC8gZmlsdGVyLmZpbHRlclNjYWxlKCkuaGVpZ2h0KCkgfSk7CiAgICAgICAgIGRlc3RpbmF0aW9u
Q29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBp
eGVscyhkZXN0UmVjdCwgbV9sYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSkpOworICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoZmlsdGVyLmZpbHRl
clNjYWxlKCkpOworICAgIH0KIAogICAgIGZpbHRlci5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmlu
ZGV4IDNkYTE0MGE1Yzg4ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLmE5ZDIyMmY1ZWU3
MDU3MWE1M2Q4ZmZlNjBmNmYxNzA3ZDcyN2RhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAg
IC8vIFBlciByZW5kZXIKICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZXBhaW50UmVjdDsgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBiZWdpbkZpbHRlckVm
ZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgTGF5b3V0UmVj
dCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlv
dXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2luRmls
dGVyRWZmZWN0KFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0
LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVw
YWludFJlY3QsIEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KTsKICAgICB2b2lk
IGFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KTsK
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggMTk1MDlkOTcxOGFmZjExMGY4NDFlYzQ5
NzZmOTdmYjFhOTM0ZDhhNS4uMTBlN2I4ZmE4NjMyMGE3Y2VjM2Y0MGI1YTRlNTUwMTAzMThmYmM5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTgyLDQwICs4Miw2IEBAIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OnJlbW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJFbGVtZW50JiBjbGllbnQs
IGJvb2wKICAgICBtYXJrQ2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFs
aWRhdGlvbiA/IEJvdW5kYXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9u
KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+IFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Ci17Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKLSAgICBp
ZiAoZmlsdGVyRWxlbWVudCgpLmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVz
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGlu
Z0JveCA9IGZpbHRlci50YXJnZXRCb3VuZGluZ0JveCgpOwotCi0gICAgLy8gQWRkIGVmZmVjdHMg
dG8gdGhlIGJ1aWxkZXIKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1
aWxkZXI+KFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShmaWx0ZXIpKTsKLSAgICBidWlsZGVyLT5zZXRQ
cmltaXRpdmVVbml0cyhmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSk7Ci0gICAgYnVp
bGRlci0+c2V0VGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIAotICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCgpKSkgewotICAgICAgICBhdXRvIGVmZmVj
dCA9IGVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgZmlsdGVyKTsKLSAgICAgICAgaWYgKCFl
ZmZlY3QpIHsKLSAgICAgICAgICAgIGJ1aWxkZXItPmNsZWFyRWZmZWN0cygpOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YXBwZW5kRWZm
ZWN0VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVjdC5jb3B5UmVmKCksIGVsZW1lbnQucmVuZGVyZXIo
KSk7Ci0gICAgICAgIGVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7
Ci0gICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0Ojpy
ZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVs
ZW1lbnQsIGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpLCB0YXJnZXRCb3VuZGluZ0Jv
eCkpOwotICAgICAgICBpZiAoZWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJ
TkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRP
cGVyYXRpbmdDb2xvclNwYWNlKGVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgp
LmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVh
clJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0
aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAg
ICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQoZWxlbWVudC5yZXN1bHQoKSwgV1RGTW92ZShl
ZmZlY3QpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXI7Ci19Ci0KIGJvb2wgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNv
bnN0IFJlbmRlclN0eWxlJiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJl
bmRlclNWR1Jlc291cmNlTW9kZT4gcmVzb3VyY2VNb2RlKQogewogICAgIEFTU0VSVChjb250ZXh0
KTsKQEAgLTE0Myw0NCArMTA5LDM1IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFw
cGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIC8vIEVsaW1pbmF0ZSBzaGVhciBvZiB0aGUgYWJzb2x1dGUg
dHJhbnNmb3JtYXRpb24gbWF0cml4LCB0byBiZSBhYmxlIHRvIHByb2R1Y2UgdW5zaGVhcmVkIHRp
bGUgaW1hZ2VzIGZvciBmZVRpbGUuCi0gICAgZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIDAs
IDAsIGFic29sdXRlVHJhbnNmb3JtLnlTY2FsZSgpLCAwLCAwKTsKKyAgICBGbG9hdFNpemUgZmls
dGVyU2NhbGUoYWJzb2x1dGVUcmFuc2Zvcm0ueFNjYWxlKCksIGFic29sdXRlVHJhbnNmb3JtLnlT
Y2FsZSgpKTsKIAogICAgIC8vIERldGVybWluZSBhYnNvbHV0ZSBib3VuZGFyaWVzIG9mIHRoZSBm
aWx0ZXIgYW5kIHRoZSBkcmF3aW5nIHJlZ2lvbi4KICAgICBmaWx0ZXJEYXRhLT5kcmF3aW5nUmVn
aW9uID0gcmVuZGVyZXIuc3Ryb2tlQm91bmRpbmdCb3goKTsKICAgICBmaWx0ZXJEYXRhLT5kcmF3
aW5nUmVnaW9uLmludGVyc2VjdChmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzKTsKLSAgICBGbG9hdFJl
Y3QgYWJzb2x1dGVEcmF3aW5nUmVnaW9uID0gZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uKTsKLQotICAgIC8vIENy
ZWF0ZSB0aGUgU1ZHRmlsdGVyIG9iamVjdC4KLSAgICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94
TW9kZSA9IGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpID09IFNWR1VuaXRUeXBlczo6
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKLSAgICBmaWx0ZXJEYXRhLT5maWx0ZXIg
PSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9y
bSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgZmlsdGVyRGF0YS0+
Ym91bmRhcmllcywgcHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlKTsKLQotICAgIC8vIENyZWF0ZSBh
bGwgcmVsZXZhbnQgZmlsdGVyIHByaW1pdGl2ZXMuCi0gICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9
IGJ1aWxkUHJpbWl0aXZlcygqZmlsdGVyRGF0YS0+ZmlsdGVyKTsKLSAgICBpZiAoIWZpbHRlckRh
dGEtPmJ1aWxkZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIERldGVybWluZSBz
Y2FsZSBmYWN0b3IgZm9yIGZpbHRlci4gVGhlIHNpemUgb2YgaW50ZXJtZWRpYXRlIEltYWdlQnVm
ZmVycyBzaG91bGRuJ3QgYmUgYmlnZ2VyIHRoYW4ga01heEZpbHRlclNpemUuCi0gICAgRmxvYXRS
ZWN0IHRlbXBTb3VyY2VSZWN0ID0gYWJzb2x1dGVEcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0U2l6
ZSBzY2FsZSgxLCAxKTsKLSAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcodGVtcFNv
dXJjZVJlY3Quc2l6ZSgpLCBzY2FsZSk7Ci0gICAgdGVtcFNvdXJjZVJlY3Quc2NhbGUoc2NhbGUu
d2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotCi0gICAgLy8gU2V0IHRoZSBzY2FsZSBsZXZlbCBp
biBTVkdGaWx0ZXIuCi0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9u
KHNjYWxlKTsKKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVEcmF3aW5nUmVnaW9uID0gZmlsdGVyRGF0
YS0+ZHJhd2luZ1JlZ2lvbjsKKyAgICBhYnNvbHV0ZURyYXdpbmdSZWdpb24uc2NhbGUoZmlsdGVy
U2NhbGUpOworICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZURyYXdp
bmdSZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSk7CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWF4VG90YWxPZkVmZmVjdElucHV0cyA9IDEwMDsKLSAgICBGaWx0ZXJFZmZlY3QqIGxhc3RF
ZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7Ci0gICAgaWYgKCFsYXN0
RWZmZWN0IHx8IGxhc3RFZmZlY3QtPnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSA+IG1heFRv
dGFsT2ZFZmZlY3RJbnB1dHMpCisgICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0Lgor
ICAgIGZpbHRlckRhdGEtPmJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCk7
CisgICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRWxlbWVu
dCgpLCAqZmlsdGVyRGF0YS0+YnVpbGRlciwgZmlsdGVyU2NhbGUsIGFic29sdXRlRHJhd2luZ1Jl
Z2lvbiwgZmlsdGVyRGF0YS0+Ym91bmRhcmllcywgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIGlm
ICghZmlsdGVyRGF0YS0+ZmlsdGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
YXV0byBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOworICAg
IEFTU0VSVChsYXN0RWZmZWN0KTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJl
YW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlXG4iIDw8ICpmaWx0
ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCkpOwogCiAgICAgbGFzdEVmZmVjdC0+ZGV0ZXJt
aW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiAgICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9
IGxhc3RFZmZlY3QtPm1heEVmZmVjdFJlY3QoKTsKKwogICAgIC8vIEF0IGxlYXN0IG9uZSBGaWx0
ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLAogICAgIC8vIHJlY2FsY3VsYXRlIHRo
ZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KLSAgICBpZiAoSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgewotICAgICAg
ICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZpbHRlclJlc29sdXRpb24oc2NhbGUpOworICAgIGlm
IChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoc3ViUmVnaW9uLnNpemUoKSwgZmlsdGVy
U2NhbGUpKSB7CisgICAgICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0RmlsdGVyU2NhbGUoZmls
dGVyU2NhbGUpOwogICAgICAgICBsYXN0RWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVT
dWJyZWdpb24oKTsKICAgICB9CiAKQEAgLTE5NCw5ICsxNTEsNyBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25z
dCBSZW5kZQogICAgIH0KIAogICAgIC8vIENoYW5nZSB0aGUgY29vcmRpbmF0ZSB0cmFuc2Zvcm1h
dGlvbiBhcHBsaWVkIHRvIHRoZSBmaWx0ZXJlZCBlbGVtZW50IHRvIHJlZmxlY3QgdGhlIHJlc29s
dXRpb24gb2YgdGhlIGZpbHRlci4KLSAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZlVHJhbnNm
b3JtOwotICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5o
ZWlnaHQoKSk7Ci0gICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNo
ZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZWZmZWN0aXZl
VHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGZpbHRlclNjYWxlLndpZHRoKCksIDAsIDAsIGZp
bHRlclNjYWxlLmhlaWdodCgpLCAwLCAwKTsKIAogICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IHJl
bmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2lmIEVO
QUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKQEAgLTI4OSwxMyArMjQ0
LDkgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKIAogICAgICAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBsYXN0RWZmZWN0LT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgICAgICBpZiAo
cmVzdWx0SW1hZ2UpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRh
LnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtLmludmVyc2UoKS52YWx1ZV9vcihBZmZpbmVUcmFu
c2Zvcm0oKSkpOwotCi0gICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZp
bHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgMSAvIGZpbHRlckRh
dGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnNjYWxlKEZsb2F0U2l6ZSgxIC8gZmlsdGVyRGF0YS5maWx0ZXItPmZpbHRlclNjYWxl
KCkud2lkdGgoKSwgMSAvIGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJTY2FsZSgpLmhlaWdodCgp
KSk7CiAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoKnJlc3VsdEltYWdlLCBs
YXN0RWZmZWN0LT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNj
YWxlKGZpbHRlckRhdGEuZmlsdGVyLT5maWx0ZXJSZXNvbHV0aW9uKCkpOwotCi0gICAgICAgICAg
ICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9y
bSk7CisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVy
U2NhbGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGlj
QnVmZmVyID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGM2NTAyMWJlZTAzNTU2NWFhYjMxYzY3ZmI5
MzE5Zjg4ZTYxODA3YzcuLjgxYjBjM2EyYmRhYWZmMjZmOTFlZWY2YzMxZjlhODAyMDU2NWEzYmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcApAQCAtNDMyLDExICs0MzIsMTMgQEAgdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29u
dGFpbmVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lciYK
ICAgICAgICAgdHMgPDwgIlxuIjsKICAgICAgICAgLy8gQ3JlYXRpbmcgYSBwbGFjZWhvbGRlciBm
aWx0ZXIgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBidWlsZGVyLgogICAgICAgICBGbG9hdFJlY3Qg
ZHVtbXlSZWN0OwotICAgICAgICBhdXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUo
QWZmaW5lVHJhbnNmb3JtKCksIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJlY3QsIHRydWUp
OwotICAgICAgICBpZiAoYXV0byBidWlsZGVyID0gZmlsdGVyLmJ1aWxkUHJpbWl0aXZlcyhkdW1t
eUZpbHRlci5nZXQoKSkpIHsKKyAgICAgICAgRmxvYXRTaXplIGR1bW15U2NhbGUoMSwgMSk7Cisg
ICAgICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oKTsKKyAg
ICAgICAgYXV0byBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlci5maWx0ZXJF
bGVtZW50KCksICpidWlsZGVyLCBkdW1teVNjYWxlLCBkdW1teVJlY3QsIGR1bW15UmVjdCwgZHVt
bXlSZWN0KTsKKyAgICAgICAgaWYgKGR1bW15RmlsdGVyKSB7CiAgICAgICAgICAgICBUZXh0U3Ry
ZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0cyk7CiAKLSAgICAgICAgICAgIGlmIChGaWx0
ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBidWlsZGVyLT5sYXN0RWZmZWN0KCkpCisgICAgICAgICAg
ICBpZiAoYXV0byBsYXN0RWZmZWN0ID0gZHVtbXlGaWx0ZXItPmxhc3RFZmZlY3QoKSkKICAgICAg
ICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAocmVzb3VyY2UucmVzb3VyY2VUeXBlKCkgPT0gQ2xpcHBlclJl
c291cmNlVHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGRUltYWdlLmNwcAppbmRleCAzODVhZjI5MDg0OGEzZDBiODNmMTJhYzk2MTllNmJmOTZj
OWYyMzk2Li40NWY3YzI5NGFkYjk2MWM5MmJmOGMyZmIxOTA3ZTlkYjc5Yjk3YzYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApA
QCAtMzYsMTQgKzM2LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFSW1hZ2U6OkZFSW1h
Z2UoRmlsdGVyJiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OkltYWdlKQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgRmlsdGVy
RWZmZWN0OjpUeXBlOjpGRUltYWdlKQogICAgICwgbV9pbWFnZShpbWFnZSkKICAgICAsIG1fcHJl
c2VydmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQogCiBGRUltYWdlOjpG
RUltYWdlKEZpbHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5n
JiBocmVmLCBjb25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0
UmF0aW8pCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKKyAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkKICAgICAsIG1f
dHJlZVNjb3BlKCZ0cmVlU2NvcGUpCiAgICAgLCBtX2hyZWYoaHJlZikKICAgICAsIG1fcHJlc2Vy
dmVBc3BlY3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQpAQCAtNjIsMTMgKzYyLDE2IEBAIFJl
ZjxGRUltYWdlPiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYgZmlsdGVy
LCBUcmVlU2NvcGUmIHRyZWVTY29wCiAKIHZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKQogewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0
ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAgIEZs
b2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICBwYWlu
dFJlY3Quc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAgICAgRmxvYXRSZWN0IHNyY1Jl
Y3Q7CiAgICAgaWYgKG1faW1hZ2UpIHsKICAgICAgICAgc3JjUmVjdC5zZXRTaXplKG1faW1hZ2Ut
PnNpemUoKSk7CiAgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBh
aW50UmVjdCwgc3JjUmVjdCk7Ci0gICAgfSBlbHNlIGlmIChSZW5kZXJFbGVtZW50KiByZW5kZXJl
ciA9IHJlZmVyZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJz
b2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29y
ZGluYXRlcygpKTsKKyAgICB9IGVsc2UgaWYgKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVm
ZXJlbmNlZFJlbmRlcmVyKCkpIHsKKyAgICAgICAgc3JjUmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAgICAgICBzcmNSZWN0LnNjYWxlKGZpbHRlcigp
LmZpbHRlclNjYWxlKCkpOworICAgIH0KIAogICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCiAgICAg
ICAgIHBhaW50UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKQEAgLTEwMCwxMiArMTAz
LDE0IEBAIHZvaWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAoIXJl
c3VsdEltYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBm
aWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVn
aW9uKCkpOworICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpOworICAgIGRlc3RSZWN0LnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAg
RmxvYXRSZWN0IHNyY1JlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKQotICAgICAgICBzcmNSZWN0ID0g
ZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKTsKLSAgICBlbHNlIHsKKyAgICBpZiAocmVuZGVyZXIpIHsK
KyAgICAgICAgc3JjUmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpOworICAgICAgICBzcmNSZWN0LnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOworICAg
IH0gZWxzZSB7CiAgICAgICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2lt
YWdlLT5zaXplKCkpOwogICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVj
dChkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgfQpAQCAtMTE2LDggKzEyMSw3IEBAIHZvaWQgRkVJ
bWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBhdXRvJiBjb250ZXh0ID0gcmVzdWx0
SW1hZ2UtPmNvbnRleHQoKTsKIAogICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFu
c2Zvcm0oKTsKLSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOwor
ICAgICAgICBjb250ZXh0LnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAgICAg
IFJlZlB0ciBjb250ZXh0Tm9kZSA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVt
ZW50KCkpOwogICAgICAgICBpZiAoY29udGV4dE5vZGUtPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgK
aW5kZXggYWMxNjBlZGNlN2MwZTBhMDY3YmRlZmJkNzA3ZjJhYmU1NTkwODFiNi4uMTY4ODk5MTY0
NjJiMTc1MmEzNDFkNTUxOGFkYTA3NWMzNDllMTYwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtNDIsMTAgKzQyLDYgQEAgcHJp
dmF0ZToKICAgICBGRUltYWdlKEZpbHRlciYsIFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNl
cnZlQXNwZWN0UmF0aW9WYWx1ZSYpOwogICAgIEZFSW1hZ2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKLSAg
ICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFSW1hZ2Ui
OyB9Ci0KLSAgICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2U7IH0KLQogICAgIFJlbmRlckVsZW1lbnQq
IHJlZmVyZW5jZWRSZW5kZXJlcigpIGNvbnN0OwogCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBmaW5hbDsKQEAgLTYxLDMgKzU3LDUgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZF
SW1hZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyLmNwcAppbmRleCA5YTk0YTQ2MDM1ODc5MDhhMzg0ZDE3NDI3YjM3MTkzNTkyYjdiY2U3Li40
YTNkOTJiYmVjZTQyNmQ5ZjJiOGU0MTYxNWYxNzk2NTk1OWMwMzdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTIyLDI5ICsy
Miw3MCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogCisj
aW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRl
U291cmNlRHJhd2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwg
Y29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0gICAg
OiBGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2lu
Z1JlZ2lvbihhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCitSZWZQdHI8U1ZHRmlsdGVyPiBT
VkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0
ZXJCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24s
IEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpCit7CisgICAgcmV0dXJuIGNyZWF0ZShmaWx0
ZXJFbGVtZW50LCBidWlsZGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJS
ZWdpb24sIGZpbHRlclJlZ2lvbiwgJnByZXZpb3VzRWZmZWN0KTsKK30KKworUmVmUHRyPFNWR0Zp
bHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwg
U1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVy
UmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQoreworICAgIHJldHVy
biBjcmVhdGUoZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdl
UmVjdCwgZmlsdGVyUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgbnVsbHB0cik7Cit9CisKK1Jl
ZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRl
ckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmls
dGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgRmls
dGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBib29sIHByaW1pdGl2ZUJvdW5kaW5n
Qm94TW9kZSA9IGZpbHRlckVsZW1lbnQucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6
OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CisKKyAgICBhdXRvIGZpbHRlciA9IGFk
b3B0UmVmKCpuZXcgU1ZHRmlsdGVyKGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRl
clJlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSkpOwor
CisgICAgaWYgKCFwcmV2aW91c0VmZmVjdCkKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0aW5F
ZmZlY3RzKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShmaWx0ZXIpKTsKKyAgICBlbHNlCisgICAgICAg
IGJ1aWxkZXIuc2V0dXBCdWlsdGluRWZmZWN0cyh7ICpwcmV2aW91c0VmZmVjdCB9KTsKKworICAg
IGJ1aWxkZXIuc2V0VGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIGJ1
aWxkZXIuc2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpKTsK
KworICAgIGF1dG8gbGFzdEVmZmVjdCA9IGJ1aWxkZXIuYnVpbGRGaWx0ZXJFZmZlY3RzKGZpbHRl
ciwgZmlsdGVyRWxlbWVudCk7CisgICAgaWYgKCFsYXN0RWZmZWN0KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVj
dElucHV0cyA9IDEwMDsKKyAgICBpZiAobGFzdEVmZmVjdC0+dG90YWxOdW1iZXJPZkVmZmVjdElu
cHV0cygpID4gbWF4VG90YWxPZkVmZmVjdElucHV0cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBmaWx0ZXItPnNldExhc3RFZmZlY3QoV1RGTW92ZShsYXN0RWZmZWN0KSk7CisgICAg
cmV0dXJuIGZpbHRlcjsKK30KKworU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXpl
JiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94
LCBib29sIGVmZmVjdEJCb3hNb2RlKQorICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6U1ZHRmls
dGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24pCiAgICAgLCBt
X3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJSZWdp
b24oZmlsdGVyUmVnaW9uKQogICAgICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkK
IHsKLSAgICBtX2Fic29sdXRlRmlsdGVyUmVnaW9uID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVj
dChmaWx0ZXJSZWdpb24pOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRl
clJlc29sdXRpb24oRmxvYXRTaXplIHNpemUpIGNvbnN0CitGbG9hdFNpemUgU1ZHRmlsdGVyOjpz
Y2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSBzaXplKSBjb25zdAogewogICAgIGlmIChtX2Vm
ZmVjdEJCb3hNb2RlKQogICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3gu
c2l6ZSgpOwogCi0gICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNp
emUpICogbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXplKCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXpl
KCk7CisgICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJTY2FsZShzaXplKTsKK30KKwor
SW50T3V0c2V0cyBTVkdGaWx0ZXI6Om91dHNldHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
c3RFZmZlY3QtPm91dHNldHMoKTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVh
dGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRS
ZWN0JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJC
b3hNb2RlKQordm9pZCBTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0KCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTVkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJh
d2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1v
ZGUpKTsKKyAgICBtX2xhc3RFZmZlY3QtPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlci5oCmluZGV4IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEw
ZmIxNzAwY2YuLjE2NjAxMmZmNGViYWNkMTY1NDRlZTE0MWYwNWQ4Yzg2NzNhMzVmODcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0y
MCw0MSArMjAsNDQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3Rm
L1R5cGVDYXN0cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0ZpbHRlckJ1
aWxkZXI7CitjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OworCiBjbGFzcyBTVkdGaWx0ZXIgZmluYWwg
OiBwdWJsaWMgRmlsdGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNWR0ZpbHRlcj4gY3Jl
YXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wpOwotCi0gICAgRmxvYXRSZWN0IGZpbHRlclJl
Z2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
LSAgICBGbG9hdFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNv
bHV0ZUZpbHRlclJlZ2lvbjsgfQorICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUo
U1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZp
bHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWdpb24sIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpOworICAgIHN0
YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRl
ckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVy
PiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9h
dFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRp
bmdCb3gsIEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOwogCi0gICAgRmxvYXRTaXplIHNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbihGbG9hdFNpemUpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0
U2l6ZSBzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CiAKLSAgICBG
bG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0
ZVNvdXJjZURyYXdpbmdSZWdpb247IH0KICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAKLSAgICBib29sIGlzU1ZH
RmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IGxhc3RFZmZlY3QoKSB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0KKyAgICB2b2lkIHNl
dExhc3RFZmZlY3QoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBsYXN0RWZmZWN0KSB7IG1fbGFzdEVm
ZmVjdCA9IFdURk1vdmUobGFzdEVmZmVjdCk7IH0KIAogcHJpdmF0ZToKLSAgICBTVkdGaWx0ZXIo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0
JiBhYnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91
bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hN
b2RlKTsKKyAgICBTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRp
bmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2Rl
KTsKKworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
Y2xlYXJSZXN1bHQoKSBvdmVycmlkZTsKIAotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlU291cmNl
RHJhd2luZ1JlZ2lvbjsKICAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsKLSAgICBG
bG9hdFJlY3QgbV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJS
ZWdpb247CiAgICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOworCisgICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gbV9sYXN0RWZmZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikKICAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRl
ci5pc1NWR0ZpbHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNTVkdGaWx0ZXIo
KTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRleCA5
NmYzYTgwNTA0Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li4wMzg5N2QyYTYwYmNkMzBh
ZjhiMDUwNGNhMDk3NmEwZWU1NTVjNmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMjAsMjAgKzIw
LDc1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5o
IgogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50
LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAj
aW5jbHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKKyNpZiBFTkFCTEUo
REVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVkZSAiQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyQnVpbGRlcjo6
U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQordm9p
ZCBTVkdGaWx0ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+
IHNvdXJjZUdyYXBoaWMpCiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhp
Yzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFk
ZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCpzb3VyY2VH
cmFwaGljKSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0
TmFtZSgpLCBzb3VyY2VHcmFwaGljLnB0cigpKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChT
b3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKHNvdXJjZUdyYXBo
aWMpKTsKICAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCisjaWYgRU5BQkxFKERFU1RJTkFU
SU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorc3RhdGljIENvbG9ySW50ZXJwb2xhdGlvbiBj
b2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1lbnQpCit7CisgICAg
aWYgKGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBy
ZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKTsK
KworICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5IHZhbHVlIGZyb20gdGhlIGNv
bXB1dGVkIHN0eWxlLgorICAgIGlmIChhdXRvIHZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rv
cigmZWxlbWVudCkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbkZp
bHRlcnMpKSB7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQorICAg
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAg
IH0KKworICAgIHJldHVybiBDb2xvckludGVycG9sYXRpb246OkF1dG87Cit9CisjZW5kaWYKKwor
UmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3Rz
KEZpbHRlciYgZmlsdGVyLCBTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50KQoreworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7CisgICAgaWYg
KGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0
OworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KSkgeworICAgICAg
ICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKHRoaXMsIGZpbHRlcik7CisgICAgICAgIGlm
ICghZWZmZWN0KSB7CisgICAgICAgICAgICBjbGVhckVmZmVjdHMoKTsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgZWZmZWN0RWxlbWVudC5zZXRTdGFu
ZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKKyAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RC
b3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxlbWVudCwgbV9wcmltaXRpdmVVbml0
cywgbV90YXJnZXRCb3VuZGluZ0JveCkpOworCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9S
X1NQQUNFX0xJTkVBUl9TUkdCKQorICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0aW9uRm9yRWxl
bWVudChlZmZlY3RFbGVtZW50KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQikKKyAg
ICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OkxpbmVhclNSR0IoKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIg
PSBlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgICAgICBhcHBlbmRFZmZlY3RUb0Vm
ZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgcmVuZGVyZXIpOworCisgICAgICAgIGFk
ZChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBlZmZlY3QpOworICAgIH0KKworICAgIHJldHVybiBl
ZmZlY3Q7Cit9CisKIHZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YWRkKGNvbnN0IEF0b21TdHJpbmcm
IGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QpCiB7CiAgICAgaWYgKGlkLmlzRW1wdHko
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5oCmluZGV4IGM3N2FlMDhiYWM2NWMzYzJjZmM4OTc0ZmEzM2U3NjQ2MGNl
OTdmYTcuLjM3NWJkYjE1MzFlZjQzYWUyYjcxNTY2ZjY2NThkZWMzNGQ4ZDQ4YWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBIYXNoU2V0PEZpbHRlckVmZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKIAot
ICAgIFNWR0ZpbHRlckJ1aWxkZXIoUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7
CisgICAgU1ZHRmlsdGVyQnVpbGRlcigpID0gZGVmYXVsdDsKIAogICAgIHZvaWQgc2V0VGFyZ2V0
Qm91bmRpbmdCb3goY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fdGFyZ2V0Qm91bmRpbmdCb3ggPSBy
OyB9CiAgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90
YXJnZXRCb3VuZGluZ0JveDsgfQpAQCAtNjUsNiArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
bGVhckVmZmVjdHMoKTsKICAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZl
Y3QqKTsKIAorICAgIHZvaWQgc2V0dXBCdWlsdGluRWZmZWN0cyhSZWY8RmlsdGVyRWZmZWN0PiBz
b3VyY2VHcmFwaGljKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZEZpbHRlckVmZmVj
dHMoRmlsdGVyJiwgU1ZHRmlsdGVyRWxlbWVudCYpOworCiBwcml2YXRlOgogICAgIGlubGluZSB2
b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKICAgICB7Cg==
</data>
<flag name="commit-queue"
          id="467365"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442785</attachid>
            <date>2021-10-28 22:59:10 -0700</date>
            <delta_ts>2021-10-29 12:03:34 -0700</delta_ts>
            <desc>Patch for review</desc>
            <filename>filters_cssfilter_functions.patch</filename>
            <type>text/plain</type>
            <size>58025</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNzMzOTRkYTgxMWIuLmUzYzk2YjQ4NjNhMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDg3IEBACisyMDIxLTEwLTI4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUu
Y29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFrZSBDU1NGaWx0ZXIgaG9sZHMgYSBsaXN0
IG9mIEZpbHRlckZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMyNDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgdGhlIENTUyByZWZlcmVuY2VkIGZpbHRlciBpcyBi
dWlsdCBhcyBhbiBTVkdGaWx0ZXIgYW5kIGl0CisgICAgICAgIGlzIGtlcHQgYXMgYSBGaWx0ZXJG
dW5jdGlvbiBpbiB0aGUgQ1NTRmlsdGVyIGZ1bmN0aW9ucycgbGlzdC4gVGhlIEZpbHRlciAKKyAg
ICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBGaWx0ZXJFZmZlY3RzIG9mIHRoZSByZWZlcmVuY2Vk
IGZpbHRlciB3aWxsIGJlIGFuCisgICAgICAgIFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyBh
IENTU0ZpbHRlci4gVGhpcyB3aWxsIGFsbG93IGhhdmluZyBjb2xvcgorICAgICAgICBzcGFjaW5n
IGZvciB0aGUgcmVmZXJlbmNlZCBmaWx0ZXJzIGRpZmZlcmVudCBmcm9tIHRoZSBjb2xvciBzcGFj
aW5nIG9mCisgICAgICAgIENTU0ZpbHRlci4gCisKKyAgICAgICAgQWxzbyB0aGlzIHBhdGNoIG1h
a2VzIGEgc2luZ2xlIGZ1bmN0aW9uIGZvciBidWlsZGluZyB0aGUgcHJpbWl0aXZlcyBvZgorICAg
ICAgICB0aGUgU1ZHRmlsdGVyIGluc3RlYWQgb2YgaGF2aW5nIHR3byBmdW5jdGlvbnMuCisKKyAg
ICAgICAgVG8gYWxsb3cgb3BlcmF0aW5nIHRocm91Z2ggdGhlIFNWR0ZpbHRlciBhcyBhIEZpbHRl
ckZ1bmN0aW9uIG93bmVkIGJ5CisgICAgICAgIENTU0ZpbHRlciwgdGhlIFNWR0ZpbHRlciB3aWxs
IGhhdmUgYSBwb2ludGVyIHRvIGl0cyBsYXN0RWZmZWN0LgorCisgICAgICAgICogY3NzL0NTU0Zp
bHRlckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1
ZTo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE1heEVmZmVjdFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6b3V0c2V0cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHJl
bmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlQmx1ckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCcmln
aHRuZXNzRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbnRyYXN0RWZmZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BTaGFkb3dFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlR3JheVNjYWxlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUh1
ZVJvdGF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbnZlcnRFZmZlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3BhY2l0eUVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTZXBpYUVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTVkdGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Omxhc3RFZmZlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6Om91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNv
dXJjZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhFZmZlY3RSZWN0cyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNlQ29udGFpbmVyKToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmls
dGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVy
QnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvcklu
dGVycG9sYXRpb25Gb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxk
ZXI6OmJ1aWxkRmlsdGVyRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWls
ZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisKIDIwMjEtMTAtMjggIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIFNWR0Zp
bHRlciBhbmQgQ1NTRmlsdGVyIHdvcmsgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXMgc3lzdGVtCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZDZiNDNhMWEx
YzFhLi42MDA3NWExNzNlNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0
ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VW
YWx1ZS5jcHAKQEAgLTExNiwxOCArMTE2LDIxIEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1h
Z2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAK
ICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAo
MTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2Nl
bGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJl
dHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCiAgICAgYXV0byBpbWFnZVJlY3QgPSBGbG9hdFJl
Y3QgeyB7IH0sIHNpemUgfTsKICAgICB0ZXh0dXJlLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFn
ZSwgaW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUo
KTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlKFdURk1vdmUodGV4dHVyZSkpOworICAg
IGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUobV9maWx0ZXJPcGVyYXRpb25zLCBy
ZW5kZXJpbmdNb2RlKTsKKyAgICAKICAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChp
bWFnZVJlY3QpOwogICAgIGlmICghY3NzRmlsdGVyLT5idWlsZChyZW5kZXJlciwgbV9maWx0ZXJP
cGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pKQogICAgICAgICByZXR1
cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKKworICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2Uo
V1RGTW92ZSh0ZXh0dXJlKSk7CiAgICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCiAgICAgYXV0byog
b3V0cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDU1MjdmNmJm
NGJmNi4uYjgzNmFiNDdhZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZlY3RvcjsKIAog
Y2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGljIEZpbHRlckZ1bmN0aW9uIHsKIHB1YmxpYzoKLSAg
ICB2b2lkIGNsZWFyUmVzdWx0KCk7CisgICAgdm9pZCBjbGVhclJlc3VsdCgpIG92ZXJyaWRlOwog
ICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKCk7CiAKICAgICBJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXJSZXN1bHQoKTsKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
QWJzb2x1dGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVQYWludFJlY3QpIHsgbV9h
YnNvbHV0ZVBhaW50UmVjdCA9IGFic29sdXRlUGFpbnRSZWN0OyB9CiAKICAgICBGbG9hdFJlY3Qg
bWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZv
aWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9t
YXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsgfSAKKyAgICB2b2lkIHNldE1heEVmZmVjdFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1h
eEVmZmVjdFJlY3Q7IH0KIAogICAgIHZvaWQgYXBwbHkoKTsKIApAQCAtOTQsOCArOTQsNiBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
IAotICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4gSW50T3V0
c2V0cygpOyB9Ci0KICAgICBlbnVtIGNsYXNzIFJlcHJlc2VudGF0aW9uVHlwZSB7IFRlc3RPdXRw
dXQsIERlYnVnZ2luZyB9OwogICAgIHZpcnR1YWwgV1RGOjpUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFdURjo6VGV4dFN0cmVhbSYsIFJlcHJlc2VudGF0aW9uVHlwZSA9IFJlcHJl
c2VudGF0aW9uVHlwZTo6VGVzdE91dHB1dCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaAppbmRl
eCAwMDU2ZDlhYTFlODQuLjY1NTEwNTZmNzQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtMjUs
NiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIApAQCAtODAsNiArODIsOSBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1
cm4gZmlsdGVyTmFtZShUeXBlOjpTb3VyY2VHcmFwaGljKTsgfQogICAgIGNvbnN0IEF0b21TdHJp
bmcmIGZpbHRlck5hbWUoKSBjb25zdCB7IHJldHVybiBmaWx0ZXJOYW1lKG1fZmlsdGVyVHlwZSk7
IH0KIAorICAgIHZpcnR1YWwgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4geyB9
OyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUmVzdWx0KCkgeyB9CisKIHByaXZhdGU6CiAgICAg
VHlwZSBtX2ZpbHRlclR5cGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NTU0ZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNw
cAppbmRleCAyODNlOTdmODUwNDUuLjM5NTcyMTVlODcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NTU0ZpbHRlci5jcHAKQEAgLTI3LDkgKzI3LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJFbGVt
ZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAjaW5jbHVkZSAiRkVD
b21wb25lbnRUcmFuc2Zlci5oIgogI2luY2x1ZGUgIkZFRHJvcFNoYWRvdy5oIgpAQCAtMzgsNDMg
KzM1LDE4MyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlZmVyZW5jZWRTVkdSZXNvdXJjZXMuaCIKLSNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdE
b2N1bWVudEV4dGVuc2lvbnMuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJT
VkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNv
dXJjZUFscGhhLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPGFsZ29y
aXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYgVVNFKERJUkVDVDJEKQot
I2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxD
U1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKGZsb2F0IHNjYWxlRmFjdG9yKQorUmVmPENTU0Zp
bHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9u
cywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBzY2FsZUZhY3RvcikKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NGaWx0ZXIoc2NhbGVGYWN0b3IpKTsKKyAgICBib29s
IGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVz
UGl4ZWxzKCk7CisgICAgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1
cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5
U2VjdXJpdHlPcmlnaW4oKTsKKworICAgIGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBDU1NG
aWx0ZXIoaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgc2NhbGVGYWN0b3IpKTsKKworICAgIGZpbHRlci0+c2V0
UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKTsKKyAgICByZXR1cm4gZmlsdGVyOwogfQogCi1D
U1NGaWx0ZXI6OkNTU0ZpbHRlcihmbG9hdCBzY2FsZUZhY3RvcikKK0NTU0ZpbHRlcjo6Q1NTRmls
dGVyKGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBib29sIGhhc0ZpbHRlclRoYXRTaG91
bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luLCBmbG9hdCBzY2FsZUZhY3RvcikKICAgICA6
IEZpbHRlcihGaWx0ZXI6OlR5cGU6OkNTU0ZpbHRlciwgRmxvYXRTaXplIHsgc2NhbGVGYWN0b3Is
IHNjYWxlRmFjdG9yIH0pCisgICAgLCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyhoYXNGaWx0
ZXJUaGF0TW92ZXNQaXhlbHMpCisgICAgLCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0
ZWRCeVNlY3VyaXR5T3JpZ2luKGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luKQogICAgICwgbV9zb3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgq
dGhpcykpCiB7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQo
KQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3QoQ1NTRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRl
ckNvbnN1bWVyIGNvbnN1bWVyKQogewotICAgIHJldHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJj
ZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7CisgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0g
ZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKKyAg
ICByZXR1cm4gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZShmaWx0ZXIsIHN0ZERldmlhdGlvbiwgc3Rk
RGV2aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBF
REdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKK30KKworc3RhdGljIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5z
ZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJG
dW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVS
X1RZUEVfTElORUFSOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFu
c2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRl
KGZpbHRlciwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5j
dGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNy
ZWF0ZUNvbnRyYXN0RWZmZWN0KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sK
KyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJh
bnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAg
ICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVy
T3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3VudCArIDAuNTsK
KworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVy
biBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCB0cmFuc2ZlckZ1bmN0aW9uLCB0
cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitz
dGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdChDU1NGaWx0
ZXImIGZpbHRlciwgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgZHJvcFNoYWRvd09w
ZXJhdGlvbikKK3sKKyAgICBmbG9hdCBzdGQgPSBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlh
dGlvbigpOworICAgIHJldHVybiBGRURyb3BTaGFkb3c6OmNyZWF0ZShmaWx0ZXIsIHN0ZCwgc3Rk
LCBkcm9wU2hhZG93T3BlcmF0aW9uLngoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi55KCksIGRyb3BT
aGFkb3dPcGVyYXRpb24uY29sb3IoKSwgMSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAg
IGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9u
LmFtb3VudCgpLCAwLjAsIDEuMCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9o
Zy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1aXZhbGVu
dAorICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZs
b2F0PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAu
MjEyNiArIDAuNzg3NCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAg
ICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4y
MTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIx
MjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAor
ICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJp
eDo6Y3JlYXRlKGZpbHRlciwgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1
dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUh1
ZVJvdGF0ZUVmZmVjdChDU1NGaWx0ZXImIGZpbHRlciwgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3Bl
cmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmls
dGVyLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVy
cykpOwogfQogCi1SZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6OmJ1aWxkUmVmZXJlbmNl
RmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZm
ZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbikKK3N0YXRpYyBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVJbnZlcnRFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIs
IGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uKQogewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZW5kZXJlci5l
bnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVu
ZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKyAgICBDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gMSAtIDIgKiBhbW91bnQ7CisgICAgdHJhbnNm
ZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3Jl
YXRlKGZpbHRlciwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJG
dW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGNyZWF0ZU9wYWNpdHlFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQor
eworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0
cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwor
ICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91
bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJh
bnNmZXI6OmNyZWF0ZShmaWx0ZXIsIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCBudWxsRnVu
Y3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVj
dD4gY3JlYXRlU2F0dXJhdGVFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIFZl
Y3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xv
ck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6
Y3JlYXRlKGZpbHRlciwgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0
UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlU2Vw
aWFFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIGRvdWJsZSBvbmVNaW51c0Ft
b3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEu
MCk7CisKKyAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3Rp
cC9maWx0ZXJzL2luZGV4Lmh0bWwjc2VwaWFFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0
aW9uIG9uIHBhcmFtZXRlcnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYwNyAqIG9uZU1pbnVz
QW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICog
b25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTg5IC0g
MC4xODkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAq
IG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3VudCksCisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC41MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWlu
dXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAg
IDAsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJl
dHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBGRUNPTE9STUFUUklYX1RZUEVfTUFU
UklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPFNWR0Zp
bHRlcj4gY3JlYXRlU1ZHRmlsdGVyKENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpCit7CisgICAgYXV0byYgcmVmZXJlbmNlZFNW
R1Jlc291cmNlcyA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKTsKKyAg
ICBhdXRvKiBmaWx0ZXJFbGVtZW50ID0gcmVmZXJlbmNlZFNWR1Jlc291cmNlcy5yZWZlcmVuY2Vk
RmlsdGVyRWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworCiAg
ICAgaWYgKCFmaWx0ZXJFbGVtZW50KSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIkNTU0ZpbHRlciAiIDw8IHRoaXMgPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRl
cjogZmFpbGVkIHRvIGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNvdXJj
ZSAiIDw8IGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKKyAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8g
ZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVy
T3BlcmF0aW9uLmZyYWdtZW50KCkpOwogICAgICAgICAvLyBBbHRob3VnaCB3ZSBkaWQgbm90IGZp
bmQgdGhlIHJlZmVyZW5jZWQgZmlsdGVyLCBpdCBtaWdodCBleGlzdCBsYXRlciBpbiB0aGUgZG9j
dW1lbnQuCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIGFub255bW91cyBSZW5kZXJPYmpl
Y3RzLiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMxMDg1PgogICAgICAgICAvLyBGSVhNRTogVW5j
bGVhciBpZiB0aGlzIGRvZXMgYW55dGhpbmcuCkBAIC04MywyMzAgKzIyMCwxMTcgQEAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gQ1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgRmkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAg
YXV0byBidWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigmcHJldmlvdXNFZmZl
Y3QpOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZlY3RvcjxSZWY8
RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKLQotICAgIGZvciAoYXV0byYgZWZmZWN0
RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVjdEVsZW1lbnQu
YnVpbGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAg
ICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIg
PDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVpbGQgZWZmZWN0
IGZyb20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICB9CisgICAgYXV0byBidWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVy
PigpOworICAgIHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0ZSgqZmlsdGVyRWxlbWVudCwgKmJ1aWxk
ZXIsIGZpbHRlci5maWx0ZXJTY2FsZSgpLCBmaWx0ZXIuc291cmNlSW1hZ2VSZWN0KCksIGZpbHRl
ci5maWx0ZXJSZWdpb24oKSwgcHJldmlvdXNFZmZlY3QpOworfQogCi0gICAgICAgIGVmZmVjdEVs
ZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGlmIChl
ZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1Jf
U1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJ
bnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8g
RGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9
Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBlZmZlY3QpOwot
ICAgICAgICByZWZlcmVuY2VFZmZlY3RzLmFwcGVuZCgqZWZmZWN0KTsKLSAgICB9Ci0gICAgCi0g
ICAgbV9lZmZlY3RzLmFwcGVuZFZlY3RvcihXVEZNb3ZlKHJlZmVyZW5jZUVmZmVjdHMpKTsKLSAg
ICByZXR1cm4gZWZmZWN0Oworc3RhdGljIHZvaWQgc2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcyhG
aWx0ZXJFZmZlY3QmIGVmZmVjdCwgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIpCit7CisgICAgLy8g
VW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMg
b24gdGhlIGZpbHRlcgorICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVyZSBzaG91bGQgbm90IGNs
aXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJlZ2lvbnMuCisgICAgZWZmZWN0LnNldENsaXBzVG9C
b3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKTsKKyAgICBl
ZmZlY3Quc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7CiB9CiAKIGJvb2wgQ1NTRmlsdGVyOjpidWlsZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXIgY29uc3Vt
ZXIpCiB7Ci0gICAgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscygpOwotICAgIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJp
Y3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJl
c3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7Ci0KLSAgICBtX2VmZmVjdHMuY2xlYXIoKTsKKyAg
ICBtX2Z1bmN0aW9ucy5jbGVhcigpOwogICAgIG1fb3V0c2V0cyA9IHsgfTsKIAogICAgIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IHByZXZpb3VzRWZmZWN0ID0gbV9zb3VyY2VHcmFwaGljLnB0cigpOwor
ICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKKwogICAgIGZvciAoYXV0byYgb3BlcmF0aW9u
IDogb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKICAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gZWZmZWN0OwotICAgICAgICBhdXRvJiBmaWx0ZXJPcGVyYXRpb24gPSAqb3BlcmF0aW9uOwot
ICAgICAgICBzd2l0Y2ggKGZpbHRlck9wZXJhdGlvbi50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRTogewotICAgICAgICAgICAgYXV0byYgcmVmZXJlbmNl
T3BlcmF0aW9uID0gZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gYnVpbGRSZWZlcmVuY2VGaWx0ZXIocmVuZGVy
ZXIsICpwcmV2aW91c0VmZmVjdCwgcmVmZXJlbmNlT3BlcmF0aW9uKTsKKyAgICAgICAgCisgICAg
ICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxl
LWNvbG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9y
TWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9
IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0K
LSAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUv
dGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAv
LyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZs
b2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAg
MCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4y
MTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43
MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJMVVI6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCbHVyRWZmZWN0
KCp0aGlzLCBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgY29uc3Vt
ZXIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OlNFUElBOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlv
biA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBj
b2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAv
LyBTZWUgaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2lu
ZGV4Lmh0bWwjc2VwaWFFcXVpdmFsZW50Ci0gICAgICAgICAgICAvLyBmb3IgaW5mb3JtYXRpb24g
b24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRl
cnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zOTMgKyAwLjYw
NyAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuNzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFy
cm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNjg2ICsgMC4zMTQgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2
OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAg
ICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4y
NzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjEzMSArIDAuODY5ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAg
ICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJ
WF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICAgICAgICAgIGVm
ZmVjdCA9IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3QoKnRoaXMsIGRvd25jYXN0PEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTog
ewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAg
ICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUs
IFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkNPTlRSQVNUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQ29udHJhc3RFZmZlY3Qo
KnRoaXMsIGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1h
dHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+
KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1l
dGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50
KCkpIH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMs
IEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9X
OgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlRHJvcFNoYWRvd0VmZmVjdCgqdGhpcywgZG93
bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVS
VDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3du
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRp
b24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0
aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFO
U0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAg
ICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50OwotICAgICAgICAg
ICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSBhbW91bnQ7Ci0KLSAgICAgICAgICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0
ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0
cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6CisgICAgICAg
ICAgICBlZmZlY3QgPSBjcmVhdGVHcmF5U2NhbGVFZmZlY3QoKnRoaXMsIGRvd25jYXN0PEJhc2lj
Q29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZF
UlRfTElHSFRORVNTOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEFQUExF
X0lOVkVSVF9MSUdIVE5FU1MgaXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1maWx0ZXIuCisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Cisg
ICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoKnRoaXMsIGRvd25jYXN0
PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWTogewotICAg
ICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAg
ICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVy
OjpjcmVhdGUoKnRoaXMsIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24s
IHRyYW5zZmVyRnVuY3Rpb24pOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZF
UlQ6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVJbnZlcnRFZmZlY3QoKnRoaXMsIGRvd25j
YXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpCUklHSFRORVNTOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9w
ZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+
KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBG
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5j
dGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVy
YXRpb24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQg
PSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlv
bjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhp
cywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6T1BBQ0lUWToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZU9wYWNpdHlFZmZlY3QoKnRo
aXMsIGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVy
YXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpDT05UUkFTVDogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJh
bnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50
eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIGZsb2F0
IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRp
b24uYW1vdW50KCkpOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3Vu
dDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gLTAuNSAqIGFtb3Vu
dCArIDAuNTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRy
YW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTQVRVUkFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0
KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRv
d25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24u
c3RkRGV2aWF0aW9uKCksIDApOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6
OmNyZWF0ZSgqdGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZp
bHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9E
VVBMSUNBVEUpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
RVBJQToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNlcGlhRWZmZWN0KCp0aGlzLCBkb3du
Y2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1dG8mIGRyb3BTaGFkb3dPcGVyYXRpb24gPSBk
b3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoKnRoaXMsIGRyb3BTaGFkb3dP
cGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9u
KCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dP
cGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCksIDEpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOgorICAgICAg
ICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmlsdGVyKCp0aGlzLCBkb3duY2FzdDxSZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0KTsK
KyAgICAgICAgICAgIGVmZmVjdCA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CisgICAgICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgICAgICAgIGVmZmVjdCA9IGZpbHRlci0+bGFz
dEVmZmVjdCgpOworICAgICAgICAgICAgc2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcygqZWZmZWN0
LCBjb25zdW1lcik7CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZmlsdGVyLnJlbGVh
c2VOb25OdWxsKCkpOworICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVj
dCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
aWYgKGVmZmVjdCkgewotICAgICAgICAgICAgLy8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NG
aWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24gdGhlIGZpbHRlcgotICAgICAgICAgICAg
Ly8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRp
dmUgc3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25z
dW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwotICAgICAgICAgICAgZWZm
ZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi50eXBlKCkg
IT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgICAgICBlZmZlY3Qt
PmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OwotICAgICAgICAg
ICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKCplZmZlY3QsIGNvbnN1bWVyKTsKKyAgICAg
ICAgICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3Qp
IH07CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogICAgICAg
ICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVy
IHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgaWYg
KG1fZnVuY3Rpb25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9l
ZmZlY3RzLnNocmlua1RvRml0KCk7CisgICAgbV9mdW5jdGlvbnMuc2hyaW5rVG9GaXQoKTsKIAot
ICAgIHNldE1heEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCgpKTsKICNpZiBVU0UoQ09SRV9J
TUFHRSkKICAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIpCi0gICAgICAgIG1fZmlsdGVyUmVuZGVy
ZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRpbmdzKCku
Y29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksIG1fZWZmZWN0cy5sYXN0
KCkuZ2V0KCkpOworICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVy
ZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmls
dGVyUmVuZGVyRW5hYmxlZCgpLCAqbGFzdEVmZmVjdCgpKTsKICNlbmRpZgogICAgIHJldHVybiB0
cnVlOwogfQogCitHcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KCkKK3sK
KyAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBu
dWxscHRyOworfQorCiBib29sIENTU0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpCiB7CiAgICAgaWYgKGZpbHRlclJlY3QuaXNFbXB0eSgp
IHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJSZWN0LnNpemUoKSkpCkBA
IC0zMzEsNDggKzM1NSw2MyBAQCB2b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleAogICAgIEludFNpemUg
bG9naWNhbFNpemUgeyBzb3VyY2VJbWFnZVJlY3QoKS5zaXplKCkgfTsKICAgICBpZiAoIXNvdXJj
ZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAhPSBsb2dpY2FsU2l6ZSkg
ewogI2lmIFVTRShESVJFQ1QyRCkKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6
OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4dCwgZmls
dGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpC
R1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2lj
YWxTaXplLCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCAxLCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZWxzZQogICAgICAgICBV
TlVTRURfUEFSQU0odGFyZ2V0Q29udGV4dCk7CiAgICAgICAgIFJlbmRlcmluZ01vZGUgbW9kZSA9
IG1fZmlsdGVyUmVuZGVyZXIgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IHJlbmRlcmlu
Z01vZGUoKTsKICAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dp
Y2FsU2l6ZSwgbW9kZSwgMSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9y
bWF0OjpCR1JBOCkpOwogI2VuZGlmCisgICAgICAgIGlmIChhdXRvIGNvbnRleHQgPSBpbnB1dENv
bnRleHQoKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKGZpbHRlclNjYWxlKCkpOwogICAg
IH0KICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVlOwogfQogCitSZWZQdHI8Rmls
dGVyRWZmZWN0PiBDU1NGaWx0ZXI6Omxhc3RFZmZlY3QoKQoreworICAgIGlmIChtX2Z1bmN0aW9u
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgZnVuY3Rp
b24gPSBtX2Z1bmN0aW9ucy5sYXN0KCk7CisgICAgaWYgKGZ1bmN0aW9uLT5pc1NWR0ZpbHRlcigp
KQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHRmlsdGVyPihmdW5jdGlvbi5wdHIoKSktPmxh
c3RFZmZlY3QoKTsKKworICAgIHJldHVybiBkb3duY2FzdDxGaWx0ZXJFZmZlY3Q+KGZ1bmN0aW9u
LnB0cigpKTsKK30KKworCiB2b2lkIENTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCkKIHsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5n
ZXQoKTsKLSAgICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
OwotICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0Lm1heEVmZmVjdFJlY3QoKTsK
KyAgICBhdXRvIGVmZmVjdCA9IGxhc3RFZmZlY3QoKTsKKyAgICBlZmZlY3QtPmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBlZmZl
Y3QtPm1heEVmZmVjdFJlY3QoKTsKICAgICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhh
cyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwgcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRo
IG5ldyBzY2FsZSBmYWN0b3JzLgogICAgIEZsb2F0U2l6ZSBmaWx0ZXJTY2FsZSB7IDEsIDEgfTsK
ICAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCks
IGZpbHRlclNjYWxlKSkgewogICAgICAgICBzZXRGaWx0ZXJTY2FsZShmaWx0ZXJTY2FsZSk7Ci0g
ICAgICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7Cisg
ICAgICAgIGVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiAgICAg
fQogfQogCiB2b2lkIENTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCkKIHsKICAg
ICBtX3NvdXJjZUdyYXBoaWMtPmNsZWFyUmVzdWx0KCk7Ci0gICAgZm9yIChhdXRvJiBlZmZlY3Qg
OiBtX2VmZmVjdHMpCi0gICAgICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKKyAgICBmb3IgKGF1
dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAgICAgIGZ1bmN0aW9uLT5jbGVhclJlc3Vs
dCgpOwogfQogCiB2b2lkIENTU0ZpbHRlcjo6YXBwbHkoKQogewotICAgIGF1dG8mIGVmZmVjdCA9
IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7CisgICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7
CiAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlci0+
YXBwbHlFZmZlY3RzKGVmZmVjdCk7CisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZm
ZWN0cygqZWZmZWN0KTsKICAgICAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgp
KSB7Ci0gICAgICAgICAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgICAgICAgICBlZmZlY3QtPnRyYW5zZm9ybVJl
c3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQotICAgIGVmZmVjdC5hcHBseSgpOwotICAgIGVm
ZmVjdC50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JH
QigpKTsKKyAgICBlZmZlY3QtPmFwcGx5KCk7CisgICAgZWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKIH0KIAogTGF5b3V0UmVj
dCBDU1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5
b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KQpAQCAt
Mzg1LDM0ICs0MjQsMzAgQEAgTGF5b3V0UmVjdCBDU1NGaWx0ZXI6OmNvbXB1dGVTb3VyY2VJbWFn
ZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGUKICAgICByZXR1cm4gcmVj
dEZvclJlcGFpbnQ7CiB9CiAKLUltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpIGNvbnN0
CitJbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpvdXRwdXQoKQogewogICAgIGlmIChtX2ZpbHRlclJl
bmRlcmVyICYmIG1fZmlsdGVyUmVuZGVyZXItPmhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4g
bV9maWx0ZXJSZW5kZXJlci0+b3V0cHV0KCk7CiAgICAgCi0gICAgcmV0dXJuIG1fZWZmZWN0cy5s
YXN0KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7CisgICAgcmV0dXJuIGxhc3RFZmZlY3QoKS0+aW1h
Z2VCdWZmZXJSZXN1bHQoKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCkKIHsKKyAgICBhdXRvIHNjYWxlZFNv
dXJjZUltYWdlUmVjdCA9IHNvdXJjZUltYWdlUmVjdDsKKyAgICBzY2FsZWRTb3VyY2VJbWFnZVJl
Y3Quc2NhbGUoZmlsdGVyU2NhbGUoKSk7CisKICAgICBGaWx0ZXI6OnNldEZpbHRlclJlZ2lvbihz
b3VyY2VJbWFnZVJlY3QpOwotICAgIEZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KHNvdXJjZUlt
YWdlUmVjdCk7Ci0gICAgc2V0TWF4RWZmZWN0UmVjdHMoc291cmNlSW1hZ2VSZWN0KTsKKyAgICBG
aWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdChzY2FsZWRTb3VyY2VJbWFnZVJlY3QpOwogICAgIG1f
Z3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOwogfQogCi12b2lkIENTU0ZpbHRlcjo6c2V0
TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQorSW50UmVjdCBDU1NG
aWx0ZXI6Om91dHB1dFJlY3QoKQogewotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3Rz
KQotICAgICAgICBlZmZlY3QtPnNldE1heEVmZmVjdFJlY3QoZWZmZWN0UmVjdCk7Ci19Ci0KLUlu
dFJlY3QgQ1NTRmlsdGVyOjpvdXRwdXRSZWN0KCkgY29uc3QKLXsKLSAgICBhdXRvJiBsYXN0RWZm
ZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKKyAgICBhdXRvIGVmZmVjdCA9IGxhc3RFZmZl
Y3QoKTsKICAgICAKLSAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1bHQoKSB8fCAobV9maWx0ZXJS
ZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCi0gICAgICAgIHJldHVy
biBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRSZWN0IHsg
ZmlsdGVyUmVnaW9uKCkgfSk7CisgICAgaWYgKGVmZmVjdC0+aGFzUmVzdWx0KCkgfHwgKG1fZmls
dGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0KCkpKQorICAgICAgICBy
ZXR1cm4gZWZmZWN0LT5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoSW50UmVjdCB7
IGZpbHRlclJlZ2lvbigpIH0pOwogICAgIAogICAgIHJldHVybiB7IH07CiB9CkBAIC00MjUsOCAr
NDYwLDkgQEAgSW50T3V0c2V0cyBDU1NGaWx0ZXI6Om91dHNldHMoKSBjb25zdAogICAgIGlmICgh
bV9vdXRzZXRzLmlzWmVybygpKQogICAgICAgICByZXR1cm4gbV9vdXRzZXRzOwogCi0gICAgZm9y
IChhdXRvJiBlZmZlY3QgOiBtX2VmZmVjdHMpCi0gICAgICAgIG1fb3V0c2V0cyArPSBlZmZlY3Qt
Pm91dHNldHMoKTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpCisgICAg
ICAgIG1fb3V0c2V0cyArPSBmdW5jdGlvbi0+b3V0c2V0cygpOworCiAgICAgcmV0dXJuIG1fb3V0
c2V0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCmluZGV4IDVkMmI0OWFk
ZTBmNS4uYjU0NWU3Nzk4MmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q1NTRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBA
IC0zOCw1NSArMzgsNTAgQEAgY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKIGNsYXNzIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVs
ZW1lbnQ7Ci1jbGFzcyBTb3VyY2VBbHBoYTsKIGNsYXNzIFNvdXJjZUdyYXBoaWM7CiAKIGVudW0g
Y2xhc3MgRmlsdGVyQ29uc3VtZXIgeyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsK
IAogY2xhc3MgQ1NTRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ZpbHRlcj4gY3JlYXRlKGZsb2F0IHNjYWxlRmFjdG9y
ID0gMSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3Q7CisgICAgc3RhdGljIFJl
ZjxDU1NGaWx0ZXI+IGNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9k
ZSwgZmxvYXQgc2NhbGVGYWN0b3IgPSAxKTsKIAogICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCYsIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7Ci0gICAgdm9pZCBjbGVhckludGVy
bWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB2b2lkIGFwcGx5KCk7CiAKICAgICBib29sIGhhc0ZpbHRl
clRoYXRNb3Zlc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzOyB9CiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0
eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW47IH0KIAorICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCYsIGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7CiAgICAgdm9pZCBkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBj
b25zdDsKLQotcHJpdmF0ZToKLSAgICBDU1NGaWx0ZXIoZmxvYXQgc2NhbGVGYWN0b3IpOwotCi0g
ICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVu
dCYsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlv
biYpOwotCi0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9hdFJlY3QmKTsKIAor
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKTsKICAgICBHcmFwaGljc0NvbnRl
eHQqIGlucHV0Q29udGV4dCgpOworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJy
aWRlOworICAgIAorICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7CisgICAgdm9p
ZCBhcHBseSgpOworCisgICAgSW1hZ2VCdWZmZXIqIG91dHB1dCgpOworICAgIEludFJlY3Qgb3V0
cHV0UmVjdCgpOwogCiAgICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgZmlsdGVyUmVjdCk7CiAgICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVk
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29u
c3Q7Ci0KICAgICBMYXlvdXRSZWN0IGNvbXB1dGVTb3VyY2VJbWFnZVJlY3RGb3JEaXJ0eVJlY3Qo
Y29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlS
ZWN0KTsKIAotICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbV9lZmZlY3RzOwotICAgIFJl
ZjxTb3VyY2VHcmFwaGljPiBtX3NvdXJjZUdyYXBoaWM7Ci0KLSAgICBtdXRhYmxlIEludE91dHNl
dHMgbV9vdXRzZXRzOworcHJpdmF0ZToKKyAgICBDU1NGaWx0ZXIoYm9vbCBoYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJp
dHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9yKTsKIAogICAgIGJvb2wgbV9ncmFwaGljc0J1ZmZl
ckF0dGFjaGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
IHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5
U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwotICAgIAorCisgICAgUmVmPFNvdXJjZUdyYXBoaWM+
IG1fc291cmNlR3JhcGhpYzsKKyAgICBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9mdW5j
dGlvbnM7CisKKyAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOworCiAgICAgc3RkOjp1
bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZThjMDM4M2NlOWUx
Li5iMzdjODRkNDMzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cApAQCAtMzIyNiw3ICszMjI2LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllcjo6c2V0
dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LAogCiAgICAgYXV0
byByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8u
cm9vdExheWVyLCBvZmZzZXRGcm9tUm9vdCwgeyB9KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCog
ZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGlu
YXRpb25Db250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xv
c2luZ0ludFJlY3QocGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVj
dChmaWx0ZXJSZXBhaW50UmVjdCkpOworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4
dCA9IHBhaW50aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QocmVuZGVyZXIoKSwgZW5jbG9z
aW5nSW50UmVjdChyb290UmVsYXRpdmVCb3VuZHMpLCBlbmNsb3NpbmdJbnRSZWN0KHBhaW50aW5n
SW5mby5wYWludERpcnR5UmVjdCksIGVuY2xvc2luZ0ludFJlY3QoZmlsdGVyUmVwYWludFJlY3Qp
LCBkZXN0aW5hdGlvbkNvbnRleHQpOwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5jcHAKaW5kZXggNGI2ZWNmZWVhNTBjLi45ZDZjY2FkYWQ5ZDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCkBAIC0xMTks
MTYgKzExOSwxMCBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6cmVtb3ZlUmVmZXJlbmNlRmls
dGVyQ2xpZW50cygpCiB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUpCiB7CiAgICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhlIGVudGlyZSBlZmZl
Y3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgotICAgIG1f
ZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoc2NhbGVGYWN0b3IpOwotICAgIG1fZmlsdGVyLT5z
ZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwotCi0gICAgLy8gSWYgdGhlIGZpbHRlciBm
YWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxsIHN0aWxsIGF0
dGVtcHQgdG8KLSAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21w
b3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAgICBpZiAoIW1fZmlsdGVyLT5i
dWlsZChyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6
OkZpbHRlclByb3BlcnR5KSkKLSAgICAgICAgbV9maWx0ZXIgPSBudWxscHRyOworICAgIG1fZmls
dGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUocmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgcmVuZGVy
aW5nTW9kZSwgc2NhbGVGYWN0b3IpOwogfQogCi1HcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVy
RmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNv
bnRleHQsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCkKK0dyYXBoaWNz
Q29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5
b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0LCBH
cmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKIHsKICAgICBpZiAoIW1fZmlsdGVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEzOSw2ICsxMzMsMTMgQEAgR3JhcGhpY3ND
b250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29u
dGV4dCYgZGVzdGluYXQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBib29sIGhhc1Vw
ZGF0ZWRCYWNraW5nU3RvcmUgPSBmaWx0ZXIudXBkYXRlQmFja2luZ1N0b3JlUmVjdChmaWx0ZXJT
b3VyY2VSZWN0KTsKKyAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSB8fCAhbV9maWx0ZXIt
Pmxhc3RFZmZlY3QoKSkgeworICAgICAgICAvLyBJZiB0aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxk
LCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwgYXR0ZW1wdCB0bworICAg
ICAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21wb3NpdGluZyks
IGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KKyAgICAgICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQo
cmVuZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0
ZXJQcm9wZXJ0eSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAg
ICAgaWYgKCFmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCiAgICAgICAgIG1fcmVw
YWludFJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgZWxzZSB7CkBAIC0xODQsOCArMTg1LDExIEBAIHZv
aWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQm
IGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICBMYXlvdXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91
dHB1dFJlY3QoKTsKICAgICBkZXN0UmVjdC5tb3ZlKG1fcGFpbnRPZmZzZXQueCgpLCBtX3BhaW50
T2Zmc2V0LnkoKSk7CiAKLSAgICBpZiAoYXV0byogb3V0cHV0QnVmZmVyID0gZmlsdGVyLm91dHB1
dCgpKQorICAgIGlmIChhdXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpIHsKKyAg
ICAgICAgZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgp
LndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9KTsKICAgICAgICAg
ZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqb3V0cHV0QnVmZmVyLCBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShm
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgfQogCiAgICAgZmlsdGVyLmNsZWFySW50ZXJtZWRp
YXRlUmVzdWx0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJG
aWx0ZXJzLmgKaW5kZXggM2RhMTQwYTVjODhmLi5hOWQyMjJmNWVlNzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKQEAgLTYzLDcgKzYzLDcgQEAg
cHVibGljOgogICAgIC8vIFBlciByZW5kZXIKICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBi
ZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29u
c3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0
LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKKyAgICBHcmFwaGljc0NvbnRl
eHQqIGJlZ2luRmlsdGVyRWZmZWN0KFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBm
aWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGxheWVyUmVwYWludFJlY3QsIEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0
KTsKICAgICB2b2lkIGFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRp
b25Db250ZXh0KTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNTM3ZTY1NWVlNWQ2
Li4xMGU3YjhmYTg2MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC04Miw0MCArODIsNiBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxl
bWVudCYgY2xpZW50LCBib29sCiAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihjbGllbnQs
IG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50T25s
eUludmFsaWRhdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYgZmlsdGVy
KSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMg
PSAyMDA7Ci0gICAgaWYgKGZpbHRlckVsZW1lbnQoKS5jb3VudENoaWxkTm9kZXMoKSA+IG1heENv
dW50Q2hpbGROb2RlcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFJlY3Qg
dGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLQotICAgIC8v
IEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgYXV0byBidWlsZGVyID0gbWFrZVVuaXF1
ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3VyY2VHcmFwaGljOjpjcmVhdGUoZmlsdGVyKSk7Ci0gICAg
YnVpbGRlci0+c2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRz
KCkpOwotICAgIGJ1aWxkZXItPnNldFRhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94
KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQoKSkpIHsKLSAgICAg
ICAgYXV0byBlZmZlY3QgPSBlbGVtZW50LmJ1aWxkKGJ1aWxkZXIuZ2V0KCksIGZpbHRlcik7Ci0g
ICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBidWlsZGVyLT5jbGVhckVmZmVjdHMo
KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIGJ1aWxk
ZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QuY29weVJlZigpLCBlbGVt
ZW50LnJlbmRlcmVyKCkpOwotICAgICAgICBlbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhl
ZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNldEVmZmVjdEJvdW5kYXJpZXMoU1ZHTGVu
Z3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSwgdGFy
Z2V0Qm91bmRpbmdCb3gpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQucmVuZGVyZXIoKSkgewotI2lm
IEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICAgICAgICAg
IGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlbGVtZW50LnJlbmRlcmVyKCktPnN0eWxl
KCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBv
bGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSA6
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0gICAgICAgICAgICBlZmZl
Y3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkp
OwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVsZW1lbnQucmVzdWx0
KCksIFdURk1vdmUoZWZmZWN0KSk7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyOwotfQotCiBi
b29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQs
IE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSkKIHsKICAgICBB
U1NFUlQoY29udGV4dCk7CkBAIC0xNTUsMTggKzEyMSwxMyBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZQogICAgIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhhYnNvbHV0ZURyYXdpbmdS
ZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSk7CiAKICAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRl
ciBvYmplY3QuCi0gICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVt
ZW50KCkucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1g7Ci0gICAgZmlsdGVyRGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVh
dGUoZmlsdGVyU2NhbGUsIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgZmlsdGVyRGF0YS0+Ym91bmRh
cmllcywgdGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSk7Ci0KLSAg
ICAvLyBDcmVhdGUgYWxsIHJlbGV2YW50IGZpbHRlciBwcmltaXRpdmVzLgotICAgIGZpbHRlckRh
dGEtPmJ1aWxkZXIgPSBidWlsZFByaW1pdGl2ZXMoKmZpbHRlckRhdGEtPmZpbHRlcik7Ci0gICAg
aWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVjdElucHV0cyA9IDEwMDsKLSAgICBG
aWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0
KCk7Ci0gICAgaWYgKCFsYXN0RWZmZWN0IHx8IGxhc3RFZmZlY3QtPnRvdGFsTnVtYmVyT2ZFZmZl
Y3RJbnB1dHMoKSA+IG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMpCisgICAgZmlsdGVyRGF0YS0+YnVp
bGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oKTsKKyAgICBmaWx0ZXJEYXRhLT5m
aWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50KCksICpmaWx0ZXJEYXRhLT5i
dWlsZGVyLCBmaWx0ZXJTY2FsZSwgYWJzb2x1dGVEcmF3aW5nUmVnaW9uLCBmaWx0ZXJEYXRhLT5i
b3VuZGFyaWVzLCB0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgaWYgKCFmaWx0ZXJEYXRhLT5maWx0
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhdXRvIGxhc3RFZmZlY3QgPSBm
aWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCk7CisgICAgQVNTRVJUKGxhc3RFZmZlY3Qp
OwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2VcbiIgPDwgKmZpbHRlckRhdGEtPmJ1aWxkZXItPmxh
c3RFZmZlY3QoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGEyZDM1ZjlhYzdhMy4uODFiMGMzYTJiZGFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFz
VGV4dC5jcHAKQEAgLTQzMywxMSArNDMzLDEyIEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRh
aW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImCiAg
ICAgICAgIC8vIENyZWF0aW5nIGEgcGxhY2Vob2xkZXIgZmlsdGVyIHdoaWNoIGlzIHBhc3NlZCB0
byB0aGUgYnVpbGRlci4KICAgICAgICAgRmxvYXRSZWN0IGR1bW15UmVjdDsKICAgICAgICAgRmxv
YXRTaXplIGR1bW15U2NhbGUoMSwgMSk7Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdG
aWx0ZXI6OmNyZWF0ZShkdW1teVNjYWxlLCBkdW1teVJlY3QsIGR1bW15UmVjdCwgZHVtbXlSZWN0
LCB0cnVlKTsKLSAgICAgICAgaWYgKGF1dG8gYnVpbGRlciA9IGZpbHRlci5idWlsZFByaW1pdGl2
ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7CisgICAgICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlx
dWU8U1ZHRmlsdGVyQnVpbGRlcj4oKTsKKyAgICAgICAgYXV0byBkdW1teUZpbHRlciA9IFNWR0Zp
bHRlcjo6Y3JlYXRlKGZpbHRlci5maWx0ZXJFbGVtZW50KCksICpidWlsZGVyLCBkdW1teVNjYWxl
LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgZHVtbXlSZWN0KTsKKyAgICAgICAgaWYgKGR1bW15Rmls
dGVyKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0
cyk7CiAKLSAgICAgICAgICAgIGlmIChGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBidWlsZGVy
LT5sYXN0RWZmZWN0KCkpCisgICAgICAgICAgICBpZiAoYXV0byBsYXN0RWZmZWN0ID0gZHVtbXlG
aWx0ZXItPmxhc3RFZmZlY3QoKSkKICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocmVzb3VyY2Uu
cmVzb3VyY2VUeXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlwZSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggNzMyZWIxODhh
NWJiLi40YTNkOTJiYmVjZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApAQCAtMjIsOCArMjIsNDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1l
bnQuaCIKKyNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYg
ZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXpl
JiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0KQorewor
ICAgIHJldHVybiBjcmVhdGUoZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyU2NhbGUsIHNv
dXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9uLCBmaWx0ZXJSZWdpb24sICZwcmV2aW91c0VmZmVj
dCk7Cit9CisKK1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVs
ZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZs
b2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3Vu
ZGluZ0JveCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZp
bHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdC
b3gsIG51bGxwdHIpOworfQorCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShT
VkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVy
LCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0Qm91bmRpbmdCb3gsIEZpbHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpCit7CisgICAg
Ym9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVu
aXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwor
CisgICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJlZigqbmV3IFNWR0ZpbHRlcihmaWx0ZXJTY2FsZSwg
c291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRp
dmVCb3VuZGluZ0JveE1vZGUpKTsKKworICAgIGlmICghcHJldmlvdXNFZmZlY3QpCisgICAgICAg
IGJ1aWxkZXIuc2V0dXBCdWlsdGluRWZmZWN0cyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoZmlsdGVy
KSk7CisgICAgZWxzZQorICAgICAgICBidWlsZGVyLnNldHVwQnVpbHRpbkVmZmVjdHMoeyAqcHJl
dmlvdXNFZmZlY3QgfSk7CisKKyAgICBidWlsZGVyLnNldFRhcmdldEJvdW5kaW5nQm94KHRhcmdl
dEJvdW5kaW5nQm94KTsKKyAgICBidWlsZGVyLnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1l
bnQucHJpbWl0aXZlVW5pdHMoKSk7CisKKyAgICBhdXRvIGxhc3RFZmZlY3QgPSBidWlsZGVyLmJ1
aWxkRmlsdGVyRWZmZWN0cyhmaWx0ZXIsIGZpbHRlckVsZW1lbnQpOworICAgIGlmICghbGFzdEVm
ZmVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7CisgICAgaWYgKGxhc3RFZmZlY3Qt
PnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSA+IG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZmlsdGVyLT5zZXRMYXN0RWZmZWN0KFdURk1v
dmUobGFzdEVmZmVjdCkpOworICAgIHJldHVybiBmaWx0ZXI7Cit9CisKIFNWR0ZpbHRlcjo6U1ZH
RmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgYm9vbCBlZmZlY3RCQm94TW9kZSkKICAgICA6IEZpbHRl
cihGaWx0ZXI6OlR5cGU6OlNWR0ZpbHRlciwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwg
ZmlsdGVyUmVnaW9uKQogICAgICwgbV90YXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0Jv
eCkKQEAgLTM5LDkgKzc4LDE0IEBAIEZsb2F0U2l6ZSBTVkdGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVy
U2NhbGUoRmxvYXRTaXplIHNpemUpIGNvbnN0CiAgICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlG
aWx0ZXJTY2FsZShzaXplKTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldEJvdW5kaW5nQm94LCBib29sIGVmZmVjdEJCb3hNb2RlKQorSW50T3V0c2V0cyBTVkdGaWx0
ZXI6Om91dHNldHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xhc3RFZmZlY3QtPm91dHNldHMo
KTsKK30KKwordm9pZCBTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0KCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTVkdGaWx0ZXIoZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVy
UmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgZWZmZWN0QkJveE1vZGUpKTsKKyAgICBtX2xhc3RF
ZmZlY3QtPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5o
CmluZGV4IDUwODExZTZmYjQ5YS4uMTY2MDEyZmY0ZWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMjcsMTkgKzI3LDMyIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKK2NsYXNzIFNW
R0ZpbHRlckVsZW1lbnQ7CisKIGNsYXNzIFNWR0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U1ZHRmlsdGVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVn
aW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4g
Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmxvYXRT
aXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0KTsK
KyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBT
VkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICBzdGF0aWMgUmVmUHRyPFNW
R0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29u
c3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KTsKIAogICAgIEZsb2F0
U2l6ZSBzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CiAKICAgICBG
bG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5k
aW5nQm94OyB9CiAKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCkgeyByZXR1
cm4gbV9sYXN0RWZmZWN0OyB9CisgICAgdm9pZCBzZXRMYXN0RWZmZWN0KFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+JiYgbGFzdEVmZmVjdCkgeyBtX2xhc3RFZmZlY3QgPSBXVEZNb3ZlKGxhc3RFZmZlY3Qp
OyB9CisKIHByaXZhdGU6CiAgICAgU1ZHRmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2Nh
bGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZl
Y3RCQm94TW9kZSk7CiAKKyAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGNsZWFyUmVzdWx0KCkgb3ZlcnJpZGU7CisKICAgICBGbG9hdFJlY3QgbV90YXJn
ZXRCb3VuZGluZ0JveDsKICAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7CisKKyAgICBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlckJ1aWxkZXIuY3BwCmluZGV4IDgwMDBmODRiNWNkNi4uMDM4OTdkMmE2MGJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmNwcApAQCAtMjAsMjEgKzIwLDc1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisj
aW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNp
bmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRl
ICJTb3VyY2VHcmFwaGljLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVO
dW1iZXJzLmg+CiAKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NS
R0IpCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAi
Q1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBzb3VyY2VHcmFwaGljKQordm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5F
ZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpCiB7Ci0gICAgbV9idWlsdGlu
RWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsK
LSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3Vy
Y2VBbHBoYTo6Y3JlYXRlKCpzb3VyY2VHcmFwaGljKSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5h
ZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljLnB0cigpKTsKKyAg
ICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VB
bHBoYTo6Y3JlYXRlKHNvdXJjZUdyYXBoaWMpKTsKICAgICBhZGRCdWlsdGluRWZmZWN0cygpOwog
fQogCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorc3Rh
dGljIENvbG9ySW50ZXJwb2xhdGlvbiBjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KFNWR0Vs
ZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRl
cmVyKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9y
SW50ZXJwb2xhdGlvbkZpbHRlcnMoKTsKKworICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHBy
b3BlcnR5IHZhbHVlIGZyb20gdGhlIGNvbXB1dGVkIHN0eWxlLgorICAgIGlmIChhdXRvIHZhbHVl
ID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3RvcigmZWxlbWVudCkucHJvcGVydHlWYWx1ZShDU1NQcm9w
ZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMpKSB7CisgICAgICAgIGlmIChpczxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpOworICAgIH0KKworICAgIHJldHVybiBDb2xvckludGVycG9sYXRp
b246OkF1dG87Cit9CisjZW5kaWYKKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVp
bGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RzKEZpbHRlciYgZmlsdGVyLCBTVkdGaWx0ZXJFbGVtZW50
JiBmaWx0ZXJFbGVtZW50KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENo
aWxkTm9kZXMgPSAyMDA7CisgICAgaWYgKGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkg
PiBtYXhDb3VudENoaWxkTm9kZXMpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50
IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihm
aWx0ZXJFbGVtZW50KSkgeworICAgICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKHRo
aXMsIGZpbHRlcik7CisgICAgICAgIGlmICghZWZmZWN0KSB7CisgICAgICAgICAgICBjbGVhckVm
ZmVjdHMoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAg
ICAgZWZmZWN0RWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKKyAg
ICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29s
dmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0
RWxlbWVudCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJnZXRCb3VuZGluZ0JveCkpOworCisjaWYg
RU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorICAgICAgICBpZiAo
Y29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChlZmZlY3RFbGVtZW50KSA9PSBDb2xvckludGVy
cG9sYXRpb246OkxpbmVhclJHQikKKyAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29s
b3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSk7CisjZW5kaWYKKyAg
ICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpCisgICAg
ICAgICAgICBhcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwg
cmVuZGVyZXIpOworCisgICAgICAgIGFkZChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBlZmZlY3Qp
OworICAgIH0KKworICAgIHJldHVybiBlZmZlY3Q7Cit9CisKIHZvaWQgU1ZHRmlsdGVyQnVpbGRl
cjo6YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Qp
CiB7CiAgICAgaWYgKGlkLmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCmluZGV4IGM3N2FlMDhiYWM2
NS4uMzc1YmRiMTUzMWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFNW
R0ZpbHRlckJ1aWxkZXIgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaFNldDxGaWx0ZXJFZmZl
Y3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CiAKLSAgICBTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIFNWR0ZpbHRlckJ1aWxkZXIoKSA9IGRlZmF1
bHQ7CiAKICAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYgcikg
eyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQogICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGlu
Z0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0KQEAgLTY1LDYgKzY1
LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7CiAgICAgdm9pZCBjbGVhclJl
c3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CiAKKyAgICB2b2lkIHNldHVwQnVpbHRpbkVm
ZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gYnVpbGRGaWx0ZXJFZmZlY3RzKEZpbHRlciYsIFNWR0ZpbHRlckVsZW1lbnQmKTsK
KwogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCiAgICAgewo=
</data>
<flag name="review"
          id="467362"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442946</attachid>
            <date>2021-10-31 18:01:03 -0700</date>
            <delta_ts>2021-11-10 12:39:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232469-20211031180102.patch</filename>
            <type>text/plain</type>
            <size>159016</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1MDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNThhYWY0ZTJkZGNjNTQy
YmJmNmYyYTdhZDhjZGU4YjZhODAyYWE3Mi4uYjZiNzU1OTQzYWJhYjVlMWY2NzEwMzliZmVhY2Vk
ZTAyYTI3OWUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMyBAQAorMjAyMS0xMC0zMCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1ha2UgQ1NTRmlsdGVyIGhvbGRzIGEgbGlzdCBvZiBGaWx0ZXJGdW5jdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQ2OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIHRo
ZSBDU1MgcmVmZXJlbmNlIGZpbHRlciBpcyBidWlsdCBhcyBhbiBTVkdGaWx0ZXIgYW5kIGl0Cisg
ICAgICAgIGlzIGtlcHQgYXMgYSBGaWx0ZXJGdW5jdGlvbiBpbiB0aGUgQ1NTRmlsdGVyIGZ1bmN0
aW9ucycgbGlzdC4gVGhlIEZpbHRlciAKKyAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBGaWx0
ZXJFZmZlY3RzIG9mIHRoZSByZWZlcmVuY2VkIGZpbHRlciB3aWxsIGJlIGFuCisgICAgICAgIFNW
R0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyBhIENTU0ZpbHRlci4gVGhpcyB3aWxsIGFsbG93IGhh
dmluZyBjb2xvcgorICAgICAgICBzcGFjaW5nIGZvciB0aGUgcmVmZXJlbmNlZCBmaWx0ZXJzIGRp
ZmZlcmVudCBmcm9tIHRoZSBjb2xvciBzcGFjaW5nIG9mCisgICAgICAgIENTU0ZpbHRlci4gCisK
KyAgICAgICAgQWxzbyB0aGlzIHBhdGNoIG1ha2VzIGEgc2luZ2xlIGZ1bmN0aW9uIGZvciBidWls
ZGluZyB0aGUgcHJpbWl0aXZlcyBvZgorICAgICAgICB0aGUgU1ZHRmlsdGVyIGluc3RlYWQgb2Yg
aGF2aW5nIHR3byBmdW5jdGlvbnMuCisKKyAgICAgICAgVG8gYWxsb3cgb3BlcmF0aW5nIHRocm91
Z2ggdGhlIFNWR0ZpbHRlciBhcyBhIEZpbHRlckZ1bmN0aW9uIG93bmVkIGJ5CisgICAgICAgIENT
U0ZpbHRlciwgdGhlIFNWR0ZpbHRlciB3aWxsIGhhdmUgYSBwb2ludGVyIHRvIGl0cyBsYXN0RWZm
ZWN0LgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJFZmZlY3Q6OnNldE1heEVmZmVjdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6
Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmls
dGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQmx1ckVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUNvbnRyYXN0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyb3BT
aGFkb3dFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JheVNjYWxlRWZmZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVJbnZlcnRFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3BhY2l0
eUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTYXR1cmF0ZUVmZmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVTZXBpYUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBMYXN0RWZmZWN0UHJvcGVydGll
cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmJ1aWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6Omxhc3RFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpkZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjpjbGVhckludGVybWVkaWF0ZVJlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGaWx0ZXI6Om91dHB1dFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZl
cmVuY2VGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRw
dXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRNYXhF
ZmZlY3RSZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1
dFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1
aWxkRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5G
aWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBs
eUZpbHRlckVmZmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5o
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWls
ZFByaW1pdGl2ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNl
Q29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpv
dXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y2xlYXJSZXN1bHQp
OgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisK
KzIwMjEtMTAtMjggIFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0dQVSBQcm9jZXNzXSBNYWtlIFNWR0ZpbHRlciBhbmQgQ1NTRmlsdGVyIHdvcmsgaW4gdGhl
IHNhbWUgY29vcmRpbmF0ZXMgc3lzdGVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzI0NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDdXJyZW50bHkgU1ZHRmlsdGVyIHNldHMgdGhlIGZvbGxvd2luZyBt
ZW1iZXJzIG9mIEZpbHRlcgorCisgICAgICAgIDEuIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRl
VHJhbnNmb3JtOiB0aGlzIGlzIHRoZSBzY2FsaW5nIHBhcnQgZnJvbSB0aGUKKyAgICAgICAgICAg
dHJhbnNmb3JtYXRpb24gZnJvbSB0aGUgdGFyZ2V0IGVsZW1lbnQgdG8gdGhlIG91dGVybW9zdCBj
b29yZGluYXRlIHN5c3RlbQorICAgICAgICAyLiBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9u
OiB0aGlzIGlzIHRoZSBjbGFtcGluZyBzY2FsZSBpZiB0aGUgc2l6ZQorICAgICAgICAgICBvZiB0
aGUgcmVzdWx0IEltYWdlQnVmZmVycyBleGNlZWRzIE1heENsYW1wZWRBcmVhCisKKyAgICAgICAg
QW5kIHRoZSBDU1NGaWx0ZXIgc2V0cyB0aGUgZm9sbG93aW5nIG1lbWJlciBvZiBGaWx0ZXI6CisK
KyAgICAgICAgMS4gZmxvYXQgbV9maWx0ZXJTY2FsZTogdGhpcyBpcyB0aGUgZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpCisKKyAgICAgICAgVGhlIGRpc2NyZXBhbmN5IGhhcHBlbnMgYWxz
byB3aGVuIGNyZWF0aW5nIHRoZSByZXN1bHQgSW1hZ2VCdWZmZXJzLiBGb3IgCisgICAgICAgIFNW
R0ZpbHRlciwgd2UgY3JlYXRlIHRoZW0gd2l0aCBzY2FsZUZhY3Rvcj0xLiBUaGlzIG1lYW5zIHRo
ZSBsb2dpY2FsU2l6ZQorICAgICAgICA9PSBiYWNrZW5kU2l6ZS4gQnV0IGZvciBDU1NGaWx0ZXIg
d2UgY3JlYXRlIHRoZW0gd2l0aCBzY2FsZUZhY3RvcgorICAgICAgICA9IG1fZmlsdGVyU2NhbGUu
IFRoaXMgbWVhbnMgdGhlIGxvZ2ljYWxTaXplICE9IGJhY2tlbmRTaXplIGluIHRoaXMgY2FzZS4K
KworICAgICAgICBXZSBuZWVkIHRvIHVuaWZ5IHRoZSBjb29yZGluYXRlcyBzeXN0ZW0gZm9yIGJv
dGggZmlsdGVycy4gV2UgbmVlZCBhbHNvIHRvCisgICAgICAgIHJlcGxhY2UgdGhlIHRocmVlIG1l
bWJlcnMgYnkgYSBzaW5nbGUgRmxvYXRTaXplIGNhbGxlZCAibV9maWx0ZXJTY2FsZSIuCisKKyAg
ICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1l
bnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6Y2Fs
Y3VsYXRlS2VybmVsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6OmRldGVy
bWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRU9mZnNldDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlcjo6ZmlsdGVyU2NhbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyOjpzZXRGaWx0ZXJTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNvdXJj
ZUltYWdlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNldEZpbHRlclJl
Z2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmZpbHRlclJlZ2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyOjpGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyOjpmaWx0ZXJS
ZXNvbHV0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlcjo6c2V0
RmlsdGVyUmVzb2x1dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6OmFi
c29sdXRlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
cjo6aXNTVkdGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
Ojppc0NTU0ZpbHRlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXI6
OnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6dW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6cHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNvcHlJbWFnZUJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y29udmVydFBpeGVsQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29udmVydEltYWdlQnVmZmVyVG9Db2xvclNwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6Q1NTRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZl
cmVuY2VGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjbGVhckludGVybWVkaWF0ZVJl
c3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0IGNvbnN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmJ1
aWxkRmlsdGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBs
eVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpw
b3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIp
OgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RkVJbWFnZTo6RkVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdl
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdl
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
cjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBz
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoKKworMjAyMS0xMC0yNyAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIEludHJv
ZHVjZSBGaWx0ZXJGdW5jdGlvbiBhbmQgbWFrZSBpdCB0aGUgYmFzZSBjbGFzcyBvZiBGaWx0ZXIg
YW5kIEZpbHRlckVmZmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMyNDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBhbGxvd3MgQ1NTRmlsdGVyIHRvIGhvbGQgYSBsaXN0IG9mIEZpbHRlckZ1
bmN0aW9ucy4gVGhlIEZpbHRlciBpbgorICAgICAgICB0aGlzIGNhc2Ugd2lsbCBhY3QgbGlrZSBh
IGNvbXBvc2l0ZSBwYXR0ZXJuIG9mIHRoZSBGaWx0ZXJFZmZlY3QuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvCisgICAgICAgIDEuIFJlbW92ZXMgdGhlIHZpcnR1YWwgZnVuY3Rpb24gZmlsdGVy
TmFtZSgpIGZyb20gYWxsIHRoZSBGaWx0ZXJFZmZlY3QKKyAgICAgICAgICAgY2xhc3Nlcy4gSXQg
cmVwbGFjZXMgaXQgd2l0aCBhIHN0YXRpYyBmdW5jdGlvbiBpbiBGaWx0ZXJGdW5jdGlvbi4KKyAg
ICAgICAgMi4gUmVtb3ZlcyB0aGUgdmlydHVhbCBmdW5jdGlvbiBmaWx0ZXJFZmZlY3RUeXBlKCkg
YW5kIHRoZSBmdW5jdGlvbgorICAgICAgICAgICBGaWx0ZXJFZmZlY3Q6OmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpIHNpbmNlIHRoZXkgY2FuIGJvdGggYmUgcmVwbGFjZWQKKyAgICAgICAgICAgYnkg
RmlsdGVyRnVuY3Rpb246OmZpbHRlclR5cGUoKS4KKyAgICAgICAgMy4gQWRkcyB0cmFpdCBtYWNy
b3MgZm9yIGFsbCBGaWx0ZXJFZmZlY3RzIGFuZCB0aGUgU1ZHRmlsdGVycyBjbGFzcy4KKworICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZm
ZWN0UmVuZGVyZXJDb3JlSW1hZ2UubW06CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUJsZW5kOjpGRUJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OkZFQ29sb3JNYXRyaXgpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oOgorICAgICAgICAoaXNUeXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJh
bnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6RkVDb21w
b25lbnRUcmFuc2Zlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgIChpc1R5cGUpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVDb21wb3NpdGU6OkZFQ29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9s
dmVNYXRyaXg6OkZFQ29udm9sdmVNYXRyaXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEaWZm
dXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RURpc3BsYWNlbWVudE1hcDo6RkVEaXNwbGFjZW1lbnRNYXApOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RURyb3BTaGFkb3c6OkZFRHJvcFNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZFRmxvb2Q6OkZFRmxvb2QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVGbG9vZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lh
bkJsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OkZFR2F1c3NpYW5C
bHVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
Lmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpGRU1lcmdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaDoKKyAgICAgICAgKCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpGRU1vcnBob2xvZ3kpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRU9mZnNldDo6RkVPZmZzZXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVTcGVjdWxhckxpZ2h0aW5nOjpGRVNwZWN1bGFyTGlnaHRpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUaWxlOjpGRVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpGRVR1cmJ1bGVuY2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlcjo6RmlsdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUZpbHRlclByaW1p
dGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUlt
YWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRl
VW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChpc1R5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpmaWx0ZXJFZmZlY3RUeXBlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6ZmlsdGVyRWZmZWN0Q2xhc3NUeXBl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
bjo6RmlsdGVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyTmFtZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OmZpbHRlck5hbWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6ZmlsdGVyVHlwZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6aXNDU1NGaWx0ZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRnVuY3Rpb246OmlzU1ZHRmlsdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckZ1bmN0aW9uOjppc0ZpbHRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJGdW5jdGlvbjo6aXNGaWx0ZXJFZmZlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRnVuY3Rpb246OnNvdXJjZUFscGhhTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJGdW5jdGlvbjo6c291cmNlR3JhcGhpY05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OmZpbHRlck5hbWUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQWxwaGE6
OlNvdXJjZUFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjplZmZlY3ROYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmg6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSk6CisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291
cmNlR3JhcGhpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjplZmZlY3RO
YW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhpYyk6CisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Q1NT
RmlsdGVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OkZFSW1hZ2UpOgorICAgICAgICAqIHN2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVy
cy9TVkdGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpTVkdGaWx0ZXIp
OgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgor
CiAyMDIxLTEwLTMwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWlncmF0ZSB0aGUgZmlyc3QgZmV3IGNhbGxlcnMgZnJvbSBJbWFnZUJ1ZmZlcjo6
dHJ1bmNhdGVkTG9naWNhbFNpemUoKSB0byBJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCA4ZGEyNGI3OGRhNTdkYzNiZDJjZWQxMTg0YzJlZGRmZjBiOGRlMjQ2Li5l
MDc1NDQwY2YyZGY1MTYwMjY4NjIwMDM5ZDVkNzQyOTA0M2ZiNTAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMjA2Miw2ICsyMDYyLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRnVuY3Rpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvUG9pbnRMaWdodFNvdXJjZS5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4NDBhNGUz
YjM3ZjEzMTdjODA3ZDA0MzVhMTY4NmFlNzEyZTMyMzUzLi40ZDEyOGZkM2ViNzFjMTkwZTViMGVk
MDU0NzRjMDYwZmExYTEwMWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDU2MSw2ICsxMDU2MSw4IEBACiAJCTcyNEVFNTRF
MURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFjdGl2aXR5U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3Rpdml0eVN0YXRlQ2hhbmdl
T2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI1MjM5NkIyNTRDQURD
MjAwRjVGQjE1IC8qIE5hdGl2ZUltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdGl2ZUlt
YWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2MkQ3NTYyNzJBMTc0MTAw
QzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbHRlckZ1bmN0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNjJENzU3MjcyQTE3NDEwMEM1NkEw
OSAvKiBGaWx0ZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWx0ZXJGdW5jdGlv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNjZGMDEzMjI0MUJDRTIwMDgz
Mzk3NSAvKiBTVkdQcm9wZXJ0eUFuaW1hdG9yRmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQ
cm9wZXJ0eUFuaW1hdG9yRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MjY2RjAxNDIyNDFCRkIyMDA4MzM5NzUgLyogU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvcklt
cGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvckltcGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTUyMjQxQzA5ODAwODMzOTc1IC8q
IFNWR1ByaW1pdGl2ZVByb3BlcnR5QW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJpbWl0
aXZlUHJvcGVydHlBbmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg2
NDQsMTEgKzE4NjQ2LDExIEBACiAJCTFBNTY5Q0M0MEQ3RTJCNjAwMDdDMzk4MyAvKiBicmlkZ2Ug
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTFBNTY5Q0Uy
MEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRG
QSAvKiBCcmlkZ2UuaCAqLywKIAkJCQkxQTcxRDU3OTBGMzM4MTkwMDBGOUNFNEUgLyogSWRlbnRp
ZmllclJlcC5jcHAgKi8sCiAJCQkJMUE3MUQ1N0EwRjMzODE5MDAwRjlDRTRFIC8qIElkZW50aWZp
ZXJSZXAuaCAqLywKIAkJCQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5RTggLyoganNjICovLAotCQkJ
CTFBNTY5Q0UyMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTFBNTY5Q0VGMEQ3RTJC
ODIwMDdDMzk4MyAvKiBydW50aW1lX2FycmF5LmNwcCAqLywKIAkJCQkxQTU2OUNGMDBEN0UyQjgy
MDA3QzM5ODMgLyogcnVudGltZV9hcnJheS5oICovLAogCQkJCTFBNTY5Q0YxMEQ3RTJCODIwMDdD
Mzk4MyAvKiBydW50aW1lX21ldGhvZC5jcHAgKi8sCkBAIC0yNTI5MSw2ICsyNTI5Myw4IEBACiAJ
CQkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5oICovLAogCQkJCTJD
ODU2NTM4MjRDMTBCMEIwMEEzNzY3MyAvKiBGaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgKi8sCiAJ
CQkJMkM4NTY1MzMyNEMwRjczQzAwQTM3NjczIC8qIEZpbHRlckVmZmVjdFJlbmRlcmVyLmggKi8s
CisJCQkJNzI2MkQ3NTcyNzJBMTc0MTAwQzU2QTA5IC8qIEZpbHRlckZ1bmN0aW9uLmNwcCAqLywK
KwkJCQk3MjYyRDc1NjI3MkExNzQxMDBDNTZBMDkgLyogRmlsdGVyRnVuY3Rpb24uaCAqLywKIAkJ
CQk0OUVDRUI2MzE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCAqLywKIAkJ
CQk0OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8sCiAJCQkJ
NDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGM2N2EzNWIwNzE1
YjcyMWVkODk5MmRlY2Q0OWZhOGQwYjgwNjQ3NzAuLjQ4YmMyZDE5MDFkNTdiNDYzZjUxZjZjZjk0
NjhhNDBjOThhMmVjNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJ
bWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHAKQEAgLTExNiwxOSArMTE2LDIxIEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VW
YWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAg
ICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5
NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVy
YXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
LCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghdGV4dHVyZSkKKyAgICBhdXRvIHJlbmRl
cmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworICAgIGF1dG8gc291cmNl
SW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIDEsIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICgh
c291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0gICAg
YXV0byBpbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsKLSAgICB0ZXh0dXJlLT5j
b250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICBhdXRvIHNvdXJjZUlt
YWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgc2l6ZSB9OworICAgIHNvdXJjZUltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgc291cmNlSW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3Nz
RmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUlt
YWdlKFdURk1vdmUodGV4dHVyZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0
KGltYWdlUmVjdCk7Ci0gICAgY3NzRmlsdGVyLT5zZXRGaWx0ZXJSZWdpb24oaW1hZ2VSZWN0KTsK
KyAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKG1fZmlsdGVyT3BlcmF0aW9u
cywgcmVuZGVyaW5nTW9kZSk7CisgICAgCisgICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZVJl
Y3Qoc291cmNlSW1hZ2VSZWN0KTsKICAgICBpZiAoIWNzc0ZpbHRlci0+YnVpbGQocmVuZGVyZXIs
IG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKSkKICAg
ICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisKKyAgICBjc3NGaWx0ZXItPnNldFNv
dXJjZUltYWdlKFdURk1vdmUoc291cmNlSW1hZ2UpKTsKICAgICBjc3NGaWx0ZXItPmFwcGx5KCk7
CiAKICAgICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXItPm91dHB1dCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZWltYWdlL0ZpbHRlckVmZmVjdFJl
bmRlcmVyQ29yZUltYWdlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29y
ZWltYWdlL0ZpbHRlckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlLm1tCmluZGV4IDk3ZTExMzdiMjlk
NzFjMmI1NDQxNTczMDY3MjQwMGI4MjQyOGIzNjEuLjk5YjE2OWEzODFlMTIyMTc3NjAyYTJhNzMy
MzFiNDBiMWI4ZWU5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmVpbWFnZS9GaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JlaW1hZ2UvRmlsdGVyRWZmZWN0UmVuZGVy
ZXJDb3JlSW1hZ2UubW0KQEAgLTcyLDExICs3MiwxMSBAQCBzdGF0aWMgYm9vbCBpc051bGxPckxp
bmVhckNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24oY29uc3QgRkVDb21wb25lbnRUcmFuc2ZlciYg
ZQogYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3VwcG9ydHNDb3JlSW1hZ2VS
ZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmZlY3QpCiB7CiAgICAgLy8gRklYTUU6IGNoYW5nZSBy
ZXR1cm4gdmFsdWUgdG8gdHJ1ZSBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkCi0gICAgc3dpdGNo
IChlZmZlY3QuZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKGVmZmVjdC5m
aWx0ZXJUeXBlKCkpIHsKICAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlR3JhcGhp
YzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAKLSAgICBjYXNlIEZpbHRlckVm
ZmVjdDo6VHlwZTo6Q29sb3JNYXRyaXg6IHsKKyAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6
RkVDb2xvck1hdHJpeDogewogICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+
KGVmZmVjdCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046CiAgICAgICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5DRVRPQUxQSEE6CkBA
IC04OCwyNiArODgsMTAgQEAgYm9vbCBGaWx0ZXJFZmZlY3RSZW5kZXJlckNvcmVJbWFnZTo6c3Vw
cG9ydHNDb3JlSW1hZ2VSZW5kZXJpbmcoRmlsdGVyRWZmZWN0JiBlZmYKICAgICAgICAgfQogICAg
IH0KIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFuc2ZlcjoKKyAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb21wb25lbnRUcmFuc2ZlcjoKICAgICAgICAg
cmV0dXJuIGlzTnVsbE9yTGluZWFyQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbihkb3duY2FzdDxG
RUNvbXBvbmVudFRyYW5zZmVyPihlZmZlY3QpKTsKIAotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpCbGVuZDoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9zaXRlOgotICAg
IGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpDb252b2x2ZU1hdHJpeDoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6RGlmZnVzZUxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpEaXNwbGFjZW1lbnRNYXA6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRyb3BT
aGFkb3c6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZsb29kOgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpHYXVzc2lhbkJsdXI6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkltYWdlOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpMaWdodGluZzoKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TWVyZ2U6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6Ok1vcnBob2xvZ3k6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6Ok9mZnNldDoKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U3BlY3VsYXJMaWdodGluZzoKLSAgICBjYXNlIEZp
bHRlckVmZmVjdDo6VHlwZTo6VGlsZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6VHVy
YnVsZW5jZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6U291cmNlQWxwaGE6CisgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xMzcsMzIgKzEyMSwxNCBAQCBSZXRhaW5QdHI8Q0lJbWFnZT4gRmlsdGVyRWZmZWN0UmVu
ZGVyZXJDb3JlSW1hZ2U6OmNvbm5lY3RDSUZpbHRlcnMoRmlsdGVyRWZmZWN0JgogICAgIGlmIChl
ZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5pc0VtcHR5KCkgfHwgSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKGVmZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIAotICAgIHN3aXRjaCAoZWZmZWN0LmZpbHRlckVmZmVjdENs
YXNzVHlwZSgpKSB7CisgICAgc3dpdGNoIChlZmZlY3QuZmlsdGVyVHlwZSgpKSB7CiAgICAgY2Fz
ZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUdyYXBoaWM6CiAgICAgICAgIHJldHVybiBpbWFn
ZUZvclNvdXJjZUdyYXBoaWMoZG93bmNhc3Q8U291cmNlR3JhcGhpYz4oZWZmZWN0KSk7Ci0gICAg
Y2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OgorICAgIGNhc2UgRmlsdGVyRWZm
ZWN0OjpUeXBlOjpGRUNvbG9yTWF0cml4OgogICAgICAgICByZXR1cm4gaW1hZ2VGb3JGRUNvbG9y
TWF0cml4KGRvd25jYXN0PEZFQ29sb3JNYXRyaXg+KGVmZmVjdCksIGlucHV0SW1hZ2VzKTsKLSAg
ICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6Q29tcG9uZW50VHJhbnNmZXI6CisgICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9uZW50VHJhbnNmZXI6CiAgICAgICAgIHJldHVybiBp
bWFnZUZvckZFQ29tcG9uZW50VHJhbnNmZXIoZG93bmNhc3Q8RkVDb21wb25lbnRUcmFuc2Zlcj4o
ZWZmZWN0KSwgaW5wdXRJbWFnZXMpOwogCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aG9zZSBm
aWx0ZXJzIHVzaW5nIENJRmlsdGVyIHNvIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxp
ZCBDSUltYWdlCi0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkJsZW5kOgotICAgIGNhc2Ug
RmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb3NpdGU6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OkNvbnZvbHZlTWF0cml4OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpEaWZmdXNl
TGlnaHRpbmc6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkRpc3BsYWNlbWVudE1hcDoK
LSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6RHJvcFNoYWRvdzoKLSAgICBjYXNlIEZpbHRl
ckVmZmVjdDo6VHlwZTo6Rmxvb2Q6Ci0gICAgY2FzZSBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkdhdXNz
aWFuQmx1cjoKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6SW1hZ2U6Ci0gICAgY2FzZSBG
aWx0ZXJFZmZlY3Q6OlR5cGU6OkxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBl
OjpNZXJnZToKLSAgICBjYXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6TW9ycGhvbG9neToKLSAgICBj
YXNlIEZpbHRlckVmZmVjdDo6VHlwZTo6T2Zmc2V0OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpU
eXBlOjpTcGVjdWxhckxpZ2h0aW5nOgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUaWxl
OgotICAgIGNhc2UgRmlsdGVyRWZmZWN0OjpUeXBlOjpUdXJidWxlbmNlOgotICAgIGNhc2UgRmls
dGVyRWZmZWN0OjpUeXBlOjpTb3VyY2VBbHBoYToKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CkBAIC0yNzYsNyArMjQyLDcgQEAgSW1hZ2VCdWZmZXIqIEZpbHRl
ckVmZmVjdFJlbmRlcmVyQ29yZUltYWdlOjpvdXRwdXQoKSBjb25zdAogdm9pZCBGaWx0ZXJFZmZl
Y3RSZW5kZXJlckNvcmVJbWFnZTo6cmVuZGVyVG9JbWFnZUJ1ZmZlcihGaWx0ZXJFZmZlY3QmIGxh
c3RFZmZlY3QpCiB7CiAgICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNs
YW1wZWRTaXplKGxhc3RFZmZlY3QuYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpOwotICAgIG1f
b3V0cHV0SW1hZ2VCdWZmZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRT
aXplLCBsYXN0RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCksIGxhc3RFZmZlY3QucmVzdWx0
Q29sb3JTcGFjZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIG1fb3V0cHV0SW1hZ2VCdWZm
ZXIgPSBJT1N1cmZhY2VJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCAxLCBsYXN0RWZm
ZWN0LnJlc3VsdENvbG9yU3BhY2UoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIW1f
b3V0cHV0SW1hZ2VCdWZmZXIpIHsKICAgICAgICAgY2xlYXJSZXN1bHQoKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjg4LDcgKzI1NCw2IEBAIHZvaWQgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1h
Z2U6OnJlbmRlclRvSW1hZ2VCdWZmZXIoRmlsdGVyRWZmZWN0JiBsYXN0RWZmZWN0CiBGbG9hdFJl
Y3QgRmlsdGVyRWZmZWN0UmVuZGVyZXJDb3JlSW1hZ2U6OmRlc3RSZWN0KGNvbnN0IEZpbHRlckVm
ZmVjdCYgbGFzdEVmZmVjdCkgY29uc3QKIHsKICAgICBJbnRTaXplIGRlc3RTaXplID0gbGFzdEVm
ZmVjdC5hYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKTsKLSAgICBkZXN0U2l6ZS5zY2FsZShsYXN0
RWZmZWN0LmZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RTaXplKTsKICAgICByZXR1cm4gZGVzdFJlY3Q7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmNwcAppbmRleCA1YWM3ZjQ5MGQ0Y2RhNTMzYTQxZjVjM2Q4NTQ1MzJjMThhZGNkYjY2
Li5iNGNhZWQ0NTU1NzJmYzg1Y2VkOGE0ZjIzMWM5ZjgzMDI3YmFmYjBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKQEAg
LTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRkVCbGVuZDo6RkVCbGVuZChG
aWx0ZXImIGZpbHRlciwgQmxlbmRNb2RlIG1vZGUpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVy
LCBUeXBlOjpCbGVuZCkKKyAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6
VHlwZTo6RkVCbGVuZCkKICAgICAsIG1fbW9kZShtb2RlKQogewogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAppbmRleCA3MGU4NDA3
YmY1YzIwMGQ0NTIxNmI4ZjljMDg1MTdiNTA3OWU3OTY2Li5iODRjOGRkMjgwNThmZjQ1ZDU0Y2Rm
OGE3M2EyYmE3MTcyNWZkZTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaApAQCAtMzYsOCArMzYsNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlKTsKIAogcHJpdmF0ZToKLSAgICBjb25zdCBjaGFy
KiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFQmxlbmQiOyB9Ci0KICAgICB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGxhdGZvcm1B
cHBseUdlbmVyaWModW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVuc2lnbmVkIGNoYXIq
IHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7CkBAIC01MywzICs1
MSw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFQmxlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRl
eCAxNjQyMmQ2ZGM1YjU3ZWM2Zjc0N2E0MjEwYzI4NTQzMzJiYTFkM2U1Li5hNzkxYmQ2ZDMxZmQ3
NTA0YTExMzI3ZjFkNDFhY2JkM2E0OWUxOTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTM2
LDcgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRkVDb2xvck1hdHJpeDo6RkVDb2xv
ck1hdHJpeChGaWx0ZXImIGZpbHRlciwgQ29sb3JNYXRyaXhUeXBlIHR5cGUsIFZlY3RvcjxmbG9h
dD4mJiB2YWx1ZXMpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpDb2xvck1hdHJp
eCkKKyAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb2xv
ck1hdHJpeCkKICAgICAsIG1fdHlwZSh0eXBlKQogICAgICwgbV92YWx1ZXMoV1RGTW92ZSh2YWx1
ZXMpKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguaAppbmRleCAyOWU0MWE4YWVkMWU0ZjBiNTM5NzAzYWM0ZGI1
NTI0ZWZhNGMxMjNmLi45OTJlNzVmOWU4MTUwYzYxN2EyZWYwN2M2NTkzNjE2MDA1ZTQwZjQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguaApAQCAtNTIsOCArNTIsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IEZFQ29sb3JNYXRyaXgoRmlsdGVyJiwgQ29sb3JNYXRyaXhUeXBlLCBWZWN0b3I8ZmxvYXQ+JiYp
OwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJG
RUNvbG9yTWF0cml4IjsgfQotCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVy
cmlkZTsKIAogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6
OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlOwpAQCAtOTMs
NyArOTEsNCBAQCBpbmxpbmUgdm9pZCBGRUNvbG9yTWF0cml4OjpjYWxjdWxhdGVIdWVSb3RhdGVD
b21wb25lbnRzKGZsb2F0KiBjb21wb25lbnRzLCBmbG9hdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RkVDb2xvck1hdHJp
eCkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBl
ZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5maWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNvbG9yTWF0cml4OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCi0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRUNvbG9y
TWF0cml4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggODQ3ZWE1OGY1Zjli
MDM4NjZkOWVhYzU3ZjEwY2NmNTc0MDJmOWU2My4uY2UwMGNjMTk4Mjk3OWI0MDk0MDRkNWNmZGNj
MDNhNmVkMzM1YzNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0zMyw5
ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRkVDb21wb25lbnRUcmFuc2Zlcjo6
RkVDb21wb25lbnRUcmFuc2ZlcihGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgcmVkRnVuY3Rpb24sCi0gICAgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1
ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBhbHBoYUZ1bmN0aW9u
KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Q29tcG9uZW50VHJhbnNmZXIpCitG
RUNvbXBvbmVudFRyYW5zZmVyOjpGRUNvbXBvbmVudFRyYW5zZmVyKEZpbHRlciYgZmlsdGVyLCBj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRGdW5jdGlvbiwgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jdGlvbiwgY29uc3QgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiYgYmx1ZUZ1bmN0aW9uLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
JiBhbHBoYUZ1bmN0aW9uKQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgRmlsdGVyRWZmZWN0
OjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVyKQogICAgICwgbV9yZWRGdW5jdGlvbihyZWRGdW5j
dGlvbikKICAgICAsIG1fZ3JlZW5GdW5jdGlvbihncmVlbkZ1bmN0aW9uKQogICAgICwgbV9ibHVl
RnVuY3Rpb24oYmx1ZUZ1bmN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAppbmRleCAy
YjU4NmRlZjdmYjQyYTM3YjJlMTIzZWRhODcxMTljNGViMzQ4YTUxLi4zYjlkMjYwOGIwOTc0ZDgy
NTVlY2FhNDJhODNjMmFmZGY2MzhhM2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaApA
QCAtNjUsOCArNjUsNiBAQCBwcml2YXRlOgogICAgIEZFQ29tcG9uZW50VHJhbnNmZXIoRmlsdGVy
JiwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgcmVkRnVuYywgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgZ3JlZW5GdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24mIGFscGhhRnVuYyk7CiAKLSAgICAgY29uc3QgY2hhciogZmlsdGVy
TmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRUNvbXBvbmVudFRyYW5zZmVyIjsgfQotCiAg
ICAgdXNpbmcgTG9va3VwVGFibGUgPSBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj47CiAKICAgICBz
dGF0aWMgdm9pZCBjb21wdXRlSWRlbnRpdHlUYWJsZShMb29rdXBUYWJsZSYsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mKTsKQEAgLTg5LDYgKzg3LDQgQEAgcHJpdmF0ZToKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OkZFQ29tcG9uZW50VHJhbnNmZXIpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkZpbHRlckVmZmVjdCYgZWZmZWN0KSB7IHJldHVybiBlZmZlY3QuZmlsdGVyRWZmZWN0
Q2xhc3NUeXBlKCkgPT0gV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpUeXBlOjpDb21wb25lbnRUcmFu
c2ZlcjsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19GSUxURVJfRUZGRUNUKEZFQ29tcG9uZW50VHJhbnNmZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmlu
ZGV4IDgzMzUzMDkwODFhMjZiYTJjMzFjM2JkYWM4ODg2NjllMjhlMzQ1NmQuLmUwYmVmMzA3NDA1
ZmYyMzNlOGEyYWZiNWNiZWM4ZDU0OGQyMjc4MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0zMyw3
ICszMyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFQ29tcG9zaXRlOjpGRUNvbXBvc2l0
ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSYgdHlwZSwgZmxv
YXQgazEsIGZsb2F0IGsyLCBmbG9hdCBrMywgZmxvYXQgazQpCi0gICAgOiBGaWx0ZXJFZmZlY3Qo
ZmlsdGVyLCBUeXBlOjpDb21wb3NpdGUpCisgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBGaWx0
ZXJFZmZlY3Q6OlR5cGU6OkZFQ29tcG9zaXRlKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBt
X2sxKGsxKQogICAgICwgbV9rMihrMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAppbmRleCA3ZDA4ZTFmNzEwN2I0Yjk2
OGM1OGUzYTM3YzMyYWUyZjc2YWVhMGMzLi4zOTIzN2ZlYjEyN2FkMWZmMWRlMjE4MzRiZDdiMmI3
MzdmYWFmMzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCkBAIC02NCw4ICs2NCw2IEBAIHByb3RlY3RlZDoKIHBy
aXZhdGU6CiAgICAgRkVDb21wb3NpdGUoRmlsdGVyJiwgY29uc3QgQ29tcG9zaXRlT3BlcmF0aW9u
VHlwZSYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIAotICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb21wb3NpdGUiOyB9Ci0KICAgICB2
b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKIApAQCAtOTAsMyArODgsNCBAQCBw
cml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRklMVEVSX0VGRkVDVChGRUNvbXBvc2l0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmlu
ZGV4IDNiYmU3ODM1OThkNzA5MzVhOTVjNmYxNTZlYzI5MzNjMGU5OWYwNTAuLmU4NmYxMjljNTRi
MWQ4ZmQ4ZWQ5Mjk0NmUyY2UxYjY5ODIzMDNiZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNw
cApAQCAtMzIsMTAgKzMyLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GRUNvbnZvbHZl
TWF0cml4OjpGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYgZmlsdGVyLCBjb25zdCBJbnRTaXplJiBr
ZXJuZWxTaXplLAotICAgIGZsb2F0IGRpdmlzb3IsIGZsb2F0IGJpYXMsIGNvbnN0IEludFBvaW50
JiB0YXJnZXRPZmZzZXQsIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSwKLSAgICBjb25zdCBGbG9hdFBv
aW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEsIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIGtlcm5lbE1hdHJpeCkKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6OkNv
bnZvbHZlTWF0cml4KQorRkVDb252b2x2ZU1hdHJpeDo6RkVDb252b2x2ZU1hdHJpeChGaWx0ZXIm
IGZpbHRlciwgY29uc3QgSW50U2l6ZSYga2VybmVsU2l6ZSwgZmxvYXQgZGl2aXNvciwgZmxvYXQg
YmlhcywgY29uc3QgSW50UG9pbnQmIHRhcmdldE9mZnNldCwgRWRnZU1vZGVUeXBlIGVkZ2VNb2Rl
LCBjb25zdCBGbG9hdFBvaW50JiBrZXJuZWxVbml0TGVuZ3RoLCBib29sIHByZXNlcnZlQWxwaGEs
IGNvbnN0IFZlY3RvcjxmbG9hdD4mIGtlcm5lbE1hdHJpeCkKKyAgICA6IEZpbHRlckVmZmVjdChm
aWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVDb252b2x2ZU1hdHJpeCkKICAgICAsIG1fa2Vy
bmVsU2l6ZShrZXJuZWxTaXplKQogICAgICwgbV9kaXZpc29yKGRpdmlzb3IpCiAgICAgLCBtX2Jp
YXMoYmlhcykKQEAgLTM4OCw4ICszODYsNyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFNpemUgcGFpbnRT
aXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZp
bHRlcigpLmZpbHRlclNjYWxlKCkpOwotCisgICAgCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5n
RGF0YSA9IHsKICAgICAgICAgKnNvdXJjZVBpeGVsQXJyYXksCiAgICAgICAgIGRlc3RpbmF0aW9u
UGl4ZWxBcnJheSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKaW5kZXggNjdkNGM2NTY3ZmNlNmIyN2Vl
NWFiODk1YTZlMWU1MDA1NGUxM2RiYS4uYzFhNWM1Yjg2NzU2MmYyNmFmODA3ZDQ1YzViNDAwOTZk
YjFjZmZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmgKQEAgLTgwLDggKzgwLDYgQEAgcHJpdmF0
ZToKICAgICBGRUNvbnZvbHZlTWF0cml4KEZpbHRlciYsIGNvbnN0IEludFNpemUmLCBmbG9hdCwg
ZmxvYXQsCiAgICAgICAgICAgICBjb25zdCBJbnRQb2ludCYsIEVkZ2VNb2RlVHlwZSwgY29uc3Qg
RmxvYXRQb2ludCYsIGJvb2wsIGNvbnN0IFZlY3RvcjxmbG9hdD4mKTsKIAotICAgIGNvbnN0IGNo
YXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVDb252b2x2ZU1hdHJpeCI7
IH0KLQogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNl
dEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0K
IAogICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CkBAIC0xMTUsMyAr
MTEzLDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVDb252b2x2ZU1hdHJpeCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaWZmdXNlTGlnaHRp
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1
c2VMaWdodGluZy5jcHAKaW5kZXggZWViMTcyOGRiMzVlOGFjMzAyYjI3ZTRjM2ZmMzRjYjg4NTVi
OWQwOS4uNDRlMmU2MjE0YTM3NmE0ZGExZWU3NzNjZGQ0MTc2NTc3NDA5YjFlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpZmZ1c2VMaWdo
dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURpZmZ1c2VMaWdodGluZy5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogRkVEaWZmdXNlTGlnaHRpbmc6OkZFRGlmZnVzZUxpZ2h0aW5nKEZpbHRlciYgZmlsdGVy
LCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmxvYXQgc3VyZmFjZVNjYWxlLCBmbG9hdCBk
aWZmdXNlQ29uc3RhbnQsIGZsb2F0IGtlcm5lbFVuaXRMZW5ndGhYLCBmbG9hdCBrZXJuZWxVbml0
TGVuZ3RoWSwgUmVmPExpZ2h0U291cmNlPiYmIGxpZ2h0U291cmNlKQotICAgIDogRkVMaWdodGlu
ZyhmaWx0ZXIsIERpZmZ1c2VMaWdodGluZywgbGlnaHRpbmdDb2xvciwgc3VyZmFjZVNjYWxlLCBk
aWZmdXNlQ29uc3RhbnQsIDAsIDAsIGtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3Ro
WSwgV1RGTW92ZShsaWdodFNvdXJjZSksIFR5cGU6OkRpZmZ1c2VMaWdodGluZykKKyAgICA6IEZF
TGlnaHRpbmcoZmlsdGVyLCBEaWZmdXNlTGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VT
Y2FsZSwgZGlmZnVzZUNvbnN0YW50LCAwLCAwLCBrZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5p
dExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRGlm
ZnVzZUxpZ2h0aW5nKQogewogfQogCkBAIC0zNyw4ICszNyw2IEBAIFJlZjxGRURpZmZ1c2VMaWdo
dGluZz4gRkVEaWZmdXNlTGlnaHRpbmc6OmNyZWF0ZShGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29s
b3ImIGxpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRkVEaWZmdXNlTGlnaHRpbmcoZmlsdGVy
LCBsaWdodGluZ0NvbG9yLCBzdXJmYWNlU2NhbGUsIGRpZmZ1c2VDb25zdGFudCwga2VybmVsVW5p
dExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291cmNlKSkpOwogfQog
Ci1GRURpZmZ1c2VMaWdodGluZzo6fkZFRGlmZnVzZUxpZ2h0aW5nKCkgPSBkZWZhdWx0OwotCiBi
b29sIEZFRGlmZnVzZUxpZ2h0aW5nOjpzZXREaWZmdXNlQ29uc3RhbnQoZmxvYXQgZGlmZnVzZUNv
bnN0YW50KQogewogICAgIGlmIChtX2RpZmZ1c2VDb25zdGFudCA9PSBkaWZmdXNlQ29uc3RhbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RGlmZnVzZUxpZ2h0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRGlmZnVzZUxpZ2h0aW5nLmgKaW5kZXggZGY2MTE0ZDBmYjhlMmYzZTExMjhiODQyNjE1
ZTQ3NTEzYTBkZGRjMy4uMjczN2Y2MGY0YzNmNGIzNjI0ZGY4MGViYjk5ODM3YmE2NTlmYTBiZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
ZmZ1c2VMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEaWZmdXNlTGlnaHRpbmcuaApAQCAtMzAsNyArMzAsNiBAQCBjbGFzcyBMaWdodFNv
dXJjZTsKIGNsYXNzIEZFRGlmZnVzZUxpZ2h0aW5nIDogcHVibGljIEZFTGlnaHRpbmcgewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8RkVEaWZmdXNlTGlnaHRpbmc+IGNyZWF0ZShGaWx0ZXImLCBj
b25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+
JiYpOwotICAgIHZpcnR1YWwgfkZFRGlmZnVzZUxpZ2h0aW5nKCk7CiAKICAgICBmbG9hdCBkaWZm
dXNlQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX2RpZmZ1c2VDb25zdGFudDsgfQogICAgIGJv
b2wgc2V0RGlmZnVzZUNvbnN0YW50KGZsb2F0KTsKQEAgLTQzLDMgKzQyLDQgQEAgcHJpdmF0ZToK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRF
Ul9FRkZFQ1QoRkVEaWZmdXNlTGlnaHRpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmlu
ZGV4IDA0NzQ5MzM5MmJiMjgxNDZkOGIxNjliYTBhN2MzMmIxNmM1NjNmYTEuLjI0YTQ2MjZjNmEx
YzgxZmM3NzRkYTYyMzc2YzEyOWJkODZkNzFlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
Y3BwCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFRGlzcGxhY2Vt
ZW50TWFwOjpGRURpc3BsYWNlbWVudE1hcChGaWx0ZXImIGZpbHRlciwgQ2hhbm5lbFNlbGVjdG9y
VHlwZSB4Q2hhbm5lbFNlbGVjdG9yLCBDaGFubmVsU2VsZWN0b3JUeXBlIHlDaGFubmVsU2VsZWN0
b3IsIGZsb2F0IHNjYWxlKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RGlzcGxh
Y2VtZW50TWFwKQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgRmlsdGVyRWZmZWN0OjpUeXBl
OjpGRURpc3BsYWNlbWVudE1hcCkKICAgICAsIG1feENoYW5uZWxTZWxlY3Rvcih4Q2hhbm5lbFNl
bGVjdG9yKQogICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKHlDaGFubmVsU2VsZWN0b3IpCiAgICAg
LCBtX3NjYWxlKHNjYWxlKQpAQCAtMTE5LDkgKzExOSw4IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRN
YXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBGaWx0ZXImIGZpbHRlciA9IHRoaXMt
PmZpbHRlcigpOwogICAgIEludFNpemUgcGFpbnRTaXplID0gYWJzb2x1dGVQYWludFJlY3QoKS5z
aXplKCk7Ci0gICAgcGFpbnRTaXplLnNjYWxlKGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAotICAg
IEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX3Nj
YWxlLCBtX3NjYWxlIH0pOworICAgIEZsb2F0U2l6ZSBzY2FsZSA9IGZpbHRlci5zY2FsZWRCeUZp
bHRlclNjYWxlKHsgbV9zY2FsZSwgbV9zY2FsZSB9KTsKICAgICBmbG9hdCBzY2FsZUZvckNvbG9y
WCA9IHNjYWxlLndpZHRoKCkgLyAyNTUuMDsKICAgICBmbG9hdCBzY2FsZUZvckNvbG9yWSA9IHNj
YWxlLmhlaWdodCgpIC8gMjU1LjA7CiAgICAgZmxvYXQgc2NhbGVkT2Zmc2V0WCA9IDAuNSAtIHNj
YWxlLndpZHRoKCkgKiAwLjU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKaW5kZXggZGQ3MzJhODgx
MDczZTI2NmJjODQ2YWZlNjgxOWU2NzUxNjIzYTNhMi4uYWE1YjZkNDZiYzQ2NGZjNmQwNjBkODZh
ZjZiYWUwZWYwN2VjOWU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaApAQCAtNTQsOCArNTQs
NiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZFRGlzcGxhY2VtZW50TWFwKEZpbHRlciYsIENo
YW5uZWxTZWxlY3RvclR5cGUgeENoYW5uZWxTZWxlY3RvciwgQ2hhbm5lbFNlbGVjdG9yVHlwZSB5
Q2hhbm5lbFNlbGVjdG9yLCBmbG9hdCk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIkZFRGlzcGxhY2VtZW50TWFwIjsgfQotCiAgICAgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSBvdmVycmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KQEAgLTcyLDMgKzcwLDQgQEAgcHJpdmF0ZToK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRF
Ul9FRkZFQ1QoRkVEaXNwbGFjZW1lbnRNYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggMzVmYmFi
NDFlODA5MjE2ZTRiMjI0MzUxMTg2MjNlMjhmZmQ2MWVmYS4uNTFhZDJmODVmMmMyN2E2ZWU1MDc0
ZjJjMTYxZWI5MTQ2OGM5ZWMyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMzIsNyArMzIsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogRkVEcm9wU2hhZG93OjpGRURyb3BTaGFkb3co
RmlsdGVyJiBmaWx0ZXIsIGZsb2F0IHN0ZFgsIGZsb2F0IHN0ZFksIGZsb2F0IGR4LCBmbG9hdCBk
eSwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBmbG9hdCBzaGFkb3dPcGFjaXR5KQotICAgIDog
RmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6RHJvcFNoYWRvdykKKyAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVEcm9wU2hhZG93KQogICAgICwgbV9zdGRY
KHN0ZFgpCiAgICAgLCBtX3N0ZFkoc3RkWSkKICAgICAsIG1fZHgoZHgpCkBAIC01Myw3ICs1Myw3
IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiAKICAg
ICBGbG9hdFJlY3QgYWJzb2x1dGVQYWludFJlY3QgPSBpbnB1dEVmZmVjdCgwKS0+YWJzb2x1dGVQ
YWludFJlY3QoKTsKICAgICBGbG9hdFJlY3QgYWJzb2x1dGVPZmZzZXRQYWludFJlY3QoYWJzb2x1
dGVQYWludFJlY3QpOwotICAgIGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNj
YWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOworICAgIGFic29sdXRlT2Zm
c2V0UGFpbnRSZWN0Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyU2NhbGUoeyBtX2R4LCBtX2R5
IH0pKTsKICAgICBhYnNvbHV0ZVBhaW50UmVjdC51bml0ZShhYnNvbHV0ZU9mZnNldFBhaW50UmVj
dCk7CiAKICAgICBJbnRTaXplIGtlcm5lbFNpemUgPSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRl
S2VybmVsU2l6ZShmaWx0ZXIsIHsgbV9zdGRYLCBtX3N0ZFkgfSk7CkBAIC04MCw5ICs4MCw4IEBA
IHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgRmlsdGVy
JiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICAKLSAgICBGbG9hdFNpemUgYmx1clJhZGl1
cyA9IDIgKiBmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHsgbV9zdGRYLCBtX3N0ZFkg
fSk7Ci0gICAgYmx1clJhZGl1cy5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgRmxv
YXRTaXplIG9mZnNldCA9IGZpbHRlci5zY2FsZWRCeUZpbHRlclJlc29sdXRpb24oeyBtX2R4LCBt
X2R5IH0pOworICAgIEZsb2F0U2l6ZSBibHVyUmFkaXVzID0gMiAqIGZpbHRlci5zY2FsZWRCeUZp
bHRlclNjYWxlKHsgbV9zdGRYLCBtX3N0ZFkgfSk7CisgICAgRmxvYXRTaXplIG9mZnNldCA9IGZp
bHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9keCwgbV9keSB9KTsKIAogICAgIEZsb2F0UmVj
dCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CiAgICAgRmxvYXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdp
bmdSZWdpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKaW5kZXggYjRlMGEyMDEyZmVkYjdiNzdiZjNlMDU3MzRl
ZTg4YTI5ZWZmMzg0Yy4uMmI2ZTY2MTNiNWFlMTc4NGE3MTAyZDU0NmRkYmJjYmQ2MTM4NThmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5oCkBAIC01MCw4ICs1MCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
RkVEcm9wU2hhZG93KEZpbHRlciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYsIGZsb2F0KTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiAiRkVEcm9wU2hhZG93IjsgfQotCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KSBvdmVycmlkZTsKQEAgLTcwLDMgKzY4LDQgQEAgcHJpdmF0ZToKICAgICAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFRHJv
cFNoYWRvdykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVGbG9vZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRmxvb2QuY3BwCmluZGV4IGI0MjM1NTM0YzM4YjFlYmEyMTFlZTg0ODYxNzk5MjM4MGYz
YjZiMDEuLmE3ODQyMTk2NzRlMWFlOTc5OTM0NDM4ZGE1NGExYTcxYzk4MDQ4NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNw
cApAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGRUZsb29kOjpGRUZs
b29kKEZpbHRlciYgZmlsdGVyLCBjb25zdCBDb2xvciYgZmxvb2RDb2xvciwgZmxvYXQgZmxvb2RP
cGFjaXR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6Rmxvb2QpCisgICAgOiBG
aWx0ZXJFZmZlY3QoZmlsdGVyLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OkZFRmxvb2QpCiAgICAgLCBt
X2Zsb29kQ29sb3IoZmxvb2RDb2xvcikKICAgICAsIG1fZmxvb2RPcGFjaXR5KGZsb29kT3BhY2l0
eSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmgKaW5kZXggYjcwNGRjOTY5YzZkNzU4OGJjZWIwYWQ4YjI0NjgyZmEwNjE3MzQ4ZS4u
MDhhNGU5NTkzNTg1ZDJmYTA3MjY4NGQ0NWQ1Zjg5MzBmM2FlZWYwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKQEAgLTQ3LDgg
KzQ3LDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGRUZsb29kKEZpbHRlciYsIGNvbnN0IENv
bG9yJiwgZmxvYXQpOwogCi0gICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuICJGRUZsb29kIjsgfQotCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVy
cmlkZSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVj
dCgpKSk7IH0KQEAgLTYxLDMgKzU5LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1QoRkVGbG9vZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggMGY2ZWU4N2Y5NWU3NTc1MTg2M2ZkMmU1ZjU0OWU3NGQ5
NzI5ZGIxZi4uOGU0NmM1MDI2ZmU2NWM3NTU5NjM3NzVkMGJlNjk5NzAyZDQ4ZjI1NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgaW5saW5lIHZvaWQga2VybmVsUG9z
aXRpb24oaW50IGJsdXJJdGVyYXRpb24sIHVuc2lnbmVkJiByYWRpdXMsIGludCYgZGVsdGFMZWZ0
LAogfQogCiBGRUdhdXNzaWFuQmx1cjo6RkVHYXVzc2lhbkJsdXIoRmlsdGVyJiBmaWx0ZXIsIGZs
b2F0IHgsIGZsb2F0IHksIEVkZ2VNb2RlVHlwZSBlZGdlTW9kZSkKLSAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIFR5cGU6OkdhdXNzaWFuQmx1cikKKyAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVHYXVzc2lhbkJsdXIpCiAgICAgLCBtX3N0ZFgoeCkKICAg
ICAsIG1fc3RkWSh5KQogICAgICwgbV9lZGdlTW9kZShlZGdlTW9kZSkKQEAgLTQ4NSw3ICs0ODUs
NyBAQCBJbnRTaXplIEZFR2F1c3NpYW5CbHVyOjpjYWxjdWxhdGVVbnNjYWxlZEtlcm5lbFNpemUo
RmxvYXRTaXplIHN0ZERldmlhdGlvbikKIAogSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3Vs
YXRlS2VybmVsU2l6ZShjb25zdCBGaWx0ZXImIGZpbHRlciwgRmxvYXRTaXplIHN0ZERldmlhdGlv
bikKIHsKLSAgICByZXR1cm4gY2FsY3VsYXRlVW5zY2FsZWRLZXJuZWxTaXplKGZpbHRlci5zY2Fs
ZWRCeUZpbHRlclJlc29sdXRpb24oc3RkRGV2aWF0aW9uKSk7CisgICAgcmV0dXJuIGNhbGN1bGF0
ZVVuc2NhbGVkS2VybmVsU2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZShzdGREZXZpYXRp
b24pKTsKIH0KIAogSW50U2l6ZSBGRUdhdXNzaWFuQmx1cjo6Y2FsY3VsYXRlT3V0c2V0U2l6ZShG
bG9hdFNpemUgc3RkRGV2aWF0aW9uKQpAQCAtNTM3LDEwICs1MzcsOCBAQCB2b2lkIEZFR2F1c3Np
YW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICByZXR1cm47CiAKICAgICBJ
bnRTaXplIGtlcm5lbFNpemUgPSBjYWxjdWxhdGVLZXJuZWxTaXplKGZpbHRlcigpLCB7IG1fc3Rk
WCwgbV9zdGRZIH0pOwotICAgIGtlcm5lbFNpemUuc2NhbGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUo
KSk7CiAKICAgICBJbnRTaXplIHBhaW50U2l6ZSA9IGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
OwotICAgIHBhaW50U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKICAgICBhdXRv
IHRtcEltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KHBhaW50U2l6ZS5hcmVhKCkgKiA0KTsKICAgICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCmluZGV4IDVmYjk3ZmZiMDcwYzJkYWViNmViMjgzYmVh
YWExNzY0N2NiYjJkM2UuLjYzMWQ4OTUxNjA3ZmY2ODU3N2YwOWY5YjdiMjU5NGM3NmFhYzhiODQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVH
YXVzc2lhbkJsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmgKQEAgLTQ3LDggKzQ3LDYgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBGRUdhdXNzaWFuQmx1cihGaWx0ZXImLCBmbG9hdCwgZmxvYXQsIEVkZ2VNb2RlVHlwZSk7
CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZF
R2F1c3NpYW5CbHVyIjsgfQotCiAgICAgc3RhdGljIGNvbnN0IGludCBzX21pbmltYWxSZWN0RGlt
ZW5zaW9uID0gMTAwICogMTAwOyAvLyBFbXBpcmljYWwgZGF0YSBsaW1pdCBmb3IgcGFyYWxsZWwg
am9icwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTgzLDMgKzgxLDQgQEAgcHJp
dmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0ZJTFRFUl9FRkZFQ1QoRkVHYXVzc2lhbkJsdXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmluZGV4IGIwYmI3MGExNGQx
NzQ5NTA2NzM3ZTg4ZTA1MTRlZTc5NjgyMGE0NDkuLjAxZjQ0MmI0MDAzM2ZmYTNmNzA3NTcwYTRh
MzM0MDMzYmU2YzJiODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0xMzAsOCArMTMwLDYgQEAgcHJvdGVjdGVk
OgogCiAgICAgRkVMaWdodGluZyhGaWx0ZXImLCBMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwg
ZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUmVmPExpZ2h0U291cmNl
PiYmLCBUeXBlKTsKIAotICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiRkVMaWdodGluZyI7IH0KLQogICAgIGJvb2wgZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiwgaW50LCBpbnQpOwogCiAgICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBj
b25zdCBMaWdodGluZ0RhdGEmLCBjb25zdCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50
IHgsIGludCB5LCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRTaXplIG5vcm1hbFZl
Y3Rvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTWVyZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmNwcAppbmRleCAwYTIwMDAxYjE3M2JkOGZkZjZiYmE2MzZjZDIzY2U0NzAyNmU3
YjNmLi42OTdkMmUxNWNjYmYxYWVmZWQwZTg5ZmRhMzRlNzAzMjkzMDdmNzNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAK
QEAgLTI5LDcgKzI5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRkVNZXJnZTo6RkVNZXJn
ZShGaWx0ZXImIGZpbHRlcikKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIFR5cGU6Ok1lcmdl
KQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1lcmdl
KQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTWVyZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVNZXJnZS5oCmluZGV4IDVjZmM1Y2I3OTgxOWNlY2VkNTA3M2U1N2IwMTk0ZWJjZjE4ZjI2
MDcuLjI3NTBjNGQ1MjRkM2EwZjVhZTk3NDFmNjQ4MDQ0OTQ1MzQ1ZDFhYjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5oCkBAIC0z
Myw4ICszMyw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVNZXJnZShGaWx0ZXImKTsKIAot
ICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVNZXJn
ZSI7IH0KLQogICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CiAKICAg
ICBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFt
JiwgUmVwcmVzZW50YXRpb25UeXBlKSBjb25zdCBvdmVycmlkZTsKQEAgLTQyLDMgKzQwLDQgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0ZJTFRFUl9FRkZFQ1QoRkVNZXJnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCA2YWUzZDk4
OTg2NjI2ZTA3YzA5NGM1ODZmMzE5OGM5YzU4ZGFlZDZiLi4xYjBkYWViMGRiNTZlODE4OTIwMThh
MzA3NTA2ZjM1NzcxZDY4YzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0zNiw3ICszNiw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFTW9ycGhvbG9neTo6RkVNb3JwaG9sb2d5KEZpbHRl
ciYgZmlsdGVyLCBNb3JwaG9sb2d5T3BlcmF0b3JUeXBlIHR5cGUsIGZsb2F0IHJhZGl1c1gsIGZs
b2F0IHJhZGl1c1kpCi0gICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpNb3JwaG9sb2d5
KQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRU1vcnBo
b2xvZ3kpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fcmFkaXVzWChyYWRpdXNYKQogICAg
ICwgbV9yYWRpdXNZKHJhZGl1c1kpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5
OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiB7CiAgICAgRmxvYXRSZWN0IHBhaW50UmVj
dCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgpOwogICAgIEZpbHRlciYgZmls
dGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0LmluZmxhdGUoZmlsdGVyLnNjYWxl
ZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKKyAgICBwYWlu
dFJlY3QuaW5mbGF0ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fcmFkaXVzWCwgbV9y
YWRpdXNZIH0pKTsKICAgICBpZiAoY2xpcHNUb0JvdW5kcygpKQogICAgICAgICBwYWludFJlY3Qu
aW50ZXJzZWN0KG1heEVmZmVjdFJlY3QoKSk7CiAgICAgZWxzZQpAQCAtMjYzLDcgKzI2Myw3IEBA
IHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGlmICghc291
cmNlUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcmFkaXVzID0gZmxvb3JlZElu
dFNpemUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fcmFkaXVzWCwgbV9yYWRp
dXNZIH0pKTsKKyAgICByYWRpdXMgPSBmbG9vcmVkSW50U2l6ZShmaWx0ZXIuc2NhbGVkQnlGaWx0
ZXJTY2FsZSh7IG1fcmFkaXVzWCwgbV9yYWRpdXNZIH0pKTsKICAgICBpbnQgcmFkaXVzWCA9IHN0
ZDo6bWluKGVmZmVjdERyYXdpbmdSZWN0LndpZHRoKCkgLSAxLCByYWRpdXMud2lkdGgoKSk7CiAg
ICAgaW50IHJhZGl1c1kgPSBzdGQ6Om1pbihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAtIDEs
IHJhZGl1cy5oZWlnaHQoKSk7CiAKQEAgLTI3MywxMCArMjczLDEwIEBAIHZvaWQgRkVNb3JwaG9s
b2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0Rh
dGE7CiAgICAgcGFpbnRpbmdEYXRhLnNyY1BpeGVsQXJyYXkgPSBzb3VyY2VQaXhlbEFycmF5Lmdl
dCgpOwogICAgIHBhaW50aW5nRGF0YS5kc3RQaXhlbEFycmF5ID0gJmRlc3RpbmF0aW9uUGl4ZWxB
cnJheTsKLSAgICBwYWludGluZ0RhdGEud2lkdGggPSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC53
aWR0aCgpICogZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIHBhaW50aW5nRGF0YS5oZWlnaHQg
PSBjZWlsZihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSAqIGZpbHRlci5maWx0ZXJTY2FsZSgp
KTsKLSAgICBwYWludGluZ0RhdGEucmFkaXVzWCA9IGNlaWxmKHJhZGl1c1ggKiBmaWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgcGFpbnRpbmdEYXRhLnJhZGl1c1kgPSBjZWlsZihyYWRpdXNZICog
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAgIHBhaW50aW5nRGF0YS53aWR0aCA9IGNlaWxmKGVm
ZmVjdERyYXdpbmdSZWN0LndpZHRoKCkpOworICAgIHBhaW50aW5nRGF0YS5oZWlnaHQgPSBjZWls
ZihlZmZlY3REcmF3aW5nUmVjdC5oZWlnaHQoKSk7CisgICAgcGFpbnRpbmdEYXRhLnJhZGl1c1gg
PSBjZWlsZihyYWRpdXNYKTsKKyAgICBwYWludGluZ0RhdGEucmFkaXVzWSA9IGNlaWxmKHJhZGl1
c1kpOwogCiAgICAgcGxhdGZvcm1BcHBseShwYWludGluZ0RhdGEpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgK
aW5kZXggNDhmYzM1NDExN2ZjMjdjY2ZjOGU5M2YxNGVkZjA3NWRlMzljNWExMS4uMWI2OWM2MzI2
Y2IwYjkyMzZhOTBkM2QxNDI1M2FlMGIzZWUxNDk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCkBAIC00OCw4
ICs0OCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRkVNb3JwaG9sb2d5KEZpbHRlciYsIE1v
cnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZsb2F0IHJhZGl1c1kpOwogCi0g
ICAgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJGRU1vcnBo
b2xvZ3kiOyB9Ci0KICAgICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwog
CiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwpAQCAtODYs
MyArODQsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChGRU1vcnBob2xvZ3kpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCmluZGV4
IDAyNzBkYjkyNDgxYTMzOTJkM2Q1YTFlOTE3YzJkNjVhYTQxNDBmNjkuLjAyOGNiYzYwYTQ0N2Yz
NjliY2NlZGEwMDVjOTE3NWIzMWIxOGQ4ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCkBAIC0zMSw3ICszMSw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFT2Zmc2V0OjpGRU9mZnNldChGaWx0ZXImIGZpbHRl
ciwgZmxvYXQgZHgsIGZsb2F0IGR5KQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6
T2Zmc2V0KQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgRmlsdGVyRWZmZWN0OjpUeXBlOjpG
RU9mZnNldCkKICAgICAsIG1fZHgoZHgpCiAgICAgLCBtX2R5KGR5KQogewpAQCAtNTYsNyArNTYs
NyBAQCB2b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiB7CiAgICAg
RmxvYXRSZWN0IHBhaW50UmVjdCA9IGlucHV0RWZmZWN0KDApLT5hYnNvbHV0ZVBhaW50UmVjdCgp
OwogICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVyKCk7Ci0gICAgcGFpbnRSZWN0Lm1v
dmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOworICAg
IHBhaW50UmVjdC5tb3ZlKGZpbHRlci5zY2FsZWRCeUZpbHRlclNjYWxlKHsgbV9keCwgbV9keSB9
KSk7CiAgICAgaWYgKGNsaXBzVG9Cb3VuZHMoKSkKICAgICAgICAgcGFpbnRSZWN0LmludGVyc2Vj
dChtYXhFZmZlY3RSZWN0KCkpOwogICAgIGVsc2UKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBGRU9m
ZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVn
aW9uID0gZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7
CiAgICAgRmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBkcmF3aW5nUmVnaW9u
Lm1vdmUoZmlsdGVyLnNjYWxlZEJ5RmlsdGVyUmVzb2x1dGlvbih7IG1fZHgsIG1fZHkgfSkpOwor
ICAgIGRyYXdpbmdSZWdpb24ubW92ZShmaWx0ZXIuc2NhbGVkQnlGaWx0ZXJTY2FsZSh7IG1fZHgs
IG1fZHkgfSkpOwogICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpp
bkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAppbmRleCA2NWFiZGE5MGE0N2IxYmZl
NzZhZTVjNzRhYWI1YWExNjdmYjFlNjllLi5kYjczMjI1NWVlNzhkMzM2ODA5ZGI0MjE3ODVhOTJm
ODQ1Yjk1MjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU9mZnNldC5oCkBAIC0zOSw4ICszOSw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgRkVPZmZzZXQoRmlsdGVyJiwgZmxvYXQgZHgsIGZsb2F0IGR5KTsKIAotICAgIGNvbnN0IGNo
YXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVPZmZzZXQiOyB9Ci0KICAg
ICB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpIG92ZXJyaWRlOwogICAgIAogICAgIHZvaWQg
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSBvdmVycmlkZTsKQEAgLTUzLDMgKzUxLDQgQEAg
cHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0ZJTFRFUl9FRkZFQ1QoRkVPZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5jcHAK
aW5kZXggNTk5NzIzMDY4ODZhNjNmYTQxMmI1YjcxNDFmNzRmOWM0ODdhMTQ0Yy4uNTJmNDUwODQw
OTBhZGNiMDRkN2U0NTEyMDU4ZWE3YTJhY2RhOGYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0
aW5nLmNwcApAQCAtMjgsNyArMjgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGRVNwZWN1
bGFyTGlnaHRpbmc6OkZFU3BlY3VsYXJMaWdodGluZyhGaWx0ZXImIGZpbHRlciwgY29uc3QgQ29s
b3ImIGxpZ2h0aW5nQ29sb3IsIGZsb2F0IHN1cmZhY2VTY2FsZSwgZmxvYXQgc3BlY3VsYXJDb25z
dGFudCwgZmxvYXQgc3BlY3VsYXJFeHBvbmVudCwgZmxvYXQga2VybmVsVW5pdExlbmd0aFgsIGZs
b2F0IGtlcm5lbFVuaXRMZW5ndGhZLCBSZWY8TGlnaHRTb3VyY2U+JiYgbGlnaHRTb3VyY2UpCi0g
ICAgOiBGRUxpZ2h0aW5nKGZpbHRlciwgU3BlY3VsYXJMaWdodGluZywgbGlnaHRpbmdDb2xvciwg
c3VyZmFjZVNjYWxlLCAwLCBzcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckV4cG9uZW50LCBrZXJu
ZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFksIFdURk1vdmUobGlnaHRTb3VyY2UpLCBU
eXBlOjpTcGVjdWxhckxpZ2h0aW5nKQorICAgIDogRkVMaWdodGluZyhmaWx0ZXIsIFNwZWN1bGFy
TGlnaHRpbmcsIGxpZ2h0aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgMCwgc3BlY3VsYXJDb25zdGFu
dCwgc3BlY3VsYXJFeHBvbmVudCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZ
LCBXVEZNb3ZlKGxpZ2h0U291cmNlKSwgRmlsdGVyRWZmZWN0OjpUeXBlOjpGRVNwZWN1bGFyTGln
aHRpbmcpCiB7CiB9CiAKQEAgLTM3LDggKzM3LDYgQEAgUmVmPEZFU3BlY3VsYXJMaWdodGluZz4g
RkVTcGVjdWxhckxpZ2h0aW5nOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbG9yJgog
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZFU3BlY3VsYXJMaWdodGluZyhmaWx0ZXIsIGxpZ2h0
aW5nQ29sb3IsIHN1cmZhY2VTY2FsZSwgc3BlY3VsYXJDb25zdGFudCwgc3BlY3VsYXJFeHBvbmVu
dCwga2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhZLCBXVEZNb3ZlKGxpZ2h0U291
cmNlKSkpOwogfQogCi1GRVNwZWN1bGFyTGlnaHRpbmc6On5GRVNwZWN1bGFyTGlnaHRpbmcoKSA9
IGRlZmF1bHQ7Ci0KIGJvb2wgRkVTcGVjdWxhckxpZ2h0aW5nOjpzZXRTcGVjdWxhckNvbnN0YW50
KGZsb2F0IHNwZWN1bGFyQ29uc3RhbnQpCiB7CiAgICAgaWYgKG1fc3BlY3VsYXJDb25zdGFudCA9
PSBzcGVjdWxhckNvbnN0YW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVTcGVjdWxhckxpZ2h0aW5nLmgKaW5kZXggZTk5OGE3
NjA1ZDFlNDczNWQ5ZjQ5Nzk4ZDM5ODE4YmYzYjI0OTU4YS4uOWJiYmE4YThmMWZjNmYwMTA0NTc2
MGRhODBkMzVmOGNkMjc3Y2UxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVNwZWN1bGFyTGlnaHRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFU3BlY3VsYXJMaWdodGluZy5oCkBAIC0yOCw3
ICsyOCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZFU3BlY3VsYXJMaWdodGluZyA6
IHB1YmxpYyBGRUxpZ2h0aW5nIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEZFU3BlY3VsYXJM
aWdodGluZz4gY3JlYXRlKEZpbHRlciYsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBSZWY8TGlnaHRTb3VyY2U+JiYpOwotICAgIHZpcnR1YWwgfkZFU3Bl
Y3VsYXJMaWdodGluZygpOwogCiAgICAgZmxvYXQgc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3BlY3VsYXJDb25zdGFudDsgfQogICAgIGJvb2wgc2V0U3BlY3VsYXJDb25zdGFu
dChmbG9hdCk7CkBAIC00NCwzICs0Myw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFU3BlY3VsYXJM
aWdodGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAppbmRleCAzNWM1MWNiYjIyOWRlZTk2NDJkYzFlN2RjYTBjNWRiMmZjYWMy
MGFkLi4zZTUwZmI2YzAwZWNmMzgzOTg1YzYyOTc5ODRmNmU5Nzg1Y2U0MjRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCkBA
IC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFVGlsZTo6RkVUaWxlKEZp
bHRlciYgZmlsdGVyKQotICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6VGlsZSkKKyAg
ICA6IEZpbHRlckVmZmVjdChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVUaWxlKQogewog
fQogCkBAIC01OCwxMCArNTgsMTAgQEAgdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaW4tPm1heEVmZmVjdFJlY3QoKTsKICAgICBG
bG9hdFBvaW50IGluTWF4RWZmZWN0TG9jYXRpb24gPSB0aWxlUmVjdC5sb2NhdGlvbigpOwogICAg
IEZsb2F0UG9pbnQgbWF4RWZmZWN0TG9jYXRpb24gPSBtYXhFZmZlY3RSZWN0KCkubG9jYXRpb24o
KTsKLSAgICBpZiAoaW4tPmZpbHRlckVmZmVjdFR5cGUoKSA9PSBGaWx0ZXJFZmZlY3RUeXBlU291
cmNlSW5wdXQpIHsKKyAgICBpZiAoaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OlNvdXJjZUdyYXBoaWMgfHwgaW4tPmZpbHRlclR5cGUoKSA9PSBGaWx0ZXJFZmZlY3Q6OlR5
cGU6OlNvdXJjZUFscGhhKSB7CiAgICAgICAgIEZpbHRlciYgZmlsdGVyID0gdGhpcy0+ZmlsdGVy
KCk7CiAgICAgICAgIHRpbGVSZWN0ID0gZmlsdGVyLmZpbHRlclJlZ2lvbigpOwotICAgICAgICB0
aWxlUmVjdC5zY2FsZShmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5m
aWx0ZXJSZXNvbHV0aW9uKCkuaGVpZ2h0KCkpOworICAgICAgICB0aWxlUmVjdC5zY2FsZShmaWx0
ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgfQogCiAgICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmgKaW5k
ZXggNDliZDk5ZjA5NDQ3ZGFlMWNmMDlhZjEyMzU4YzZkZTg0MDY4NzcxNC4uNWM0OGVmNDUxNTBl
YzJjZjg3OWZkZGI3ZTQ4ZTllOWU4ZDUwMjQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCkBAIC0zMywxMCArMzMsNiBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIEZFVGlsZShGaWx0ZXImKTsKIAotICAgIGNvbnN0IGNoYXIqIGZp
bHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRkVUaWxlIjsgfQotCi0gICAgRmlsdGVy
RWZmZWN0VHlwZSBmaWx0ZXJFZmZlY3RUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmls
dGVyRWZmZWN0VHlwZVRpbGU7IH0KLQogICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJp
ZGUgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3Qo
KSkpOyB9CkBAIC00NiwzICs0Miw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFVGlsZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmNwcAppbmRleCA3NzRlNjgyZTNiNDg1OWJiNmUyMDZhMWQyYmZhZWIwY2VhOTE5ZjBi
Li5hMmU3YWVjMzRkNmE5NTU0NGEwNzA2OTdkYTU3OGUxODM1NjBkYjVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kUSA9IDEyNzc3
MzsgLy8gbSAvIGEKIHN0YXRpYyBjb25zdCBpbnQgc19yYW5kUiA9IDI4MzY7IC8vIG0gJSBhCiAK
IEZFVHVyYnVsZW5jZTo6RkVUdXJidWxlbmNlKEZpbHRlciYgZmlsdGVyLCBUdXJidWxlbmNlVHlw
ZSB0eXBlLCBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIGludCBu
dW1PY3RhdmVzLCBmbG9hdCBzZWVkLCBib29sIHN0aXRjaFRpbGVzKQotICAgIDogRmlsdGVyRWZm
ZWN0KGZpbHRlciwgVHlwZTo6VHVyYnVsZW5jZSkKKyAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IEZpbHRlckVmZmVjdDo6VHlwZTo6RkVUdXJidWxlbmNlKQogICAgICwgbV90eXBlKHR5cGUpCiAg
ICAgLCBtX2Jhc2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKQogICAgICwgbV9iYXNlRnJlcXVl
bmN5WShiYXNlRnJlcXVlbmN5WSkKQEAgLTM3MSwxNyArMzcxLDE2IEBAIHZvaWQgRkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbEFycmF5LCBjb25zdCBQYWlu
dGluZ0RhdGEmCiAgICAgQVNTRVJUKGVuZFkgPiBzdGFydFkpOwogCiAgICAgSW50UmVjdCBmaWx0
ZXJSZWdpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpOwotICAgIGZpbHRlclJlZ2lvbi5zY2FsZShm
aWx0ZXIoKS5maWx0ZXJTY2FsZSgpKTsKICAgICBGbG9hdFBvaW50IHBvaW50KDAsIGZpbHRlclJl
Z2lvbi55KCkgKyBzdGFydFkpOwogICAgIGludCBpbmRleE9mUGl4ZWxDaGFubmVsID0gc3RhcnRZ
ICogKGZpbHRlclJlZ2lvbi53aWR0aCgpIDw8IDIpOwotICAgIEFmZmluZVRyYW5zZm9ybSBpbnZl
cnNlVHJhbnNmcm9tID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKS5pbnZlcnNlKCkudmFs
dWVfb3IoQWZmaW5lVHJhbnNmb3JtKCkpOworICAgIEZsb2F0U2l6ZSBpbnZlcnNlU2NhbGUgPSB7
IDEgLyBmaWx0ZXIoKS5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIoKS5maWx0ZXJT
Y2FsZSgpLmhlaWdodCgpIH07CiAKICAgICBmb3IgKGludCB5ID0gc3RhcnRZOyB5IDwgZW5kWTsg
Kyt5KSB7CiAgICAgICAgIHBvaW50LnNldFkocG9pbnQueSgpICsgMSk7CiAgICAgICAgIHBvaW50
LnNldFgoZmlsdGVyUmVnaW9uLngoKSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZmls
dGVyUmVnaW9uLndpZHRoKCk7ICsreCkgewogICAgICAgICAgICAgcG9pbnQuc2V0WChwb2ludC54
KCkgKyAxKTsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9IGludmVyc2VUcmFu
c2Zyb20ubWFwUG9pbnQocG9pbnQpOworICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50
ID0gcG9pbnQuc2NhbGVkKGludmVyc2VTY2FsZS53aWR0aCgpLCBpbnZlcnNlU2NhbGUuaGVpZ2h0
KCkpOwogICAgICAgICAgICAgYXV0byB2YWx1ZXMgPSBjYWxjdWxhdGVUdXJidWxlbmNlVmFsdWVG
b3JQb2ludChwYWludGluZ0RhdGEsIHN0aXRjaERhdGEsIGxvY2FsUG9pbnQpOwogICAgICAgICAg
ICAgcGl4ZWxBcnJheS5zZXRSYW5nZSh2YWx1ZXMuY29tcG9uZW50cy5kYXRhKCksIDQsIGluZGV4
T2ZQaXhlbENoYW5uZWwpOwogICAgICAgICAgICAgaW5kZXhPZlBpeGVsQ2hhbm5lbCArPSA0OwpA
QCAtNDAzLDcgKzQwMiw2IEBAIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQogICAgIGF1dG8mIGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IGRlc3RpbmF0aW9uUGl4ZWxC
dWZmZXItPmRhdGEoKTsKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShhYnNvbHV0ZVBhaW50UmVj
dCgpLnNpemUoKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShmaWx0ZXIoKS5maWx0ZXJTY2FsZSgp
KTsKIAogICAgIGlmIChyZXN1bHRTaXplLmlzRW1wdHkoKSkgewogICAgICAgICBkZXN0aW5hdGlv
blBpeGVsQXJyYXkuemVyb0ZpbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCmluZGV4IDRkNTM2YjM3YTgwYWFk
ZjkxMWViZmNlODk3NzRjZDNjY2VjYjVjZmIuLjU4MWZiZWYwYTdkNmMxYjQzYjdhMThlMDc4ZmYy
OTczY2UxMGNhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtMTA4LDggKzEwOCw2IEBAIHByaXZhdGU6
CiAKICAgICBGRVR1cmJ1bGVuY2UoRmlsdGVyJiwgVHVyYnVsZW5jZVR5cGUsIGZsb2F0LCBmbG9h
dCwgaW50LCBmbG9hdCwgYm9vbCk7CiAKLSAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gIkZFVHVyYnVsZW5jZSI7IH0KLQogICAgIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpIG92ZXJyaWRlIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdCht
YXhFZmZlY3RSZWN0KCkpKTsgfQogICAgIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUpIGNvbnN0IG92ZXJy
aWRlOwpAQCAtMTMyLDMgKzEzMCw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFVHVyYnVsZW5jZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5o
CmluZGV4IGEyZDk5NzkzYjBkYjIyNThiYzQ3NmRkY2MyOWMwY2UyNjExMGJjMWYuLjk3MWQwOTdl
YWRiYjllZTkyMDQxYTc1NzQ2YzA3ZmRkMDgxZjEwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtMSw2ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMSw1OCArMjIsNTYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZpbHRlckVmZmVjdDsKIAotY2xhc3MgRmlsdGVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8RmlsdGVyPiB7CitjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRnVu
Y3Rpb24gewogcHVibGljOgotICAgIEZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFic29s
dXRlVHJhbnNmb3JtLCBmbG9hdCBmaWx0ZXJTY2FsZSA9IDEpCi0gICAgICAgIDogbV9hYnNvbHV0
ZVRyYW5zZm9ybShhYnNvbHV0ZVRyYW5zZm9ybSkKLSAgICAgICAgLCBtX2ZpbHRlclNjYWxlKGZp
bHRlclNjYWxlKQotICAgIHsgfQotICAgIHZpcnR1YWwgfkZpbHRlcigpID0gZGVmYXVsdDsKLQot
ICAgIHZvaWQgc2V0U291cmNlSW1hZ2UoUmVmUHRyPEltYWdlQnVmZmVyPiYmIHNvdXJjZUltYWdl
KSB7IG1fc291cmNlSW1hZ2UgPSBXVEZNb3ZlKHNvdXJjZUltYWdlKTsgfQotICAgIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSgpIHsgcmV0dXJuIG1fc291cmNlSW1hZ2UuZ2V0KCk7IH0KKyAgICBG
bG9hdFNpemUgZmlsdGVyU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclNjYWxlOyB9Cisg
ICAgdm9pZCBzZXRGaWx0ZXJTY2FsZShjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlKSB7IG1f
ZmlsdGVyU2NhbGUgPSBmaWx0ZXJTY2FsZTsgfQogCi0gICAgRmxvYXRTaXplIGZpbHRlclJlc29s
dXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlc29sdXRpb247IH0KLSAgICB2b2lkIHNl
dEZpbHRlclJlc29sdXRpb24oY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJSZXNvbHV0aW9uKSB7IG1f
ZmlsdGVyUmVzb2x1dGlvbiA9IGZpbHRlclJlc29sdXRpb247IH0KKyAgICBGbG9hdFJlY3Qgc291
cmNlSW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJbWFnZVJlY3Q7IH0KKyAgICB2
b2lkIHNldEZpbHRlclJlZ2lvbihjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbikgeyBtX2Zp
bHRlclJlZ2lvbiA9IGZpbHRlclJlZ2lvbjsgfQorICAgIAorICAgIEZsb2F0UmVjdCBmaWx0ZXJS
ZWdpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclJlZ2lvbjsgfQorICAgIHZvaWQgc2V0U291
cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KSB7IG1fc291cmNl
SW1hZ2VSZWN0ID0gc291cmNlSW1hZ2VSZWN0OyB9CiAKLSAgICBmbG9hdCBmaWx0ZXJTY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyU2NhbGU7IH0KLSAgICB2b2lkIHNldEZpbHRlclNjYWxl
KGZsb2F0IHNjYWxlKSB7IG1fZmlsdGVyU2NhbGUgPSBzY2FsZTsgfQorICAgIHZpcnR1YWwgRmxv
YXRTaXplIHNjYWxlZEJ5RmlsdGVyU2NhbGUoRmxvYXRTaXplIHNpemUpIGNvbnN0IHsgcmV0dXJu
IHNpemUgKiBtX2ZpbHRlclNjYWxlOyB9CiAKLSAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFi
c29sdXRlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9hYnNvbHV0ZVRyYW5zZm9ybTsgfQor
ICAgIHZvaWQgc2V0U291cmNlSW1hZ2UoUmVmUHRyPEltYWdlQnVmZmVyPiYmIHNvdXJjZUltYWdl
KSB7IG1fc291cmNlSW1hZ2UgPSBXVEZNb3ZlKHNvdXJjZUltYWdlKTsgfQorICAgIEltYWdlQnVm
ZmVyKiBzb3VyY2VJbWFnZSgpIHsgcmV0dXJuIG1fc291cmNlSW1hZ2UuZ2V0KCk7IH0KIAogICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5n
TW9kZTsgfQogICAgIHZvaWQgc2V0UmVuZGVyaW5nTW9kZShSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpIHsgbV9yZW5kZXJpbmdNb2RlID0gcmVuZGVyaW5nTW9kZTsgfQogCi0gICAgdmlydHVh
bCBib29sIGlzU1ZHRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVh
bCBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKEZsb2F0U2l6ZSBzaXplKSBjb25z
dCB7IHJldHVybiBzaXplICogbV9maWx0ZXJSZXNvbHV0aW9uOyB9Ci0gICAgCi0gICAgdmlydHVh
bCBGbG9hdFJlY3Qgc291cmNlSW1hZ2VSZWN0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgRmxv
YXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBm
aWx0ZXJSZWdpb25JblVzZXJTcGFjZSgpIGNvbnN0ID0gMDsKLQogcHJvdGVjdGVkOgotICAgIGV4
cGxpY2l0IEZpbHRlcihjb25zdCBGbG9hdFNpemUmIGZpbHRlclJlc29sdXRpb24pCi0gICAgICAg
IDogbV9maWx0ZXJSZXNvbHV0aW9uKGZpbHRlclJlc29sdXRpb24pCisgICAgRmlsdGVyKEZpbHRl
cjo6VHlwZSBmaWx0ZXJUeXBlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlKQorICAgICAg
ICA6IEZpbHRlckZ1bmN0aW9uKGZpbHRlclR5cGUpCisgICAgICAgICwgbV9maWx0ZXJTY2FsZShm
aWx0ZXJTY2FsZSkKKyAgICB7CisgICAgfQorCisgICAgRmlsdGVyKEZpbHRlcjo6VHlwZSBmaWx0
ZXJUeXBlLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24pCisgICAgICAgIDog
RmlsdGVyRnVuY3Rpb24oZmlsdGVyVHlwZSkKKyAgICAgICAgLCBtX2ZpbHRlclNjYWxlKGZpbHRl
clNjYWxlKQorICAgICAgICAsIG1fc291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCkKKyAg
ICAgICAgLCBtX2ZpbHRlclJlZ2lvbihmaWx0ZXJSZWdpb24pCiAgICAgewogICAgIH0KIAogcHJp
dmF0ZToKKyAgICBGbG9hdFNpemUgbV9maWx0ZXJTY2FsZTsKKyAgICBGbG9hdFJlY3QgbV9zb3Vy
Y2VJbWFnZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fZmlsdGVyUmVnaW9uOworCiAgICAgUmVmUHRy
PEltYWdlQnVmZmVyPiBtX3NvdXJjZUltYWdlOwotICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29s
dXRpb247Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07CiAgICAgUmVu
ZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
IH07Ci0gICAgZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBmYjY3NzU0ZTRmYzViYmNhNTFjMzQ4ZWM3
ZjYzZTRjYzkyN2RiMTA4Li40MGQyMzAwZTExZTFjMTI2Zjc2Yjg1ODJkYTI5OTRjZDU5ZTM2YjUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC00NSwxNCArNDUsMTIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1GaWx0ZXJFZmZlY3Q6OkZpbHRlckVmZmVjdChGaWx0ZXImIGZpbHRlciwgVHlw
ZSB0eXBlKQotICAgIDogbV9maWx0ZXIoZmlsdGVyKQotICAgICwgbV9maWx0ZXJFZmZlY3RDbGFz
c1R5cGUodHlwZSkKK0ZpbHRlckVmZmVjdDo6RmlsdGVyRWZmZWN0KEZpbHRlciYgZmlsdGVyLCBG
aWx0ZXJFZmZlY3Q6OlR5cGUgdHlwZSkKKyAgICA6IEZpbHRlckZ1bmN0aW9uKHR5cGUpCisgICAg
LCBtX2ZpbHRlcihmaWx0ZXIpCiB7CiB9CiAKLUZpbHRlckVmZmVjdDo6fkZpbHRlckVmZmVjdCgp
ID0gZGVmYXVsdDsKLQogdm9pZCBGaWx0ZXJFZmZlY3Q6OmRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCkKIHsKICAgICBtX2Fic29sdXRlUGFpbnRSZWN0ID0gSW50UmVjdCgpOwpAQCAtMTA3LDEx
ICsxMDUsMTEgQEAgRmxvYXRSZWN0IEZpbHRlckVmZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0
aXZlU3VicmVnaW9uKCkKICAgICAgICAgICAgIHN1YnJlZ2lvbi51bml0ZShpbnB1dFByaW1pdGl2
ZVN1YnJlZ2lvbik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgc3VicmVnaW9uID0g
bV9maWx0ZXIuZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKKyAgICAgICAgc3VicmVnaW9uID0g
bV9maWx0ZXIuZmlsdGVyUmVnaW9uKCk7CiAKICAgICAvLyBBZnRlciBjYWxsaW5nIGRldGVybWlu
ZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiBvbiB0aGUgdGFyZ2V0IGVmZmVjdCwgcmVzZXQgdGhl
IHN1YnJlZ2lvbiBhZ2FpbiBmb3IgPGZlVGlsZT4uCi0gICAgaWYgKGZpbHRlckVmZmVjdFR5cGUo
KSA9PSBGaWx0ZXJFZmZlY3RUeXBlVGlsZSkKLSAgICAgICAgc3VicmVnaW9uID0gbV9maWx0ZXIu
ZmlsdGVyUmVnaW9uSW5Vc2VyU3BhY2UoKTsKKyAgICBpZiAoZmlsdGVyVHlwZSgpID09IEZpbHRl
ckVmZmVjdDo6VHlwZTo6RkVUaWxlKQorICAgICAgICBzdWJyZWdpb24gPSBtX2ZpbHRlci5maWx0
ZXJSZWdpb24oKTsKIAogICAgIGF1dG8gYm91bmRhcmllcyA9IGVmZmVjdEJvdW5kYXJpZXMoKTsK
ICAgICBpZiAoaGFzWCgpKQpAQCAtMTI1LDE1ICsxMjMsMTQgQEAgRmxvYXRSZWN0IEZpbHRlckVm
ZmVjdDo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkKIAogICAgIHNldEZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbihzdWJyZWdpb24pOwogCi0gICAgYXV0byBhYnNvbHV0ZVN1YnJl
Z2lvbiA9IG1fZmlsdGVyLmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChzdWJyZWdpb24pOwot
ICAgIGF1dG8gZmlsdGVyUmVzb2x1dGlvbiA9IG1fZmlsdGVyLmZpbHRlclJlc29sdXRpb24oKTsK
LSAgICBhYnNvbHV0ZVN1YnJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uKTsKKyAgICBhdXRv
IGFic29sdXRlU3VicmVnaW9uID0gc3VicmVnaW9uOworICAgIGFic29sdXRlU3VicmVnaW9uLnNj
YWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIC8vIFNhdmUgdGhpcyBiZWZvcmUgY2xp
cHBpbmcgc28gd2UgY2FuIHVzZSBpdCB0byBtYXAgbGlnaHRpbmcgcG9pbnRzIGZyb20gdXNlciBz
cGFjZSB0byBidWZmZXIgY29vcmRpbmF0ZXMuCiAgICAgc2V0VW5jbGlwcGVkQWJzb2x1dGVTdWJy
ZWdpb24oYWJzb2x1dGVTdWJyZWdpb24pOwogCiAgICAgLy8gQ2xpcCBldmVyeSBmaWx0ZXIgZWZm
ZWN0IHRvIHRoZSBmaWx0ZXIgcmVnaW9uLgogICAgIGF1dG8gYWJzb2x1dGVTY2FsZWRGaWx0ZXJS
ZWdpb24gPSBtX2ZpbHRlci5maWx0ZXJSZWdpb24oKTsKLSAgICBhYnNvbHV0ZVNjYWxlZEZpbHRl
clJlZ2lvbi5zY2FsZShmaWx0ZXJSZXNvbHV0aW9uKTsKKyAgICBhYnNvbHV0ZVNjYWxlZEZpbHRl
clJlZ2lvbi5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBhYnNvbHV0ZVN1YnJl
Z2lvbi5pbnRlcnNlY3QoYWJzb2x1dGVTY2FsZWRGaWx0ZXJSZWdpb24pOwogCiAgICAgc2V0TWF4
RWZmZWN0UmVjdChhYnNvbHV0ZVN1YnJlZ2lvbik7CkBAIC0xODEsNyArMTc4LDcgQEAgdm9pZCBG
aWx0ZXJFZmZlY3Q6OmFwcGx5KCkKICAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwog
ICAgIHNldFJlc3VsdENvbG9yU3BhY2UobV9vcGVyYXRpbmdDb2xvclNwYWNlKTsKIAotICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRl
ck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFwcGx5KCk6XG4gIGZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uIDw8ICJcbiAgZWZmZWN0Qm91
bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmllcyA8PCAiXG4gIGFic29sdXRlVW5jbGlwcGVk
U3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xpcHBlZFN1YnJlZ2lvbiA8PCAiXG4gIGFic29s
dXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBhaW50UmVjdCA8PCAiXG4gIG1heEVmZmVjdFJl
Y3QgIiA8PCBtX21heEVmZmVjdFJlY3QgPDwgIlxuICBmaWx0ZXIgc2NhbGUgIiA8PCBtX2ZpbHRl
ci5maWx0ZXJTY2FsZSgpIDw8ICJcbiAgZmlsdGVyIHJlc29sdXRpb24gIiA8PCBtX2ZpbHRlci5m
aWx0ZXJSZXNvbHV0aW9uKCkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0g
PDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGFw
cGx5KCk6XG4gIGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbiAiIDw8IG1fZmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uIDw8ICJcbiAgZWZmZWN0Qm91bmRhcmllcyAiIDw8IG1fZWZmZWN0Qm91bmRhcmll
cyA8PCAiXG4gIGFic29sdXRlVW5jbGlwcGVkU3VicmVnaW9uICIgPDwgbV9hYnNvbHV0ZVVuY2xp
cHBlZFN1YnJlZ2lvbiA8PCAiXG4gIGFic29sdXRlUGFpbnRSZWN0ICIgPDwgbV9hYnNvbHV0ZVBh
aW50UmVjdCA8PCAiXG4gIG1heEVmZmVjdFJlY3QgIiA8PCBtX21heEVmZmVjdFJlY3QgPDwgIlxu
ICBmaWx0ZXIgc2NhbGUgIiA8PCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgIGlmICht
X2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKQogICAgICAgICByZXR1cm47CkBAIC0y
NzMsNyArMjcwLDcgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1
bHQoKQogICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KQogICAgICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIAotICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCBtX2ZpbHRlci5yZW5kZXJp
bmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgUGl4
ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgbV9maWx0ZXIucmVuZGVyaW5nTW9k
ZSgpLCAxLCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYg
KCFtX2ltYWdlQnVmZmVyUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjg5
LDcgKzI4Niw2IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojp1bm11
bHRpcGxpZWRSZXN1bHQoY29uc3QgSW50UmVjdCYgcmVjdCwKIHsKICAgICBJbnRTaXplIHNjYWxl
ZFNpemUocmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKHNjYWxlZFNpemUpKTsKLSAgICBzY2FsZWRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRl
clNjYWxlKCkpOwogICAgIGF1dG8gY2hlY2tlZEFyZWEgPSBzY2FsZWRTaXplLmFyZWE8UmVjb3Jk
T3ZlcmZsb3c+KCkgKiA0OwogICAgIGlmIChjaGVja2VkQXJlYS5oYXNPdmVyZmxvd2VkKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzA0LDcgKzMwMCw2IEBAIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0OjpwcmVtdWx0aXBsaWVkUmVzdWx0KGNvbnN0IEludFJl
Y3QmIHJlY3QsCiB7CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplKHJlY3Quc2l6ZSgpKTsKICAgICBB
U1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzY2FsZWRTaXplKSk7Ci0gICAg
c2NhbGVkU2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBhdXRvIGNoZWNr
ZWRBcmVhID0gc2NhbGVkU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKICAgICBpZiAo
Y2hlY2tlZEFyZWEuaGFzT3ZlcmZsb3dlZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTMxOCw5ICszMTMsNyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEZpbHRlckVmZmVjdDo6
cHJlbXVsdGlwbGllZFJlc3VsdChjb25zdCBJbnRSZWN0JiByZWN0LAogdm9pZCBGaWx0ZXJFZmZl
Y3Q6OmNvcHlJbWFnZUJ5dGVzKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsK
ICAgICBJbnRSZWN0IHNjYWxlZFJlY3QocmVjdCk7Ci0gICAgc2NhbGVkUmVjdC5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKICAgICBJbnRTaXplIHNjYWxlZFBhaW50U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7Ci0gICAgc2NhbGVkUGFpbnRTaXplLnNjYWxlKG1fZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdG8g
dHJhbnNwYXJlbnQgYmxhY2ssIGlmIG5vdCBlbnRpcmVseSBjb3ZlcmVkIGJ5IHRoZSBzb3VyY2Uu
CiAgICAgaWYgKHNjYWxlZFJlY3QueCgpIDwgMCB8fCBzY2FsZWRSZWN0LnkoKSA8IDAgfHwgc2Nh
bGVkUmVjdC5tYXhYKCkgPiBzY2FsZWRQYWludFNpemUud2lkdGgoKSB8fCBzY2FsZWRSZWN0Lm1h
eFkoKSA+IHNjYWxlZFBhaW50U2l6ZS5oZWlnaHQoKSkKQEAgLTQ0NCwxMCArNDM3LDkgQEAgc3Rk
OjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0UGl4ZWxCdWZmZXJU
b0NvbG9yU3BhY2UoY29uc3QgRGUKICAgICAvLyBGSVhNRTogVXNpbmcgYW4gSW1hZ2VCdWZmZXIg
dG8gcGVyZm9ybSB0aGUgY29sb3Igc3BhY2UgY29udmVyc2lvbiBpcyB1bm5lY2Vzc2FyeS4gV2Ug
Y2FuIGRvIGl0IGRpcmVjdGx5LgogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9p
bnQoKSwgcGl4ZWxCdWZmZXIuc2l6ZSgpKTsKLSAgICBkZXN0aW5hdGlvblJlY3Quc2NhbGUoMSAv
IG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShkZXN0aW5hdGlvblJlY3Quc2l6ZSgpKTsKICAgICAvLyBD
cmVhdGUgYW4gSW1hZ2VCdWZmZXIgdG8gc3RvcmUgaW5jb21pbmcgUGl4ZWxCdWZmZXIKLSAgICBh
dXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJl
bmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgb3BlcmF0aW5nQ29sb3JTcGFj
ZSgpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCAxLCBvcGVyYXRp
bmdDb2xvclNwYWNlKCksIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgaWYgKCFidWZmZXIpCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgYnVmZmVyLT5wdXRQaXhlbEJ1ZmZlcihw
aXhlbEJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKQEAgLTQ2MSw3ICs0NTMsNyBAQCBzdGQ6Om9w
dGlvbmFsPFBpeGVsQnVmZmVyPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29s
b3JTcGFjZShjb25zdCBEZQogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVmZmVy
OjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CiAKICAgICAvLyBDcmVhdGUgYW4gSW1hZ2VCdWZm
ZXIgd2l0aCB0aGUgY29ycmVjdCBjb2xvciBzcGFjZSBhbmQgdXRpbGl6ZSBDRyB0byBoYW5kbGUg
Y29sb3Igc3BhY2UgY29udmVyc2lvbgotICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpLCB0YXJnZXRDb2xvclNwYWNlLCBQaXhlbEZvcm1hdDo6QkdSQTgp
OworICAgIGF1dG8gY29udmVydGVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVk
U2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCAxLCB0YXJnZXRDb2xvclNwYWNlLCBQaXhl
bEZvcm1hdDo6QkdSQTgpOwogICAgIGlmICghY29udmVydGVkQnVmZmVyKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogCkBAIC01MTMsNyArNTA1LDYgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7Ci0gICAgICAgICAgICBpbnB1dFNpemUu
c2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IEFTU0VSVChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+Zm9ybWF0KCkuY29sb3JTcGFjZSA9
PSBtX3Jlc3VsdENvbG9yU3BhY2UpOwogICAgICAgICAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9y
bWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1h
dDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9OwpAQCAtNTUyLDcgKzU0Myw2IEBAIHZvaWQg
RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRTaXpl
IGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBBU1NF
UlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKLSAgICAgICAg
ICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKIAogICAgICAgICAg
ICAgQVNTRVJUKG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmZvcm1hdCgpLmNvbG9yU3BhY2Ug
PT0gbV9yZXN1bHRDb2xvclNwYWNlKTsKICAgICAgICAgICAgIFBpeGVsQnVmZmVyRm9ybWF0IGZv
cm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIFBpeGVsRm9ybWF0
OjpSR0JBOCwgbV9yZXN1bHRDb2xvclNwYWNlIH07CkBAIC01NzIsNyArNTYyLDcgQEAgdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBk
ZXN0aW5hdGlvbiwgY29uc3QKIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1h
Z2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVw
IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0ICVkeCVkIiwgZmlsdGVyTmFtZSgpLCB0aGlzLCBtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKS53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUo
KS5oZWlnaHQoKSk7CisgICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRl
SW1hZ2VCdWZmZXJSZXN1bHQgJWR4JWQiLCBmaWx0ZXJOYW1lKCkuY2hhcmFjdGVyczgoKSwgdGhp
cywgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkud2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkuaGVpZ2h0KCkpOwogCiAgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxs
b3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKQEAgLTU4MCwxMyArNTcwLDEzIEBAIElt
YWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwotICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRl
ci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JT
cGFjZSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCAx
LCBtX3Jlc3VsdENvbG9yU3BhY2UsIFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgcmV0dXJuIG1f
aW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+
JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKLSAgICBM
T0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7CisgICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZl
Y3QgJXMgJXAgY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCkuY2hh
cmFjdGVyczgoKSwgdGhpcyk7CiAKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxv
d2VkLgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwpAQCAtNTk3LDcgKzU4Nyw2IEBAIHN0ZDo6
b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCkKIAogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVz
dWx0U2l6ZSkpOwotICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7
CiAgICAgUGl4ZWxCdWZmZXJGb3JtYXQgZm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVzdWx0Q29sb3JTcGFjZSB9
OwogICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBQaXhlbEJ1ZmZlcjo6dHJ5Q3JlYXRl
KGZvcm1hdCwgcmVzdWx0U2l6ZSk7CiAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQ7CkBAIC02MDUsNyArNTk0LDcgQEAgc3RkOjpvcHRpb25hbDxQaXhlbEJ1ZmZlcj4mIEZpbHRl
ckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogCiBzdGQ6Om9wdGlvbmFs
PFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQoKQogewotICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7CisgICAgTE9HKEZpbHRl
cnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Iiwg
ZmlsdGVyTmFtZSgpLmNoYXJhY3RlcnM4KCksIHRoaXMpOwogCiAgICAgLy8gT25seSBvbmUgcmVz
dWx0IHR5cGUgaXMgYWxsb3dlZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKQEAgLTYxNiw3
ICs2MDUsNiBAQCBzdGQ6Om9wdGlvbmFsPFBpeGVsQnVmZmVyPiYgRmlsdGVyRWZmZWN0OjpjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7Ci0gICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRl
ci5maWx0ZXJTY2FsZSgpKTsKICAgICBQaXhlbEJ1ZmZlckZvcm1hdCBmb3JtYXQgeyBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6UkdCQTgsIG1fcmVz
dWx0Q29sb3JTcGFjZSB9OwogICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gUGl4ZWxC
dWZmZXI6OnRyeUNyZWF0ZShmb3JtYXQsIHJlc3VsdFNpemUpOwogICAgIHJldHVybiBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDEyZGVkMjY1YTY1NWMzN2U3
N2UyY2YwNWI1Mjc3M2YyYjk2YjQ3MWMuLmI4MzZhYjQ3YWVhZGNiMzE3NzhiY2E4Y2M3MGFkMWVm
NGE5NjY4MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjQsMTMgKzI0LDEzIEBACiAKICNpbmNsdWRl
ICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiRGVzdGluYXRpb25Db2xvclNw
YWNlLmgiCisjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdEV4dGVudC5oIgogI2lu
Y2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBA
IC00Niw0MCArNDYsOSBAQCBjbGFzcyBJbWFnZUJ1ZmZlcjsKIAogdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPEZpbHRlckVmZmVjdD4+IEZpbHRlckVmZmVjdFZlY3RvcjsKIAotZW51bSBGaWx0ZXJFZmZl
Y3RUeXBlIHsKLSAgICBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93biwKLSAgICBGaWx0ZXJFZmZlY3RU
eXBlSW1hZ2UsCi0gICAgRmlsdGVyRWZmZWN0VHlwZVRpbGUsCi0gICAgRmlsdGVyRWZmZWN0VHlw
ZVNvdXJjZUlucHV0Ci19OwotCi1jbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJsaWMgUmVmQ291bnRl
ZDxGaWx0ZXJFZmZlY3Q+IHsKK2NsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5j
dGlvbiB7CiBwdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAg
IEJsZW5kLAotICAgICAgICBDb2xvck1hdHJpeCwKLSAgICAgICAgQ29tcG9uZW50VHJhbnNmZXIs
Ci0gICAgICAgIENvbXBvc2l0ZSwKLSAgICAgICAgQ29udm9sdmVNYXRyaXgsCi0gICAgICAgIERp
ZmZ1c2VMaWdodGluZywKLSAgICAgICAgRGlzcGxhY2VtZW50TWFwLAotICAgICAgICBEcm9wU2hh
ZG93LAotICAgICAgICBGbG9vZCwKLSAgICAgICAgR2F1c3NpYW5CbHVyLAotICAgICAgICBJbWFn
ZSwKLSAgICAgICAgTGlnaHRpbmcsCi0gICAgICAgIE1lcmdlLAotICAgICAgICBNb3JwaG9sb2d5
LAotICAgICAgICBPZmZzZXQsCi0gICAgICAgIFNwZWN1bGFyTGlnaHRpbmcsCi0gICAgICAgIFRp
bGUsCi0gICAgICAgIFR1cmJ1bGVuY2UsCi0gICAgICAgIFNvdXJjZUFscGhhLAotICAgICAgICBT
b3VyY2VHcmFwaGljCi0gICAgfTsKLSAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKLQotICAg
IHZvaWQgY2xlYXJSZXN1bHQoKTsKKyAgICB2b2lkIGNsZWFyUmVzdWx0KCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsKIAogICAgIEltYWdlQnVmZmVyKiBpbWFn
ZUJ1ZmZlclJlc3VsdCgpOwpAQCAtMTE0LDcgKzgzLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
QWJzb2x1dGVQYWludFJlY3QoY29uc3QgSW50UmVjdCYgYWJzb2x1dGVQYWludFJlY3QpIHsgbV9h
YnNvbHV0ZVBhaW50UmVjdCA9IGFic29sdXRlUGFpbnRSZWN0OyB9CiAKICAgICBGbG9hdFJlY3Qg
bWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQotICAgIHZv
aWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9t
YXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsgfSAKKyAgICB2b2lkIHNldE1heEVmZmVjdFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1h
eEVmZmVjdFJlY3Q7IH0KIAogICAgIHZvaWQgYXBwbHkoKTsKIApAQCAtMTI1LDEwICs5NCw2IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
OwogCi0gICAgdmlydHVhbCBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25z
dCB7IHJldHVybiBGaWx0ZXJFZmZlY3RUeXBlVW5rbm93bjsgfQotCi0gICAgdmlydHVhbCBJbnRP
dXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJbnRPdXRzZXRzKCk7IH0KLQogICAgIGVu
dW0gY2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5nIH07CiAg
ICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpU
ZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBlOjpUZXN0
T3V0cHV0KSBjb25zdDsKIApAQCAtMTU2LDggKzEyMSw2IEBAIHB1YmxpYzoKICAgICAKICAgICBG
bG9hdFBvaW50IG1hcFBvaW50RnJvbVVzZXJTcGFjZVRvQnVmZmVyKEZsb2F0UG9pbnQpIGNvbnN0
OwogICAgIAotICAgIFR5cGUgZmlsdGVyRWZmZWN0Q2xhc3NUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9maWx0ZXJFZmZlY3RDbGFzc1R5cGU7IH0KLQogICAgIEZpbHRlciYgZmlsdGVyKCkgeyByZXR1
cm4gbV9maWx0ZXI7IH0KICAgICBjb25zdCBGaWx0ZXImIGZpbHRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsdGVyOyB9CiAKQEAgLTE4Myw4ICsxNDYsNiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAg
ICAgRmlsdGVyRWZmZWN0KEZpbHRlciYsIFR5cGUpOwogICAgIAotICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKLQogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZmZXI+JiBjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIHN0ZDo6b3B0aW9uYWw8UGl4ZWxCdWZm
ZXI+JiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKQEAgLTI0OCwxMSArMjA5LDE3
IEBAIHByaXZhdGU6CiAgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIG1fb3BlcmF0aW5nQ29sb3JT
cGFjZSB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpIH07CiAjZW5kaWYKICAgICBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UgbV9yZXN1bHRDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCkgfTsKLSAgICAKLSAgICBjb25zdCBUeXBlIG1fZmlsdGVyRWZmZWN0Q2xhc3NU
eXBlOwogfTsKIAogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIGNvbnN0IEZpbHRlckVmZmVjdCYpOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlv
biYgZnVuY3Rpb24pIHsgcmV0dXJuIGZ1bmN0aW9uLmlzRmlsdGVyRWZmZWN0KCk7IH0KK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0ZJTFRFUl9FRkZFQ1QoQ2xhc3NOYW1lKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OkNsYXNzTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpGaWx0ZXJFZmZlY3QmIGVmZmVjdCkgeyByZXR1cm4gZWZmZWN0LmZpbHRlclR5cGUoKSA9
PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OkNsYXNzTmFtZTsgfSBcCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmNWJi
MTU2MzgxZGVjMWUwYmFjMjJkOTExOWMyZTBlZDgwZTRhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmNw
cApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGaWx0ZXJGdW5jdGlvbi5o
IgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ZpbHRlckZ1bmN0aW9uOjpGaWx0ZXJGdW5jdGlvbihUeXBlIGZpbHRlclR5
cGUpCisgICAgOiBtX2ZpbHRlclR5cGUoZmlsdGVyVHlwZSkKK3sKK30KKworc3RhdGljIGlubGlu
ZSBjb25zdCBhdXRvJiBmaWx0ZXJOYW1lcygpCit7CisgICAgdXNpbmcgRmlsdGVyTmFtZU1hcCA9
IEhhc2hNYXA8RmlsdGVyRnVuY3Rpb246OlR5cGUsIEF0b21TdHJpbmcsIFdURjo6SW50SGFzaDxG
aWx0ZXJGdW5jdGlvbjo6VHlwZT4sIFdURjo6U3Ryb25nRW51bUhhc2hUcmFpdHM8RmlsdGVyRnVu
Y3Rpb246OlR5cGU+PjsKKworICAgIHN0YXRpYyBhdXRvIGZpbHRlck5hbWVzID0gbWFrZU5ldmVy
RGVzdHJveWVkKFtdIHsKKyAgICAgICAgRmlsdGVyTmFtZU1hcCBmaWx0ZXJOYW1lcyA9IHsKKyAg
ICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkNTU0ZpbHRlciwgICAgICAgICAgICJD
U1NGaWx0ZXIiX3MgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpTVkdGaWx0ZXIsICAgICAgICAgICAiU1ZHRmlsdGVyIl9zICAgICAgICAgICB9LAorICAg
ICAgICAgICAgCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUJsZW5kLCAg
ICAgICAgICAgICAiRkVCbGVuZCJfcyAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0
ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb2xvck1hdHJpeCwgICAgICAgIkZFQ29sb3JNYXRyaXgiX3Mg
ICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29tcG9uZW50
VHJhbnNmZXIsICJGRUNvbXBvbmVudFRyYW5zZmVyIl9zIH0sCisgICAgICAgICAgICB7IEZpbHRl
ckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvc2l0ZSwgICAgICAgICAiRkVDb21wb3NpdGUiX3MgICAg
ICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb252b2x2ZU1h
dHJpeCwgICAgIkZFQ29udm9sdmVNYXRyaXgiX3MgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVy
RnVuY3Rpb246OlR5cGU6OkZFRGlmZnVzZUxpZ2h0aW5nLCAgICJGRURpZmZ1c2VMaWdodGluZyJf
cyAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVu
dE1hcCwgICAiRkVEaXNwbGFjZW1lbnRNYXAiX3MgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVEcm9wU2hhZG93LCAgICAgICAgIkZFRHJvcFNoYWRvdyJfcyAgICAg
ICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRmxvb2QsICAgICAg
ICAgICAgICJGRUZsb29kIl9zICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1
bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1ciwgICAgICAiRkVHYXVzc2lhbkJsdXIiX3MgICAg
ICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVJbWFnZSwgICAgICAg
ICAgICAgIkZFSW1hZ2UiX3MgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVu
Y3Rpb246OlR5cGU6OkZFTWVyZ2UsICAgICAgICAgICAgICJGRU1lcmdlIl9zICAgICAgICAgICAg
IH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1vcnBob2xvZ3ksICAg
ICAgICAiRkVNb3JwaG9sb2d5Il9zICAgICAgICB9LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVPZmZzZXQsICAgICAgICAgICAgIkZFT2Zmc2V0Il9zICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFU3BlY3VsYXJMaWdodGlu
ZywgICJGRVNwZWN1bGFyTGlnaHRpbmciX3MgIH0sCisgICAgICAgICAgICB7IEZpbHRlckZ1bmN0
aW9uOjpUeXBlOjpGRVRpbGUsICAgICAgICAgICAgICAiRkVUaWxlIl9zICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgeyBGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVUdXJidWxlbmNlLCAgICAg
ICAgIkZFVHVyYnVsZW5jZSJfcyAgICAgICAgfSwKKworICAgICAgICAgICAgeyBGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6U291cmNlQWxwaGEsICAgICAgICAgIlNvdXJjZUFscGhhIl9zICAgICAgICAg
fSwKKyAgICAgICAgICAgIHsgRmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUdyYXBoaWMsICAg
ICAgICJTb3VyY2VHcmFwaGljIl9zICAgICAgIH0KKworICAgICAgICB9OworICAgICAgICByZXR1
cm4gZmlsdGVyTmFtZXM7CisgICAgfSgpKTsKKyAgICAKKyAgICByZXR1cm4gZmlsdGVyTmFtZXMu
Z2V0KCk7Cit9CisKK2NvbnN0IEF0b21TdHJpbmcmIEZpbHRlckZ1bmN0aW9uOjpmaWx0ZXJOYW1l
KFR5cGUgZmlsdGVyVHlwZSkKK3sKKyAgICBhdXRvIGl0ID0gZmlsdGVyTmFtZXMoKS5maW5kKGZp
bHRlclR5cGUpOworICAgIEFTU0VSVChpdCAhPSBmaWx0ZXJOYW1lcygpLmVuZCgpKTsKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjU1MTA1NmY3NDQ4YjNjYTk2NjQ2YmZmODRlYzllYWQ2MTFmZmFh
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdURiB7CitjbGFzcyBUZXh0U3RyZWFtOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEZpbHRlckZ1bmN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsdGVyRnVuY3Rpb24+
IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgQ1NT
RmlsdGVyLAorICAgICAgICBTVkdGaWx0ZXIsCisKKyAgICAgICAgRkVNaW5pbXVtLAorCisgICAg
ICAgIEZFQmxlbmQgPSBGRU1pbmltdW0sCisgICAgICAgIEZFQ29sb3JNYXRyaXgsCisgICAgICAg
IEZFQ29tcG9uZW50VHJhbnNmZXIsCisgICAgICAgIEZFQ29tcG9zaXRlLAorICAgICAgICBGRUNv
bnZvbHZlTWF0cml4LAorICAgICAgICBGRURpZmZ1c2VMaWdodGluZywKKyAgICAgICAgRkVEaXNw
bGFjZW1lbnRNYXAsCisgICAgICAgIEZFRHJvcFNoYWRvdywKKyAgICAgICAgRkVGbG9vZCwKKyAg
ICAgICAgRkVHYXVzc2lhbkJsdXIsCisgICAgICAgIEZFSW1hZ2UsCisgICAgICAgIEZFTWVyZ2Us
CisgICAgICAgIEZFTW9ycGhvbG9neSwKKyAgICAgICAgRkVPZmZzZXQsCisgICAgICAgIEZFU3Bl
Y3VsYXJMaWdodGluZywKKyAgICAgICAgRkVUaWxlLAorICAgICAgICBGRVR1cmJ1bGVuY2UsCisg
ICAgICAgIFNvdXJjZUFscGhhLAorICAgICAgICBTb3VyY2VHcmFwaGljLAorCisgICAgICAgIEZF
TWF4aW11bSA9IFNvdXJjZUdyYXBoaWMKKyAgICB9OworCisgICAgRmlsdGVyRnVuY3Rpb24oVHlw
ZSk7CisgICAgdmlydHVhbCB+RmlsdGVyRnVuY3Rpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBUeXBl
IGZpbHRlclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGU7IH0KKworICAgIGJvb2wg
aXNDU1NGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlclR5cGUgPT0gVHlwZTo6Q1NTRmls
dGVyOyB9CisgICAgYm9vbCBpc1NWR0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyVHlw
ZSA9PSBUeXBlOjpTVkdGaWx0ZXI7IH0KKyAgICBib29sIGlzRmlsdGVyKCkgY29uc3QgeyByZXR1
cm4gbV9maWx0ZXJUeXBlID09IFR5cGU6OkNTU0ZpbHRlciB8fCBtX2ZpbHRlclR5cGUgPT0gVHlw
ZTo6U1ZHRmlsdGVyOyB9CisgICAgYm9vbCBpc0ZpbHRlckVmZmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsdGVyVHlwZSA+PSBUeXBlOjpGRU1pbmltdW0gJiYgbV9maWx0ZXJUeXBlIDw9IFR5cGU6
OkZFTWF4aW11bTsgfQorCisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGZpbHRlck5hbWUo
VHlwZSk7CisgICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIHNvdXJjZUFscGhhTmFtZSgpIHsg
cmV0dXJuIGZpbHRlck5hbWUoVHlwZTo6U291cmNlQWxwaGEpOyB9CisgICAgc3RhdGljIGNvbnN0
IEF0b21TdHJpbmcmIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1cm4gZmlsdGVyTmFtZShUeXBl
OjpTb3VyY2VHcmFwaGljKTsgfQorICAgIGNvbnN0IEF0b21TdHJpbmcmIGZpbHRlck5hbWUoKSBj
b25zdCB7IHJldHVybiBmaWx0ZXJOYW1lKG1fZmlsdGVyVHlwZSk7IH0KKworICAgIHZpcnR1YWwg
SW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisgICAgdmlydHVhbCB2
b2lkIGNsZWFyUmVzdWx0KCkgeyB9CisKK3ByaXZhdGU6CisgICAgVHlwZSBtX2ZpbHRlclR5cGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlPiB7
CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVy
RnVuY3Rpb246OlR5cGUsCisKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6
OkNTU0ZpbHRlciwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNWR0Zp
bHRlciwKKworICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVCbGVuZCwK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFQ29sb3JNYXRyaXgsCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbXBvbmVudFRyYW5zZmVy
LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVDb21wb3NpdGUsCisg
ICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUNvbnZvbHZlTWF0cml4LAor
ICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6VHlwZTo6RkVEaWZmdXNlTGlnaHRpbmcs
CisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRURpc3BsYWNlbWVudE1h
cCwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRHJvcFNoYWRvdywK
KyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFRmxvb2QsCisgICAgICAg
IFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRUdhdXNzaWFuQmx1ciwKKyAgICAgICAg
V2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OkZFSW1hZ2UsCisgICAgICAgIFdlYkNvcmU6
OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpGRU1lcmdlLAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJG
dW5jdGlvbjo6VHlwZTo6RkVNb3JwaG9sb2d5LAorICAgICAgICBXZWJDb3JlOjpGaWx0ZXJGdW5j
dGlvbjo6VHlwZTo6RkVPZmZzZXQsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpU
eXBlOjpGRVNwZWN1bGFyTGlnaHRpbmcsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9u
OjpUeXBlOjpGRVRpbGUsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpG
RVR1cmJ1bGVuY2UsCisgICAgICAgIFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpUeXBlOjpTb3Vy
Y2VBbHBoYSwKKyAgICAgICAgV2ViQ29yZTo6RmlsdGVyRnVuY3Rpb246OlR5cGU6OlNvdXJjZUdy
YXBoaWMKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCmlu
ZGV4IDc2NDlmMDU4YWM4NjliNTU0YWYwZGM1MDdmZmY5MDkwYWQ2Y2YzYTMuLjk5Njk0MzcyNTc5
M2U5OTY0NmZjM2U1YjIyYWQxNTFmYmRmZGU5Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwCkBAIC0yMywx
MCArMjMsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC0zNSwxMCArMzIsMTEgQEAgUmVmPFNvdXJjZUFscGhhPiBTb3VyY2VBbHBo
YTo6Y3JlYXRlKEZpbHRlckVmZmVjdCYgc291cmNlRWZmZWN0KQogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNvdXJjZUFscGhhKHNvdXJjZUVmZmVjdCkpOwogfQogCi1jb25zdCBBdG9tU3RyaW5n
JiBTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpCitTb3VyY2VBbHBoYTo6U291cmNlQWxwaGEoRmls
dGVyRWZmZWN0JiBzb3VyY2VFZmZlY3QpCisgICAgOiBGaWx0ZXJFZmZlY3Qoc291cmNlRWZmZWN0
LmZpbHRlcigpLCBGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNvdXJjZUFscGhhKQogewotICAgIHN0YXRp
YyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gc19lZmZlY3ROYW1l
KCJTb3VyY2VBbHBoYSIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICBy
ZXR1cm4gc19lZmZlY3ROYW1lOworICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2Uoc291cmNlRWZm
ZWN0Lm9wZXJhdGluZ0NvbG9yU3BhY2UoKSk7CisgICAgaW5wdXRFZmZlY3RzKCkuYXBwZW5kKCZz
b3VyY2VFZmZlY3QpOwogfQogCiB2b2lkIFNvdXJjZUFscGhhOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpCkBAIC02OSwxMSArNjcsNCBAQCBUZXh0U3RyZWFtJiBTb3VyY2VBbHBoYTo6ZXh0
ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiB0cywgUmVwcmVzZW50YXRpb25UeQogICAg
IHJldHVybiB0czsKIH0KIAotU291cmNlQWxwaGE6OlNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYg
c291cmNlRWZmZWN0KQotICAgIDogRmlsdGVyRWZmZWN0KHNvdXJjZUVmZmVjdC5maWx0ZXIoKSwg
VHlwZTo6U291cmNlQWxwaGEpCi17Ci0gICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShzb3VyY2VF
ZmZlY3Qub3BlcmF0aW5nQ29sb3JTcGFjZSgpKTsKLSAgICBpbnB1dEVmZmVjdHMoKS5hcHBlbmQo
JnNvdXJjZUVmZmVjdCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApp
bmRleCA2NjI5YTM2N2ZkNDMyNDJkMWM0YWFkZTY0YzU2MWU4NjRhMzk0OTBmLi43YmJiZjgxZDY4
NTI1ODRhYzZjZjcxYWQ1ZWJlNTUwN2RmNmRjMWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0xNyw4ICsx
Nyw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNv
dXJjZUFscGhhX2gKLSNkZWZpbmUgU291cmNlQWxwaGFfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKIApAQCAtMjgsMTMgKzI3LDEwIEBAIGNsYXNzIFNvdXJjZUFs
cGhhIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6ICAgICAgICAKICAgICBzdGF0aWMg
UmVmPFNvdXJjZUFscGhhPiBjcmVhdGUoRmlsdGVyRWZmZWN0Jik7CiAKLSAgICBzdGF0aWMgY29u
c3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBBdG9tU3RyaW5n
JiBlZmZlY3ROYW1lKCkgeyByZXR1cm4gRmlsdGVyRWZmZWN0Ojpzb3VyY2VBbHBoYU5hbWUoKTsg
fQogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNvdXJjZUFscGhhKEZpbHRlckVmZmVjdCYpOwot
ICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZmZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJbnB1dDsgfQotCi0gICAgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJTb3VyY2VBbHBoYSI7IH0KIAogICAg
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXRlcm1p
bmVBYnNvbHV0ZVBhaW50UmVjdCgpIG92ZXJyaWRlOwpAQCAtNDMsNCArMzksNCBAQCBwcml2YXRl
OgogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFNvdXJjZUFscGhhX2gKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRklMVEVSX0VGRkVDVChTb3VyY2VBbHBoYSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdy
YXBoaWMuY3BwCmluZGV4IDg4YTM2YTQxMDI2YmQzYTU4NTQ0NzgyMDI3NGMxMTA3ZDc4MzkyZTku
LmUxMjNkY2Q4ZmYyMWRkYzc3MzNlNTdlNTE1ZWYzMTFlN2M5MDE1ODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFw
aGljLmNwcApAQCAtMjIsMTAgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzQsMTcgKzMxLDEwIEBAIFJlZjxTb3VyY2VHcmFwaGljPiBTb3VyY2VHcmFw
aGljOjpjcmVhdGUoRmlsdGVyJiBmaWx0ZXIpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU291
cmNlR3JhcGhpYyhmaWx0ZXIpKTsKIH0KIAotY29uc3QgQXRvbVN0cmluZyYgU291cmNlR3JhcGhp
Yzo6ZWZmZWN0TmFtZSgpCi17Ci0gICAgc3RhdGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9tU3RyaW5nPiBzX2VmZmVjdE5hbWUoIlNvdXJjZUdyYXBoaWMiLCBBdG9tU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgcmV0dXJuIHNfZWZmZWN0TmFtZTsKLX0KLQog
dm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpCiB7CiAgICAg
RmlsdGVyJiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICBGbG9hdFJlY3QgcGFpbnRSZWN0
ID0gZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpOwotICAgIHBhaW50UmVjdC5zY2FsZShmaWx0ZXIu
ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCksIGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkuaGVp
Z2h0KCkpOwogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRS
ZWN0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggMzBjZDU0ZjI0NTNiYmE4YTM3NzYzMjEz
MjhlZjIxMDZiN2ZjYTViZi4uNTJkY2I3ZTg2OGU1YzViNTJhMTFjYmI2OTY4M2IyZThiNDIzNGIw
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTE4LDExICsxOCw5IEBACiAgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZUdyYXBoaWNfaAotI2RlZmluZSBT
b3VyY2VHcmFwaGljX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
Ci0jaW5jbHVkZSAiRmlsdGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzAsMjkg
KzI4LDIwIEBAIGNsYXNzIFNvdXJjZUdyYXBoaWMgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1
YmxpYzogICAgICAgIAogICAgIHN0YXRpYyBSZWY8U291cmNlR3JhcGhpYz4gY3JlYXRlKEZpbHRl
ciYpOwogCi0gICAgc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGVmZmVjdE5hbWUoKTsKKyAgICBz
dGF0aWMgY29uc3QgQXRvbVN0cmluZyYgZWZmZWN0TmFtZSgpIHsgcmV0dXJuIEZpbHRlckVmZmVj
dDo6c291cmNlR3JhcGhpY05hbWUoKTsgfQogCiBwcml2YXRlOgogICAgIFNvdXJjZUdyYXBoaWMo
RmlsdGVyJiBmaWx0ZXIpCi0gICAgICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgVHlwZTo6U291
cmNlR3JhcGhpYykKKyAgICAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBGaWx0ZXJFZmZlY3Q6
OlR5cGU6OlNvdXJjZUdyYXBoaWMpCiAgICAgewogICAgICAgICBzZXRPcGVyYXRpbmdDb2xvclNw
YWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAgICB9CiAKLSAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUdyYXBoaWMiOyB9
Ci0KICAgICB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBvdmVycmlkZTsKICAgICBXVEY6OlRleHRTdHJl
YW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oV1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRp
b25UeXBlKSBjb25zdCBvdmVycmlkZTsKLQotICAgIEZpbHRlckVmZmVjdFR5cGUgZmlsdGVyRWZm
ZWN0VHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZpbHRlckVmZmVjdFR5cGVTb3VyY2VJ
bnB1dDsgfQogfTsKIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlR3JhcGhpYykKLSAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyRWZmZWN0JiBlZmZlY3QpIHsgcmV0dXJuIGVmZmVjdC5m
aWx0ZXJFZmZlY3RDbGFzc1R5cGUoKSA9PSBXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OlR5cGU6OlNv
dXJjZUdyYXBoaWM7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotCi0jZW5kaWYg
Ly8gU291cmNlR3JhcGhpY19oCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0ZJTFRFUl9FRkZFQ1Qo
U291cmNlR3JhcGhpYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VDb2NvYS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlQ29jb2EuY3BwCmluZGV4IDlhZWE1ZjFjMDcyYzA5YmYwNjNmNDk5OWUwM2IyMTllODVkN2Uy
ZDkuLmQ2N2IyOWI1MWM3OTFlNTIxNWViOTg5NzVmZDljZWI2YWM0ZmMwNzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZUluY29taW5n
QXVkaW9Tb3VyY2VDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUNvY29hLmNwcApAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJMaWJXZWJSVENBdWRpb0Zvcm1h
dC5oIgorI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0Zp
bHRlci5jcHAKaW5kZXggOWQ2YzJjZGQwNWY5NDliNjM0Y2FmYTE3YWMxN2RiNWMwMmI1YjYxMS4u
ZjlhNzQ4ODYwMzBjMzRjNjQ3MGNmNzllMTkzODgyMDExMDM2ZGJjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTI3LDkgKzI3LDYgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKLSNpbmNsdWRl
ICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4LmgiCiAjaW5jbHVk
ZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogI2luY2x1ZGUgIkZFRHJvcFNoYWRvdy5oIgpAQCAt
MzgsNDUgKzM1LDE4MyBAQAogI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlZmVyZW5jZWRTVkdSZXNvdXJjZXMuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNs
dWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgot
I2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1
ZGUgIlNvdXJjZUFscGhhLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUg
PGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi0jaWYgVVNFKERJUkVD
VDJEKQotI2luY2x1ZGUgPGQyZDEuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVJlZjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKCkKK1JlZjxDU1NGaWx0ZXI+IENTU0Zp
bHRlcjo6Y3JlYXRlKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ1NTRmlsdGVyKTsKKyAgICBib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7CisgICAgYm9vbCBoYXNG
aWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlvbnMu
aGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKKworICAg
IGF1dG8gZmlsdGVyID0gYWRvcHRSZWYoKm5ldyBDU1NGaWx0ZXIoaGFzRmlsdGVyVGhhdE1vdmVz
UGl4ZWxzLCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwg
c2NhbGVGYWN0b3IpKTsKKworICAgIGZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5kZXJpbmdN
b2RlKTsKKyAgICByZXR1cm4gZmlsdGVyOwogfQogCi1DU1NGaWx0ZXI6OkNTU0ZpbHRlcigpCi0g
ICAgOiBGaWx0ZXIoRmxvYXRTaXplIHsgMSwgMSB9KQorQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoYm9v
bCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVz
dHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9yKQorICAgIDogRmlsdGVy
KEZpbHRlcjo6VHlwZTo6Q1NTRmlsdGVyLCBGbG9hdFNpemUgeyBzY2FsZUZhY3Rvciwgc2NhbGVG
YWN0b3IgfSkKKyAgICAsIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKGhhc0ZpbHRlclRoYXRN
b3Zlc1BpeGVscykKKyAgICAsIG1faGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2Vj
dXJpdHlPcmlnaW4oaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmln
aW4pCiAgICAgLCBtX3NvdXJjZUdyYXBoaWMoU291cmNlR3JhcGhpYzo6Y3JlYXRlKCp0aGlzKSkK
IHsKIH0KIAotQ1NTRmlsdGVyOjp+Q1NTRmlsdGVyKCkgPSBkZWZhdWx0Oworc3RhdGljIFJlZlB0
cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJsdXJFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0
IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXJPcGVyYXRpb24sIEZpbHRlckNvbnN1bWVyIGNvbnN1
bWVyKQoreworICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1
ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVy
OjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0g
RmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RF
X0RVUExJQ0FURSk7Cit9CiAKLUdyYXBoaWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRl
eHQoKQorc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUJyaWdodG5lc3NFZmZlY3Qo
Q1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQogewotICAgIHJldHVybiBzb3VyY2VJ
bWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxwdHI7CisgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rp
b24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgdHJhbnNmZXJG
dW5jdGlvbi5zbG9wZSA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJP
cGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsK
KworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVy
biBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCB0cmFuc2ZlckZ1bmN0aW9uLCB0
cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitz
dGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQ29udHJhc3RFZmZlY3QoQ1NTRmlsdGVy
JiBmaWx0ZXIsIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNv
bXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBP
TkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRy
YW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRl
cmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0
ZShmaWx0ZXIsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVEcm9wU2hhZG93RWZmZWN0KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBEcm9wU2hhZG93
RmlsdGVyT3BlcmF0aW9uJiBkcm9wU2hhZG93T3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZCA9
IGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJuIEZFRHJvcFNo
YWRvdzo6Y3JlYXRlKGZpbHRlciwgc3RkLCBzdGQsIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBk
cm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAxKTsK
K30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChD
U1NGaWx0ZXImIGZpbHRlciwgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYg
Y29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xh
bXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAg
IC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMv
aW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9u
IHBhcmFtZXRlcnMuCisKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91
bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAw
LjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3Vu
dCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAu
MDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVN
aW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45
Mjc4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAg
IDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAg
fTsKKworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBGRUNPTE9STUFU
UklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMg
UmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlSHVlUm90YXRlRWZmZWN0KENTU0ZpbHRlciYgZmls
dGVyLCBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9w
ZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0
dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVS
T1RBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBjcmVhdGVJbnZlcnRFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlv
bjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVf
TElORUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9u
ZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xv
cGUgPSAxIC0gMiAqIGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFt
b3VudDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAg
IHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCB0cmFuc2ZlckZ1bmN0
aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOwor
fQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlT3BhY2l0eUVmZmVjdChDU1NG
aWx0ZXImIGZpbHRlciwgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Cisg
ICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IDA7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgbnVs
bEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7
Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTYXR1cmF0ZUVmZmVjdChD
U1NGaWx0ZXImIGZpbHRlciwgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYg
Y29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRl
cnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgp
KSB9OworICAgIHJldHVybiBGRUNvbG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBGRUNPTE9STUFU
UklYX1RZUEVfU0FUVVJBVEUsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRp
YyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVTZXBpYUVmZmVjdChDU1NGaWx0ZXImIGZpbHRl
ciwgY29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVy
YXRpb24pCit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczov
L2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBp
YUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAg
IFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuNzY5IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjE2OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIg
LSAwLjI3MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisg
ICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAg
MSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0
ZShmaWx0ZXIsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0
ZXJzKSk7CiB9CiAKLVJlZlB0cjxGaWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVu
Y2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNF
ZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGlj
IFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZVNWR0ZpbHRlcihDU1NGaWx0ZXImIGZpbHRlciwgY29u
c3QgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0KQogewotICAgIGF1dG8q
IGZpbHRlckVsZW1lbnQgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCku
cmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0
aW9uKTsKKyAgICBhdXRvJiByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVuZGVyZXIuZW5zdXJl
UmVmZXJlbmNlZFNWR1Jlc291cmNlcygpOworICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZWZl
cmVuY2VkU1ZHUmVzb3VyY2VzLnJlZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3Vt
ZW50KCksIGZpbHRlck9wZXJhdGlvbik7CisKICAgICBpZiAoIWZpbHRlckVsZW1lbnQpIHsKLSAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwg
dGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVu
ZGVyZXIsIGFkZGluZyBwZW5kaW5nIHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdt
ZW50KCkpOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICIgYnVp
bGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBmaW5kIGZpbHRlciByZW5kZXJlciwgYWRkaW5n
IHBlbmRpbmcgcmVzb3VyY2UgIiA8PCBmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSk7CiAgICAg
ICAgIC8vIEFsdGhvdWdoIHdlIGRpZCBub3QgZmluZCB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIsIGl0
IG1pZ2h0IGV4aXN0IGxhdGVyIGluIHRoZSBkb2N1bWVudC4KICAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2tpcHMgYW5vbnltb3VzIFJlbmRlck9iamVjdHMuIDxodHRwczovL3dlYmtpdC5vcmcvYi8x
MzEwODU+CiAgICAgICAgIC8vIEZJWE1FOiBVbmNsZWFyIGlmIHRoaXMgZG9lcyBhbnl0aGluZy4K
QEAgLTg1LDIzMSArMjIwLDEyMCBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6OmJ1
aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNW
R0ZpbHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0gICAgbV9zb3VyY2VBbHBoYSA9IGJ1
aWxkZXItPmdldEVmZmVjdEJ5SWQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSk7Ci0KLSAgICBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+
PiByZWZlcmVuY2VFZmZlY3RzOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hp
bGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigqZmlsdGVy
RWxlbWVudCkpIHsKLSAgICAgICAgZWZmZWN0ID0gZWZmZWN0RWxlbWVudC5idWlsZChidWlsZGVy
LmdldCgpLCAqdGhpcyk7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0ZXIgIiA8PCB0aGlzIDw8ICIg
YnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBidWlsZCBlZmZlY3QgZnJvbSAiIDw8IGVm
ZmVjdEVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KKyAg
ICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXI7CisgICAgcmV0dXJuIFNWR0ZpbHRlcjo6Y3JlYXRl
KCpmaWx0ZXJFbGVtZW50LCBidWlsZGVyLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZmlsdGVyLnNv
dXJjZUltYWdlUmVjdCgpLCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCksIHByZXZpb3VzRWZmZWN0KTsK
K30KIAotICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3Qu
Z2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5B
QkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZm
ZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKS0+c3R5
bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVy
cG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigp
IDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVm
ZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQoZWZmZWN0RWxlbWVu
dC5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICAgICAgcmVmZXJlbmNlRWZmZWN0cy5hcHBlbmQoKmVm
ZmVjdCk7Ci0gICAgfQotICAgIAotICAgIG1fZWZmZWN0cy5hcHBlbmRWZWN0b3IoV1RGTW92ZShy
ZWZlcmVuY2VFZmZlY3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVjdDsKK3N0YXRpYyB2b2lkIHNldHVw
TGFzdEVmZmVjdFByb3BlcnRpZXMoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIEZpbHRlckNvbnN1bWVy
IGNvbnN1bWVyKQoreworICAgIC8vIFVubGlrZSBTVkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1h
Z2VzLCBmaWx0ZXIgZnVuY3Rpb25zIG9uIHRoZSBmaWx0ZXIKKyAgICAvLyBwcm9wZXJ0eSBhcHBs
aWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25zLgor
ICAgIGVmZmVjdC5zZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpG
aWx0ZXJGdW5jdGlvbik7CisgICAgZWZmZWN0LnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwogfQogCiBib29sIENTU0ZpbHRlcjo6YnVpbGQoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMs
IEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQogewotICAgIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4
ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAgICBtX2hhc0Zp
bHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5o
YXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOwotCi0gICAg
bV9lZmZlY3RzLmNsZWFyKCk7CisgICAgbV9mdW5jdGlvbnMuY2xlYXIoKTsKICAgICBtX291dHNl
dHMgPSB7IH07CiAKICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBwcmV2aW91c0VmZmVjdCA9IG1f
c291cmNlR3JhcGhpYy5wdHIoKTsKKyAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7CisKICAg
ICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7CiAgICAg
ICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAgICAgYXV0byYgZmlsdGVyT3Bl
cmF0aW9uID0gKm9wZXJhdGlvbjsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlw
ZSgpKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAg
ICAgICAgIGF1dG8mIHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxk
UmVmZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCAqcHJldmlvdXNFZmZlY3QsIHJlZmVyZW5jZU9wZXJh
dGlvbik7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+dHlwZSgpKSB7Cisg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpBUFBMRV9JTlZFUlRfTElHSFRORVNTOgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEFQUExFX0lOVkVSVF9MSUdIVE5FU1Mg
aXMgb25seSB1c2VkIGluIC1hcHBsZS1jb2xvci1maWx0ZXIuCiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOiB7Ci0g
ICAgICAgICAgICBhdXRvJiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBk
b3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5h
bW91bnQoKSwgMC4wLCAxLjApOwotCi0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9kdmNzLncz
Lm9yZy9oZy9GWFRGL3Jhdy1maWxlL3RpcC9maWx0ZXJzL2luZGV4Lmh0bWwjZ3JheXNjYWxlRXF1
aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0K
LSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiArIDAuNzg3NCAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAu
NzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAg
ICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiArIDAuMjg0OCAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAu
MDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
ICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAt
IDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAg
ICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiArIDAuOTI3OCAqIG9uZU1pbnVzQW1v
dW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAg
ICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAg
ICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAg
ICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRS
SVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICAgICAgZWZm
ZWN0ID0gY3JlYXRlQmx1ckVmZmVjdCgqdGhpcywgZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlv
bj4oKm9wZXJhdGlvbiksIGNvbnN1bWVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAgICAgICAgYXV0
byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVz
QW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwg
MS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9y
YXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAotICAgICAgICAg
ICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAgIFZlY3Rv
cjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAq
IG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAs
Ci0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkg
KiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAg
ICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWlu
dXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEg
KyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAgIDAsCi0g
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVh
dGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0
ZXJzKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdI
VE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KCp0aGlz
LCBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3Bl
cmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVy
T3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsg
bmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAg
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICAgICAgICAgIGVmZmVjdCA9
IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAg
ICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVj
dG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9y
TWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xv
ck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZN
b3ZlKGlucHV0UGFyYW1ldGVycykpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BT
aGFkb3dFZmZlY3QoKnRoaXMsIGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpv
cGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRy
YW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24u
dHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9h
dCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0g
MiAqIGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1v
dW50OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlv
bjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhp
cywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwg
bnVsbEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6R1JBWVNDQUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0
KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAt
YXBwbGUtY29sb3ItZmlsdGVyLgorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90YXRl
RWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigq
b3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246Ok9QQUNJVFk6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
dHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQg
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3Vu
dCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAg
ICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0
ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rpb24sIG51bGxG
dW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKKworICAgICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52
ZXJ0RWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0
byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAg
ICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5z
ZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVu
dFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVPcGFjaXR5RWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAgICAgICAg
ICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21w
b25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAg
ICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5F
QVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNv
bXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVy
RnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmlu
dGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZm
ZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9u
LCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgICAgICAgICBlZmZlY3Qg
PSBjcmVhdGVTYXR1cmF0ZUVmZmVjdCgqdGhpcywgZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgICAgIGF1
dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0aW9uID0gZmxvYXRWYWx1ZUZv
ckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAwKTsKLSAgICAgICAgICAgIGVm
ZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0ZERldmlhdGlvbiwgc3RkRGV2
aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkgPyBFREdF
TU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVT
ZXBpYUVmZmVjdCgqdGhpcywgZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBhdXRvJiBk
cm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbj4o
ZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNoYWRvdzo6Y3Jl
YXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCBkcm9wU2hhZG93
T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRyb3BTaGFkb3dPcGVy
YXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJhdGlvbi5j
b2xvcigpLCAxKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlJFRkVSRU5DRToKKyAgICAgICAgICAgIGZpbHRlciA9IGNyZWF0ZVNWR0ZpbHRlcigqdGhp
cywgZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSwgcmVuZGVy
ZXIsICpwcmV2aW91c0VmZmVjdCk7CisgICAgICAgICAgICBlZmZlY3QgPSBudWxscHRyOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZmlsdGVyKSB7CisgICAgICAgICAg
ICBlZmZlY3QgPSBmaWx0ZXItPmxhc3RFZmZlY3QoKTsKKyAgICAgICAgICAgIHNldHVwTGFzdEVm
ZmVjdFByb3BlcnRpZXMoKmVmZmVjdCwgY29uc3VtZXIpOworICAgICAgICAgICAgbV9mdW5jdGlv
bnMuYXBwZW5kKGZpbHRlci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIHByZXZpb3Vz
RWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIGlmIChlZmZlY3QpIHsKLSAgICAgICAgICAgIC8vIFVubGlr
ZSBTVkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVuY3Rpb25zIG9uIHRo
ZSBmaWx0ZXIKLSAgICAgICAgICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVyZSBzaG91bGQgbm90
IGNsaXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJlZ2lvbnMuCi0gICAgICAgICAgICBlZmZlY3Qt
PnNldENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0
aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChm
aWx0ZXJPcGVyYXRpb24udHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7Ci0g
ICAgICAgICAgICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShwcmV2aW91
c0VmZmVjdCkgfTsKLSAgICAgICAgICAgICAgICBtX2VmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcygqZWZm
ZWN0LCBjb25zdW1lcik7CisgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBX
VEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OworICAgICAgICAgICAgbV9mdW5jdGlvbnMuYXBwZW5k
KHsgKmVmZmVjdCB9KTsKICAgICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZl
Y3QpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gSWYgd2UgZGlkbid0IG1ha2UgYW55IGVm
ZmVjdHMsIHRlbGwgb3VyIGNhbGxlciB3ZSBhcmUgbm90IHZhbGlkLgotICAgIGlmIChtX2VmZmVj
dHMuaXNFbXB0eSgpKQorICAgIGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIG1fZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgIG1fZnVuY3Rp
b25zLnNocmlua1RvRml0KCk7CisKKyAgICAvLyBUaGlzIHdpbGwgc2V0IHRoZSBmaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24gYW5kIG1heEVmZmVjdFJlY3QgZm9yIHRoZSBGaWx0ZXJFZmZlY3QgY2hh
aW4uCisgICAgZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiAKLSAgICBzZXRN
YXhFZmZlY3RSZWN0cyhtX3NvdXJjZURyYXdpbmdSZWdpb24pOwogI2lmIFVTRShDT1JFX0lNQUdF
KQogICAgIGlmICghbV9maWx0ZXJSZW5kZXJlcikKLSAgICAgICAgbV9maWx0ZXJSZW5kZXJlciA9
IEZpbHRlckVmZmVjdFJlbmRlcmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGluZ3MoKS5jb3Jl
SW1hZ2VBY2NlbGVyYXRlZEZpbHRlclJlbmRlckVuYWJsZWQoKSwgbV9lZmZlY3RzLmxhc3QoKS5n
ZXQoKSk7CisgICAgICAgIG1fZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6
dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRpbmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJS
ZW5kZXJFbmFibGVkKCksICpsYXN0RWZmZWN0KCkpOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK0dyYXBoaWNzQ29udGV4dCogQ1NTRmlsdGVyOjppbnB1dENvbnRleHQoKQoreworICAg
IHJldHVybiBzb3VyY2VJbWFnZSgpID8gJnNvdXJjZUltYWdlKCktPmNvbnRleHQoKSA6IG51bGxw
dHI7Cit9CisKIGJvb2wgQ1NTRmlsdGVyOjp1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVjdCkKIHsKICAgICBpZiAoZmlsdGVyUmVjdC5pc0VtcHR5KCkgfHwg
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGZpbHRlclJlY3Quc2l6ZSgpKSkKQEAgLTMz
MSw1MyArMzU1LDY1IEBAIHZvaWQgQ1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVl
ZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgdGFyZ2V0Q29udGV4CiAgICAgaWYgKG1fZ3JhcGhp
Y3NCdWZmZXJBdHRhY2hlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBsb2dpY2FsU2l6
ZSA9IG1fc291cmNlRHJhd2luZ1JlZ2lvbi5zaXplKCk7CisgICAgYXV0byBsb2dpY2FsU2l6ZSA9
IHNvdXJjZUltYWdlUmVjdCgpLnNpemUoKTsKICAgICBpZiAoIXNvdXJjZUltYWdlKCkgfHwgc291
cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAhPSBsb2dpY2FsU2l6ZSkgewogI2lmIFVTRShESVJF
Q1QyRCkKLSAgICAgICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2Fs
U2l6ZSwgcmVuZGVyaW5nTW9kZSgpLCAmdGFyZ2V0Q29udGV4dCwgZmlsdGVyU2NhbGUoKSwgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0OjpCR1JBOCkpOworICAgICAg
ICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZW5kZXJp
bmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0odGFy
Z2V0Q29udGV4dCk7CiAgICAgICAgIFJlbmRlcmluZ01vZGUgbW9kZSA9IG1fZmlsdGVyUmVuZGVy
ZXIgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IHJlbmRlcmluZ01vZGUoKTsKLSAgICAg
ICAgc2V0U291cmNlSW1hZ2UoSW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgbW9kZSwg
ZmlsdGVyU2NhbGUoKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCksIFBpeGVsRm9ybWF0
OjpCR1JBOCkpOworICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxv
Z2ljYWxTaXplLCBtb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxG
b3JtYXQ6OkJHUkE4KSk7CiAjZW5kaWYKKyAgICAgICAgaWYgKGF1dG8gY29udGV4dCA9IGlucHV0
Q29udGV4dCgpKQorICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyU2NhbGUoKSk7CiAg
ICAgfQogICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IHRydWU7CiB9CiAKK1JlZlB0cjxG
aWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6bGFzdEVmZmVjdCgpCit7CisgICAgaWYgKG1fZnVuY3Rp
b25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvJiBmdW5j
dGlvbiA9IG1fZnVuY3Rpb25zLmxhc3QoKTsKKyAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVy
KCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+
bGFzdEVmZmVjdCgpOworCisgICAgcmV0dXJuIGRvd25jYXN0PEZpbHRlckVmZmVjdD4oZnVuY3Rp
b24ucHRyKCkpOworfQorCiB2b2lkIENTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZl
U3VicmVnaW9uKCkKIHsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5n
ZXQoKTsKLSAgICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
OwotICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0Lm1heEVmZmVjdFJlY3QoKTsK
KyAgICBhdXRvIGVmZmVjdCA9IGxhc3RFZmZlY3QoKTsKKyAgICBlZmZlY3QtPmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgIEZsb2F0UmVjdCBzdWJSZWdpb24gPSBlZmZl
Y3QtPm1heEVmZmVjdFJlY3QoKTsKICAgICAvLyBBdCBsZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhh
cyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwgcmVjYWxjdWxhdGUgdGhlIGVmZmVjdCBzaXplcyB3aXRo
IG5ldyBzY2FsZSBmYWN0b3JzLgotICAgIEZsb2F0U2l6ZSBzY2FsZTsKLSAgICBpZiAoSW1hZ2VC
dWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5zaXplKCksIHNjYWxlKSkgewotICAg
ICAgICBzZXRGaWx0ZXJSZXNvbHV0aW9uKHNjYWxlKTsKLSAgICAgICAgbGFzdEVmZmVjdC5kZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICBGbG9hdFNpemUgZmlsdGVyU2Nh
bGUgeyAxLCAxIH07CisgICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJS
ZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSkpIHsKKyAgICAgICAgc2V0RmlsdGVyU2NhbGUoZmls
dGVyU2NhbGUpOworICAgICAgICBlZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOwogICAgIH0KIH0KIAogdm9pZCBDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVz
dWx0cygpCiB7CiAgICAgbV9zb3VyY2VHcmFwaGljLT5jbGVhclJlc3VsdCgpOwotICAgIGlmICht
X3NvdXJjZUFscGhhKQotICAgICAgICBtX3NvdXJjZUFscGhhLT5jbGVhclJlc3VsdCgpOwotICAg
IGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVz
dWx0KCk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQorICAgICAgICBm
dW5jdGlvbi0+Y2xlYXJSZXN1bHQoKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkKIHsK
LSAgICBhdXRvJiBlZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOworICAgIGF1dG8gZWZm
ZWN0ID0gbGFzdEVmZmVjdCgpOwogICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAg
IG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cyhlZmZlY3QpOworICAgICAgICBtX2ZpbHRl
clJlbmRlcmVyLT5hcHBseUVmZmVjdHMoKmVmZmVjdCk7CiAgICAgICAgIGlmIChtX2ZpbHRlclJl
bmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZWZmZWN0LnRyYW5zZm9ybVJlc3Vs
dENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgICAgICAgICAg
ZWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBlZmZl
Y3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgZWZmZWN0LT5hcHBseSgpOworICAgIGVmZmVj
dC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0Io
KSk7CiB9CiAKIExheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9y
RGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGRpcnR5UmVjdCkKQEAgLTM5MCwzNCArNDI2LDMwIEBAIExheW91dFJlY3QgQ1NTRmlsdGVy
Ojpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZp
bHRlCiAgICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50OwogfQogCi1JbWFnZUJ1ZmZlciogQ1NTRmls
dGVyOjpvdXRwdXQoKSBjb25zdAorSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkKIHsK
ICAgICBpZiAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQo
KSkKICAgICAgICAgcmV0dXJuIG1fZmlsdGVyUmVuZGVyZXItPm91dHB1dCgpOwogICAgIAotICAg
IHJldHVybiBtX2VmZmVjdHMubGFzdCgpLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIHJldHVy
biBsYXN0RWZmZWN0KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7CiB9CiAKIHZvaWQgQ1NTRmlsdGVy
OjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCiB7
Ci0gICAgbV9zb3VyY2VEcmF3aW5nUmVnaW9uID0gc291cmNlSW1hZ2VSZWN0OwotICAgIHNldE1h
eEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgc2V0RmlsdGVyUmVnaW9uKHNvdXJj
ZUltYWdlUmVjdCk7Ci0gICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0gZmFsc2U7Ci19Cisg
ICAgYXV0byBzY2FsZWRTb3VyY2VJbWFnZVJlY3QgPSBzb3VyY2VJbWFnZVJlY3Q7CisgICAgc2Nh
bGVkU291cmNlSW1hZ2VSZWN0LnNjYWxlKGZpbHRlclNjYWxlKCkpOwogCi12b2lkIENTU0ZpbHRl
cjo6c2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQotewotICAg
IGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPnNldE1heEVm
ZmVjdFJlY3QoZWZmZWN0UmVjdCk7CisgICAgRmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24oc291cmNl
SW1hZ2VSZWN0KTsKKyAgICBGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdChzY2FsZWRTb3VyY2VJ
bWFnZVJlY3QpOworICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOwogfQogCi1J
bnRSZWN0IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0CitJbnRSZWN0IENTU0ZpbHRlcjo6
b3V0cHV0UmVjdCgpCiB7Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCku
Z2V0KCk7CisgICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7CiAgICAgCi0gICAgaWYgKGxh
c3RFZmZlY3QuaGFzUmVzdWx0KCkgfHwgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5k
ZXJlci0+aGFzUmVzdWx0KCkpKQotICAgICAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRS
ZWdpb25PZklucHV0UGl4ZWxCdWZmZXIoSW50UmVjdCB7IG1fZmlsdGVyUmVnaW9uIH0pOworICAg
IGlmIChlZmZlY3QtPmhhc1Jlc3VsdCgpIHx8IChtX2ZpbHRlclJlbmRlcmVyICYmIG1fZmlsdGVy
UmVuZGVyZXItPmhhc1Jlc3VsdCgpKSkKKyAgICAgICAgcmV0dXJuIGVmZmVjdC0+cmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dFBpeGVsQnVmZmVyKEludFJlY3QgeyBmaWx0ZXJSZWdpb24oKSB9KTsKICAg
ICAKICAgICByZXR1cm4geyB9OwogfQpAQCAtNDMwLDggKzQ2Miw5IEBAIEludE91dHNldHMgQ1NT
RmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKICAgICBpZiAoIW1fb3V0c2V0cy5pc1plcm8oKSkKICAg
ICAgICAgcmV0dXJuIG1fb3V0c2V0czsKIAotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZl
Y3RzKQotICAgICAgICBtX291dHNldHMgKz0gZWZmZWN0LT5vdXRzZXRzKCk7CisgICAgZm9yIChh
dXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQorICAgICAgICBtX291dHNldHMgKz0gZnVuY3Rp
b24tPm91dHNldHMoKTsKKwogICAgIHJldHVybiBtX291dHNldHM7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9DU1NGaWx0ZXIuaAppbmRleCAwMGI5MTkxN2I4MDRjOTJkOTQwOGI3NThlMzc1YzI1
MmYyOWRiMGM1Li40ZTIyNTE0ODA5ODYzYzhiYjY0MmU0MDA2OTQxZDJlZjllMWQ3OTE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCkBAIC0zOCw2OSArMzgsNTAgQEAgY2xhc3Mg
RmlsdGVyT3BlcmF0aW9uczsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFJlZmVyZW5j
ZUZpbHRlck9wZXJhdGlvbjsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBTb3VyY2VBbHBo
YTsKIGNsYXNzIFNvdXJjZUdyYXBoaWM7CiAKIGVudW0gY2xhc3MgRmlsdGVyQ29uc3VtZXIgeyBG
aWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsKIAogY2xhc3MgQ1NTRmlsdGVyIGZpbmFs
IDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJp
ZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENT
U0ZpbHRlcj4gY3JlYXRlKCk7CisgICAgc3RhdGljIFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZShjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IgPSAx
KTsKIAogICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAg
IHZvaWQgc2V0RmlsdGVyUmVnaW9uKGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uKSB7IG1f
ZmlsdGVyUmVnaW9uID0gZmlsdGVyUmVnaW9uOyB9Ci0KLSAgICBJbWFnZUJ1ZmZlciogb3V0cHV0
KCkgY29uc3Q7Ci0KLSAgICBib29sIGJ1aWxkKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiwgRmlsdGVyQ29uc3VtZXIpOwotICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVS
ZXN1bHRzKCk7Ci0gICAgdm9pZCBhcHBseSgpOwogCiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVsczsgfQog
ICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4o
KSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luOyB9CiAKKyAgICBib29sIGJ1aWxkKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiwgRmlsdGVyQ29uc3VtZXIpOwogICAgIHZvaWQgZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Q7CiAK
LXByaXZhdGU6Ci0gICAgQ1NTRmlsdGVyKCk7Ci0gICAgdmlydHVhbCB+Q1NTRmlsdGVyKCk7Ci0K
LSAgICBib29sIGlzQ1NTRmlsdGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgRmxvYXRSZWN0IHNvdXJjZUltYWdlUmVjdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc291
cmNlRHJhd2luZ1JlZ2lvbjsgfQotCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fZmlsdGVyUmVnaW9uOyB9Ci0gICAgRmxvYXRSZWN0IGZpbHRlclJl
Z2lvbkluVXNlclNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0K
LQotICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKFJlbmRlckVs
ZW1lbnQmLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0LCBSZWZlcmVuY2VGaWx0ZXJPcGVy
YXRpb24mKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRS
ZWN0Jik7CisgICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKKyAgICB2b2lkIGFw
cGx5KCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGlucHV0Q29udGV4dCgpOworICAgIEltYWdl
QnVmZmVyKiBvdXRwdXQoKTsKKyAgICBJbnRSZWN0IG91dHB1dFJlY3QoKTsKIAogICAgIGJvb2wg
dXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpOwogICAg
IHZvaWQgYWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKIAotICAgIEludFJlY3Qgb3V0cHV0UmVjdCgpIGNvbnN0OwotCiAgICAgTGF5b3V0UmVjdCBj
b21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRl
ckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCk7CiAKLSAgICBGbG9hdFJlY3Qg
bV9zb3VyY2VEcmF3aW5nUmVnaW9uOwotICAgIEZsb2F0UmVjdCBtX2ZpbHRlclJlZ2lvbjsKK3By
aXZhdGU6CisgICAgQ1NTRmlsdGVyKGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzLCBib29s
IGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luLCBmbG9hdCBz
Y2FsZUZhY3Rvcik7CisKKyAgICBib29sIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luIHsg
ZmFsc2UgfTsKIAotICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gbV9lZmZlY3RzOwogICAg
IFJlZjxTb3VyY2VHcmFwaGljPiBtX3NvdXJjZUdyYXBoaWM7Ci0gICAgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gbV9zb3VyY2VBbHBoYTsKKyAgICBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9m
dW5jdGlvbnM7CiAKICAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOwogCi0gICAgYm9v
bCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNGaWx0
ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hv
dWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMGMyNjY5NjI5
OTE3NGJkNmZkODljNjJiMWEwMjI5NmZhODllNGJkOS4uZjdlNzNiMmY1MDE0OGNkNjZjMmI2OWRl
ZjFiMTRhNTM5OTJmMDQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCkBAIC0zMjI2LDcgKzMyMjYsNyBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyOjpz
ZXR1cEZpbHRlcnMoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsCiAKICAgICBh
dXRvIHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5m
by5yb290TGF5ZXIsIG9mZnNldEZyb21Sb290LCB7IH0pOwogCi0gICAgR3JhcGhpY3NDb250ZXh0
KiBmaWx0ZXJDb250ZXh0ID0gcGFpbnRpbmdGaWx0ZXJzLT5iZWdpbkZpbHRlckVmZmVjdChkZXN0
aW5hdGlvbkNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qocm9vdFJlbGF0aXZlQm91bmRzKSwgZW5j
bG9zaW5nSW50UmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpLCBlbmNsb3NpbmdJbnRS
ZWN0KGZpbHRlclJlcGFpbnRSZWN0KSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250
ZXh0ID0gcGFpbnRpbmdGaWx0ZXJzLT5iZWdpbkZpbHRlckVmZmVjdChkZXN0aW5hdGlvbkNvbnRl
eHQsIHJlbmRlcmVyKCksIGVuY2xvc2luZ0ludFJlY3Qocm9vdFJlbGF0aXZlQm91bmRzKSwgZW5j
bG9zaW5nSW50UmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpLCBlbmNsb3NpbmdJbnRS
ZWN0KGZpbHRlclJlcGFpbnRSZWN0KSk7CiAgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyRmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmNwcAppbmRleCAyNTBhN2Q1YzBiYWEwYWM3NDFhOTBjODE4YjYxYTA1Zjk1
Yjk2NGE0Li4xYWU4YzlkMmI4YTIxMmNhZWY5Y2IyOGUxYmZjZGJkMmI3NmRkYjI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcApAQCAtMTE4
LDIzICsxMTgsMTEgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OnJlbW92ZVJlZmVyZW5jZUZp
bHRlckNsaWVudHMoKQogCiB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUpCiB7Ci0gICAgaWYgKCFtX2ZpbHRlcikgewotICAgICAgICBtX2ZpbHRlciA9
IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJTY2FsZShz
Y2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmlu
Z01vZGUpOwotICAgIH0gZWxzZSBpZiAobV9maWx0ZXItPmZpbHRlclNjYWxlKCkgIT0gc2NhbGVG
YWN0b3IpIHsKLSAgICAgICAgbV9maWx0ZXItPnNldEZpbHRlclNjYWxlKHNjYWxlRmFjdG9yKTsK
LSAgICAgICAgbV9maWx0ZXItPmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwotICAgIH0KLQot
ICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBs
YXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCi0gICAgLy8gZ28gdGhyb3VnaCByZWd1bGFy
IHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcu
CiAgICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhlIGVudGlyZSBlZmZlY3RzIGNoYWluIGV2
ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgotICAgIGlmICghbV9maWx0ZXIt
PmJ1aWxkKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCBGaWx0ZXJDb25zdW1l
cjo6RmlsdGVyUHJvcGVydHkpKQotICAgICAgICBtX2ZpbHRlciA9IG51bGxwdHI7CisgICAgbV9m
aWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlci5zdHlsZSgpLmZpbHRlcigpLCByZW5k
ZXJpbmdNb2RlLCBzY2FsZUZhY3Rvcik7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5
ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9u
Q29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVj
dCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQorR3JhcGhp
Y3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNz
Q29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0
LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewogICAgIGlmICghbV9maWx0
ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTQ1LDYgKzEzMywxMyBAQCBHcmFwaGlj
c0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3ND
b250ZXh0JiBkZXN0aW5hdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGJvb2wgaGFz
VXBkYXRlZEJhY2tpbmdTdG9yZSA9IGZpbHRlci51cGRhdGVCYWNraW5nU3RvcmVSZWN0KGZpbHRl
clNvdXJjZVJlY3QpOworICAgIGlmIChoYXNVcGRhdGVkQmFja2luZ1N0b3JlIHx8ICFtX2ZpbHRl
ci0+bGFzdEVmZmVjdCgpKSB7CisgICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVp
bGQsIHJlbW92ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCisg
ICAgICAgIC8vIGdvIHRocm91Z2ggcmVndWxhciBwcm9jZXNzaW5nIChlLmcuIGNvbXBvc2l0aW5n
KSwgYnV0IG5ldmVyIGFwcGx5IGFueXRoaW5nLgorICAgICAgICBpZiAoIW1fZmlsdGVyLT5idWls
ZChyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZp
bHRlclByb3BlcnR5KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAK
ICAgICBpZiAoIWZpbHRlci5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSkKICAgICAgICAgbV9y
ZXBhaW50UmVjdCA9IGRpcnR5UmVjdDsKICAgICBlbHNlIHsKQEAgLTE5MCw4ICsxODUsMTEgQEAg
dm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0KQogICAgIExheW91dFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIu
b3V0cHV0UmVjdCgpOwogICAgIGRlc3RSZWN0Lm1vdmUobV9wYWludE9mZnNldC54KCksIG1fcGFp
bnRPZmZzZXQueSgpKTsKIAotICAgIGlmIChhdXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIub3V0
cHV0KCkpCisgICAgaWYgKGF1dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRwdXQoKSkgewor
ICAgICAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoeyAxIC8gZmlsdGVyLmZpbHRlclNjYWxl
KCkud2lkdGgoKSwgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLmhlaWdodCgpIH0pOwogICAgICAg
ICBkZXN0aW5hdGlvbkNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCpvdXRwdXRCdWZmZXIsIHNuYXBS
ZWN0VG9EZXZpY2VQaXhlbHMoZGVzdFJlY3QsIG1fbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LnNjYWxl
KGZpbHRlci5maWx0ZXJTY2FsZSgpKTsKKyAgICB9CiAKICAgICBmaWx0ZXIuY2xlYXJJbnRlcm1l
ZGlhdGVSZXN1bHRzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlcnMuaAppbmRleCAzZGExNDBhNWM4OGYxNTUzMTkwYjcwMDNkN2U3ODQ0YzkxOTQ1YmY3
Li4zYTc0OTk1ZjFmODRiZDk3M2VkMmI4OGQzMDQzOTdiNGM0NGRhMDM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCkBAIC02Myw3ICs2Myw3IEBA
IHB1YmxpYzoKICAgICAvLyBQZXIgcmVuZGVyCiAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludFJlY3Q7IH0KIAotICAgIEdyYXBoaWNzQ29udGV4dCog
YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNv
bnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVj
dCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVjdCk7CisgICAgR3JhcGhpY3NDb250
ZXh0KiBiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4
dCwgUmVuZGVyRWxlbWVudCYsIGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGRpcnR5UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJSZXBhaW50UmVj
dCk7CiAgICAgdm9pZCBhcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0
aW9uQ29udGV4dCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDE5NTA5ZDk3MThh
ZmYxMTBmODQxZWM0OTc2Zjk3ZmIxYTkzNGQ4YTUuLjEwZTdiOGZhODYzMjBhN2NlYzNmNDBiNWE0
ZTU1MDEwMzE4ZmJjOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC04Miw0MCArODIsNiBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpyZW1vdmVDbGllbnRGcm9tQ2FjaGUoUmVuZGVyRWxl
bWVudCYgY2xpZW50LCBib29sCiAgICAgbWFya0NsaWVudEZvckludmFsaWRhdGlvbihjbGllbnQs
IG1hcmtGb3JJbnZhbGlkYXRpb24gPyBCb3VuZGFyaWVzSW52YWxpZGF0aW9uIDogUGFyZW50T25s
eUludmFsaWRhdGlvbik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBS
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzKFNWR0ZpbHRlciYgZmlsdGVy
KSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMg
PSAyMDA7Ci0gICAgaWYgKGZpbHRlckVsZW1lbnQoKS5jb3VudENoaWxkTm9kZXMoKSA+IG1heENv
dW50Q2hpbGROb2RlcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGbG9hdFJlY3Qg
dGFyZ2V0Qm91bmRpbmdCb3ggPSBmaWx0ZXIudGFyZ2V0Qm91bmRpbmdCb3goKTsKLQotICAgIC8v
IEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCi0gICAgYXV0byBidWlsZGVyID0gbWFrZVVuaXF1
ZTxTVkdGaWx0ZXJCdWlsZGVyPihTb3VyY2VHcmFwaGljOjpjcmVhdGUoZmlsdGVyKSk7Ci0gICAg
YnVpbGRlci0+c2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRz
KCkpOwotICAgIGJ1aWxkZXItPnNldFRhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94
KTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM+KGZpbHRlckVsZW1lbnQoKSkpIHsKLSAgICAg
ICAgYXV0byBlZmZlY3QgPSBlbGVtZW50LmJ1aWxkKGJ1aWxkZXIuZ2V0KCksIGZpbHRlcik7Ci0g
ICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBidWlsZGVyLT5jbGVhckVmZmVjdHMo
KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIGJ1aWxk
ZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QuY29weVJlZigpLCBlbGVt
ZW50LnJlbmRlcmVyKCkpOwotICAgICAgICBlbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhl
ZmZlY3QuZ2V0KCkpOwotICAgICAgICBlZmZlY3QtPnNldEVmZmVjdEJvdW5kYXJpZXMoU1ZHTGVu
Z3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZTxTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM+KCZlbGVtZW50LCBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSwgdGFy
Z2V0Qm91bmRpbmdCb3gpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQucmVuZGVyZXIoKSkgewotI2lm
IEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKLSAgICAgICAgICAg
IGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlbGVtZW50LnJlbmRlcmVyKCktPnN0eWxl
KCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkgPT0gQ29sb3JJbnRlcnBv
bGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IoKSA6
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNlCi0gICAgICAgICAgICBlZmZl
Y3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkp
OwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YWRkKGVsZW1lbnQucmVzdWx0
KCksIFdURk1vdmUoZWZmZWN0KSk7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyOwotfQotCiBi
b29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYsIEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQs
IE9wdGlvblNldDxSZW5kZXJTVkdSZXNvdXJjZU1vZGU+IHJlc291cmNlTW9kZSkKIHsKICAgICBB
U1NFUlQoY29udGV4dCk7CkBAIC0xNDMsNDQgKzEwOSwzNSBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBFbGltaW5hdGUgc2hlYXIgb2Yg
dGhlIGFic29sdXRlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCwgdG8gYmUgYWJsZSB0byBwcm9kdWNl
IHVuc2hlYXJlZCB0aWxlIGltYWdlcyBmb3IgZmVUaWxlLgotICAgIGZpbHRlckRhdGEtPnNoZWFy
RnJlZUFic29sdXRlVHJhbnNmb3JtID0gQWZmaW5lVHJhbnNmb3JtKGFic29sdXRlVHJhbnNmb3Jt
LnhTY2FsZSgpLCAwLCAwLCBhYnNvbHV0ZVRyYW5zZm9ybS55U2NhbGUoKSwgMCwgMCk7CisgICAg
RmxvYXRTaXplIGZpbHRlclNjYWxlKGFic29sdXRlVHJhbnNmb3JtLnhTY2FsZSgpLCBhYnNvbHV0
ZVRyYW5zZm9ybS55U2NhbGUoKSk7CiAKICAgICAvLyBEZXRlcm1pbmUgYWJzb2x1dGUgYm91bmRh
cmllcyBvZiB0aGUgZmlsdGVyIGFuZCB0aGUgZHJhd2luZyByZWdpb24uCiAgICAgZmlsdGVyRGF0
YS0+ZHJhd2luZ1JlZ2lvbiA9IHJlbmRlcmVyLnN0cm9rZUJvdW5kaW5nQm94KCk7CiAgICAgZmls
dGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbi5pbnRlcnNlY3QoZmlsdGVyRGF0YS0+Ym91bmRhcmllcyk7
Ci0gICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lvbiA9IGZpbHRlckRhdGEtPnNoZWFy
RnJlZUFic29sdXRlVHJhbnNmb3JtLm1hcFJlY3QoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbik7
Ci0KLSAgICAvLyBDcmVhdGUgdGhlIFNWR0ZpbHRlciBvYmplY3QuCi0gICAgYm9vbCBwcmltaXRp
dmVCb3VuZGluZ0JveE1vZGUgPSBmaWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSA9PSBT
VkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7Ci0gICAgZmlsdGVy
RGF0YS0+ZmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJz
b2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlRHJhd2luZ1JlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gs
IGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSk7Ci0KLSAg
ICAvLyBDcmVhdGUgYWxsIHJlbGV2YW50IGZpbHRlciBwcmltaXRpdmVzLgotICAgIGZpbHRlckRh
dGEtPmJ1aWxkZXIgPSBidWlsZFByaW1pdGl2ZXMoKmZpbHRlckRhdGEtPmZpbHRlcik7Ci0gICAg
aWYgKCFmaWx0ZXJEYXRhLT5idWlsZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAv
LyBEZXRlcm1pbmUgc2NhbGUgZmFjdG9yIGZvciBmaWx0ZXIuIFRoZSBzaXplIG9mIGludGVybWVk
aWF0ZSBJbWFnZUJ1ZmZlcnMgc2hvdWxkbid0IGJlIGJpZ2dlciB0aGFuIGtNYXhGaWx0ZXJTaXpl
LgotICAgIEZsb2F0UmVjdCB0ZW1wU291cmNlUmVjdCA9IGFic29sdXRlRHJhd2luZ1JlZ2lvbjsK
LSAgICBGbG9hdFNpemUgc2NhbGUoMSwgMSk7Ci0gICAgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKHRlbXBTb3VyY2VSZWN0LnNpemUoKSwgc2NhbGUpOwotICAgIHRlbXBTb3VyY2VSZWN0
LnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKLQotICAgIC8vIFNldCB0aGUg
c2NhbGUgbGV2ZWwgaW4gU1ZHRmlsdGVyLgotICAgIGZpbHRlckRhdGEtPmZpbHRlci0+c2V0Rmls
dGVyUmVzb2x1dGlvbihzY2FsZSk7CisgICAgRmxvYXRSZWN0IGFic29sdXRlRHJhd2luZ1JlZ2lv
biA9IGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb247CisgICAgYWJzb2x1dGVEcmF3aW5nUmVnaW9u
LnNjYWxlKGZpbHRlclNjYWxlKTsKKyAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
YWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUpOwogCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVy
RWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwot
ICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5w
dXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQorICAgIC8vIENyZWF0ZSB0aGUgU1ZHRmls
dGVyIG9iamVjdC4KKyAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0
ZXJCdWlsZGVyPigpOworICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRl
KGZpbHRlckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxkZXIsIGZpbHRlclNjYWxlLCBhYnNv
bHV0ZURyYXdpbmdSZWdpb24sIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHRhcmdldEJvdW5kaW5n
Qm94KTsKKyAgICBpZiAoIWZpbHRlckRhdGEtPmZpbHRlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGF1dG8gbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RF
ZmZlY3QoKTsKKyAgICBBU1NFUlQobGFzdEVmZmVjdCk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0o
RmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZVxuIiA8PCAqZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpKTsKIAogICAgIGxhc3RF
ZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwogICAgIEZsb2F0UmVj
dCBzdWJSZWdpb24gPSBsYXN0RWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7CisKICAgICAvLyBBdCBs
ZWFzdCBvbmUgRmlsdGVyRWZmZWN0IGhhcyBhIHRvbyBiaWcgaW1hZ2Ugc2l6ZSwKICAgICAvLyBy
ZWNhbGN1bGF0ZSB0aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCi0gICAg
aWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBzY2Fs
ZSkpIHsKLSAgICAgICAgZmlsdGVyRGF0YS0+ZmlsdGVyLT5zZXRGaWx0ZXJSZXNvbHV0aW9uKHNj
YWxlKTsKKyAgICBpZiAoSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHN1YlJlZ2lvbi5z
aXplKCksIGZpbHRlclNjYWxlKSkgeworICAgICAgICBmaWx0ZXJEYXRhLT5maWx0ZXItPnNldEZp
bHRlclNjYWxlKGZpbHRlclNjYWxlKTsKICAgICAgICAgbGFzdEVmZmVjdC0+ZGV0ZXJtaW5lRmls
dGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CiAgICAgfQogCkBAIC0xOTQsOSArMTUxLDcgQEAgYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICB9CiAKICAgICAvLyBDaGFuZ2UgdGhlIGNvb3JkaW5h
dGUgdHJhbnNmb3JtYXRpb24gYXBwbGllZCB0byB0aGUgZmlsdGVyZWQgZWxlbWVudCB0byByZWZs
ZWN0IHRoZSByZXNvbHV0aW9uIG9mIHRoZSBmaWx0ZXIuCi0gICAgQWZmaW5lVHJhbnNmb3JtIGVm
ZmVjdGl2ZVRyYW5zZm9ybTsKLSAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lk
dGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwotICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShm
aWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CisgICAgQWZmaW5lVHJhbnNm
b3JtIGVmZmVjdGl2ZVRyYW5zZm9ybSA9IEFmZmluZVRyYW5zZm9ybShmaWx0ZXJTY2FsZS53aWR0
aCgpLCAwLCAwLCBmaWx0ZXJTY2FsZS5oZWlnaHQoKSwgMCwgMCk7CiAKICAgICBhdXRvIHJlbmRl
cmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQo
KSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZDsKICNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCkBA
IC0yODksMTMgKzI0NCw5IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBs
eVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljCiAKICAgICAgICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gbGFzdEVmZmVjdC0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsK
ICAgICAgICAgaWYgKHJlc3VsdEltYWdlKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5jb25jYXRD
VE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybS5pbnZlcnNlKCkudmFsdWVf
b3IoQWZmaW5lVHJhbnNmb3JtKCkpKTsKLQotICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxv
YXRTaXplKDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLndpZHRoKCks
IDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpLmhlaWdodCgpKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSAvIGZpbHRlckRhdGEuZmlsdGVy
LT5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyU2Nh
bGUoKS5oZWlnaHQoKSkpOwogICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKCpy
ZXN1bHRJbWFnZSwgbGFzdEVmZmVjdC0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5zY2FsZShmaWx0ZXJEYXRhLmZpbHRlci0+ZmlsdGVyUmVzb2x1dGlvbigpKTsK
LQotICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJz
b2x1dGVUcmFuc2Zvcm0pOworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoZmlsdGVyRGF0YS5m
aWx0ZXItPmZpbHRlclNjYWxlKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIGZpbHRlckRhdGEu
c291cmNlR3JhcGhpY0J1ZmZlciA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBjNjUwMjFiZWUwMzU1
NjVhYWIzMWM2N2ZiOTMxOWY4OGU2MTgwN2M3Li42NGUzYWM1YWVhYzgwYWRmOWUyNmFiNGVmNmI4
NWEyN2MyNTQyZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQzMiwxMSArNDMyLDEzIEBAIHZvaWQgd3JpdGVT
VkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUmVzb3Vy
Y2VDb250YWluZXImCiAgICAgICAgIHRzIDw8ICJcbiI7CiAgICAgICAgIC8vIENyZWF0aW5nIGEg
cGxhY2Vob2xkZXIgZmlsdGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgYnVpbGRlci4KICAgICAg
ICAgRmxvYXRSZWN0IGR1bW15UmVjdDsKLSAgICAgICAgYXV0byBkdW1teUZpbHRlciA9IFNWR0Zp
bHRlcjo6Y3JlYXRlKEFmZmluZVRyYW5zZm9ybSgpLCBkdW1teVJlY3QsIGR1bW15UmVjdCwgZHVt
bXlSZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKGF1dG8gYnVpbGRlciA9IGZpbHRlci5idWlsZFBy
aW1pdGl2ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7CisgICAgICAgIEZsb2F0U2l6ZSBkdW1teVNj
YWxlKDEsIDEpOworICAgICAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGF1
dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXIuZmlsdGVyRWxlbWVudCgp
LCBidWlsZGVyLCBkdW1teVNjYWxlLCBkdW1teVJlY3QsIGR1bW15UmVjdCwgZHVtbXlSZWN0KTsK
KyAgICAgICAgaWYgKGR1bW15RmlsdGVyKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtOjpJbmRl
bnRTY29wZSBpbmRlbnRTY29wZSh0cyk7CiAKLSAgICAgICAgICAgIGlmIChGaWx0ZXJFZmZlY3Qq
IGxhc3RFZmZlY3QgPSBidWlsZGVyLT5sYXN0RWZmZWN0KCkpCisgICAgICAgICAgICBpZiAoYXV0
byBsYXN0RWZmZWN0ID0gZHVtbXlGaWx0ZXItPmxhc3RFZmZlY3QoKSkKICAgICAgICAgICAgICAg
ICBsYXN0RWZmZWN0LT5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAocmVzb3VyY2UucmVzb3VyY2VUeXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlw
ZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RkVJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUlt
YWdlLmNwcAppbmRleCAzODVhZjI5MDg0OGEzZDBiODNmMTJhYzk2MTllNmJmOTZjOWYyMzk2Li40
NWY3YzI5NGFkYjk2MWM5MmJmOGMyZmIxOTA3ZTlkYjc5Yjk3YzYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcApAQCAtMzYsMTQg
KzM2LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZFSW1hZ2U6OkZFSW1hZ2UoRmlsdGVy
JiBmaWx0ZXIsIFJlZlB0cjxJbWFnZT4gaW1hZ2UsIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW9WYWx1ZSYgcHJlc2VydmVBc3BlY3RSYXRpbykKLSAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIs
IFR5cGU6OkltYWdlKQorICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlciwgRmlsdGVyRWZmZWN0OjpU
eXBlOjpGRUltYWdlKQogICAgICwgbV9pbWFnZShpbWFnZSkKICAgICAsIG1fcHJlc2VydmVBc3Bl
Y3RSYXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogewogfQogCiBGRUltYWdlOjpGRUltYWdlKEZp
bHRlciYgZmlsdGVyLCBUcmVlU2NvcGUmIHRyZWVTY29wZSwgY29uc3QgU3RyaW5nJiBocmVmLCBj
b25zdCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvVmFsdWUmIHByZXNlcnZlQXNwZWN0UmF0aW8pCi0g
ICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyLCBUeXBlOjpJbWFnZSkKKyAgICA6IEZpbHRlckVmZmVj
dChmaWx0ZXIsIEZpbHRlckVmZmVjdDo6VHlwZTo6RkVJbWFnZSkKICAgICAsIG1fdHJlZVNjb3Bl
KCZ0cmVlU2NvcGUpCiAgICAgLCBtX2hyZWYoaHJlZikKICAgICAsIG1fcHJlc2VydmVBc3BlY3RS
YXRpbyhwcmVzZXJ2ZUFzcGVjdFJhdGlvKQpAQCAtNjIsMTMgKzYyLDE2IEBAIFJlZjxGRUltYWdl
PiBGRUltYWdlOjpjcmVhdGVXaXRoSVJJUmVmZXJlbmNlKEZpbHRlciYgZmlsdGVyLCBUcmVlU2Nv
cGUmIHRyZWVTY29wCiAKIHZvaWQgRkVJbWFnZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KQogewotICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBmaWx0ZXIoKS5hYnNvbHV0ZVRyYW5zZm9y
bSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOworICAgIEZsb2F0UmVjdCBw
YWludFJlY3QgPSBmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICBwYWludFJlY3Quc2Nh
bGUoZmlsdGVyKCkuZmlsdGVyU2NhbGUoKSk7CiAgICAgRmxvYXRSZWN0IHNyY1JlY3Q7CiAgICAg
aWYgKG1faW1hZ2UpIHsKICAgICAgICAgc3JjUmVjdC5zZXRTaXplKG1faW1hZ2UtPnNpemUoKSk7
CiAgICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpby50cmFuc2Zvcm1SZWN0KHBhaW50UmVjdCwg
c3JjUmVjdCk7Ci0gICAgfSBlbHNlIGlmIChSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IHJlZmVy
ZW5jZWRSZW5kZXJlcigpKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFu
c2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygp
KTsKKyAgICB9IGVsc2UgaWYgKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0gcmVmZXJlbmNlZFJl
bmRlcmVyKCkpIHsKKyAgICAgICAgc3JjUmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9j
YWxDb29yZGluYXRlcygpOworICAgICAgICBzcmNSZWN0LnNjYWxlKGZpbHRlcigpLmZpbHRlclNj
YWxlKCkpOworICAgIH0KIAogICAgIGlmIChjbGlwc1RvQm91bmRzKCkpCiAgICAgICAgIHBhaW50
UmVjdC5pbnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKQEAgLTEwMCwxMiArMTAzLDE0IEBAIHZv
aWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAoIXJlc3VsdEltYWdl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBmaWx0ZXIoKS5h
YnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkpOwor
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IGZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAg
IGRlc3RSZWN0LnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAgRmxvYXRSZWN0
IHNyY1JlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKQotICAgICAgICBzcmNSZWN0ID0gZmlsdGVyKCku
YWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxD
b29yZGluYXRlcygpKTsKLSAgICBlbHNlIHsKKyAgICBpZiAocmVuZGVyZXIpIHsKKyAgICAgICAg
c3JjUmVjdCA9IHJlbmRlcmVyLT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpOworICAg
ICAgICBzcmNSZWN0LnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOworICAgIH0gZWxzZSB7
CiAgICAgICAgIHNyY1JlY3QgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2ltYWdlLT5zaXpl
KCkpOwogICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8udHJhbnNmb3JtUmVjdChkZXN0UmVj
dCwgc3JjUmVjdCk7CiAgICAgfQpAQCAtMTE2LDggKzEyMSw3IEBAIHZvaWQgRkVJbWFnZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBhdXRvJiBjb250ZXh0ID0gcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKTsKIAogICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIGFic29sdXRlVHJhbnNmb3JtID0gZmlsdGVyKCkuYWJzb2x1dGVUcmFuc2Zvcm0oKTsK
LSAgICAgICAgY29udGV4dC5jb25jYXRDVE0oYWJzb2x1dGVUcmFuc2Zvcm0pOworICAgICAgICBj
b250ZXh0LnNjYWxlKGZpbHRlcigpLmZpbHRlclNjYWxlKCkpOwogCiAgICAgICAgIFJlZlB0ciBj
b250ZXh0Tm9kZSA9IGRvd25jYXN0PFNWR0VsZW1lbnQ+KHJlbmRlcmVyLT5lbGVtZW50KCkpOwog
ICAgICAgICBpZiAoY29udGV4dE5vZGUtPmhhc1JlbGF0aXZlTGVuZ3RocygpKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmgKaW5kZXggYWMx
NjBlZGNlN2MwZTBhMDY3YmRlZmJkNzA3ZjJhYmU1NTkwODFiNi4uMTY4ODk5MTY0NjJiMTc1MmEz
NDFkNTUxOGFkYTA3NWMzNDllMTYwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaApAQCAtNDIsMTAgKzQyLDYgQEAgcHJpdmF0ZToKICAg
ICBGRUltYWdlKEZpbHRlciYsIFJlZlB0cjxJbWFnZT4sIGNvbnN0IFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW9WYWx1ZSYpOwogICAgIEZFSW1hZ2UoRmlsdGVyJiwgVHJlZVNjb3BlJiwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgU1ZHUHJlc2VydmVBc3BlY3RSYXRpb1ZhbHVlJik7CiAKLSAgICBjb25zdCBj
aGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkZFSW1hZ2UiOyB9Ci0KLSAg
ICBGaWx0ZXJFZmZlY3RUeXBlIGZpbHRlckVmZmVjdFR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBGaWx0ZXJFZmZlY3RUeXBlSW1hZ2U7IH0KLQogICAgIFJlbmRlckVsZW1lbnQqIHJlZmVyZW5j
ZWRSZW5kZXJlcigpIGNvbnN0OwogCiAgICAgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSBm
aW5hbDsKQEAgLTYxLDMgKzU3LDUgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19GSUxURVJfRUZGRUNUKEZFSW1hZ2UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcApp
bmRleCA5YTk0YTQ2MDM1ODc5MDhhMzg0ZDE3NDI3YjM3MTkzNTkyYjdiY2U3Li40YTNkOTJiYmVj
ZTQyNmQ5ZjJiOGU0MTYxNWYxNzk2NTk1OWMwMzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTIyLDI5ICsyMiw3MCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogCisjaW5jbHVkZSAi
U1ZHRmlsdGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGFic29sdXRlVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGFic29sdXRlU291cmNlRHJh
d2luZ1JlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29uc3QgRmxv
YXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpCi0gICAgOiBGaWx0ZXIo
YWJzb2x1dGVUcmFuc2Zvcm0pCi0gICAgLCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1JlZ2lvbihh
YnNvbHV0ZVNvdXJjZURyYXdpbmdSZWdpb24pCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6
OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVy
JiBidWlsZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIEZpbHRlckVm
ZmVjdCYgcHJldmlvdXNFZmZlY3QpCit7CisgICAgcmV0dXJuIGNyZWF0ZShmaWx0ZXJFbGVtZW50
LCBidWlsZGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIGZp
bHRlclJlZ2lvbiwgJnByZXZpb3VzRWZmZWN0KTsKK30KKworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZH
RmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVy
QnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQoreworICAgIHJldHVybiBjcmVhdGUo
ZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmls
dGVyUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgbnVsbHB0cik7Cit9CisKK1JlZlB0cjxTVkdG
aWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQs
IFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUs
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRl
clJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgRmlsdGVyRWZmZWN0
KiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9
IGZpbHRlckVsZW1lbnQucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CisKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpu
ZXcgU1ZHRmlsdGVyKGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwg
dGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSkpOworCisgICAgaWYg
KCFwcmV2aW91c0VmZmVjdCkKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0aW5FZmZlY3RzKFNv
dXJjZUdyYXBoaWM6OmNyZWF0ZShmaWx0ZXIpKTsKKyAgICBlbHNlCisgICAgICAgIGJ1aWxkZXIu
c2V0dXBCdWlsdGluRWZmZWN0cyh7ICpwcmV2aW91c0VmZmVjdCB9KTsKKworICAgIGJ1aWxkZXIu
c2V0VGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIGJ1aWxkZXIuc2V0
UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpKTsKKworICAgIGF1
dG8gbGFzdEVmZmVjdCA9IGJ1aWxkZXIuYnVpbGRGaWx0ZXJFZmZlY3RzKGZpbHRlciwgZmlsdGVy
RWxlbWVudCk7CisgICAgaWYgKCFsYXN0RWZmZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4VG90YWxPZkVmZmVjdElucHV0cyA9
IDEwMDsKKyAgICBpZiAobGFzdEVmZmVjdC0+dG90YWxOdW1iZXJPZkVmZmVjdElucHV0cygpID4g
bWF4VG90YWxPZkVmZmVjdElucHV0cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBm
aWx0ZXItPnNldExhc3RFZmZlY3QoV1RGTW92ZShsYXN0RWZmZWN0KSk7CisgICAgcmV0dXJuIGZp
bHRlcjsKK30KKworU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJT
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBib29sIGVm
ZmVjdEJCb3hNb2RlKQorICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6U1ZHRmlsdGVyLCBmaWx0
ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24pCiAgICAgLCBtX3RhcmdldEJv
dW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQotICAgICwgbV9maWx0ZXJSZWdpb24oZmlsdGVy
UmVnaW9uKQogICAgICwgbV9lZmZlY3RCQm94TW9kZShlZmZlY3RCQm94TW9kZSkKIHsKLSAgICBt
X2Fic29sdXRlRmlsdGVyUmVnaW9uID0gYWJzb2x1dGVUcmFuc2Zvcm0ubWFwUmVjdChmaWx0ZXJS
ZWdpb24pOwogfQogCi1GbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclJlc29sdXRp
b24oRmxvYXRTaXplIHNpemUpIGNvbnN0CitGbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZp
bHRlclNjYWxlKEZsb2F0U2l6ZSBzaXplKSBjb25zdAogewogICAgIGlmIChtX2VmZmVjdEJCb3hN
b2RlKQogICAgICAgICBzaXplID0gc2l6ZSAqIG1fdGFyZ2V0Qm91bmRpbmdCb3guc2l6ZSgpOwog
Ci0gICAgcmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJSZXNvbHV0aW9uKHNpemUpICogbV9h
YnNvbHV0ZUZpbHRlclJlZ2lvbi5zaXplKCkgLyBtX2ZpbHRlclJlZ2lvbi5zaXplKCk7CisgICAg
cmV0dXJuIEZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJTY2FsZShzaXplKTsKK30KKworSW50T3V0c2V0
cyBTVkdGaWx0ZXI6Om91dHNldHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xhc3RFZmZlY3Qt
Pm91dHNldHMoKTsKIH0KIAotUmVmPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNv
bHV0ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdC
b3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKQor
dm9pZCBTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTVkdGaWx0ZXIoYWJzb2x1dGVUcmFuc2Zvcm0sIGFic29sdXRlU291cmNlRHJhd2luZ1JlZ2lv
biwgdGFyZ2V0Qm91bmRpbmdCb3gsIGZpbHRlclJlZ2lvbiwgZWZmZWN0QkJveE1vZGUpKTsKKyAg
ICBtX2xhc3RFZmZlY3QtPmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlci5oCmluZGV4IDgwOTMxNDZkNjRhZjg4ODViYzNkYTQ5MzAyZjVhZWEwZmIxNzAwY2Yu
LjE2NjAxMmZmNGViYWNkMTY1NDRlZTE0MWYwNWQ4Yzg2NzNhMzVmODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oCkBAIC0yMCw0MSArMjAs
NDQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNp
bmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7Citj
bGFzcyBTVkdGaWx0ZXJFbGVtZW50OworCiBjbGFzcyBTVkdGaWx0ZXIgZmluYWwgOiBwdWJsaWMg
RmlsdGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGJvb2wpOwotCi0gICAgRmxvYXRSZWN0IGZpbHRlclJlZ2lvbkluVXNl
clNwYWNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9maWx0ZXJSZWdpb247IH0KLSAgICBGbG9h
dFJlY3QgZmlsdGVyUmVnaW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZUZpbHRl
clJlZ2lvbjsgfQorICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVy
RWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxl
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0
ZXJSZWdpb24sIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpOworICAgIHN0YXRpYyBSZWZQ
dHI8U1ZHRmlsdGVyPiBjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXIm
LCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIHN0YXRpYyBSZWZQdHI8U1ZHRmlsdGVyPiBjcmVhdGUo
U1ZHRmlsdGVyRWxlbWVudCYsIFNWR0ZpbHRlckJ1aWxkZXImLCBjb25zdCBGbG9hdFNpemUmIGZp
bHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIEZp
bHRlckVmZmVjdCogcHJldmlvdXNFZmZlY3QpOwogCi0gICAgRmxvYXRTaXplIHNjYWxlZEJ5Rmls
dGVyUmVzb2x1dGlvbihGbG9hdFNpemUpIGNvbnN0IGZpbmFsOworICAgIEZsb2F0U2l6ZSBzY2Fs
ZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CiAKLSAgICBGbG9hdFJlY3Qg
c291cmNlSW1hZ2VSZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9hYnNvbHV0ZVNvdXJjZURy
YXdpbmdSZWdpb247IH0KICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7
IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAKLSAgICBib29sIGlzU1ZHRmlsdGVyKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxh
c3RFZmZlY3QoKSB7IHJldHVybiBtX2xhc3RFZmZlY3Q7IH0KKyAgICB2b2lkIHNldExhc3RFZmZl
Y3QoUmVmUHRyPEZpbHRlckVmZmVjdD4mJiBsYXN0RWZmZWN0KSB7IG1fbGFzdEVmZmVjdCA9IFdU
Rk1vdmUobGFzdEVmZmVjdCk7IH0KIAogcHJpdmF0ZToKLSAgICBTVkdGaWx0ZXIoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBhYnNvbHV0ZVRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0
ZVNvdXJjZURyYXdpbmdSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gs
IGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsKKyAg
ICBTVkdGaWx0ZXIoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNv
bnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsKKworICAg
IEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJSZXN1
bHQoKSBvdmVycmlkZTsKIAotICAgIEZsb2F0UmVjdCBtX2Fic29sdXRlU291cmNlRHJhd2luZ1Jl
Z2lvbjsKICAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsKLSAgICBGbG9hdFJlY3Qg
bV9hYnNvbHV0ZUZpbHRlclJlZ2lvbjsKLSAgICBGbG9hdFJlY3QgbV9maWx0ZXJSZWdpb247CiAg
ICAgYm9vbCBtX2VmZmVjdEJCb3hNb2RlOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9s
YXN0RWZmZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNWR0ZpbHRlcikKICAgICBzdGF0aWMgYm9vbCBpc1R5
cGUoY29uc3QgV2ViQ29yZTo6RmlsdGVyJiBmaWx0ZXIpIHsgcmV0dXJuIGZpbHRlci5pc1NWR0Zp
bHRlcigpOyB9CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkZpbHRlckZ1
bmN0aW9uJiBmdW5jdGlvbikgeyByZXR1cm4gZnVuY3Rpb24uaXNTVkdGaWx0ZXIoKTsgfQogU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRleCA5NmYzYTgwNTA0
Mjk1NTU4MTAzNGQ5OGE0ZmRhYzRlYWYzMDg3Yjk0Li4wMzg5N2QyYTYwYmNkMzBhZjhiMDUwNGNh
MDk3NmEwZWU1NTVjNmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMjAsMjAgKzIwLDc1IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRlci5oIgogCi0jaW5j
bHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCisjaW5j
bHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAi
U291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKKyNpZiBFTkFCTEUoREVTVElOQVRJ
T05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVy
QnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQordm9pZCBTVkdGaWx0
ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdy
YXBoaWMpCiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0
TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VB
bHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCpzb3VyY2VHcmFwaGljKSk7
CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBz
b3VyY2VHcmFwaGljLnB0cigpKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBo
YTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKHNvdXJjZUdyYXBoaWMpKTsKICAg
ICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9S
X1NQQUNFX0xJTkVBUl9TUkdCKQorc3RhdGljIENvbG9ySW50ZXJwb2xhdGlvbiBjb2xvckludGVy
cG9sYXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKGF1dG8g
cmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci0+
c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKTsKKworICAgIC8v
IFRyeSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5IHZhbHVlIGZyb20gdGhlIGNvbXB1dGVkIHN0
eWxlLgorICAgIGlmIChhdXRvIHZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3RvcigmZWxlbWVu
dCkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMpKSB7
CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIH0KKworICAg
IHJldHVybiBDb2xvckludGVycG9sYXRpb246OkF1dG87Cit9CisjZW5kaWYKKworUmVmUHRyPEZp
bHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RzKEZpbHRlciYg
ZmlsdGVyLCBTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50KQoreworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBtYXhDb3VudENoaWxkTm9kZXMgPSAyMDA7CisgICAgaWYgKGZpbHRlckVs
ZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OworCisgICAg
Zm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KSkgeworICAgICAgICBlZmZlY3Qg
PSBlZmZlY3RFbGVtZW50LmJ1aWxkKHRoaXMsIGZpbHRlcik7CisgICAgICAgIGlmICghZWZmZWN0
KSB7CisgICAgICAgICAgICBjbGVhckVmZmVjdHMoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisKKyAgICAgICAgZWZmZWN0RWxlbWVudC5zZXRTdGFuZGFyZEF0dHJp
YnV0ZXMoZWZmZWN0LmdldCgpKTsKKyAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVz
KFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxlbWVudCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJn
ZXRCb3VuZGluZ0JveCkpOworCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJ
TkVBUl9TUkdCKQorICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChlZmZl
Y3RFbGVtZW50KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQikKKyAgICAgICAgICAg
IGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6Okxp
bmVhclNSR0IoKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlZmZlY3RF
bGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgICAgICBhcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVy
ZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgcmVuZGVyZXIpOworCisgICAgICAgIGFkZChlZmZlY3RF
bGVtZW50LnJlc3VsdCgpLCBlZmZlY3QpOworICAgIH0KKworICAgIHJldHVybiBlZmZlY3Q7Cit9
CisKIHZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YWRkKGNvbnN0IEF0b21TdHJpbmcmIGlkLCBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QpCiB7CiAgICAgaWYgKGlkLmlzRW1wdHkoKSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5oCmluZGV4IGM3N2FlMDhiYWM2NWMzYzJjZmM4OTc0ZmEzM2U3NjQ2MGNlOTdmYTcuLjM3
NWJkYjE1MzFlZjQzYWUyYjcxNTY2ZjY2NThkZWMzNGQ4ZDQ4YWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKQEAg
LTM3LDcgKzM3LDcgQEAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciB7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBIYXNoU2V0PEZpbHRlckVmZmVjdCo+IEZpbHRlckVmZmVjdFNldDsKIAotICAgIFNWR0Zp
bHRlckJ1aWxkZXIoUmVmUHRyPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAgU1ZH
RmlsdGVyQnVpbGRlcigpID0gZGVmYXVsdDsKIAogICAgIHZvaWQgc2V0VGFyZ2V0Qm91bmRpbmdC
b3goY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fdGFyZ2V0Qm91bmRpbmdCb3ggPSByOyB9CiAgICAg
RmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3Vu
ZGluZ0JveDsgfQpAQCAtNjUsNiArNjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckVmZmVj
dHMoKTsKICAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqKTsKIAor
ICAgIHZvaWQgc2V0dXBCdWlsdGluRWZmZWN0cyhSZWY8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFw
aGljKTsKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZEZpbHRlckVmZmVjdHMoRmlsdGVy
JiwgU1ZHRmlsdGVyRWxlbWVudCYpOworCiBwcml2YXRlOgogICAgIGlubGluZSB2b2lkIGFkZEJ1
aWx0aW5FZmZlY3RzKCkKICAgICB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjZjM2FhMjE0MzY4NjhhNTQwZmM2MjljZTIx
Y2UyNjI4YTc5MmNmZS4uNjA4YTZlYmY2MGZjMTFhOTAzMDJhODk5NmNiYTk2ZDg4OWU1ZGRmNyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIxLTEwLTMxICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
aWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFrZSBDU1NGaWx0ZXIgaG9s
ZHMgYSBsaXN0IG9mIEZpbHRlckZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorCiAyMDIxLTEwLTMwICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIExheWVyIHRy
ZWUgc2hvdWxkIG5vdCBiZSBzdHVjayBpbiBmcm96ZW4gc3RhdGUgYWZ0ZXIgZXhwbGljaXRseSBz
dG9wcGluZyBhIHBhZ2UgbG9hZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0
aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZTkxZjQxZTg4MmQ1NmVj
MTljNmU1ZjIyMmU5ZjdmNTNlNDZiYjgxZS4uZjQ4ZDVkMWQ0YzcyMjgwZjIyYmY0MDAxMDhhM2U2
NDFjYjA4ZTYxNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucworKysg
Yi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC01MTg2LDMgKzUxODYsMTMgQEAgc2Vj
dXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3BsdWdpbnMtdHlwZXMtYmxvY2tzLXF1aWNrdGlt
ZS1wbHVnaW4tcmVwbGFjZW1lbnQKIHNlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9wbHVn
aW5zLXR5cGVzLWJsb2Nrcy15b3V0dWJlLXBsdWdpbi1yZXBsYWNlbWVudC13aXRob3V0LW1pbWUt
dHlwZS5odG1sIFsgU2tpcCBdCiBzZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvcGx1Z2lu
cy10eXBlcy1ibG9ja3MteW91dHViZS1wbHVnaW4tcmVwbGFjZW1lbnQuaHRtbCBbIFNraXAgXQog
dXNlcnNjcmlwdHMvdXNlci1zY3JpcHQtcGx1Z2luLWRvY3VtZW50Lmh0bWwgWyBTa2lwIF0KKwor
IyBUaGVzZSBmYWlsdXJlcyBzaG91bGQgYmUgZml4ZWQgb25jZSB3ZWJraXQub3JnL2IvMjMxMjUz
IGlzIHJlc29sdmVkCit3ZWJraXQub3JnL2IvMjMxMjUzIGNvbXBvc2l0aW5nL2ZpbHRlcnMvc3ct
bmVzdGVkLXNoYWRvdy1vdmVybGFwcy1ody1uZXN0ZWQtc2hhZG93Lmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMzEyNTMgY29tcG9zaXRpbmcvZmlsdGVycy9zdy1zaGFkb3ctb3Zlcmxh
cHMtaHctbGF5ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBjb21wb3Np
dGluZy9maWx0ZXJzL3N3LXNoYWRvdy1vdmVybGFwcy1ody1zaGFkb3cuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzMTI1MyBmYXN0L2ZpbHRlci1pbWFnZS9maWx0ZXItaW1hZ2UtYmx1
ci5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxMjUzIGltcG9ydGVk
L21vemlsbGEvc3ZnL2R5bmFtaWMtZmlsdGVyLWNvbnRlbnRzLTAxYS5zdmcgWyBJbWFnZU9ubHlG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzEyNTMgaW1wb3J0ZWQvbW96aWxsYS9zdmcvZmlsdGVy
cy9mZUNvbXBvc2l0ZS0yLnN2ZyBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
MTI1MyBpbXBvcnRlZC9tb3ppbGxhL3N2Zy9maWx0ZXJzL2ZlU3BlY3VsYXJMaWdodGluZy0xLnN2
ZyBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzMTI1MyBzdmcvZmlsdGVycy9m
ZUxpZ2h0aW5nLWNsaXBwZWQuc3ZnIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCg==
</data>
<flag name="commit-queue"
          id="467553"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443851</attachid>
            <date>2021-11-10 12:39:25 -0800</date>
            <delta_ts>2021-11-10 14:38:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232469-20211110123924.patch</filename>
            <type>text/plain</type>
            <size>71621</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWUwZWQ5NzRkYjE3OGVi
ZGMzOGJjZTc5YWNmMTc0YjVlZDMyZTBhMi4uZTliYzAxYTlmY2RhNTU5YThkMjVjYTcyZTUwNzM0
YmQ0MDI0NTdmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAyMS0xMS0xMCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3Nd
IE1ha2UgQ1NTRmlsdGVyIGJlIGEgY29tcG9zaXRlIG9mIEZpbHRlckZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDY5CisgICAgICAg
IHJkYXI6Ly84NTA0NzE0OAorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKwor
ICAgICAgICBJbiB0aGlzIHBhdGNoLCB0aGUgQ1NTIHJlZmVyZW5jZSBmaWx0ZXIgaXMgYnVpbHQg
YXMgYW4gU1ZHRmlsdGVyIGFuZCBpdAorICAgICAgICBpcyBrZXB0IGFzIGEgRmlsdGVyRnVuY3Rp
b24gaW4gdGhlIENTU0ZpbHRlciBmdW5jdGlvbnMnIGxpc3QuIFRoZSBGaWx0ZXIgCisgICAgICAg
IGFzc29jaWF0ZWQgd2l0aCB0aGUgRmlsdGVyRWZmZWN0cyBvZiB0aGUgcmVmZXJlbmNlZCBmaWx0
ZXIgd2lsbCBiZSBhbgorICAgICAgICBTVkdGaWx0ZXIgaW5zdGVhZCBvZiB0aGUgcm9vdCBDU1NG
aWx0ZXIuIFRoaXMgd2lsbCBhbGxvdyBoYXZpbmcgY29sb3IKKyAgICAgICAgc3BhY2luZyBmb3Ig
dGhlIHJlZmVyZW5jZWQgZmlsdGVycyBkaWZmZXJlbnQgZnJvbSB0aGUgY29sb3Igc3BhY2luZyBv
ZgorICAgICAgICBDU1NGaWx0ZXIuIAorCisgICAgICAgIEFsc28gdGhpcyBwYXRjaCBtYWtlcyBh
IHNpbmdsZSBmdW5jdGlvbiBmb3IgYnVpbGRpbmcgdGhlIHByaW1pdGl2ZXMgb2YKKyAgICAgICAg
dGhlIFNWR0ZpbHRlciBpbnN0ZWFkIG9mIGhhdmluZyB0d28gZnVuY3Rpb25zLgorCisgICAgICAg
IFRvIGFsbG93IG9wZXJhdGluZyB0aHJvdWdoIHRoZSBTVkdGaWx0ZXIgYXMgYSBGaWx0ZXJGdW5j
dGlvbiBvd25lZCBieQorICAgICAgICBDU1NGaWx0ZXIsIHRoZSBTVkdGaWx0ZXIgd2lsbCBoYXZl
IGEgcG9pbnRlciB0byBpdHMgbGFzdEVmZmVjdC4KKworICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJ
bWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6Omlt
YWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVy
T2ZFZmZlY3RJbnB1dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Om51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6c2V0TWF4RWZmZWN0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6Om91dHNldHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0
aW9uOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckZ1bmN0aW9uOjpj
bGVhclJlc3VsdCk6CisgICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0
ZXI6OkNTU0ZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjptX2hhc0ZpbHRlclRoYXRTaG91bGRC
ZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJs
dXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnJpZ2h0bmVzc0VmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250cmFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVEcm9wU2hhZG93RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyYXlT
Y2FsZUVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVIdWVSb3RhdGVFZmZlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW52ZXJ0RWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZU9wYWNpdHlFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2F0dXJhdGVF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VwaWFFZmZlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlU1ZHRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwTGFzdEVm
ZmVjdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZEZpbHRl
ckZ1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpsYXN0RWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZpbHRlcjo6ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6Y2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVyOjpvdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpzZXRTb3Vy
Y2VJbWFnZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpvdXRwdXRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjptX3NvdXJjZUdyYXBoaWMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NT
RmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NGaWx0ZXI6OmJ1aWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6b3V0cHV0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6
c2V0TWF4RWZmZWN0UmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjpvdXRwdXRSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvQ1NTRmls
dGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJGaWx0
ZXJzOjpidWlsZEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6
OmJlZ2luRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVy
czo6YXBwbHlGaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckZp
bHRlcnMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWls
ZFByaW1pdGl2ZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVNWR1Jlc291cmNl
Q29udGFpbmVyKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRmlsdGVyOjpvdXRzZXRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRl
cjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ci5oOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6c2V0dXBCdWlsdGluRWZmZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbGxlY3RFZmZlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OnRvdGFs
TnVtYmVyRmlsdGVyRWZmZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVy
OjpidWlsZEZpbHRlckVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRl
cjo6U1ZHRmlsdGVyQnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgorCiAyMDIxLTExLTEwICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFrZSBTVkdGaWx0
ZXIgYW5kIENTU0ZpbHRlciB3b3JrIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzIHN5c3RlbQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IDNkZWQwMmI4ZDIw
YWFlM2E5NGRiNDRiNzRlNzBmYjZkMjkxMzY4MTIuLmQzMmZmYmNjM2M1ODYyY2IxZWNhNmQ2YWVk
OTgyZDIwZDdkOTQ5ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJ
bWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHAKQEAgLTExNiwxOCArMTE2LDIxIEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VW
YWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAg
ICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5
NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVy
YXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigp
LCBQaXhlbEZvcm1hdDo6QkdSQTgpOwotICAgIGlmICghdGV4dHVyZSkKKyAgICBhdXRvIHJlbmRl
cmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworICAgIGF1dG8gc291cmNl
SW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIDEsIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpOworICAgIGlmICgh
c291cmNlSW1hZ2UpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCi0gICAg
YXV0byBpbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUgfTsKLSAgICB0ZXh0dXJlLT5j
b250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICBhdXRvIHNvdXJjZUlt
YWdlUmVjdCA9IEZsb2F0UmVjdCB7IHsgfSwgc2l6ZSB9OworICAgIHNvdXJjZUltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgc291cmNlSW1hZ2VSZWN0KTsKIAotICAgIGF1dG8gY3Nz
RmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUlt
YWdlKFdURk1vdmUodGV4dHVyZSkpOwotICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0
KGltYWdlUmVjdCk7Ci0gICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxkKHJlbmRlcmVyLCBtX2ZpbHRl
ck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikpCisgICAgYXV0byBj
c3NGaWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShtX2ZpbHRlck9wZXJhdGlvbnMsIHJlbmRlcmlu
Z01vZGUpOworCisgICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VS
ZWN0KTsKKyAgICBpZiAoIWNzc0ZpbHRlci0+YnVpbGRGaWx0ZXJGdW5jdGlvbnMocmVuZGVyZXIs
IG1fZmlsdGVyT3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKSkKICAg
ICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CisKKyAgICBjc3NGaWx0ZXItPnNldFNv
dXJjZUltYWdlKFdURk1vdmUoc291cmNlSW1hZ2UpKTsKICAgICBjc3NGaWx0ZXItPmFwcGx5KCk7
CiAKICAgICBhdXRvKiBvdXRwdXQgPSBjc3NGaWx0ZXItPm91dHB1dCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJp
eC5jcHAKaW5kZXggYTc5MWJkNmQzMWZkNzUwNGExMTMyN2YxZDQxYWNiZDNhNDllMTk1Mi4uYTY1
YzBiNDJiNTZlMTMxMzI2ZDNhYzQwMzYzNmYwYzQxYjJmM2EwOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBp
eGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IGUwYmVmMzA3NDA1ZmYyMzNl
OGEyYWZiNWNiZWM4ZDU0OGQyMjc4MDguLjg1NmVkYTc4NmJiZmUzOWExYTE5ZTUxYjYyNTU5MmYw
ODkwNjZmZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
RkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcAppbmRleCA1MWFkMmY4NWYyYzI3YTZlZTUwNzRmMmMxNjFlYjkxNDY4Yzll
YzI2Li41YjdjOWRkMDlkNDk2NWNiZjA5MzVmMzBjNzRjYWE0NTRiNTY2Mjg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIK
ICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSAi
U2hhZG93Qmx1ci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAppbmRleCBh
Nzg0MjE5Njc0ZTFhZTk3OTkzNDQzOGRhNTRhMWE3MWM5ODA0ODQyLi41ODQzODg4MGYxM2Y0ZTRi
YzU4MWE3Mzg4ZjRlZTI3MDZlMGZiYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJDb2xvclNlcmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAK
aW5kZXggNjk3ZDJlMTVjY2JmMWFlZmVkMGU4OWZkYTM0ZTcwMzI5MzA3ZjczYy4uY2I0NWJkNDNm
ZmRhYjNlOGNkMTRmMDJkOGE2MDI0MGQ4NjY5ZTBmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCkBAIC0yNCw2ICsyNCw3
IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAppbmRleCAwMjhjYmM2MGE0NDdmMzY5
YmNjZWRhMDA1YzkxNzViMzFiMThkOGY2Li4wYWNhMGU2NDJlNTc4OTcyM2QzYzdmMDdkYWM0OWZh
MDFlOWQ1OTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFT2Zmc2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiRmls
dGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5oCmluZGV4IDAyYmY1MTEwNTRmZTYzOWMyZjcwOTQ3YzA3NWQ5OTg0MGI1Nzc2YjUuLjNi
NTFmNmFlMzFjYzY3NWUxNzc2NTM2MGNlNzY5YjRjNjU0NmUwYjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtMjEsMTUgKzIx
LDE0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAj
aW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNs
dWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJpbmdNb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmlsdGVy
RWZmZWN0OworY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIGNsYXNzIEZpbHRlciA6IHB1YmxpYyBGaWx0
ZXJGdW5jdGlvbiB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNDBkMjMwMGUxMWUx
YzEyNmY3NmI4NTgyZGEyOTk0Y2Q1OWUzNmI1Mi4uNmVmZmM4ZjE3ZGZiYzY1NGQ1ZTNkMjcxZDkw
NjMwNGZjMzVkNmZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMTQzLDIzICsxNDMsNiBAQCBG
aWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6aW5wdXRFZmZlY3QodW5zaWduZWQgbnVtYmVyKSBj
b25zdAogICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwogfQogCi1z
dGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KmVmZmVjdCwg
SGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3QqPiYgYWxsRWZmZWN0cykKLXsKLSAgICBhbGxFZmZl
Y3RzLmFkZChlZmZlY3QpOwotICAgIHVuc2lnbmVkIHNpemUgPSBlZmZlY3QtPm51bWJlck9mRWZm
ZWN0SW5wdXRzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gZWZmZWN0LT5pbnB1dEVmZmVjdChpKTsKLSAgICAg
ICAgY29sbGVjdEVmZmVjdHMoaW4sIGFsbEVmZmVjdHMpOwotICAgIH0KLSAgICByZXR1cm4gYWxs
RWZmZWN0cy5zaXplKCk7Ci19Ci0KLXVuc2lnbmVkIEZpbHRlckVmZmVjdDo6dG90YWxOdW1iZXJP
ZkVmZmVjdElucHV0cygpIGNvbnN0Ci17Ci0gICAgSGFzaFNldDxjb25zdCBGaWx0ZXJFZmZlY3Qq
PiBhbGxFZmZlY3RzOwotICAgIHJldHVybiBjb2xsZWN0RWZmZWN0cyh0aGlzLCBhbGxFZmZlY3Rz
KTsKLX0KLQogdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKIHsKICAgICBpZiAoaGFzUmVzdWx0
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaAppbmRleCA1NTI3ZjZiZjRiZjYyOGU3MTUwZjgxZDVlZmIzOWRmMzFh
MjkxYjcyLi5lY2RlOWU3ZWYwYjc2ZTdkODg1OTA4OGVmYmVmYTdkODM3YjkyMjQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVm
ZmVjdD4+IEZpbHRlckVmZmVjdFZlY3RvcjsKIAogY2xhc3MgRmlsdGVyRWZmZWN0IDogcHVibGlj
IEZpbHRlckZ1bmN0aW9uIHsKIHB1YmxpYzoKLSAgICB2b2lkIGNsZWFyUmVzdWx0KCk7CisgICAg
dm9pZCBjbGVhclJlc3VsdCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJz
aXZlKCk7CiAKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXJSZXN1bHQoKTsKQEAgLTU3LDkg
KzU3LDggQEAgcHVibGljOgogICAgIHZvaWQgY29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmLCBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uQ29sb3JTcGFjZT4gPSBzdGQ6Om51bGxvcHQpOwogICAgIHZvaWQgY29weVByZW11
bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRS
ZWN0Jiwgc3RkOjpvcHRpb25hbDxEZXN0aW5hdGlvbkNvbG9yU3BhY2U+ID0gc3RkOjpudWxsb3B0
KTsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5w
dXRFZmZlY3RzOyB9Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29u
c3Q7CisgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCBudW1iZXIpIGNvbnN0
OwogICAgIHVuc2lnbmVkIG51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbV9p
bnB1dEVmZmVjdHMuc2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgdG90YWxOdW1iZXJPZkVmZmVjdElu
cHV0cygpIGNvbnN0OwogICAgIAogICAgIGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0CiAg
ICAgewpAQCAtODMsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBYnNvbHV0ZVBhaW50
UmVjdChjb25zdCBJbnRSZWN0JiBhYnNvbHV0ZVBhaW50UmVjdCkgeyBtX2Fic29sdXRlUGFpbnRS
ZWN0ID0gYWJzb2x1dGVQYWludFJlY3Q7IH0KIAogICAgIEZsb2F0UmVjdCBtYXhFZmZlY3RSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9tYXhFZmZlY3RSZWN0OyB9Ci0gICAgdm9pZCBzZXRNYXhFZmZl
Y3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3Qg
PSBtYXhFZmZlY3RSZWN0OyB9IAorICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9h
dFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsg
fQogCiAgICAgdm9pZCBhcHBseSgpOwogCkBAIC05NCw4ICs5Myw2IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwogCi0gICAgdmlydHVh
bCBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCB7IHJldHVybiBJbnRPdXRzZXRzKCk7IH0KLQog
ICAgIGVudW0gY2xhc3MgUmVwcmVzZW50YXRpb25UeXBlIHsgVGVzdE91dHB1dCwgRGVidWdnaW5n
IH07CiAgICAgdmlydHVhbCBXVEY6OlRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpUZXh0U3RyZWFtJiwgUmVwcmVzZW50YXRpb25UeXBlID0gUmVwcmVzZW50YXRpb25UeXBl
OjpUZXN0T3V0cHV0KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCmluZGV4IDczNmNmYzAyMzQ2
YmVhNDkyODlkNmM5MzE1MjFhNjBjZTk2ZGFiYWUuLmU4NjRhODYwYTgxN2Y5N2E2ZGM0ZDk4MjE5
NGU3ZWY5Zjc5MDNiOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKQEAgLTI1LDYgKzI1LDggQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0
RXh0ZW50LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9tU3RyaW5nLmg+CiAKQEAgLTgwLDYgKzgyLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBB
dG9tU3RyaW5nIHNvdXJjZUdyYXBoaWNOYW1lKCkgeyByZXR1cm4gZmlsdGVyTmFtZShUeXBlOjpT
b3VyY2VHcmFwaGljKTsgfQogICAgIEF0b21TdHJpbmcgZmlsdGVyTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIGZpbHRlck5hbWUobV9maWx0ZXJUeXBlKTsgfQogCisgICAgdmlydHVhbCBJbnRPdXRzZXRz
IG91dHNldHMoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJS
ZXN1bHQoKSB7IH0KKwogcHJpdmF0ZToKICAgICBUeXBlIG1fZmlsdGVyVHlwZTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IGNhNWQ4NGQwZDcxOGM4YTdjNjBi
ZWE0ODFkNWFmN2ExNWQxM2ZjZmUuLmYyZDE3MWNiYzY2Zjc1OWZiMzA2YTJlMTlhZjU0MjQxZGFm
NjMyMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0yNyw5ICsy
Nyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAKLSNp
bmNsdWRlICJDYWNoZWRTVkdEb2N1bWVudC5oIgotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50
UmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRkVD
b2xvck1hdHJpeC5oIgogI2luY2x1ZGUgIkZFQ29tcG9uZW50VHJhbnNmZXIuaCIKICNpbmNsdWRl
ICJGRURyb3BTaGFkb3cuaCIKQEAgLTM4LDE1ICszNSwxMCBAQAogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdFJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlZmVyZW5j
ZWRTVkdSZXNvdXJjZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlNW
R0VsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJC
dWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNvdXJjZUFscGhh
LmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiAjaWYgVVNFKERJUkVDVDJEKQogI2luY2x1ZGUg
PGQyZDEuaD4KQEAgLTU0LDI1OSArNDYsMjkzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UmVmPENTU0ZpbHRlcj4gQ1NTRmlsdGVyOjpjcmVhdGUoZmxvYXQgc2NhbGVGYWN0b3IpCitSZWZQ
dHI8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBv
cGVyYXRpb25zLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxlRmFjdG9y
KQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ZpbHRlcihzY2FsZUZhY3RvcikpOwor
ICAgIGJvb2wgaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJU
aGF0TW92ZXNQaXhlbHMoKTsKKyAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0
ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworCisgICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJlZigq
bmV3IENTU0ZpbHRlcihoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGhhc0ZpbHRlclRoYXRTaG91
bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luLCBzY2FsZUZhY3RvcikpOworCisgICAgZmls
dGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOworICAgIHJldHVybiBmaWx0ZXI7
CiB9CiAKLUNTU0ZpbHRlcjo6Q1NTRmlsdGVyKGZsb2F0IHNjYWxlRmFjdG9yKQorQ1NTRmlsdGVy
OjpDU1NGaWx0ZXIoYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVy
VGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9y
KQogICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6Q1NTRmlsdGVyLCBGbG9hdFNpemUgeyBzY2Fs
ZUZhY3Rvciwgc2NhbGVGYWN0b3IgfSkKLSAgICAsIG1fc291cmNlR3JhcGhpYyhTb3VyY2VHcmFw
aGljOjpjcmVhdGUoKnRoaXMpKQorICAgICwgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKQorICAgICwgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbihoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlT
ZWN1cml0eU9yaWdpbikKIHsKIH0KIAotR3JhcGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6OmlucHV0
Q29udGV4dCgpCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQmx1ckVmZmVjdChD
U1NGaWx0ZXImIGZpbHRlciwgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ck9wZXJhdGlv
biwgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIpCiB7Ci0gICAgcmV0dXJuIHNvdXJjZUltYWdlKCkg
PyAmc291cmNlSW1hZ2UoKS0+Y29udGV4dCgpIDogbnVsbHB0cjsKKyAgICBmbG9hdCBzdGREZXZp
YXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCks
IDApOworICAgIHJldHVybiBGRUdhdXNzaWFuQmx1cjo6Y3JlYXRlKGZpbHRlciwgc3RkRGV2aWF0
aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9w
ZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworfQorCitzdGF0aWMg
UmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlQnJpZ2h0bmVzc0VmZmVjdChDU1NGaWx0ZXImIGZp
bHRlciwgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9u
ZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0
cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOwor
ICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5zZmVy
OjpjcmVhdGUoZmlsdGVyLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFu
c2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gY3JlYXRlQ29udHJhc3RFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2lj
Q29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uKQoreworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSOworICAgIGZsb2F0IGFtb3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50
VHJhbnNmZXJPcGVyYXRpb24uYW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSBhbW91bnQ7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50
ICsgMC41OworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Cisg
ICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShmaWx0ZXIsIHRyYW5zZmVyRnVu
Y3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7
Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVEcm9wU2hhZG93RWZmZWN0
KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uJiBkcm9w
U2hhZG93T3BlcmF0aW9uKQoreworICAgIGZsb2F0IHN0ZCA9IGRyb3BTaGFkb3dPcGVyYXRpb24u
c3RkRGV2aWF0aW9uKCk7CisgICAgcmV0dXJuIEZFRHJvcFNoYWRvdzo6Y3JlYXRlKGZpbHRlciwg
c3RkLCBzdGQsIGRyb3BTaGFkb3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnko
KSwgZHJvcFNoYWRvd09wZXJhdGlvbi5jb2xvcigpLCAxKTsKK30KKworc3RhdGljIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdChDU1NGaWx0ZXImIGZpbHRlciwgY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24p
Cit7CisgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhP
cGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3Mu
dzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVF
cXVpdmFsZW50CisgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCisKKyAgICBW
ZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAg
ICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3Vu
dCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50
KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQp
LAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAg
ICAgIDAsCisgICAgICAgIDEsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHJldHVybiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZN
b3ZlKGlucHV0UGFyYW1ldGVycykpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Y3JlYXRlSHVlUm90YXRlRWZmZWN0KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0
b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZShmaWx0ZXIsIEZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUsIFdURk1vdmUoaW5wdXRQ
YXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVJbnZl
cnRFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb24mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uKQoreworICAgIENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKKyAgICB0cmFuc2ZlckZ1bmN0
aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOworICAgIGZsb2F0IGFt
b3VudCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24u
YW1vdW50KCkpOworICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsK
KyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsKKworICAgIENvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRy
YW5zZmVyOjpjcmVhdGUoZmlsdGVyLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9u
LCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOworfQorCitzdGF0aWMgUmVmUHRyPEZp
bHRlckVmZmVjdD4gY3JlYXRlT3BhY2l0eUVmZmVjdChDU1NGaWx0ZXImIGZpbHRlciwgY29uc3Qg
QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJP
cGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0
aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQ
RV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5z
bG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7CisKKyAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVD
b21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rp
b24sIG51bGxGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBjcmVhdGVTYXR1cmF0ZUVmZmVjdChDU1NGaWx0ZXImIGZpbHRlciwgY29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24p
Cit7CisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OworICAgIHJldHVybiBGRUNv
bG9yTWF0cml4OjpjcmVhdGUoZmlsdGVyLCBGRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUsIFdU
Rk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBjcmVhdGVTZXBpYUVmZmVjdChDU1NGaWx0ZXImIGZpbHRlciwgY29uc3QgQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbiYgY29sb3JNYXRyaXhPcGVyYXRpb24pCit7CisgICAgZG91Ymxl
IG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50
KCksIDAuMCwgMS4wKTsKKworICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYv
cmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVxdWl2YWxlbnQKKyAgICAvLyBm
b3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQ
YXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3
ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzY5
IC0gMC43NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAg
MCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVN
aW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMx
NCAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE2
OCAtIDAuMTY4ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisg
ICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yNzIgLSAwLjI3MiAqIG9uZU1pbnVzQW1v
dW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44
NjkgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAg
MCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9
OworCisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEZFQ09MT1JNQVRS
SVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CiB9CiAKLVJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IENTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRl
ck9wZXJhdGlvbiYgZmlsdGVyT3BlcmF0aW9uKQorc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNy
ZWF0ZVNWR0ZpbHRlcihDU1NGaWx0ZXImIGZpbHRlciwgY29uc3QgUmVmZXJlbmNlRmlsdGVyT3Bl
cmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24sIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBGaWx0ZXJF
ZmZlY3QmIHByZXZpb3VzRWZmZWN0KQogewotICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZW5k
ZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCkucmVmZXJlbmNlZEZpbHRlckVsZW1l
bnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKyAgICBhdXRvJiByZWZl
cmVuY2VkU1ZHUmVzb3VyY2VzID0gcmVuZGVyZXIuZW5zdXJlUmVmZXJlbmNlZFNWR1Jlc291cmNl
cygpOworICAgIGF1dG8qIGZpbHRlckVsZW1lbnQgPSByZWZlcmVuY2VkU1ZHUmVzb3VyY2VzLnJl
ZmVyZW5jZWRGaWx0ZXJFbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCksIGZpbHRlck9wZXJhdGlv
bik7CisKICAgICBpZiAoIWZpbHRlckVsZW1lbnQpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NTRmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJl
bmNlRmlsdGVyOiBmYWlsZWQgdG8gZmluZCBmaWx0ZXIgcmVuZGVyZXIsIGFkZGluZyBwZW5kaW5n
IHJlc291cmNlICIgPDwgZmlsdGVyT3BlcmF0aW9uLmZyYWdtZW50KCkpOworICAgICAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZh
aWxlZCB0byBmaW5kIGZpbHRlciByZW5kZXJlciwgYWRkaW5nIHBlbmRpbmcgcmVzb3VyY2UgIiA8
PCBmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSk7CiAgICAgICAgIC8vIEFsdGhvdWdoIHdlIGRp
ZCBub3QgZmluZCB0aGUgcmVmZXJlbmNlZCBmaWx0ZXIsIGl0IG1pZ2h0IGV4aXN0IGxhdGVyIGlu
IHRoZSBkb2N1bWVudC4KICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgYW5vbnltb3VzIFJl
bmRlck9iamVjdHMuIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMzEwODU+CiAgICAgICAgIC8vIEZJ
WE1FOiBVbmNsZWFyIGlmIHRoaXMgZG9lcyBhbnl0aGluZy4KLSAgICAgICAgaWYgKGF1dG8qIGVs
ZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgICAgICByZW5kZXJlci5kb2N1bWVu
dCgpLmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS5hZGRQZW5kaW5nUmVzb3VyY2UoZmlsdGVyT3BlcmF0
aW9uLmZyYWdtZW50KCksICplbGVtZW50KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCi0gICAgYXV0byBidWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigmcHJl
dmlvdXNFZmZlY3QpOwotCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OwotICAgIFZl
Y3RvcjxSZWY8RmlsdGVyRWZmZWN0Pj4gcmVmZXJlbmNlRWZmZWN0czsKLQotICAgIGZvciAoYXV0
byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcz4oKmZpbHRlckVsZW1lbnQpKSB7Ci0gICAgICAgIGVmZmVjdCA9IGVmZmVj
dEVsZW1lbnQuYnVpbGQoYnVpbGRlci5nZXQoKSwgKnRoaXMpOwotICAgICAgICBpZiAoIWVmZmVj
dCkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiQ1NT
RmlsdGVyICIgPDwgdGhpcyA8PCAiIGJ1aWxkUmVmZXJlbmNlRmlsdGVyOiBmYWlsZWQgdG8gYnVp
bGQgZWZmZWN0IGZyb20gIiA8PCBlZmZlY3RFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgZWZmZWN0RWxlbWVudC5zZXRTdGFuZGFyZEF0
dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgaWYgKGVmZmVjdEVsZW1lbnQucmVuZGVy
ZXIoKSkgewotI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikK
LSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShlZmZlY3RFbGVtZW50
LnJlbmRlcmVyKCktPnN0eWxlKCkuc3ZnU3R5bGUoKS5jb2xvckludGVycG9sYXRpb25GaWx0ZXJz
KCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OkxpbmVhclNSR0IoKSA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbHNl
Ci0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+
YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIGVmZmVjdCk7Ci0gICAgICAgIHJlZmVyZW5jZUVm
ZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgIH0KLSAgICAKLSAgICBtX2VmZmVjdHMuYXBwZW5k
VmVjdG9yKFdURk1vdmUocmVmZXJlbmNlRWZmZWN0cykpOwotICAgIHJldHVybiBlZmZlY3Q7Cisg
ICAgU1ZHRmlsdGVyQnVpbGRlciBidWlsZGVyOworICAgIHJldHVybiBTVkdGaWx0ZXI6OmNyZWF0
ZSgqZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyLmZpbHRlclNjYWxlKCksIGZpbHRlci5z
b3VyY2VJbWFnZVJlY3QoKSwgZmlsdGVyLmZpbHRlclJlZ2lvbigpLCBwcmV2aW91c0VmZmVjdCk7
CiB9CiAKLWJvb2wgQ1NTRmlsdGVyOjpidWlsZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgb3BlcmF0aW9ucywgRmlsdGVyQ29uc3VtZXIgY29uc3VtZXIp
CitzdGF0aWMgdm9pZCBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKEZpbHRlckVmZmVjdCYgZWZm
ZWN0LCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKIHsKLSAgICBtX2hhc0ZpbHRlclRoYXRNb3Zl
c1BpeGVscyA9IG9wZXJhdGlvbnMuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCk7Ci0gICAgbV9o
YXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiA9IG9wZXJhdGlv
bnMuaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKTsKKyAg
ICAvLyBVbmxpa2UgU1ZHIEZpbHRlcnMgYW5kIENTU0ZpbHRlckltYWdlcywgZmlsdGVyIGZ1bmN0
aW9ucyBvbiB0aGUgZmlsdGVyCisgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBu
b3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KKyAgICBlZmZlY3Quc2V0Q2xp
cHNUb0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwor
ICAgIGVmZmVjdC5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQigpKTsKK30KIAotICAgIG1fZWZmZWN0cy5jbGVhcigpOworYm9vbCBDU1NGaWx0ZXI6OmJ1
aWxkRmlsdGVyRnVuY3Rpb25zKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK3sKKyAgICBt
X2Z1bmN0aW9ucy5jbGVhcigpOwogICAgIG1fb3V0c2V0cyA9IHsgfTsKIAotICAgIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IHByZXZpb3VzRWZmZWN0ID0gbV9zb3VyY2VHcmFwaGljLnB0cigpOworICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHByZXZpb3VzRWZmZWN0ID0gU291cmNlR3JhcGhpYzo6Y3Jl
YXRlKCp0aGlzKTsKKyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqcHJldmlvdXNFZmZlY3QgfSk7
CisKKyAgICBSZWZQdHI8U1ZHRmlsdGVyPiBmaWx0ZXI7CisgICAgCiAgICAgZm9yIChhdXRvJiBv
cGVyYXRpb24gOiBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewogICAgICAgICBSZWZQdHI8Rmls
dGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgICAgIGF1dG8mIGZpbHRlck9wZXJhdGlvbiA9ICpvcGVy
YXRpb247Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyT3BlcmF0aW9uLnR5cGUoKSkgewotICAgICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFOiB7Ci0gICAgICAgICAgICBhdXRvJiBy
ZWZlcmVuY2VPcGVyYXRpb24gPSBkb3duY2FzdDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBlZmZlY3QgPSBidWlsZFJlZmVyZW5jZUZpbHRl
cihyZW5kZXJlciwgKnByZXZpb3VzRWZmZWN0LCByZWZlcmVuY2VPcGVyYXRpb24pOworCisgICAg
ICAgIHN3aXRjaCAob3BlcmF0aW9uLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkFQUExFX0lOVkVSVF9MSUdIVE5FU1M6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gQVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxl
LWNvbG9yLWZpbHRlci4KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9y
TWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9
IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0K
LSAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUv
dGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNncmF5c2NhbGVFcXVpdmFsZW50Ci0gICAgICAgICAgICAv
LyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KLQotICAgICAgICAgICAgVmVjdG9yPGZs
b2F0PiBpbnB1dFBhcmFtZXRlcnMgewotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4yMTI2ICsgMC43ODc0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIy
ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAg
MCwKLQotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4y
MTI2ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC43MTUyICsgMC4yODQ4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQp
LAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAg
ICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43
MTUyICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoMC4wNzIyICsgMC45Mjc4ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICAgICAgMCwKLQotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDEsCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29s
b3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxV
UjoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUJsdXJFZmZlY3QoKnRoaXMsIGRvd25jYXN0
PEJsdXJGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCBjb25zdW1lcik7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6
IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIGRvdWJsZSBvbmVNaW51c0Ftb3VudCA9IGNsYW1wVG8oMSAtIGNvbG9yTWF0cml4T3BlcmF0
aW9uLmFtb3VudCgpLCAwLjAsIDEuMCk7Ci0KLSAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2R2
Y3MudzMub3JnL2hnL0ZYVEYvcmF3LWZpbGUvdGlwL2ZpbHRlcnMvaW5kZXguaHRtbCNzZXBpYUVx
dWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgot
Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjM5MyArIDAuNjA3ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2
OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMTg5IC0gMC4xODkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjM0OSAtIDAuMzQ5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC42ODYgKyAwLjMxNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0g
ICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25l
TWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC41
MzQgLSAwLjUzNCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMTMxICsgMC44NjkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAg
ICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0g
RkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBX
VEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpCUklHSFRORVNTOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQnJpZ2h0bmVzc0VmZmVj
dCgqdGhpcywgZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4o
Km9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb2xvck1h
dHJpeE9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24+
KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1l
dGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50
KCkpIH07Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMs
IEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsK
KworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgICAgICBl
ZmZlY3QgPSBjcmVhdGVDb250cmFzdEVmZmVjdCgqdGhpcywgZG93bmNhc3Q8QmFzaWNDb21wb25l
bnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6
IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFz
aWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAg
ICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9h
dChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9
IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFU
RSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVEcm9wU2hhZG93
RWZmZWN0KCp0aGlzLCBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6SU5WRVJUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zl
ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUg
PSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1v
dW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5h
bW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gMSAtIDIgKiBh
bW91bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IGFtb3VudDsK
LQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0g
ICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRy
YW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxG
dW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAg
ICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUdyYXlTY2FsZUVmZmVjdCgqdGhpcywgZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkFQUExF
X0lOVkVSVF9MSUdIVE5FU1M6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
QVBQTEVfSU5WRVJUX0xJR0hUTkVTUyBpcyBvbmx5IHVzZWQgaW4gLWFwcGxlLWNvbG9yLWZpbHRl
ci4KKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAg
ICAgIGVmZmVjdCA9IGNyZWF0ZUh1ZVJvdGF0ZUVmZmVjdCgqdGhpcywgZG93bmNhc3Q8QmFzaWND
b2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7Ci0gICAgICAgICAg
ICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRvd25jYXN0PEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247Ci0gICAgICAgICAg
ICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFS
OwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1
bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRl
cmNlcHQgPSAwOwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxG
dW5jdGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0
ZSgqdGhpcywgbnVsbEZ1bmN0aW9uLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKKyAg
ICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZUludmVydEVmZmVjdCgqdGhpcywgZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
ID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVy
T3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNm
ZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9O
RU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNs
b3BlID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5h
bW91bnQoKSk7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7Ci0K
LSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAg
ICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFu
c2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVu
Y3Rpb24pOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAg
ICAgICAgZWZmZWN0ID0gY3JlYXRlT3BhY2l0eUVmZmVjdCgqdGhpcywgZG93bmNhc3Q8QmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRS
QVNUOiB7Ci0gICAgICAgICAgICBhdXRvJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IGRv
d25jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVu
Y3Rpb247Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnR5cGUgPSBGRUNPTVBPTkVOVFRS
QU5TRkVSX1RZUEVfTElORUFSOwotICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJl
Y2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Ci0gICAg
ICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50OwotICAgICAgICAgICAgdHJh
bnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAtMC41ICogYW1vdW50ICsgMC41OwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsK
LSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywg
dHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVs
bEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Cisg
ICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVTYXR1cmF0ZUVmZmVjdCgqdGhpcywgZG93bmNhc3Q8
QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
IHsKLSAgICAgICAgICAgIGF1dG8mIGJsdXJPcGVyYXRpb24gPSBkb3duY2FzdDxCbHVyRmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmxvYXQgc3RkRGV2aWF0
aW9uID0gZmxvYXRWYWx1ZUZvckxlbmd0aChibHVyT3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCAw
KTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoKnRoaXMsIHN0
ZERldmlhdGlvbiwgc3RkRGV2aWF0aW9uLCBjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6Rmls
dGVyUHJvcGVydHkgPyBFREdFTU9ERV9OT05FIDogRURHRU1PREVfRFVQTElDQVRFKTsKKworICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgICAgICBlZmZlY3QgPSBj
cmVhdGVTZXBpYUVmZmVjdCgqdGhpcywgZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOiB7Ci0gICAgICAgICAgICBh
dXRvJiBkcm9wU2hhZG93T3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFRHJvcFNoYWRv
dzo6Y3JlYXRlKCp0aGlzLCBkcm9wU2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLCBkcm9w
U2hhZG93T3BlcmF0aW9uLnN0ZERldmlhdGlvbigpLAotICAgICAgICAgICAgICAgIGRyb3BTaGFk
b3dPcGVyYXRpb24ueCgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLnkoKSwgZHJvcFNoYWRvd09wZXJh
dGlvbi5jb2xvcigpLCAxKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6UkVGRVJF
TkNFOgorICAgICAgICAgICAgZmlsdGVyID0gY3JlYXRlU1ZHRmlsdGVyKCp0aGlzLCBkb3duY2Fz
dDxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pLCByZW5kZXJlciwgKnByZXZp
b3VzRWZmZWN0KTsKKyAgICAgICAgICAgIGVmZmVjdCA9IG51bGxwdHI7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCisgICAgICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgICAgICAgIGVmZmVjdCA9
IGZpbHRlci0+bGFzdEVmZmVjdCgpOworICAgICAgICAgICAgc2V0dXBMYXN0RWZmZWN0UHJvcGVy
dGllcygqZWZmZWN0LCBjb25zdW1lcik7CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQo
ZmlsdGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBX
VEZNb3ZlKGVmZmVjdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCiAgICAg
ICAgIGlmIChlZmZlY3QpIHsKLSAgICAgICAgICAgIC8vIFVubGlrZSBTVkcgRmlsdGVycyBhbmQg
Q1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVuY3Rpb25zIG9uIHRoZSBmaWx0ZXIKLSAgICAgICAg
ICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVyZSBzaG91bGQgbm90IGNsaXAgdG8gdGhlaXIgcHJp
bWl0aXZlIHN1YnJlZ2lvbnMuCi0gICAgICAgICAgICBlZmZlY3QtPnNldENsaXBzVG9Cb3VuZHMo
Y29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKTsKLSAgICAgICAgICAg
IGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24udHlw
ZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7Ci0gICAgICAgICAgICAgICAgZWZm
ZWN0LT5pbnB1dEVmZmVjdHMoKSA9IHsgV1RGTW92ZShwcmV2aW91c0VmZmVjdCkgfTsKLSAgICAg
ICAgICAgICAgICBtX2VmZmVjdHMuYXBwZW5kKCplZmZlY3QpOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc2V0dXBMYXN0RWZmZWN0UHJvcGVydGllcygqZWZmZWN0LCBjb25zdW1lcik7Cisg
ICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZm
ZWN0KSB9OworICAgICAgICAgICAgbV9mdW5jdGlvbnMuYXBwZW5kKHsgKmVmZmVjdCB9KTsKICAg
ICAgICAgICAgIHByZXZpb3VzRWZmZWN0ID0gV1RGTW92ZShlZmZlY3QpOwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgLy8gSWYgd2UgZGlkbid0IG1ha2UgYW55IGVmZmVjdHMsIHRlbGwgb3VyIGNh
bGxlciB3ZSBhcmUgbm90IHZhbGlkLgotICAgIGlmIChtX2VmZmVjdHMuaXNFbXB0eSgpKQorICAg
IGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IG1fZWZmZWN0cy5zaHJpbmtUb0ZpdCgpOworICAgIG1fZnVuY3Rpb25zLnNocmlua1RvRml0KCk7
CiAKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhzb3VyY2VJbWFnZVJlY3QoKSk7CiAjaWYgVVNFKENP
UkVfSU1BR0UpCiAgICAgaWYgKCFtX2ZpbHRlclJlbmRlcmVyKQotICAgICAgICBtX2ZpbHRlclJl
bmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5n
cygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCBtX2VmZmVjdHMu
bGFzdCgpLmdldCgpKTsKKyAgICAgICAgbV9maWx0ZXJSZW5kZXJlciA9IEZpbHRlckVmZmVjdFJl
bmRlcmVyOjp0cnlDcmVhdGUocmVuZGVyZXIuc2V0dGluZ3MoKS5jb3JlSW1hZ2VBY2NlbGVyYXRl
ZEZpbHRlclJlbmRlckVuYWJsZWQoKSwgKmxhc3RFZmZlY3QoKSk7CiAjZW5kaWYKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorR3JhcGhpY3NDb250ZXh0KiBDU1NGaWx0ZXI6OmlucHV0Q29udGV4dCgp
Cit7CisgICAgcmV0dXJuIHNvdXJjZUltYWdlKCkgPyAmc291cmNlSW1hZ2UoKS0+Y29udGV4dCgp
IDogbnVsbHB0cjsKK30KKwogYm9vbCBDU1NGaWx0ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KQogewogICAgIGlmIChmaWx0ZXJSZWN0LmlzRW1w
dHkoKSB8fCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoZmlsdGVyUmVjdC5zaXplKCkp
KQpAQCAtMzM3LDQyICszNjMsNTYgQEAgdm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0
b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXgKICAgICAgICAg
UmVuZGVyaW5nTW9kZSBtb2RlID0gbV9maWx0ZXJSZW5kZXJlciA/IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkIDogcmVuZGVyaW5nTW9kZSgpOwogICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBtb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KSk7CiAjZW5kaWYKKyAgICAgICAgaWYgKGF1
dG8gY29udGV4dCA9IGlucHV0Q29udGV4dCgpKQorICAgICAgICAgICAgY29udGV4dC0+c2NhbGUo
ZmlsdGVyU2NhbGUoKSk7CiAgICAgfQorCiAgICAgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkID0g
dHJ1ZTsKIH0KIAorUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NTRmlsdGVyOjpsYXN0RWZmZWN0KCkK
K3sKKyAgICBpZiAobV9mdW5jdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGF1dG8mIGZ1bmN0aW9uID0gbV9mdW5jdGlvbnMubGFzdCgpOworICAgIGlmIChm
dW5jdGlvbi0+aXNTVkdGaWx0ZXIoKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR0ZpbHRl
cj4oZnVuY3Rpb24ucHRyKCkpLT5sYXN0RWZmZWN0KCk7CisKKyAgICByZXR1cm4gZG93bmNhc3Q8
RmlsdGVyRWZmZWN0PihmdW5jdGlvbi5wdHIoKSk7Cit9CisKIHZvaWQgQ1NTRmlsdGVyOjpkZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKQogewotICAgIGF1dG8mIGxhc3RFZmZlY3Qg
PSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOwotICAgIGxhc3RFZmZlY3QuZGV0ZXJtaW5lRmlsdGVy
UHJpbWl0aXZlU3VicmVnaW9uKCk7Ci0gICAgRmxvYXRSZWN0IHN1YlJlZ2lvbiA9IGxhc3RFZmZl
Y3QubWF4RWZmZWN0UmVjdCgpOworICAgIGF1dG8gZWZmZWN0ID0gbGFzdEVmZmVjdCgpOworICAg
IGVmZmVjdC0+ZGV0ZXJtaW5lRmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCk7CisgICAgRmxvYXRS
ZWN0IHN1YlJlZ2lvbiA9IGVmZmVjdC0+bWF4RWZmZWN0UmVjdCgpOwogICAgIC8vIEF0IGxlYXN0
IG9uZSBGaWx0ZXJFZmZlY3QgaGFzIGEgdG9vIGJpZyBpbWFnZSBzaXplLCByZWNhbGN1bGF0ZSB0
aGUgZWZmZWN0IHNpemVzIHdpdGggbmV3IHNjYWxlIGZhY3RvcnMuCiAgICAgRmxvYXRTaXplIGZp
bHRlclNjYWxlIHsgMSwgMSB9OwogICAgIGlmIChJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBp
bmcoc3ViUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUpKSB7CiAgICAgICAgIHNldEZpbHRlclNj
YWxlKGZpbHRlclNjYWxlKTsKLSAgICAgICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmlt
aXRpdmVTdWJyZWdpb24oKTsKKyAgICAgICAgZWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRp
dmVTdWJyZWdpb24oKTsKICAgICB9CiB9CiAKIHZvaWQgQ1NTRmlsdGVyOjpjbGVhckludGVybWVk
aWF0ZVJlc3VsdHMoKQogewotICAgIG1fc291cmNlR3JhcGhpYy0+Y2xlYXJSZXN1bHQoKTsKLSAg
ICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5jbGVhclJl
c3VsdCgpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykKKyAgICAgICAg
ZnVuY3Rpb24tPmNsZWFyUmVzdWx0KCk7CiB9CiAKIHZvaWQgQ1NTRmlsdGVyOjphcHBseSgpCiB7
Ci0gICAgYXV0byYgZWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKKyAgICBhdXRvIGVm
ZmVjdCA9IGxhc3RFZmZlY3QoKTsKICAgICBpZiAobV9maWx0ZXJSZW5kZXJlcikgewotICAgICAg
ICBtX2ZpbHRlclJlbmRlcmVyLT5hcHBseUVmZmVjdHMoZWZmZWN0KTsKKyAgICAgICAgbV9maWx0
ZXJSZW5kZXJlci0+YXBwbHlFZmZlY3RzKCplZmZlY3QpOwogICAgICAgICBpZiAobV9maWx0ZXJS
ZW5kZXJlci0+aGFzUmVzdWx0KCkpIHsKLSAgICAgICAgICAgIGVmZmVjdC50cmFuc2Zvcm1SZXN1
bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKKyAgICAgICAgICAg
IGVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWZm
ZWN0LmFwcGx5KCk7Ci0gICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgIGVmZmVjdC0+YXBwbHkoKTsKKyAgICBlZmZl
Y3QtPnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkpOwogfQogCiBMYXlvdXRSZWN0IENTU0ZpbHRlcjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZv
ckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBkaXJ0eVJlY3QpCkBAIC0zODUsMzUgKzQyNSwzOSBAQCBMYXlvdXRSZWN0IENTU0ZpbHRl
cjo6Y29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBm
aWx0ZQogICAgIHJldHVybiByZWN0Rm9yUmVwYWludDsKIH0KIAotSW1hZ2VCdWZmZXIqIENTU0Zp
bHRlcjo6b3V0cHV0KCkgY29uc3QKK0ltYWdlQnVmZmVyKiBDU1NGaWx0ZXI6Om91dHB1dCgpCiB7
CiAgICAgaWYgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0
KCkpCiAgICAgICAgIHJldHVybiBtX2ZpbHRlclJlbmRlcmVyLT5vdXRwdXQoKTsKICAgICAKLSAg
ICByZXR1cm4gbV9lZmZlY3RzLmxhc3QoKS0+aW1hZ2VCdWZmZXJSZXN1bHQoKTsKKyAgICByZXR1
cm4gbGFzdEVmZmVjdCgpLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwogfQogCiB2b2lkIENTU0ZpbHRl
cjo6c2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0KQog
eworICAgIGF1dG8gc2NhbGVkU291cmNlSW1hZ2VSZWN0ID0gc291cmNlSW1hZ2VSZWN0OworICAg
IHNjYWxlZFNvdXJjZUltYWdlUmVjdC5zY2FsZShmaWx0ZXJTY2FsZSgpKTsKKwogICAgIEZpbHRl
cjo6c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUltYWdlUmVjdCk7Ci0gICAgRmlsdGVyOjpzZXRTb3Vy
Y2VJbWFnZVJlY3Qoc291cmNlSW1hZ2VSZWN0KTsKLSAgICBzZXRNYXhFZmZlY3RSZWN0cyhzb3Vy
Y2VJbWFnZVJlY3QpOworICAgIEZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KHNjYWxlZFNvdXJj
ZUltYWdlUmVjdCk7CisKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uIDogbV9mdW5jdGlvbnMpIHsK
KyAgICAgICAgaWYgKGZ1bmN0aW9uLT5pc1NWR0ZpbHRlcigpKSB7CisgICAgICAgICAgICBkb3du
Y2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigpKS0+c2V0RmlsdGVyUmVnaW9uKHNvdXJjZUlt
YWdlUmVjdCk7CisgICAgICAgICAgICBkb3duY2FzdDxTVkdGaWx0ZXI+KGZ1bmN0aW9uLnB0cigp
KS0+c2V0U291cmNlSW1hZ2VSZWN0KHNjYWxlZFNvdXJjZUltYWdlUmVjdCk7CisgICAgICAgIH0K
KyAgICB9CisKICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSBmYWxzZTsKIH0KIAotdm9p
ZCBDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYgZWZmZWN0UmVj
dCkKK0ludFJlY3QgQ1NTRmlsdGVyOjpvdXRwdXRSZWN0KCkKIHsKLSAgICBmb3IgKGF1dG8mIGVm
ZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAgZWZmZWN0LT5zZXRNYXhFZmZlY3RSZWN0KGVmZmVj
dFJlY3QpOwotfQorICAgIGF1dG8gZWZmZWN0ID0gbGFzdEVmZmVjdCgpOworCisgICAgaWYgKGVm
ZmVjdC0+aGFzUmVzdWx0KCkgfHwgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJl
ci0+aGFzUmVzdWx0KCkpKQorICAgICAgICByZXR1cm4gZWZmZWN0LT5yZXF1ZXN0ZWRSZWdpb25P
ZklucHV0UGl4ZWxCdWZmZXIoSW50UmVjdCB7IGZpbHRlclJlZ2lvbigpIH0pOwogCi1JbnRSZWN0
IENTU0ZpbHRlcjo6b3V0cHV0UmVjdCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9
IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgCi0gICAgaWYgKGxhc3RFZmZlY3QuaGFzUmVz
dWx0KCkgfHwgKG1fZmlsdGVyUmVuZGVyZXIgJiYgbV9maWx0ZXJSZW5kZXJlci0+aGFzUmVzdWx0
KCkpKQotICAgICAgICByZXR1cm4gbGFzdEVmZmVjdC5yZXF1ZXN0ZWRSZWdpb25PZklucHV0UGl4
ZWxCdWZmZXIoSW50UmVjdCB7IGZpbHRlclJlZ2lvbigpIH0pOwotICAgIAogICAgIHJldHVybiB7
IH07CiB9CiAKQEAgLTQyNSw4ICs0NjksOCBAQCBJbnRPdXRzZXRzIENTU0ZpbHRlcjo6b3V0c2V0
cygpIGNvbnN0CiAgICAgaWYgKCFtX291dHNldHMuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiBt
X291dHNldHM7CiAKLSAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fZWZmZWN0cykKLSAgICAgICAg
bV9vdXRzZXRzICs9IGVmZmVjdC0+b3V0c2V0cygpOworICAgIGZvciAoYXV0byYgZnVuY3Rpb24g
OiBtX2Z1bmN0aW9ucykKKyAgICAgICAgbV9vdXRzZXRzICs9IGZ1bmN0aW9uLT5vdXRzZXRzKCk7
CiAgICAgcmV0dXJuIG1fb3V0c2V0czsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NTU0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRl
ci5oCmluZGV4IDUxOTM0NzAxZDM2YWUyZmJjYTQzZDhjYTUxOTVjZmRjNTE2MGEyYjMuLmQ2ZDYx
OTc0MTYyZDEzNzNiNWY2YmM1NmJhNjNiM2Y0N2Q2ZDAxOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ1NTRmlsdGVyLmgKQEAgLTQ0LDQ4ICs0NCw0MyBAQCBlbnVtIGNsYXNzIEZpbHRlckNvbnN1
bWVyIHsgRmlsdGVyUHJvcGVydHksIEZpbHRlckZ1bmN0aW9uIH07CiAKIGNsYXNzIENTU0ZpbHRl
ciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxDU1NGaWx0ZXI+IGNyZWF0ZShmbG9hdCBzY2FsZUZhY3RvciA9IDEpOwotCi0gICAgSW1h
Z2VCdWZmZXIqIG91dHB1dCgpIGNvbnN0OworICAgIHN0YXRpYyBSZWZQdHI8Q1NTRmlsdGVyPiBj
cmVhdGUoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHNjYWxl
RmFjdG9yID0gMSk7CiAKICAgICB2b2lkIHNldFNvdXJjZUltYWdlUmVjdChjb25zdCBGbG9hdFJl
Y3QmKTsKLSAgICBib29sIGJ1aWxkKFJlbmRlckVsZW1lbnQmLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiwgRmlsdGVyQ29uc3VtZXIpOwotICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRz
KCk7Ci0gICAgdm9pZCBhcHBseSgpOworICAgIGJvb2wgYnVpbGRGaWx0ZXJGdW5jdGlvbnMoUmVu
ZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7Cisg
ICAgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKIAogICAgIGJvb2wg
aGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHM7IH0KICAgICBib29sIGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRC
eVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVS
ZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbjsgfQogCi0gICAgdm9pZCBkZXRlcm1pbmVGaWx0ZXJQ
cmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdDsKLQot
cHJpdmF0ZToKLSAgICBDU1NGaWx0ZXIoZmxvYXQgc2NhbGVGYWN0b3IpOwotCi0gICAgUmVmUHRy
PEZpbHRlckVmZmVjdD4gYnVpbGRSZWZlcmVuY2VGaWx0ZXIoUmVuZGVyRWxlbWVudCYsIEZpbHRl
ckVmZmVjdCYgcHJldmlvdXNFZmZlY3QsIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbiYpOworICAg
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGxhc3RFZmZlY3QoKTsKKyAgICBHcmFwaGljc0NvbnRleHQq
IGlucHV0Q29udGV4dCgpOworICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0cyhjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2
b2lkIGNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOworICAgIHZvaWQgYXBwbHkoKTsKIAotICAg
IEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0KCk7CisgICAgSW1hZ2VCdWZmZXIqIG91dHB1
dCgpOwogCiAgICAgYm9vbCB1cGRhdGVCYWNraW5nU3RvcmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVjdCk7CiAgICAgdm9pZCBhbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgSW50UmVjdCBvdXRwdXRSZWN0KCkgY29uc3Q7Cisg
ICAgSW50UmVjdCBvdXRwdXRSZWN0KCk7CiAKICAgICBMYXlvdXRSZWN0IGNvbXB1dGVTb3VyY2VJ
bWFnZVJlY3RGb3JEaXJ0eVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29u
c3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0KTsKIAotICAgIFZlY3RvcjxSZWY8RmlsdGVyRWZmZWN0
Pj4gbV9lZmZlY3RzOwotICAgIFJlZjxTb3VyY2VHcmFwaGljPiBtX3NvdXJjZUdyYXBoaWM7Ci0K
LSAgICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOworcHJpdmF0ZToKKyAgICBDU1NGaWx0
ZXIoYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMsIGJvb2wgaGFzRmlsdGVyVGhhdFNob3Vs
ZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIGZsb2F0IHNjYWxlRmFjdG9yKTsKIAogICAg
IGJvb2wgbV9ncmFwaGljc0J1ZmZlckF0dGFjaGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzRmlsdGVyVGhh
dFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4geyBmYWxzZSB9OwotICAgIAorCisg
ICAgVmVjdG9yPFJlZjxGaWx0ZXJGdW5jdGlvbj4+IG1fZnVuY3Rpb25zOworCisgICAgbXV0YWJs
ZSBJbnRPdXRzZXRzIG1fb3V0c2V0czsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJFZmZl
Y3RSZW5kZXJlcj4gbV9maWx0ZXJSZW5kZXJlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGY1NzYyMjhkZWZhYmI2Zjg0OTVjZmVhYjVlZDEzZGJm
MmI1YjAzZmIuLjA5MjVkODI4ZjhhYTVhNWIwY2I0ZjJkMjc4NjhiMGZhMjk1MmJhZWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMzI0Miw3ICszMjQyLDcg
QEAgR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29u
dGV4dCYgZGVzdGluYXRpb25Db250ZXh0LAogCiAgICAgYXV0byByb290UmVsYXRpdmVCb3VuZHMg
PSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZzZXRGcm9t
Um9vdCwgeyB9KTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50
aW5nRmlsdGVycy0+YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCBlbmNsb3Np
bmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkp
OworICAgIEdyYXBoaWNzQ29udGV4dCogZmlsdGVyQ29udGV4dCA9IHBhaW50aW5nRmlsdGVycy0+
YmVnaW5GaWx0ZXJFZmZlY3QoZGVzdGluYXRpb25Db250ZXh0LCByZW5kZXJlcigpLCBlbmNsb3Np
bmdJbnRSZWN0KHJvb3RSZWxhdGl2ZUJvdW5kcyksIGVuY2xvc2luZ0ludFJlY3QocGFpbnRpbmdJ
bmZvLnBhaW50RGlydHlSZWN0KSwgZW5jbG9zaW5nSW50UmVjdChmaWx0ZXJSZXBhaW50UmVjdCkp
OwogICAgIGlmICghZmlsdGVyQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKaW5kZXgg
NGI2ZWNmZWVhNTBjZTkwOTE2MzViMWFhYzVhYTI0Y2EwOTYwZDQ1ZC4uOTdmZTk2OTMxNGIyNWVh
MzA1NDIxYmExZDYwM2U4MmYxNWQ1ZjIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKQEAgLTExOCwxNyArMTE4LDEzIEBAIHZvaWQgUmVu
ZGVyTGF5ZXJGaWx0ZXJzOjpyZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKIAogdm9pZCBS
ZW5kZXJMYXllckZpbHRlcnM6OmJ1aWxkRmlsdGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBm
bG9hdCBzY2FsZUZhY3RvciwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQogewotICAgIC8v
IEZJWE1FOiB0aGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRo
ZSBmaWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KLSAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6
Y3JlYXRlKHNjYWxlRmFjdG9yKTsKLSAgICBtX2ZpbHRlci0+c2V0UmVuZGVyaW5nTW9kZShyZW5k
ZXJpbmdNb2RlKTsKLQogICAgIC8vIElmIHRoZSBmaWx0ZXIgZmFpbHMgdG8gYnVpbGQsIHJlbW92
ZSBpdCBmcm9tIHRoZSBsYXllci4gSXQgd2lsbCBzdGlsbCBhdHRlbXB0IHRvCiAgICAgLy8gZ28g
dGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUuZy4gY29tcG9zaXRpbmcpLCBidXQgbmV2ZXIg
YXBwbHkgYW55dGhpbmcuCi0gICAgaWYgKCFtX2ZpbHRlci0+YnVpbGQocmVuZGVyZXIsIHJlbmRl
cmVyLnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkpCi0g
ICAgICAgIG1fZmlsdGVyID0gbnVsbHB0cjsKKyAgICAvLyBGSVhNRTogdGhpcyByZWJ1aWxkcyB0
aGUgZW50aXJlIGVmZmVjdHMgY2hhaW4gZXZlbiBpZiB0aGUgZmlsdGVyIHN0eWxlIGRpZG4ndCBj
aGFuZ2UuCisgICAgbV9maWx0ZXIgPSBDU1NGaWx0ZXI6OmNyZWF0ZShyZW5kZXJlci5zdHlsZSgp
LmZpbHRlcigpLCByZW5kZXJpbmdNb2RlLCBzY2FsZUZhY3Rvcik7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRl
eHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwg
Y29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFp
bnRSZWN0KQorR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVy
RWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0
UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KQogewog
ICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTM5LDYgKzEz
NSwxNSBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJF
ZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGJvb2wgaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSA9IGZpbHRlci51cGRhdGVCYWNraW5n
U3RvcmVSZWN0KGZpbHRlclNvdXJjZVJlY3QpOworCisgICAgLy8gRklYTUU6IHRoaXMgY2FsbCBz
aG91bGQgYmUgbW92ZWQgdG8gQ1NTRmlsdGVyOjpjcmVhdGUoKSB3aGVuIEZpbHRlckVmZmVjdCBk
b2VzIG5vdCBzdG9yZSBpdHMgZ2VvbWV0cnkuCisgICAgaWYgKGhhc1VwZGF0ZWRCYWNraW5nU3Rv
cmUgfHwgIW1fZmlsdGVyLT5sYXN0RWZmZWN0KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRl
ciBmYWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxsIHN0aWxs
IGF0dGVtcHQgdG8KKyAgICAgICAgLy8gZ28gdGhyb3VnaCByZWd1bGFyIHByb2Nlc3NpbmcgKGUu
Zy4gY29tcG9zaXRpbmcpLCBidXQgbmV2ZXIgYXBwbHkgYW55dGhpbmcuCisgICAgICAgIGlmICgh
bV9maWx0ZXItPmJ1aWxkRmlsdGVyRnVuY3Rpb25zKHJlbmRlcmVyLCByZW5kZXJlci5zdHlsZSgp
LmZpbHRlcigpLCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyUHJvcGVydHkpKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAogICAgIGlmICghZmlsdGVyLmhhc0ZpbHRlclRo
YXRNb3Zlc1BpeGVscygpKQogICAgICAgICBtX3JlcGFpbnRSZWN0ID0gZGlydHlSZWN0OwogICAg
IGVsc2UgewpAQCAtMTg0LDggKzE4OSwxMSBAQCB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YXBw
bHlGaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpCiAgICAg
TGF5b3V0UmVjdCBkZXN0UmVjdCA9IGZpbHRlci5vdXRwdXRSZWN0KCk7CiAgICAgZGVzdFJlY3Qu
bW92ZShtX3BhaW50T2Zmc2V0LngoKSwgbV9wYWludE9mZnNldC55KCkpOwogCi0gICAgaWYgKGF1
dG8qIG91dHB1dEJ1ZmZlciA9IGZpbHRlci5vdXRwdXQoKSkKKyAgICBpZiAoYXV0byogb3V0cHV0
QnVmZmVyID0gZmlsdGVyLm91dHB1dCgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5z
Y2FsZSh7IDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS53aWR0aCgpLCAxIC8gZmlsdGVyLmZpbHRl
clNjYWxlKCkuaGVpZ2h0KCkgfSk7CiAgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKm91dHB1dEJ1ZmZlciwgc25hcFJlY3RUb0RldmljZVBpeGVscyhkZXN0UmVjdCwg
bV9sYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOworICAg
ICAgICBkZXN0aW5hdGlvbkNvbnRleHQuc2NhbGUoZmlsdGVyLmZpbHRlclNjYWxlKCkpOworICAg
IH0KIAogICAgIGZpbHRlci5jbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5oCmluZGV4IDNkYTE0MGE1Yzg4
ZjE1NTMxOTBiNzAwM2Q3ZTc4NDRjOTE5NDViZjcuLjNhNzQ5OTVmMWY4NGJkOTczZWQyYjg4ZDMw
NDM5N2I0YzQ0ZGEwMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckZpbHRlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJGaWx0ZXJzLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIC8vIFBlciByZW5kZXIK
ICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVj
dDsgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBiZWdpbkZpbHRlckVmZmVjdChHcmFwaGljc0Nv
bnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZmlsdGVyQm94UmVj
dCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllclJl
cGFpbnRSZWN0KTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdyYXBo
aWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBSZW5kZXJFbGVtZW50JiwgY29uc3QgTGF5
b3V0UmVjdCYgZmlsdGVyQm94UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBjb25z
dCBMYXlvdXRSZWN0JiBsYXllclJlcGFpbnRSZWN0KTsKICAgICB2b2lkIGFwcGx5RmlsdGVyRWZm
ZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0KTsKIAogcHJpdmF0ZToKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKaW5kZXggNTM3ZTY1NWVlNWQ2NjZlNGY4NTUwODc0ZjkyMWFiMjNmMDFlMGU1
NC4uZjEwMzUzMzllYzQxZDZlNTQwZjI1ZjYxZDFkYzUyYjU2NmQwYTkzZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5jcHAKQEAgLTgyLDQwICs4Miw2IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnJl
bW92ZUNsaWVudEZyb21DYWNoZShSZW5kZXJFbGVtZW50JiBjbGllbnQsIGJvb2wKICAgICBtYXJr
Q2xpZW50Rm9ySW52YWxpZGF0aW9uKGNsaWVudCwgbWFya0ZvckludmFsaWRhdGlvbiA/IEJvdW5k
YXJpZXNJbnZhbGlkYXRpb24gOiBQYXJlbnRPbmx5SW52YWxpZGF0aW9uKTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPFNWR0ZpbHRlckJ1aWxkZXI+IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWls
ZFByaW1pdGl2ZXMoU1ZHRmlsdGVyJiBmaWx0ZXIpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKLSAgICBpZiAoZmlsdGVyRWxlbWVu
dCgpLmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCA9IGZpbHRlci50
YXJnZXRCb3VuZGluZ0JveCgpOwotCi0gICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIK
LSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KFNvdXJjZUdy
YXBoaWM6OmNyZWF0ZShmaWx0ZXIpKTsKLSAgICBidWlsZGVyLT5zZXRQcmltaXRpdmVVbml0cyhm
aWx0ZXJFbGVtZW50KCkucHJpbWl0aXZlVW5pdHMoKSk7Ci0gICAgYnVpbGRlci0+c2V0VGFyZ2V0
Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOwotICAgIAotICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cz4oZmlsdGVyRWxlbWVudCgpKSkgewotICAgICAgICBhdXRvIGVmZmVjdCA9IGVsZW1lbnQuYnVp
bGQoYnVpbGRlci5nZXQoKSwgZmlsdGVyKTsKLSAgICAgICAgaWYgKCFlZmZlY3QpIHsKLSAgICAg
ICAgICAgIGJ1aWxkZXItPmNsZWFyRWZmZWN0cygpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIH0KLSAgICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZl
cmVuY2VzKGVmZmVjdC5jb3B5UmVmKCksIGVsZW1lbnQucmVuZGVyZXIoKSk7Ci0gICAgICAgIGVs
ZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7Ci0gICAgICAgIGVmZmVj
dC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xl
PFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVsZW1lbnQsIGZpbHRlckVs
ZW1lbnQoKS5wcmltaXRpdmVVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCkpOwotICAgICAgICBp
ZiAoZWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQ
QUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNw
YWNlKGVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xh
dGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
KCkpOwotI2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShE
ZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAg
ICBidWlsZGVyLT5hZGQoZWxlbWVudC5yZXN1bHQoKSwgV1RGTW92ZShlZmZlY3QpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGJ1aWxkZXI7Ci19Ci0KIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6
OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxl
JiwgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgT3B0aW9uU2V0PFJlbmRlclNWR1Jlc291cmNl
TW9kZT4gcmVzb3VyY2VNb2RlKQogewogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTE1NSwxOCAr
MTIxLDEzIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKGFic29sdXRlRHJhd2luZ1JlZ2lvbi5zaXplKCksIGZpbHRlclNjYWxlKTsK
IAogICAgIC8vIENyZWF0ZSB0aGUgU1ZHRmlsdGVyIG9iamVjdC4KLSAgICBib29sIHByaW1pdGl2
ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpID09IFNW
R1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKLSAgICBmaWx0ZXJE
YXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJTY2FsZSwgYWJzb2x1dGVEcmF3
aW5nUmVnaW9uLCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCB0YXJnZXRCb3VuZGluZ0JveCwgcHJp
bWl0aXZlQm91bmRpbmdCb3hNb2RlKTsKLQotICAgIC8vIENyZWF0ZSBhbGwgcmVsZXZhbnQgZmls
dGVyIHByaW1pdGl2ZXMuCi0gICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IGJ1aWxkUHJpbWl0aXZl
cygqZmlsdGVyRGF0YS0+ZmlsdGVyKTsKLSAgICBpZiAoIWZpbHRlckRhdGEtPmJ1aWxkZXIpCisg
ICAgZmlsdGVyRGF0YS0+YnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oKTsK
KyAgICBmaWx0ZXJEYXRhLT5maWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShmaWx0ZXJFbGVtZW50
KCksICpmaWx0ZXJEYXRhLT5idWlsZGVyLCBmaWx0ZXJTY2FsZSwgYWJzb2x1dGVEcmF3aW5nUmVn
aW9uLCBmaWx0ZXJEYXRhLT5ib3VuZGFyaWVzLCB0YXJnZXRCb3VuZGluZ0JveCk7CisgICAgaWYg
KCFmaWx0ZXJEYXRhLT5maWx0ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzID0gMTAwOwotICAgIEZpbHRl
ckVmZmVjdCogbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsK
LSAgICBpZiAoIWxhc3RFZmZlY3QgfHwgbGFzdEVmZmVjdC0+dG90YWxOdW1iZXJPZkVmZmVjdElu
cHV0cygpID4gbWF4VG90YWxPZkVmZmVjdElucHV0cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGF1dG8gbGFzdEVmZmVjdCA9IGZpbHRlckRhdGEtPmJ1aWxkZXItPmxhc3RFZmZlY3QoKTsK
KyAgICBBU1NFUlQobGFzdEVmZmVjdCk7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZVxuIiA8PCAq
ZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggYTJkMzVm
OWFjN2EzZDI0ZTEyZWNlZjY1NTI0ZmNkYjFiMzc3ODIxYS4uNjRlM2FjNWFlYWM4MGFkZjllMjZh
YjRlZjZiODVhMjdjMjU0MmQxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00MzMsMTEgKzQzMywxMiBAQCB2b2lk
IHdyaXRlU1ZHUmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNW
R1Jlc291cmNlQ29udGFpbmVyJgogICAgICAgICAvLyBDcmVhdGluZyBhIHBsYWNlaG9sZGVyIGZp
bHRlciB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIGJ1aWxkZXIuCiAgICAgICAgIEZsb2F0UmVjdCBk
dW1teVJlY3Q7CiAgICAgICAgIEZsb2F0U2l6ZSBkdW1teVNjYWxlKDEsIDEpOwotICAgICAgICBh
dXRvIGR1bW15RmlsdGVyID0gU1ZHRmlsdGVyOjpjcmVhdGUoZHVtbXlTY2FsZSwgZHVtbXlSZWN0
LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChhdXRvIGJ1aWxkZXIg
PSBmaWx0ZXIuYnVpbGRQcmltaXRpdmVzKGR1bW15RmlsdGVyLmdldCgpKSkgeworICAgICAgICBT
VkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdG
aWx0ZXI6OmNyZWF0ZShmaWx0ZXIuZmlsdGVyRWxlbWVudCgpLCBidWlsZGVyLCBkdW1teVNjYWxl
LCBkdW1teVJlY3QsIGR1bW15UmVjdCwgZHVtbXlSZWN0KTsKKyAgICAgICAgaWYgKGR1bW15Rmls
dGVyKSB7CiAgICAgICAgICAgICBUZXh0U3RyZWFtOjpJbmRlbnRTY29wZSBpbmRlbnRTY29wZSh0
cyk7CiAKLSAgICAgICAgICAgIGlmIChGaWx0ZXJFZmZlY3QqIGxhc3RFZmZlY3QgPSBidWlsZGVy
LT5sYXN0RWZmZWN0KCkpCisgICAgICAgICAgICBpZiAoYXV0byBsYXN0RWZmZWN0ID0gZHVtbXlG
aWx0ZXItPmxhc3RFZmZlY3QoKSkKICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LT5leHRlcm5h
bFJlcHJlc2VudGF0aW9uKHRzKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAocmVzb3VyY2Uu
cmVzb3VyY2VUeXBlKCkgPT0gQ2xpcHBlclJlc291cmNlVHlwZSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKaW5kZXggNzMyZWIxODhh
NWJiY2M4NTg0ZGFjY2JlZTIwODdmMjgwMmE1N2FmNi4uYzlkYTI3ODFkOTU3NDg4MDYzYjk5NWFi
MDk0MjIxOWYxOGQwM2ViYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXIuY3BwCkBAIC0yMiw4ICsyMiw0NCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogCisjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRl
ci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJTb3VyY2VHcmFw
aGljLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmls
dGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnVp
bGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBGaWx0
ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0KQoreworICAgIHJldHVybiBjcmVhdGUoZmlsdGVyRWxl
bWVudCwgYnVpbGRlciwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9u
LCBmaWx0ZXJSZWdpb24sICZwcmV2aW91c0VmZmVjdCk7Cit9CisKK1JlZlB0cjxTVkdGaWx0ZXI+
IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0Zp
bHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lv
biwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlKGZpbHRlckVsZW1lbnQsIGJ1aWxkZXIsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3Qs
IGZpbHRlclJlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIG51bGxwdHIpOworfQorCitSZWZQdHI8
U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVt
ZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNj
YWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIEZpbHRlckVm
ZmVjdCogcHJldmlvdXNFZmZlY3QpCit7CisgICAgYm9vbCBwcmltaXRpdmVCb3VuZGluZ0JveE1v
ZGUgPSBmaWx0ZXJFbGVtZW50LnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdf
VU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOworCisgICAgYXV0byBmaWx0ZXIgPSBhZG9wdFJl
ZigqbmV3IFNWR0ZpbHRlcihmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdp
b24sIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpKTsKKworICAg
IGlmICghcHJldmlvdXNFZmZlY3QpCisgICAgICAgIGJ1aWxkZXIuc2V0dXBCdWlsdGluRWZmZWN0
cyhTb3VyY2VHcmFwaGljOjpjcmVhdGUoZmlsdGVyKSk7CisgICAgZWxzZQorICAgICAgICBidWls
ZGVyLnNldHVwQnVpbHRpbkVmZmVjdHMoeyAqcHJldmlvdXNFZmZlY3QgfSk7CisKKyAgICBidWls
ZGVyLnNldFRhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICBidWlsZGVy
LnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQucHJpbWl0aXZlVW5pdHMoKSk7CisKKyAg
ICBhdXRvIGxhc3RFZmZlY3QgPSBidWlsZGVyLmJ1aWxkRmlsdGVyRWZmZWN0cyhmaWx0ZXIsIGZp
bHRlckVsZW1lbnQpOworICAgIGlmICghbGFzdEVmZmVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBmaWx0ZXItPnNldExhc3RFZmZlY3QoV1RGTW92ZShsYXN0RWZmZWN0KSk7Cisg
ICAgcmV0dXJuIGZpbHRlcjsKK30KKwogU1ZHRmlsdGVyOjpTVkdGaWx0ZXIoY29uc3QgRmxvYXRT
aXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5n
Qm94LCBib29sIGVmZmVjdEJCb3hNb2RlKQogICAgIDogRmlsdGVyKEZpbHRlcjo6VHlwZTo6U1ZH
RmlsdGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24pCiAgICAg
LCBtX3RhcmdldEJvdW5kaW5nQm94KHRhcmdldEJvdW5kaW5nQm94KQpAQCAtMzksOSArNzUsMTQg
QEAgRmxvYXRTaXplIFNWR0ZpbHRlcjo6c2NhbGVkQnlGaWx0ZXJTY2FsZShGbG9hdFNpemUgc2l6
ZSkgY29uc3QKICAgICByZXR1cm4gRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKHNpemUpOwog
fQogCi1SZWY8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGZp
bHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGJv
b2wgZWZmZWN0QkJveE1vZGUpCitJbnRPdXRzZXRzIFNWR0ZpbHRlcjo6b3V0c2V0cygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGFzdEVmZmVjdC0+b3V0c2V0cygpOworfQorCit2b2lkIFNWR0Zp
bHRlcjo6Y2xlYXJSZXN1bHQoKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNWR0ZpbHRl
cihmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIHRhcmdldEJvdW5k
aW5nQm94LCBlZmZlY3RCQm94TW9kZSkpOworICAgIG1fbGFzdEVmZmVjdC0+Y2xlYXJSZXN1bHRz
UmVjdXJzaXZlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5oIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmgKaW5kZXggNTA4MTFlNmZiNDlh
MjBhNWFlMjc5MWI1NDAzOWM3ZjgyN2I2N2ZkYS4uMTY2MDEyZmY0ZWJhY2QxNjU0NGVlMTQxZjA1
ZDhjODY3M2EzNWY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyLmgKQEAgLTI3LDE5ICsyNywzMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIFNWR0ZpbHRlckJ1aWxkZXI7CitjbGFzcyBTVkdGaWx0ZXJFbGVtZW50OworCiBj
bGFzcyBTVkdGaWx0ZXIgZmluYWwgOiBwdWJsaWMgRmlsdGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFNWR0ZpbHRlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJv
dW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94
TW9kZSk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVt
ZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Z2lvbiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCk7CisgICAgc3RhdGljIFJlZlB0cjxT
VkdGaWx0ZXI+IGNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNv
bnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXRCb3VuZGluZ0JveCk7CisgICAgc3RhdGljIFJlZlB0cjxTVkdGaWx0ZXI+IGNyZWF0ZShTVkdG
aWx0ZXJFbGVtZW50JiwgU1ZHRmlsdGVyQnVpbGRlciYsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVy
U2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgRmlsdGVy
RWZmZWN0KiBwcmV2aW91c0VmZmVjdCk7CiAKICAgICBGbG9hdFNpemUgc2NhbGVkQnlGaWx0ZXJT
Y2FsZShGbG9hdFNpemUpIGNvbnN0IGZpbmFsOwogCiAgICAgRmxvYXRSZWN0IHRhcmdldEJvdW5k
aW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRCb3VuZGluZ0JveDsgfQogCisgICAgUmVm
UHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpIHsgcmV0dXJuIG1fbGFzdEVmZmVjdDsgfQor
ICAgIHZvaWQgc2V0TGFzdEVmZmVjdChSZWZQdHI8RmlsdGVyRWZmZWN0PiYmIGxhc3RFZmZlY3Qp
IHsgbV9sYXN0RWZmZWN0ID0gV1RGTW92ZShsYXN0RWZmZWN0KTsgfQorCiBwcml2YXRlOgogICAg
IFNWR0ZpbHRlcihjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgY29u
c3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGJvb2wgZWZmZWN0QkJveE1vZGUpOwogCisgICAg
SW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhclJlc3Vs
dCgpIG92ZXJyaWRlOworCiAgICAgRmxvYXRSZWN0IG1fdGFyZ2V0Qm91bmRpbmdCb3g7CiAgICAg
Ym9vbCBtX2VmZmVjdEJCb3hNb2RlOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9sYXN0
RWZmZWN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRl
eCA4MDAwZjg0YjVjZDYwZTA2ZTIzNjRlZDVjZGU4ZjhlM2ZkOTQ0MTZlLi5iZThmMGZiMWMzZjUy
ZmZlNWM5ZTU0MTFiNjhjZTFjMGY4NGY4ZDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMjAsMjEg
KzIwLDk3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyQnVpbGRl
ci5oIgogCi0jaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCisjaW5jbHVkZSAiRWxlbWVudEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJFbGVt
ZW50LmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgi
CiAjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKKyNpZiBFTkFC
TEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCisjaW5jbHVkZSAiQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBw
aW5ncy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRmlsdGVyQnVpbGRl
cjo6U1ZHRmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKQor
dm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZl
Y3Q+IHNvdXJjZUdyYXBoaWMpCiB7Ci0gICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljKTsKLSAgICBtX2J1aWx0aW5FZmZlY3Rz
LmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKCpzb3Vy
Y2VHcmFwaGljKSk7CisgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZm
ZWN0TmFtZSgpLCBzb3VyY2VHcmFwaGljLnB0cigpKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFk
ZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6Y3JlYXRlKHNvdXJjZUdy
YXBoaWMpKTsKICAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCisjaWYgRU5BQkxFKERFU1RJ
TkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorc3RhdGljIENvbG9ySW50ZXJwb2xhdGlv
biBjb2xvckludGVycG9sYXRpb25Gb3JFbGVtZW50KFNWR0VsZW1lbnQmIGVsZW1lbnQpCit7Cisg
ICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVy
biByZW5kZXJlci0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMo
KTsKKworICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHByb3BlcnR5IHZhbHVlIGZyb20gdGhl
IGNvbXB1dGVkIHN0eWxlLgorICAgIGlmIChhdXRvIHZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJh
Y3RvcigmZWxlbWVudCkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUNvbG9ySW50ZXJwb2xhdGlv
bkZpbHRlcnMpKSB7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwor
ICAgIH0KKworICAgIHJldHVybiBDb2xvckludGVycG9sYXRpb246OkF1dG87Cit9CisjZW5kaWYK
Kworc3RhdGljIHVuc2lnbmVkIGNvbGxlY3RFZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdCogZWZm
ZWN0LCBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+JiBhbGxFZmZlY3RzKQoreworICAgIGFs
bEVmZmVjdHMuYWRkKGVmZmVjdCk7CisgICAgdW5zaWduZWQgc2l6ZSA9IGVmZmVjdC0+bnVtYmVy
T2ZFZmZlY3RJbnB1dHMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBlZmZlY3QtPmlucHV0RWZmZWN0KGkpOwor
ICAgICAgICBjb2xsZWN0RWZmZWN0cyhpbiwgYWxsRWZmZWN0cyk7CisgICAgfQorICAgIHJldHVy
biBhbGxFZmZlY3RzLnNpemUoKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHRvdGFsTnVtYmVyRmls
dGVyRWZmZWN0cyhjb25zdCBGaWx0ZXJFZmZlY3QmIGxhc3RFZmZlY3QpCit7CisgICAgSGFzaFNl
dDxjb25zdCBGaWx0ZXJFZmZlY3QqPiBhbGxFZmZlY3RzOworICAgIHJldHVybiBjb2xsZWN0RWZm
ZWN0cygmbGFzdEVmZmVjdCwgYWxsRWZmZWN0cyk7Cit9CisKK1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZpbHRlckJ1aWxkZXI6OmJ1aWxkRmlsdGVyRWZmZWN0cyhGaWx0ZXImIGZpbHRlciwgU1ZH
RmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCkKK3sKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG1heENvdW50Q2hpbGROb2RlcyA9IDIwMDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cyA9IDEwMDsKKworICAgIGlmIChmaWx0
ZXJFbGVtZW50LmNvdW50Q2hpbGROb2RlcygpID4gbWF4Q291bnRDaGlsZE5vZGVzKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKKwor
ICAgIGZvciAoYXV0byYgZWZmZWN0RWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oZmlsdGVyRWxlbWVudCkpIHsKKyAgICAgICAgZWZm
ZWN0ID0gZWZmZWN0RWxlbWVudC5idWlsZCh0aGlzLCBmaWx0ZXIpOworICAgICAgICBpZiAoIWVm
ZmVjdCkgeworICAgICAgICAgICAgY2xlYXJFZmZlY3RzKCk7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGVmZmVjdEVsZW1lbnQuc2V0U3RhbmRhcmRB
dHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7CisgICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRh
cmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVmZmVjdEVsZW1lbnQsIG1fcHJpbWl0aXZlVW5pdHMsIG1f
dGFyZ2V0Qm91bmRpbmdCb3gpKTsKKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFD
RV9MSU5FQVJfU1JHQikKKyAgICAgICAgaWYgKGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQo
ZWZmZWN0RWxlbWVudCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IpCisgICAgICAg
ICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNl
OjpMaW5lYXJTUkdCKCkpOworI2VuZGlmCisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZWZm
ZWN0RWxlbWVudC5yZW5kZXJlcigpKQorICAgICAgICAgICAgYXBwZW5kRWZmZWN0VG9FZmZlY3RS
ZWZlcmVuY2VzKGVmZmVjdC5jb3B5UmVmKCksIHJlbmRlcmVyKTsKKworICAgICAgICBhZGQoZWZm
ZWN0RWxlbWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKKyAgICB9CisKKyAgICBpZiAoIWVmZmVjdCB8
fCB0b3RhbE51bWJlckZpbHRlckVmZmVjdHMoKmVmZmVjdCkgPiBtYXhUb3RhbE51bWJlckZpbHRl
ckVmZmVjdHMpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGVmZmVjdDsK
K30KKwogdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphZGQoY29uc3QgQXRvbVN0cmluZyYgaWQsIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKIHsKICAgICBpZiAoaWQuaXNFbXB0eSgpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmgKaW5kZXggYzc3YWUwOGJhYzY1YzNjMmNmYzg5NzRmYTMzZTc2NDYwY2U5N2ZhNy4u
Mzc1YmRiMTUzMWVmNDNhZTJiNzE1NjZmNjY1OGRlYzM0ZDhkNDhhYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApA
QCAtMzcsNyArMzcsNyBAQCBjbGFzcyBTVkdGaWx0ZXJCdWlsZGVyIHsKIHB1YmxpYzoKICAgICB0
eXBlZGVmIEhhc2hTZXQ8RmlsdGVyRWZmZWN0Kj4gRmlsdGVyRWZmZWN0U2V0OwogCi0gICAgU1ZH
RmlsdGVyQnVpbGRlcihSZWZQdHI8RmlsdGVyRWZmZWN0PiBzb3VyY2VHcmFwaGljKTsKKyAgICBT
VkdGaWx0ZXJCdWlsZGVyKCkgPSBkZWZhdWx0OwogCiAgICAgdm9pZCBzZXRUYXJnZXRCb3VuZGlu
Z0JveChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV90YXJnZXRCb3VuZGluZ0JveCA9IHI7IH0KICAg
ICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJv
dW5kaW5nQm94OyB9CkBAIC02NSw2ICs2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyRWZm
ZWN0cygpOwogICAgIHZvaWQgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKEZpbHRlckVmZmVjdCopOwog
CisgICAgdm9pZCBzZXR1cEJ1aWx0aW5FZmZlY3RzKFJlZjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdy
YXBoaWMpOworICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGJ1aWxkRmlsdGVyRWZmZWN0cyhGaWx0
ZXImLCBTVkdGaWx0ZXJFbGVtZW50Jik7CisKIHByaXZhdGU6CiAgICAgaW5saW5lIHZvaWQgYWRk
QnVpbHRpbkVmZmVjdHMoKQogICAgIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ZTU1NmU0MmM0YWQ2YmI1MzVkYzA5Njgx
MDAyZWQwOGViMTc2OGFkLi5jMWRjMDUwZWQyY2Y0MTVmZGM1MTVkNWJjZmI2NzhjNGFiYzQ0ZGU1
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMTEtMTAgIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2FpZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBNYWtlIENTU0ZpbHRlciBi
ZSBhIGNvbXBvc2l0ZSBvZiBGaWx0ZXJGdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjQ2OQorICAgICAgICByZGFyOi8vODUwNDcxNDgK
KworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgVW5za2lwIGZp
bHRlciBoaWRwaSBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgor
CiAyMDIxLTExLTEwICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtHUFUgUHJvY2Vzc10gTWFrZSBTVkdGaWx0ZXIgYW5kIENTU0ZpbHRlciB3b3JrIGluIHRo
ZSBzYW1lIGNvb3JkaW5hdGVzIHN5c3RlbQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvVGVzdEV4
cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYTM5ZjA5YTQ3
N2Q1MTU4YjNiODg5MjNlNTkzZDMxYWU1Mzc0M2NjNi4uYTIxZWYzNTU1NGEwY2U0YmIzNTEzOTgz
NmFiNGMxMDNiOTU0YzQ1MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC01MTc0LDUzICs1MTc0LDEw
IEBAIGpzL2RvbS9yZWZsZWN0LXNldC1vbnRvLWRvbS5odG1sIFsgU2tpcCBdCiB1c2Vyc2NyaXB0
cy91c2VyLXNjcmlwdC1wbHVnaW4tZG9jdW1lbnQuaHRtbCBbIFNraXAgXQogCiAjIFRoZXNlIGZp
bHRlciByZWxhdGVkIGZhaWx1cmVzIHNob3VsZCBiZSBmaXhlZCBvbmNlIHdlYmtpdC5vcmcvYi8y
MzI3MDUgaXMgcmVzb2x2ZWQKLXdlYmtpdC5vcmcvYi8yMzI3MDUgY29tcG9zaXRpbmcvZmlsdGVy
cy9kcm9wLXNoYWRvdy5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNvbXBvc2l0
aW5nL2ZpbHRlcnMvc2ltcGxlLWltYWdlLXdpdGgtc3ZnLWZpbHRlci5odG1sIFsgU2tpcCBdCi13
ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvZmlsdGVycy9iYWNrZHJvcC9iYWNrZHJvcC1maWx0ZXIt
d2l0aC1ib3JkZXItcmFkaXVzLWFuZC1yZWZsZWN0aW9uLXJlbW92ZS5odG1sIFsgU2tpcCBdCi13
ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvZmlsdGVycy9jb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRl
cnMuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvY3NzLW9w
YWNpdHktd2l0aC1kcm9wLXNoYWRvdy5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1
IGNzczMvZmlsdGVycy9kcm9wLXNoYWRvdy5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMy
NzA1IGNzczMvZmlsdGVycy9lZmZlY3QtYnJpZ2h0bmVzcy1zcXVhcmUuaHRtbCBbIFNraXAgXQot
d2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvZWZmZWN0LWNvbnRyYXN0LXNxdWFyZS5o
dG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvZmlsdGVycy9lZmZlY3QtZ3Jh
eXNjYWxlLXNxdWFyZS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvZmls
dGVycy9lZmZlY3QtaHVlLXJvdGF0ZS1zcXVhcmUuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9i
LzIzMjcwNSBjc3MzL2ZpbHRlcnMvZWZmZWN0LWludmVydC1zcXVhcmUuaHRtbCBbIFNraXAgXQot
d2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvZWZmZWN0LXJlZmVyZW5jZS1sb2NhbC11
cmwtd2l0aC1iYXNlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9maWx0
ZXJzL2VmZmVjdC1zYXR1cmF0ZS1zcXVhcmUuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIz
MjcwNSBjc3MzL2ZpbHRlcnMvZWZmZWN0LXNlcGlhLXNxdWFyZS5odG1sIFsgU2tpcCBdCi13ZWJr
aXQub3JnL2IvMjMyNzA1IGNzczMvZmlsdGVycy9maWx0ZXItaXMtb24tc3VicGl4ZWwtcG9zaXRp
b24uaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvZmlsdGVy
LW9uLW92ZXJmbG93LWhpZGRlbi5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNz
czMvZmlsdGVycy9maWx0ZXJzLW9uLXN2Zy1yb290Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcv
Yi8yMzI3MDUgY3NzMy9maWx0ZXJzL2hpZHBpLWZlQ29udm9sdmVNYXRyaXguaHRtbCBbIFNraXAg
XQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvaGlkcGktZmlsdGVyLWlzLW9uLXN1
YnBpeGVsLXBvc2l0aW9uLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9m
aWx0ZXJzL2ludmFsaWRhdGUtc291cmNlQWxwaGEuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9i
LzIzMjcwNSBjc3MzL2ZpbHRlcnMvbnVsbC1lZmZlY3QtY2hlY2suaHRtbCBbIFNraXAgXQotd2Vi
a2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvcmVmZXJlbmNlLWZpbHRlci1zZXQtZmlsdGVy
LXJlZ2lvbnMuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL21hc2tpbmcv
Y2xpcC1wYXRoLWZpbHRlci5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGZhc3Qv
ZmlsdGVyLWltYWdlL2ZpbHRlci1pbWFnZS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMy
NzA1IGZhc3QvZ3JhZGllbnRzL2NvbmljLWdyYWRpZW50LWFscGhhLmh0bWwgWyBTa2lwIF0KLXdl
YmtpdC5vcmcvYi8yMzI3MDUgZmFzdC9ncmFkaWVudHMvY29uaWMtZ3JhZGllbnQtZXh0ZW5kZWQt
c3RvcHMuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2dyYWRpZW50cy9j
b25pYy1ncmFkaWVudC5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGZhc3QvaGlk
cGkvZmlsdGVycy1hbmQtaW1hZ2UtYnVmZmVyLXJlc29sdXRpb24uaHRtbCBbIFNraXAgXQotd2Vi
a2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2hpZHBpL2ZpbHRlcnMtYmx1ci5odG1sIFsgU2tpcCBdCi13
ZWJraXQub3JnL2IvMjMyNzA1IGZhc3QvaGlkcGkvZmlsdGVycy1jb21wb25lbnQtdHJhbnNmZXIu
aHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2hpZHBpL2ZpbHRlcnMtaHVl
LXJvdGF0ZS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGZhc3QvaGlkcGkvZmls
dGVycy1pbnZlcnQuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2hpZHBp
L2ZpbHRlcnMtbW9ycGhvbG9neS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGZh
c3QvaGlkcGkvZmlsdGVycy1tdWx0aXBsZS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMy
NzA1IGZhc3QvaGlkcGkvZmlsdGVycy1yZWZlcmVuY2UuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9y
Zy9iLzIzMjcwNSBmYXN0L2hpZHBpL2ZpbHRlcnMtc2hhZG93Lmh0bWwgWyBTa2lwIF0KLXdlYmtp
dC5vcmcvYi8yMzI3MDUgZmFzdC9oaWRwaS9maWx0ZXJzLXR1cmJ1bGVuY2UuaHRtbCBbIFNraXAg
XQotd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L211bHRpY29sL2ZpbHRlci1pbi1jb2x1bW5zLmh0
bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgaHR0cC90ZXN0cy9jc3MvZmlsdGVycy1v
bi1pZnJhbWVzLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgaW1wb3J0ZWQvYmxp
bmsvY3NzMy9maWx0ZXJzL2VmZmVjdC1yZWZlcmVuY2UtYWRkLWh3Lmh0bWwgWyBTa2lwIF0KLXdl
YmtpdC5vcmcvYi8yMzI3MDUgaW1wb3J0ZWQvYmxpbmsvY3NzMy9maWx0ZXJzL2VmZmVjdC1yZWZl
cmVuY2Utb24tdHJhbnNwYXJlbnQtZWxlbWVudC5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2Iv
MjMyNzA1IGltcG9ydGVkL2JsaW5rL2NzczMvZmlsdGVycy9lZmZlY3QtcmVmZXJlbmNlLXNvdXJj
ZS1hbHBoYS1ody5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGltcG9ydGVkL2Js
aW5rL3N2Zy9maWx0ZXJzL2ZpbHRlci1odWdlLWNsYW1waW5nLnN2ZyBbIFNraXAgXQotd2Via2l0
Lm9yZy9iLzIzMjcwNSBpbXBvcnRlZC9tb3ppbGxhL3N2Zy9zdmctZWZmZWN0cy1hcmVhLXVuem9v
bWVkLnhodG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGltcG9ydGVkL21vemlsbGEv
c3ZnL3N2Zy1lZmZlY3RzLWFyZWEtem9vbWVkLWluLnhodG1sIFsgU2tpcCBdCi13ZWJraXQub3Jn
L2IvMjMyNzA1IGltcG9ydGVkL21vemlsbGEvc3ZnL3N2Zy1lZmZlY3RzLWFyZWEtem9vbWVkLW91
dC54aHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2Nzcy9jc3Mtb3ZlcmZsb3cvb3ZlcmZsb3ctc2Nyb2xsLXJlc2l6ZS12aXNp
YmlsaXR5LWhpZGRlbi5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IHN2Zy9jdXN0
b20vZmVDb2xvck1hdHJpeC12YWx1ZXMtbGVhZGluZy1zcGFjZXMuaHRtbCBbIFNraXAgXQotd2Vi
a2l0Lm9yZy9iLzIzMjcwNSBzdmcvY3VzdG9tL3Jlc291cmNlcy1jc3Mtc2NhbGVkLmh0bWwgWyBT
a2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgc3ZnL2ZpbHRlcnMvYmlnLXNpemVkLW9mZi12aWV3
cG9ydC1maWx0ZXIuc3ZnIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjMyNzA1IGNvbXBvc2l0aW5n
L2ZpbHRlcnMvc3ctbmVzdGVkLXNoYWRvdy1vdmVybGFwcy1ody1uZXN0ZWQtc2hhZG93Lmh0bWwg
WyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzI3MDUgY29tcG9zaXRpbmcvZmlsdGVycy9zdy1zaGFk
b3ctb3ZlcmxhcHMtaHctbGF5ZXIuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzMjcwNSBj
b21wb3NpdGluZy9maWx0ZXJzL3N3LXNoYWRvdy1vdmVybGFwcy1ody1zaGFkb3cuaHRtbCBbIFNr
aXAgXQord2Via2l0Lm9yZy9iLzIzMjcwNSBpbXBvcnRlZC9tb3ppbGxhL3N2Zy9keW5hbWljLWZp
bHRlci1jb250ZW50cy0wMWEuc3ZnIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjMyNzA1IGltcG9y
dGVkL21vemlsbGEvc3ZnL2ZpbHRlcnMvZmVDb21wb3NpdGUtMi5zdmcgWyBTa2lwIF0KK3dlYmtp
dC5vcmcvYi8yMzI3MDUgaW1wb3J0ZWQvbW96aWxsYS9zdmcvZmlsdGVycy9mZVNwZWN1bGFyTGln
aHRpbmctMS5zdmcgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzI3MDUgc3ZnL2ZpbHRlcnMvZmVM
aWdodGluZy1jbGlwcGVkLnN2ZyBbIFNraXAgXQo=
</data>
<flag name="commit-queue"
          id="468684"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443864</attachid>
            <date>2021-11-10 14:38:21 -0800</date>
            <delta_ts>2021-11-10 19:59:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232469-20211110143820.patch</filename>
            <type>text/plain</type>
            <size>68022</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWUwZWQ5NzRkYjE3OGVi
ZGMzOGJjZTc5YWNmMTc0YjVlZDMyZTBhMi4uNmMyNDg3ZjEzNjI0NDY3MzU5YjZhYmIwMzIxNDRi
MTgwZDRmZTg0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDIxLTExLTEwICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
TWFrZSBDU1NGaWx0ZXIgYmUgYSBjb21wb3NpdGUgb2YgRmlsdGVyRnVuY3Rpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjkKKyAgICAgICAg
cmRhcjovLzg1MDQ3MTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisg
ICAgICAgIEluIHRoaXMgcGF0Y2gsIHRoZSBDU1MgcmVmZXJlbmNlIGZpbHRlciBpcyBidWlsdCBh
cyBhbiBTVkdGaWx0ZXIgYW5kIGl0CisgICAgICAgIGlzIGtlcHQgYXMgYSBGaWx0ZXJGdW5jdGlv
biBpbiB0aGUgQ1NTRmlsdGVyIGZ1bmN0aW9ucycgbGlzdC4gVGhlIEZpbHRlciAKKyAgICAgICAg
YXNzb2NpYXRlZCB3aXRoIHRoZSBGaWx0ZXJFZmZlY3RzIG9mIHRoZSByZWZlcmVuY2VkIGZpbHRl
ciB3aWxsIGJlIGFuCisgICAgICAgIFNWR0ZpbHRlciBpbnN0ZWFkIG9mIHRoZSByb290IENTU0Zp
bHRlci4gVGhpcyB3aWxsIGFsbG93IGhhdmluZyBjb2xvcgorICAgICAgICBzcGFjaW5nIGZvciB0
aGUgcmVmZXJlbmNlZCBmaWx0ZXJzIGRpZmZlcmVudCBmcm9tIHRoZSBjb2xvciBzcGFjaW5nIG9m
CisgICAgICAgIENTU0ZpbHRlci4gCisKKyAgICAgICAgQWxzbyB0aGlzIHBhdGNoIG1ha2VzIGEg
c2luZ2xlIGZ1bmN0aW9uIGZvciBidWlsZGluZyB0aGUgcHJpbWl0aXZlcyBvZgorICAgICAgICB0
aGUgU1ZHRmlsdGVyIGluc3RlYWQgb2YgaGF2aW5nIHR3byBmdW5jdGlvbnMuCisKKyAgICAgICAg
VG8gYWxsb3cgb3BlcmF0aW5nIHRocm91Z2ggdGhlIFNWR0ZpbHRlciBhcyBhIEZpbHRlckZ1bmN0
aW9uIG93bmVkIGJ5CisgICAgICAgIENTU0ZpbHRlciwgdGhlIFNWR0ZpbHRlciB3aWxsIGhhdmUg
YSBwb2ludGVyIHRvIGl0cyBsYXN0RWZmZWN0LgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sbGVjdEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpudW1iZXJPZkVmZmVjdElucHV0cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE1heEVmZmVjdFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6bV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUJyaWdodG5lc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29udHJhc3RF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNoYWRvd0VmZmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVHcmF5U2NhbGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlSHVlUm90YXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludmVydEVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGFjaXR5RWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNlcGlhRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0ZpbHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6YnVpbGRGaWx0ZXJGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVyOjppbnB1dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjph
bGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6bGFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFw
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6b3V0cHV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91
dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1
aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JJbnRl
cnBvbGF0aW9uRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjp0b3RhbE51bWJlckZpbHRlckVmZmVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIpOiBEZWxldGVkLgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDoKKwogMjAy
MS0xMS0xMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KIAogICAgICAgICBb
R1BVIFByb2Nlc3NdIE1ha2UgU1ZHRmlsdGVyIGFuZCBDU1NGaWx0ZXIgd29yayBpbiB0aGUgc2Ft
ZSBjb29yZGluYXRlcyBzeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
aWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcAppbmRleCAzZGVkMDJiOGQyMGFhZTNhOTRkYjQ0Yjc0ZTcwZmI2ZDI5MTM2ODEyLi5k
MzJmZmJjYzNjNTg2MmNiMWVjYTZkNmFlZDk4MmQyMGQ3ZDk0OWZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0xMTYsMTggKzExNiwyMSBAQCBSZWZQ
dHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNmb3JtIEltYWdlIGludG8gSW1hZ2VC
dWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUg
dW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAxLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKLSAgICBpZiAo
IXRleHR1cmUpCisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZDsKKyAgICBhdXRvIHNvdXJjZUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCByZW5kZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxG
b3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQogICAgICAgICByZXR1cm4gJklt
YWdlOjpudWxsSW1hZ2UoKTsKIAotICAgIGF1dG8gaW1hZ2VSZWN0ID0gRmxvYXRSZWN0IHsgeyB9
LCBzaXplIH07Ci0gICAgdGV4dHVyZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIGltYWdl
UmVjdCk7CisgICAgYXV0byBzb3VyY2VJbWFnZVJlY3QgPSBGbG9hdFJlY3QgeyB7IH0sIHNpemUg
fTsKKyAgICBzb3VyY2VJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2UsIHNvdXJjZUlt
YWdlUmVjdCk7CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKCk7Ci0g
ICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICBjc3NG
aWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3QpOwotICAgIGlmICghY3NzRmlsdGVy
LT5idWlsZChyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lcjo6Rmls
dGVyRnVuY3Rpb24pKQorICAgIGF1dG8gY3NzRmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUobV9m
aWx0ZXJPcGVyYXRpb25zLCByZW5kZXJpbmdNb2RlKTsKKworICAgIGNzc0ZpbHRlci0+c2V0U291
cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCk7CisgICAgaWYgKCFjc3NGaWx0ZXItPmJ1aWxk
RmlsdGVyRnVuY3Rpb25zKHJlbmRlcmVyLCBtX2ZpbHRlck9wZXJhdGlvbnMsIEZpbHRlckNvbnN1
bWVyOjpGaWx0ZXJGdW5jdGlvbikpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgp
OworCisgICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3ZlKHNvdXJjZUltYWdlKSk7
CiAgICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCiAgICAgYXV0byogb3V0cHV0ID0gY3NzRmlsdGVy
LT5vdXRwdXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5oCmluZGV4IDAyYmY1MTEwNTRmZTYzOWMyZjcwOTQ3YzA3NWQ5OTg0MGI1Nzc2
YjUuLjEyMWFhZDVjY2E4MzgwZDczYjlhZDI2MzYwMTU1YTIxOTQyNjYzYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtMjEs
MTEgKzIxLDExIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNp
bmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCmluZGV4IDQwZDIzMDBlMTFlMWMxMjZmNzZiODU4MmRhMjk5NGNkNTllMzZiNTIu
LjZlZmZjOGYxN2RmYmM2NTRkNWUzZDI3MWQ5MDYzMDRmYzM1ZDZmZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKQEAgLTE0MywyMyArMTQzLDYgQEAgRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6Omlu
cHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKICAgICByZXR1cm4gbV9pbnB1dEVmZmVj
dHMuYXQobnVtYmVyKS5nZXQoKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNvbGxlY3RFZmZlY3Rz
KGNvbnN0IEZpbHRlckVmZmVjdCplZmZlY3QsIEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4m
IGFsbEVmZmVjdHMpCi17Ci0gICAgYWxsRWZmZWN0cy5hZGQoZWZmZWN0KTsKLSAgICB1bnNpZ25l
ZCBzaXplID0gZWZmZWN0LT5udW1iZXJPZkVmZmVjdElucHV0cygpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGVm
ZmVjdC0+aW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGNvbGxlY3RFZmZlY3RzKGluLCBhbGxFZmZl
Y3RzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFsbEVmZmVjdHMuc2l6ZSgpOwotfQotCi11bnNpZ25l
ZCBGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdAotewotICAg
IEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4gYWxsRWZmZWN0czsKLSAgICByZXR1cm4gY29s
bGVjdEVmZmVjdHModGhpcywgYWxsRWZmZWN0cyk7Ci19Ci0KIHZvaWQgRmlsdGVyRWZmZWN0Ojph
cHBseSgpCiB7CiAgICAgaWYgKGhhc1Jlc3VsdCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggNTUyN2Y2
YmY0YmY2MjhlNzE1MGY4MWQ1ZWZiMzlkZjMxYTI5MWI3Mi4uNjY3NjAwZDMwMmM4ZmM5YjVhOGY0
ZjFmYzhmMGM1NjljYmUyYTdiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC00OCw3ICs0OCw3IEBAIHR5
cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7CiAK
IGNsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJGdW5jdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgdm9pZCBjbGVhclJlc3VsdCgpOworICAgIHZvaWQgY2xlYXJSZXN1bHQoKSBvdmVycmlkZTsK
ICAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwogCiAgICAgSW1hZ2VCdWZmZXIqIGlt
YWdlQnVmZmVyUmVzdWx0KCk7CkBAIC01OSw3ICs1OSw2IEBAIHB1YmxpYzoKICAgICBGaWx0ZXJF
ZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5z
aXplKCk7IH0KLSAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgY29uc3Q7
CiAgICAgCiAgICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QKICAgICB7CkBAIC04Myw3
ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFic29sdXRlUGFpbnRSZWN0KGNvbnN0IElu
dFJlY3QmIGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1dGVQYWludFJlY3QgPSBhYnNvbHV0
ZVBhaW50UmVjdDsgfQogCiAgICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX21heEVmZmVjdFJlY3Q7IH0KLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJl
Y3Q7IH0gCisgICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbWF4RWZm
ZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZlY3RSZWN0OyB9CiAKICAgICB2b2lk
IGFwcGx5KCk7CiAKQEAgLTk0LDggKzkzLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAKLSAgICB2aXJ0dWFsIEludE91dHNldHMg
b3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIEludE91dHNldHMoKTsgfQotCiAgICAgZW51bSBjbGFz
cyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBEZWJ1Z2dpbmcgfTsKICAgICB2aXJ0
dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OlRleHRTdHJl
YW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRhdGlvblR5cGU6OlRlc3RPdXRwdXQp
IGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKaW5kZXggNzM2Y2ZjMDIzNDZiZWE0OTI4OWQ2Yzkz
MTUyMWE2MGNlOTZkYWJhZS4uZTg2NGE4NjBhODE3Zjk3YTZkYzRkOTgyMTk0ZTdlZjlmNzkwM2I4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtMjUsNiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UK
IAorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3RFeHRlbnQuaCIKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcu
aD4KIApAQCAtODAsNiArODIsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEF0b21TdHJpbmcgc291
cmNlR3JhcGhpY05hbWUoKSB7IHJldHVybiBmaWx0ZXJOYW1lKFR5cGU6OlNvdXJjZUdyYXBoaWMp
OyB9CiAgICAgQXRvbVN0cmluZyBmaWx0ZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gZmlsdGVyTmFt
ZShtX2ZpbHRlclR5cGUpOyB9CiAKKyAgICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNv
bnN0IHsgcmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlc3VsdCgpIHsgfQor
CiBwcml2YXRlOgogICAgIFR5cGUgbV9maWx0ZXJUeXBlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggY2E1ZDg0ZDBkNzE4YzhhN2M2MGJlYTQ4MWQ1YWY3YTE1
ZDEzZmNmZS4uZjJkMTcxY2JjNjZmNzU5ZmIzMDZhMmUxOWFmNTQyNDFkYWY2MzIyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAgLTI3LDkgKzI3LDYgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIKIAotI2luY2x1ZGUgIkNhY2hl
ZFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIK
LSNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJGRUNvbG9yTWF0cml4Lmgi
CiAjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgogI2luY2x1ZGUgIkZFRHJvcFNoYWRv
dy5oIgpAQCAtMzgsMTUgKzM1LDEwIEBACiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0UmVuZGVyZXIu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVmZXJlbmNlZFNWR1Jlc291cmNl
cy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgor
I2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlckJ1aWxkZXIuaCIKICNp
bmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRl
ICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAKICNpZiBVU0UoRElSRUNUMkQpCiAjaW5jbHVkZSA8ZDJkMS5oPgpAQCAt
NTQsMjU5ICs0NiwyOTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8Q1NTRmlsdGVy
PiBDU1NGaWx0ZXI6OmNyZWF0ZShmbG9hdCBzY2FsZUZhY3RvcikKK1JlZlB0cjxDU1NGaWx0ZXI+
IENTU0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKHNjYWxlRmFjdG9yKSk7CisgICAgYm9vbCBoYXNG
aWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVs
cygpOworICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlP
cmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luKCk7CisKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVy
KGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3Rl
ZEJ5U2VjdXJpdHlPcmlnaW4sIHNjYWxlRmFjdG9yKSk7CisKKyAgICBmaWx0ZXItPnNldFJlbmRl
cmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CisgICAgcmV0dXJuIGZpbHRlcjsKIH0KIAotQ1NTRmls
dGVyOjpDU1NGaWx0ZXIoZmxvYXQgc2NhbGVGYWN0b3IpCitDU1NGaWx0ZXI6OkNTU0ZpbHRlcihi
b29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVS
ZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgZmxvYXQgc2NhbGVGYWN0b3IpCiAgICAgOiBGaWx0
ZXIoRmlsdGVyOjpUeXBlOjpDU1NGaWx0ZXIsIEZsb2F0U2l6ZSB7IHNjYWxlRmFjdG9yLCBzY2Fs
ZUZhY3RvciB9KQotICAgICwgbV9zb3VyY2VHcmFwaGljKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgq
dGhpcykpCisgICAgLCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscyhoYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMpCisgICAgLCBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3Vy
aXR5T3JpZ2luKGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2lu
KQogewogfQogCi1HcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KCkKK3N0
YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVyRWZmZWN0KENTU0ZpbHRlciYgZmls
dGVyLCBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVyT3BlcmF0aW9uLCBGaWx0ZXJDb25z
dW1lciBjb25zdW1lcikKIHsKLSAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFn
ZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOworICAgIGZsb2F0IHN0ZERldmlhdGlvbiA9IGZsb2F0
VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZpYXRpb24oKSwgMCk7CisgICAgcmV0
dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmlsdGVyLCBzdGREZXZpYXRpb24sIHN0ZERldmlh
dGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5ID8gRURHRU1P
REVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9w
ZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rp
b247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBF
X0xJTkVBUjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gbmFycm93UHJlY2lzaW9uVG9G
bG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJG
dW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBu
dWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZShmaWx0
ZXIsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24s
IG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVD
b250cmFzdEVmZmVjdChDU1NGaWx0ZXImIGZpbHRlciwgY29uc3QgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVy
RnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxv
YXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJh
dGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IGFtb3VudDsKKyAg
ICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7CisKKyAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKKyAgICByZXR1cm4gRkVD
b21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNm
ZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKK30KKworc3RhdGlj
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoQ1NTRmlsdGVyJiBm
aWx0ZXIsIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24mIGRyb3BTaGFkb3dPcGVyYXRp
b24pCit7CisgICAgZmxvYXQgc3RkID0gZHJvcFNoYWRvd09wZXJhdGlvbi5zdGREZXZpYXRpb24o
KTsKKyAgICByZXR1cm4gRkVEcm9wU2hhZG93OjpjcmVhdGUoZmlsdGVyLCBzdGQsIHN0ZCwgZHJv
cFNoYWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93
T3BlcmF0aW9uLmNvbG9yKCksIDEpOworfQorCitzdGF0aWMgUmVmUHRyPEZpbHRlckVmZmVjdD4g
Y3JlYXRlR3JheVNjYWxlRWZmZWN0KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBkb3Vi
bGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91
bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhU
Ri9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKKyAg
ICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4KKworICAgIFZlY3RvcjxmbG9hdD4g
aW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYg
KyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAg
MCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjEyNiAt
IDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9h
dCgwLjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWludXNBbW91bnQpLAorICAgICAgICAw
LAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4yMTI2IC0g
MC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAs
CisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAg
ICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZShmaWx0ZXIsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQYXJh
bWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVIdWVSb3Rh
dGVFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJP
cGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQoreworICAgIFZlY3RvcjxmbG9hdD4gaW5w
dXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlciwg
RkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsK
K30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZUludmVydEVmZmVjdChDU1NG
aWx0ZXImIGZpbHRlciwgY29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7Cisg
ICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICogYW1vdW50OworICAgIHRyYW5zZmVy
RnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OworCisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0
ZShmaWx0ZXIsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVu
Y3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBj
cmVhdGVPcGFjaXR5RWZmZWN0KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBCYXNpY0NvbXBvbmVu
dFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sK
KyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJh
bnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAg
ICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVy
T3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3BlID0gYW1vdW50
OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKKworICAgIENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJldHVybiBGRUNvbXBvbmVudFRyYW5z
ZmVyOjpjcmVhdGUoZmlsdGVyLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0
aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBCYXNpY0NvbG9y
TWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBWZWN0
b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoY29sb3JN
YXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0dXJuIEZFQ29sb3JNYXRyaXg6OmNy
ZWF0ZShmaWx0ZXIsIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSwgV1RGTW92ZShpbnB1dFBh
cmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNlcGlh
RWZmZWN0KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAgICBkb3VibGUgb25lTWludXNBbW91
bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjAp
OworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAv
ZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAorICAgIC8vIGZvciBpbmZvcm1hdGlv
biBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgewor
ICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ft
b3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43NjkgLSAwLjc2OSAqIG9u
ZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjE4OSAtIDAu
MTg5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0OSAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNB
bW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMTY4IC0gMC4xNjggKiBv
bmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgbmFycm93
UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25lTWludXNBbW91bnQpLAorICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41MzQgKiBvbmVNaW51c0Ftb3VudCks
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVz
QW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICAwLAorICAgICAgICAw
LAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAwLAorICAgIH07CisKKyAgICByZXR1
cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlciwgRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJ
WCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKIH0KIAotUmVmUHRyPEZpbHRlckVmZmVjdD4g
Q1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
RmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJiBm
aWx0ZXJPcGVyYXRpb24pCitzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlU1ZHRmlsdGVy
KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24mIGZpbHRl
ck9wZXJhdGlvbiwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEZpbHRlckVmZmVjdCYgcHJldmlv
dXNFZmZlY3QpCiB7Ci0gICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlbmRlcmVyLmVuc3VyZVJl
ZmVyZW5jZWRTVkdSZXNvdXJjZXMoKS5yZWZlcmVuY2VkRmlsdGVyRWxlbWVudChyZW5kZXJlci5k
b2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworICAgIGF1dG8mIHJlZmVyZW5jZWRTVkdSZXNv
dXJjZXMgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZHUmVzb3VyY2VzKCk7CisgICAgYXV0
byogZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMucmVmZXJlbmNlZEZpbHRl
ckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVyT3BlcmF0aW9uKTsKKwogICAgIGlm
ICghZmlsdGVyRWxlbWVudCkgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3Ry
ZWFtIDw8ICJDU1NGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZh
aWxlZCB0byBmaW5kIGZpbHRlciByZW5kZXJlciwgYWRkaW5nIHBlbmRpbmcgcmVzb3VyY2UgIiA8
PCBmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSk7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIiBidWlsZFJlZmVyZW5jZUZpbHRlcjogZmFpbGVkIHRvIGZpbmQg
ZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNvdXJjZSAiIDw8IGZpbHRlck9wZXJh
dGlvbi5mcmFnbWVudCgpKTsKICAgICAgICAgLy8gQWx0aG91Z2ggd2UgZGlkIG5vdCBmaW5kIHRo
ZSByZWZlcmVuY2VkIGZpbHRlciwgaXQgbWlnaHQgZXhpc3QgbGF0ZXIgaW4gdGhlIGRvY3VtZW50
LgogICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBhbm9ueW1vdXMgUmVuZGVyT2JqZWN0cy4g
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTA4NT4KICAgICAgICAgLy8gRklYTUU6IFVuY2xlYXIg
aWYgdGhpcyBkb2VzIGFueXRoaW5nLgotICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IHJlbmRl
cmVyLmVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuYWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQo
KSwgKmVsZW1lbnQpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBhdXRv
IGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxkZXI+KCZwcmV2aW91c0VmZmVjdCk7
Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7Ci0gICAgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+PiByZWZlcmVuY2VFZmZlY3RzOwotCi0gICAgZm9yIChhdXRvJiBlZmZlY3RFbGVt
ZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
PigqZmlsdGVyRWxlbWVudCkpIHsKLSAgICAgICAgZWZmZWN0ID0gZWZmZWN0RWxlbWVudC5idWls
ZChidWlsZGVyLmdldCgpLCAqdGhpcyk7Ci0gICAgICAgIGlmICghZWZmZWN0KSB7Ci0gICAgICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0ZXIgIiA8PCB0
aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBidWlsZCBlZmZlY3QgZnJv
bSAiIDw8IGVmZmVjdEVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZl
Y3QuZ2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKSB7Ci0jaWYg
RU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQotICAgICAgICAgICAg
ZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKS0+
c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvcklu
dGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JH
QigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOwotI2Vsc2UKLSAgICAgICAgICAg
IGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNS
R0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hZGQoZWZmZWN0RWxl
bWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICAgICAgcmVmZXJlbmNlRWZmZWN0cy5hcHBlbmQo
KmVmZmVjdCk7Ci0gICAgfQotICAgIAotICAgIG1fZWZmZWN0cy5hcHBlbmRWZWN0b3IoV1RGTW92
ZShyZWZlcmVuY2VFZmZlY3RzKSk7Ci0gICAgcmV0dXJuIGVmZmVjdDsKKyAgICBTVkdGaWx0ZXJC
dWlsZGVyIGJ1aWxkZXI7CisgICAgcmV0dXJuIFNWR0ZpbHRlcjo6Y3JlYXRlKCpmaWx0ZXJFbGVt
ZW50LCBidWlsZGVyLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwgZmlsdGVyLnNvdXJjZUltYWdlUmVj
dCgpLCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCksIHByZXZpb3VzRWZmZWN0KTsKIH0KIAotYm9vbCBD
U1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKK3N0YXRpYyB2b2lk
IHNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMoRmlsdGVyRWZmZWN0JiBlZmZlY3QsIEZpbHRlckNv
bnN1bWVyIGNvbnN1bWVyKQogewotICAgIG1faGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxzID0gb3Bl
cmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsKLSAgICBtX2hhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJU
aGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbigpOworICAgIC8vIFVubGlrZSBT
VkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVuY3Rpb25zIG9uIHRoZSBm
aWx0ZXIKKyAgICAvLyBwcm9wZXJ0eSBhcHBsaWVkIGhlcmUgc2hvdWxkIG5vdCBjbGlwIHRvIHRo
ZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25zLgorICAgIGVmZmVjdC5zZXRDbGlwc1RvQm91bmRzKGNv
bnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbik7CisgICAgZWZmZWN0LnNl
dE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworfQog
Ci0gICAgbV9lZmZlY3RzLmNsZWFyKCk7Citib29sIENTU0ZpbHRlcjo6YnVpbGRGaWx0ZXJGdW5j
dGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIG9w
ZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQoreworICAgIG1fZnVuY3Rpb25zLmNs
ZWFyKCk7CiAgICAgbV9vdXRzZXRzID0geyB9OwogCi0gICAgUmVmUHRyPEZpbHRlckVmZmVjdD4g
cHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRyKCk7CisgICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKnRoaXMpOwor
ICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICpwcmV2aW91c0VmZmVjdCB9KTsKKworICAgIFJlZlB0
cjxTVkdGaWx0ZXI+IGZpbHRlcjsKKyAgICAKICAgICBmb3IgKGF1dG8mIG9wZXJhdGlvbiA6IG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7CiAgICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVm
ZmVjdDsKLSAgICAgICAgYXV0byYgZmlsdGVyT3BlcmF0aW9uID0gKm9wZXJhdGlvbjsKLSAgICAg
ICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAgICAgICAgIGF1dG8mIHJlZmVyZW5jZU9wZXJh
dGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9u
KTsKLSAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxkUmVmZXJlbmNlRmlsdGVyKHJlbmRlcmVyLCAq
cHJldmlvdXNFZmZlY3QsIHJlZmVyZW5jZU9wZXJhdGlvbik7CisKKyAgICAgICAgc3dpdGNoIChv
cGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVf
SU5WRVJUX0xJR0hUTkVTUzoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBB
UFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVy
LgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRp
b24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVy
YXRpb24pOwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0g
Y29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAg
Ly8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9p
bmRleC5odG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKLSAgICAgICAgICAgIC8vIGZvciBpbmZvcm1h
dGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFy
YW1ldGVycyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYg
KyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ft
b3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51
c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIg
KyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51
c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIg
KyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAg
ICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwKLSAgICAgICAgICAgICAgICAwLAot
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3Jl
YXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklYLCBXVEZNb3ZlKGlucHV0UGFyYW1l
dGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgorICAgICAgICAg
ICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVjdCgqdGhpcywgZG93bmNhc3Q8Qmx1ckZpbHRlck9w
ZXJhdGlvbj4oKm9wZXJhdGlvbiksIGNvbnN1bWVyKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQTogewotICAgICAgICAg
ICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZG91YmxlIG9u
ZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCks
IDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcv
RlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAotICAg
ICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgICAg
IFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAgICAgICAgICAgICAgICBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2OSAtIDAuNzY5ICogb25lTWludXNB
bW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xODkgLSAw
LjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
ICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzQ5IC0g
MC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9u
VG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2OCAqIG9uZU1pbnVzQW1vdW50KSwK
LSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAg
ICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4yNzIgKiBvbmVNaW51c0Ftb3VudCks
Ci0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjUzNCAtIDAuNTM0ICog
b25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
MC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAxLAotICAgICAgICAgICAgICAg
IDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbG9yTWF0cml4
OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgsIFdURk1vdmUoaW5wdXRQ
YXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6
CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KCp0aGlzLCBkb3du
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbG9yTWF0cml4T3BlcmF0aW9u
ID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0
aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93
UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKLSAgICAg
ICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0ZSgqdGhpcywgRkVDT0xPUk1BVFJJ
WF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0
ZUNvbnRyYXN0RWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmls
dGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURTogewotICAgICAgICAg
ICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgVmVjdG9yPGZs
b2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbG9yTWF0cml4
T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb2xvck1hdHJp
eDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFLCBXVEZNb3ZlKGlu
cHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NI
QURPVzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURyb3BTaGFkb3dFZmZlY3QoKnRoaXMs
IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+KCpvcGVyYXRpb24pKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJ
TlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0g
ZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJG
dW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAg
ICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAxIC0gMiAqIGFtb3VudDsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OwotCi0gICAgICAgICAg
ICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5jdGlvbjsKLSAgICAgICAgICAgIGVm
ZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgqdGhpcywgdHJhbnNmZXJGdW5jdGlv
biwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uKTsKKwor
ICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAgICAgICAgICAgZWZm
ZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hU
TkVTUzoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRf
TElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29sb3ItZmlsdGVyLgorCisgICAgICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICAgICAgZWZmZWN0ID0g
Y3JlYXRlSHVlUm90YXRlRWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4Rmls
dGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZp
bHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVu
Y3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAg
ICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVy
T3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUg
PSBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IDA7Ci0K
LSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAg
ICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCBudWxs
RnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsK
KworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgICAgICAgICAgZWZm
ZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRy
YW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzogewot
ICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBkb3duY2FzdDxC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwot
ICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOwot
ICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0xJTkVBUjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAg
ICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gMDsKLQotICAgICAgICAgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247Ci0gICAgICAgICAgICBlZmZl
Y3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRoaXMsIHRyYW5zZmVyRnVuY3Rpb24s
IHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7CisKKyAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisgICAgICAgICAgICBlZmZlY3Qg
PSBjcmVhdGVPcGFjaXR5RWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5z
ZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6IHsKLSAgICAg
ICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWND
b21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAg
ICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAg
ICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9M
SU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5z
ZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0aW9u
LmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAg
ZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKCp0aGlzLCB0cmFuc2ZlckZ1bmN0
aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCBudWxsRnVuY3Rpb24pOwor
CisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKKyAgICAgICAgICAgIGVm
ZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbG9yTWF0
cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICAg
ICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJsdXJGaWx0ZXJPcGVyYXRpb24+KGZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmbG9hdCBzdGREZXZpYXRpb24gPSBmbG9hdFZh
bHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIDApOwotICAgICAgICAg
ICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSgqdGhpcywgc3RkRGV2aWF0aW9uLCBz
dGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/
IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUpOworCisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNlcGlhRWZm
ZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3Bl
cmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgICAgIGF1dG8mIGRyb3BTaGFk
b3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJP
cGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVEcm9wU2hhZG93OjpjcmVhdGUoKnRo
aXMsIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksIGRyb3BTaGFkb3dPcGVyYXRp
b24uc3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAgZHJvcFNoYWRvd09wZXJhdGlvbi54
KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCks
IDEpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6CisgICAgICAg
ICAgICBmaWx0ZXIgPSBjcmVhdGVTVkdGaWx0ZXIoKnRoaXMsIGRvd25jYXN0PFJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIHJlbmRlcmVyLCAqcHJldmlvdXNFZmZlY3QpOwor
ICAgICAgICAgICAgZWZmZWN0ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
KyAgICAgICAgaWYgKGZpbHRlcikgeworICAgICAgICAgICAgZWZmZWN0ID0gZmlsdGVyLT5sYXN0
RWZmZWN0KCk7CisgICAgICAgICAgICBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKCplZmZlY3Qs
IGNvbnN1bWVyKTsKKyAgICAgICAgICAgIG1fZnVuY3Rpb25zLmFwcGVuZChmaWx0ZXIucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgICAgICAgICBwcmV2aW91c0VmZmVjdCA9IFdURk1vdmUoZWZmZWN0
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgaWYgKGVmZmVj
dCkgewotICAgICAgICAgICAgLy8gVW5saWtlIFNWRyBGaWx0ZXJzIGFuZCBDU1NGaWx0ZXJJbWFn
ZXMsIGZpbHRlciBmdW5jdGlvbnMgb24gdGhlIGZpbHRlcgotICAgICAgICAgICAgLy8gcHJvcGVy
dHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0aGVpciBwcmltaXRpdmUgc3VicmVn
aW9ucy4KLSAgICAgICAgICAgIGVmZmVjdC0+c2V0Q2xpcHNUb0JvdW5kcyhjb25zdW1lciA9PSBG
aWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwotICAgICAgICAgICAgZWZmZWN0LT5zZXRP
cGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlvbi50eXBlKCkgIT0gRmlsdGVy
T3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgICAgICBlZmZlY3QtPmlucHV0RWZm
ZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9OwotICAgICAgICAgICAgICAgIG1f
ZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzZXR1
cExhc3RFZmZlY3RQcm9wZXJ0aWVzKCplZmZlY3QsIGNvbnN1bWVyKTsKKyAgICAgICAgICAgIGVm
ZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJldmlvdXNFZmZlY3QpIH07CisgICAg
ICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0IH0pOwogICAgICAgICAgICAgcHJl
dmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAv
LyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVsbCBvdXIgY2FsbGVyIHdlIGFyZSBu
b3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5KCkpCisgICAgaWYgKG1fZnVuY3Rp
b25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9lZmZlY3RzLnNo
cmlua1RvRml0KCk7CisgICAgbV9mdW5jdGlvbnMuc2hyaW5rVG9GaXQoKTsKIAotICAgIHNldE1h
eEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCgpKTsKICNpZiBVU0UoQ09SRV9JTUFHRSkKICAg
ICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIpCi0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXIgPSBGaWx0
ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVyLnNldHRpbmdzKCkuY29yZUltYWdl
QWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksIG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCkp
OworICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVyRWZmZWN0UmVuZGVyZXI6OnRyeUNy
ZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFjY2VsZXJhdGVkRmlsdGVyUmVuZGVy
RW5hYmxlZCgpLCAqbGFzdEVmZmVjdCgpKTsKICNlbmRpZgogICAgIHJldHVybiB0cnVlOwogfQog
CitHcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRDb250ZXh0KCkKK3sKKyAgICByZXR1
cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOwor
fQorCiBib29sIENTU0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0b3JlUmVjdChjb25zdCBGbG9hdFJl
Y3QmIGZpbHRlclJlY3QpCiB7CiAgICAgaWYgKGZpbHRlclJlY3QuaXNFbXB0eSgpIHx8IEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJSZWN0LnNpemUoKSkpCkBAIC0zMzcsNDIg
KzM2Myw1NiBAQCB2b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChj
b25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleAogICAgICAgICBSZW5kZXJpbmdNb2Rl
IG1vZGUgPSBtX2ZpbHRlclJlbmRlcmVyID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBy
ZW5kZXJpbmdNb2RlKCk7CiAgICAgICAgIHNldFNvdXJjZUltYWdlKEltYWdlQnVmZmVyOjpjcmVh
dGUobG9naWNhbFNpemUsIG1vZGUsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpLCBQ
aXhlbEZvcm1hdDo6QkdSQTgpKTsKICNlbmRpZgorICAgICAgICBpZiAoYXV0byBjb250ZXh0ID0g
aW5wdXRDb250ZXh0KCkpCisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShmaWx0ZXJTY2FsZSgp
KTsKICAgICB9CisKICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgPSB0cnVlOwogfQogCitS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6Omxhc3RFZmZlY3QoKQoreworICAgIGlmICht
X2Z1bmN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byYgZnVuY3Rpb24gPSBtX2Z1bmN0aW9ucy5sYXN0KCk7CisgICAgaWYgKGZ1bmN0aW9uLT5pc1NW
R0ZpbHRlcigpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHRmlsdGVyPihmdW5jdGlvbi5w
dHIoKSktPmxhc3RFZmZlY3QoKTsKKworICAgIHJldHVybiBkb3duY2FzdDxGaWx0ZXJFZmZlY3Q+
KGZ1bmN0aW9uLnB0cigpKTsKK30KKwogdm9pZCBDU1NGaWx0ZXI6OmRldGVybWluZUZpbHRlclBy
aW1pdGl2ZVN1YnJlZ2lvbigpCiB7Ci0gICAgYXV0byYgbGFzdEVmZmVjdCA9IG1fZWZmZWN0cy5s
YXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gbGFzdEVmZmVjdC5tYXhFZmZlY3RS
ZWN0KCk7CisgICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7CisgICAgZWZmZWN0LT5kZXRl
cm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAgICBGbG9hdFJlY3Qgc3ViUmVnaW9u
ID0gZWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7CiAgICAgLy8gQXQgbGVhc3Qgb25lIEZpbHRlckVm
ZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsIHJlY2FsY3VsYXRlIHRoZSBlZmZlY3Qgc2l6
ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KICAgICBGbG9hdFNpemUgZmlsdGVyU2NhbGUgeyAx
LCAxIH07CiAgICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhzdWJSZWdpb24u
c2l6ZSgpLCBmaWx0ZXJTY2FsZSkpIHsKICAgICAgICAgc2V0RmlsdGVyU2NhbGUoZmlsdGVyU2Nh
bGUpOwotICAgICAgICBsYXN0RWZmZWN0LmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lv
bigpOworICAgICAgICBlZmZlY3QtPmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigp
OwogICAgIH0KIH0KIAogdm9pZCBDU1NGaWx0ZXI6OmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygp
CiB7Ci0gICAgbV9zb3VyY2VHcmFwaGljLT5jbGVhclJlc3VsdCgpOwotICAgIGZvciAoYXV0byYg
ZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPmNsZWFyUmVzdWx0KCk7CisgICAg
Zm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQorICAgICAgICBmdW5jdGlvbi0+Y2xl
YXJSZXN1bHQoKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXI6OmFwcGx5KCkKIHsKLSAgICBhdXRvJiBl
ZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOworICAgIGF1dG8gZWZmZWN0ID0gbGFzdEVm
ZmVjdCgpOwogICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fZmlsdGVyUmVu
ZGVyZXItPmFwcGx5RWZmZWN0cyhlZmZlY3QpOworICAgICAgICBtX2ZpbHRlclJlbmRlcmVyLT5h
cHBseUVmZmVjdHMoKmVmZmVjdCk7CiAgICAgICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyLT5oYXNS
ZXN1bHQoKSkgewotICAgICAgICAgICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2Uo
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAgICAgICAgICAgZWZmZWN0LT50cmFu
c2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBlZmZlY3QuYXBwbHkoKTsK
LSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7CisgICAgZWZmZWN0LT5hcHBseSgpOworICAgIGVmZmVjdC0+dHJhbnNmb3Jt
UmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CiB9CiAKIExh
eW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNv
bnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVj
dCkKQEAgLTM4NSwzNSArNDI1LDM5IEBAIExheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291
cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlCiAgICAgcmV0
dXJuIHJlY3RGb3JSZXBhaW50OwogfQogCi1JbWFnZUJ1ZmZlciogQ1NTRmlsdGVyOjpvdXRwdXQo
KSBjb25zdAorSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0cHV0KCkKIHsKICAgICBpZiAobV9m
aWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkKICAgICAgICAg
cmV0dXJuIG1fZmlsdGVyUmVuZGVyZXItPm91dHB1dCgpOwogICAgIAotICAgIHJldHVybiBtX2Vm
ZmVjdHMubGFzdCgpLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOworICAgIHJldHVybiBsYXN0RWZmZWN0
KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7CiB9CiAKIHZvaWQgQ1NTRmlsdGVyOjpzZXRTb3VyY2VJ
bWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QpCiB7CisgICAgYXV0byBz
Y2FsZWRTb3VyY2VJbWFnZVJlY3QgPSBzb3VyY2VJbWFnZVJlY3Q7CisgICAgc2NhbGVkU291cmNl
SW1hZ2VSZWN0LnNjYWxlKGZpbHRlclNjYWxlKCkpOworCiAgICAgRmlsdGVyOjpzZXRGaWx0ZXJS
ZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICBGaWx0ZXI6OnNldFNvdXJjZUltYWdlUmVjdChz
b3VyY2VJbWFnZVJlY3QpOwotICAgIHNldE1heEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCk7
CisgICAgRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3Qoc2NhbGVkU291cmNlSW1hZ2VSZWN0KTsK
KworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0aW9ucykgeworICAgICAgICBpZiAo
ZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpIHsKKyAgICAgICAgICAgIGRvd25jYXN0PFNWR0ZpbHRl
cj4oZnVuY3Rpb24ucHRyKCkpLT5zZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKKyAg
ICAgICAgICAgIGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24ucHRyKCkpLT5zZXRTb3VyY2VJ
bWFnZVJlY3Qoc2NhbGVkU291cmNlSW1hZ2VSZWN0KTsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOwogfQogCi12b2lkIENTU0ZpbHRlcjo6
c2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0JiBlZmZlY3RSZWN0KQorSW50UmVjdCBD
U1NGaWx0ZXI6Om91dHB1dFJlY3QoKQogewotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZl
Y3RzKQotICAgICAgICBlZmZlY3QtPnNldE1heEVmZmVjdFJlY3QoZWZmZWN0UmVjdCk7Ci19Cisg
ICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7CisKKyAgICBpZiAoZWZmZWN0LT5oYXNSZXN1
bHQoKSB8fCAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQo
KSkpCisgICAgICAgIHJldHVybiBlZmZlY3QtPnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1
ZmZlcihJbnRSZWN0IHsgZmlsdGVyUmVnaW9uKCkgfSk7CiAKLUludFJlY3QgQ1NTRmlsdGVyOjpv
dXRwdXRSZWN0KCkgY29uc3QKLXsKLSAgICBhdXRvJiBsYXN0RWZmZWN0ID0gbV9lZmZlY3RzLmxh
c3QoKS5nZXQoKTsKLSAgICAKLSAgICBpZiAobGFzdEVmZmVjdC5oYXNSZXN1bHQoKSB8fCAobV9m
aWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCi0gICAgICAg
IHJldHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRS
ZWN0IHsgZmlsdGVyUmVnaW9uKCkgfSk7Ci0gICAgCiAgICAgcmV0dXJuIHsgfTsKIH0KIApAQCAt
NDI1LDggKzQ2OSw4IEBAIEludE91dHNldHMgQ1NTRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKICAg
ICBpZiAoIW1fb3V0c2V0cy5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIG1fb3V0c2V0czsKIAot
ICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBtX291dHNldHMgKz0g
ZWZmZWN0LT5vdXRzZXRzKCk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25z
KQorICAgICAgICBtX291dHNldHMgKz0gZnVuY3Rpb24tPm91dHNldHMoKTsKICAgICByZXR1cm4g
bV9vdXRzZXRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NT
RmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmgKaW5kZXggNTE5
MzQ3MDFkMzZhZTJmYmNhNDNkOGNhNTE5NWNmZGM1MTYwYTJiMy4uZDZkNjE5NzQxNjJkMTM3M2I1
ZjZiYzU2YmE2M2IzZjQ3ZDZkMDE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NTU0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
aApAQCAtNDQsNDggKzQ0LDQzIEBAIGVudW0gY2xhc3MgRmlsdGVyQ29uc3VtZXIgeyBGaWx0ZXJQ
cm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsKIAogY2xhc3MgQ1NTRmlsdGVyIGZpbmFsIDogcHVi
bGljIEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJpZW5kIGNs
YXNzIFJlbmRlckxheWVyRmlsdGVyczsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0ZpbHRl
cj4gY3JlYXRlKGZsb2F0IHNjYWxlRmFjdG9yID0gMSk7Ci0KLSAgICBJbWFnZUJ1ZmZlciogb3V0
cHV0KCkgY29uc3Q7CisgICAgc3RhdGljIFJlZlB0cjxDU1NGaWx0ZXI+IGNyZWF0ZShjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgc2NhbGVGYWN0b3IgPSAxKTsK
IAogICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIGJv
b2wgYnVpbGQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmLCBGaWx0ZXJD
b25zdW1lcik7Ci0gICAgdm9pZCBjbGVhckludGVybWVkaWF0ZVJlc3VsdHMoKTsKLSAgICB2b2lk
IGFwcGx5KCk7CisgICAgYm9vbCBidWlsZEZpbHRlckZ1bmN0aW9ucyhSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1bWVyKTsKKyAgICB2b2lkIGRldGVy
bWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwogCiAgICAgYm9vbCBoYXNGaWx0ZXJUaGF0
TW92ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRNb3Zlc1BpeGVsczsg
fQogICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmln
aW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNl
Y3VyaXR5T3JpZ2luOyB9CiAKLSAgICB2b2lkIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpOwotICAgIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0OwotCi1wcml2YXRlOgotICAg
IENTU0ZpbHRlcihmbG9hdCBzY2FsZUZhY3Rvcik7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiwgRmlsdGVyRWZmZWN0JiBwcmV2
aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uJik7CisgICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gbGFzdEVmZmVjdCgpOworICAgIEdyYXBoaWNzQ29udGV4dCogaW5wdXRDb250ZXh0
KCk7CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IHNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgY2xlYXJJbnRl
cm1lZGlhdGVSZXN1bHRzKCk7CisgICAgdm9pZCBhcHBseSgpOwogCi0gICAgR3JhcGhpY3NDb250
ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCk7CiAKICAgICBi
b29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWN0KTsK
ICAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CiAKLSAgICBJbnRSZWN0IG91dHB1dFJlY3QoKSBjb25zdDsKKyAgICBJbnRSZWN0IG91
dHB1dFJlY3QoKTsKIAogICAgIExheW91dFJlY3QgY29tcHV0ZVNvdXJjZUltYWdlUmVjdEZvckRp
cnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0
JiBkaXJ0eVJlY3QpOwogCi0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7
Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3JhcGhpYzsKLQotICAgIG11dGFibGUg
SW50T3V0c2V0cyBtX291dHNldHM7Citwcml2YXRlOgorICAgIENTU0ZpbHRlcihib29sIGhhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVk
QnlTZWN1cml0eU9yaWdpbiwgZmxvYXQgc2NhbGVGYWN0b3IpOwogCiAgICAgYm9vbCBtX2dyYXBo
aWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0TW92
ZXNQaXhlbHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0
cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0gICAgCisKKyAgICBWZWN0b3I8UmVm
PEZpbHRlckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CisKKyAgICBtdXRhYmxlIEludE91dHNldHMg
bV9vdXRzZXRzOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiBt
X2ZpbHRlclJlbmRlcmVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKaW5kZXggZjU3NjIyOGRlZmFiYjZmODQ5NWNmZWFiNWVkMTNkYmYyYjViMDNmYi4uMDky
NWQ4MjhmOGFhNWE1YjBjYjRmMmQyNzg2OGIwZmEyOTUyYmFlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMjQyLDcgKzMyNDIsNyBAQCBHcmFwaGljc0Nv
bnRleHQqIFJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5h
dGlvbkNvbnRleHQsCiAKICAgICBhdXRvIHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNhbGN1bGF0ZUxh
eWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9mZnNldEZyb21Sb290LCB7IH0pOwog
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcGFpbnRpbmdGaWx0ZXJzLT5i
ZWdpbkZpbHRlckVmZmVjdChkZXN0aW5hdGlvbkNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qocm9v
dFJlbGF0aXZlQm91bmRzKSwgZW5jbG9zaW5nSW50UmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QpLCBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlcGFpbnRSZWN0KSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcGFpbnRpbmdGaWx0ZXJzLT5iZWdpbkZpbHRlckVm
ZmVjdChkZXN0aW5hdGlvbkNvbnRleHQsIHJlbmRlcmVyKCksIGVuY2xvc2luZ0ludFJlY3Qocm9v
dFJlbGF0aXZlQm91bmRzKSwgZW5jbG9zaW5nSW50UmVjdChwYWludGluZ0luZm8ucGFpbnREaXJ0
eVJlY3QpLCBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlcGFpbnRSZWN0KSk7CiAgICAgaWYgKCFm
aWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAppbmRleCA0YjZlY2ZlZWE1MGNl
OTA5MTYzNWIxYWFjNWFhMjRjYTA5NjBkNDVkLi45N2ZlOTY5MzE0YjI1ZWEzMDU0MjFiYTFkNjAz
ZTgyZjE1ZDVmMjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJGaWx0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJGaWx0ZXJzLmNwcApAQCAtMTE4LDE3ICsxMTgsMTMgQEAgdm9pZCBSZW5kZXJMYXllckZpbHRl
cnM6OnJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKQogCiB2b2lkIFJlbmRlckxheWVyRmls
dGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGZsb2F0IHNjYWxlRmFj
dG9yLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7Ci0gICAgLy8gRklYTUU6IHRoaXMg
cmVidWlsZHMgdGhlIGVudGlyZSBlZmZlY3RzIGNoYWluIGV2ZW4gaWYgdGhlIGZpbHRlciBzdHls
ZSBkaWRuJ3QgY2hhbmdlLgotICAgIG1fZmlsdGVyID0gQ1NTRmlsdGVyOjpjcmVhdGUoc2NhbGVG
YWN0b3IpOwotICAgIG1fZmlsdGVyLT5zZXRSZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpOwot
CiAgICAgLy8gSWYgdGhlIGZpbHRlciBmYWlscyB0byBidWlsZCwgcmVtb3ZlIGl0IGZyb20gdGhl
IGxheWVyLiBJdCB3aWxsIHN0aWxsIGF0dGVtcHQgdG8KICAgICAvLyBnbyB0aHJvdWdoIHJlZ3Vs
YXIgcHJvY2Vzc2luZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGlu
Zy4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJlciwgcmVuZGVyZXIuc3R5bGUoKS5m
aWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3BlcnR5KSkKLSAgICAgICAgbV9maWx0
ZXIgPSBudWxscHRyOworICAgIC8vIEZJWE1FOiB0aGlzIHJlYnVpbGRzIHRoZSBlbnRpcmUgZWZm
ZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5bGUgZGlkbid0IGNoYW5nZS4KKyAgICBt
X2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIHJl
bmRlcmluZ01vZGUsIHNjYWxlRmFjdG9yKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0KiBSZW5kZXJM
YXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRp
b25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRS
ZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCitHcmFw
aGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJl
Y3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpCiB7CiAgICAgaWYgKCFtX2Zp
bHRlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMzksNiArMTM1LDE1IEBAIEdyYXBo
aWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdChHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYm9vbCBo
YXNVcGRhdGVkQmFja2luZ1N0b3JlID0gZmlsdGVyLnVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoZmls
dGVyU291cmNlUmVjdCk7CisKKyAgICAvLyBGSVhNRTogdGhpcyBjYWxsIHNob3VsZCBiZSBtb3Zl
ZCB0byBDU1NGaWx0ZXI6OmNyZWF0ZSgpIHdoZW4gRmlsdGVyRWZmZWN0IGRvZXMgbm90IHN0b3Jl
IGl0cyBnZW9tZXRyeS4KKyAgICBpZiAoaGFzVXBkYXRlZEJhY2tpbmdTdG9yZSB8fCAhbV9maWx0
ZXItPmxhc3RFZmZlY3QoKSkgeworICAgICAgICAvLyBJZiB0aGUgZmlsdGVyIGZhaWxzIHRvIGJ1
aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdpbGwgc3RpbGwgYXR0ZW1wdCB0bwor
ICAgICAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21wb3NpdGlu
ZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KKyAgICAgICAgaWYgKCFtX2ZpbHRlci0+YnVp
bGRGaWx0ZXJGdW5jdGlvbnMocmVuZGVyZXIsIHJlbmRlcmVyLnN0eWxlKCkuZmlsdGVyKCksIEZp
bHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0ZXIuaGFzRmlsdGVyVGhhdE1vdmVzUGl4ZWxz
KCkpCiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgZWxzZSB7CkBAIC0x
ODQsOCArMTg5LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0ZXJzOjphcHBseUZpbHRlckVmZmVj
dChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCkKICAgICBMYXlvdXRSZWN0IGRl
c3RSZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKICAgICBkZXN0UmVjdC5tb3ZlKG1fcGFpbnRP
ZmZzZXQueCgpLCBtX3BhaW50T2Zmc2V0LnkoKSk7CiAKLSAgICBpZiAoYXV0byogb3V0cHV0QnVm
ZmVyID0gZmlsdGVyLm91dHB1dCgpKQorICAgIGlmIChhdXRvKiBvdXRwdXRCdWZmZXIgPSBmaWx0
ZXIub3V0cHV0KCkpIHsKKyAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LnNjYWxlKHsgMSAvIGZp
bHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0ZXIuZmlsdGVyU2NhbGUoKS5oZWln
aHQoKSB9KTsKICAgICAgICAgZGVzdGluYXRpb25Db250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqb3V0
cHV0QnVmZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRlc3RSZWN0LCBtX2xheWVyLnJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgICAgIGRlc3RpbmF0
aW9uQ29udGV4dC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUoKSk7CisgICAgfQogCiAgICAgZmls
dGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKaW5kZXggM2RhMTQwYTVjODhmMTU1MzE5MGI3MDAz
ZDdlNzg0NGM5MTk0NWJmNy4uM2E3NDk5NWYxZjg0YmQ5NzNlZDJiODhkMzA0Mzk3YjRjNDRkYTAz
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuaApA
QCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUGVyIHJlbmRlcgogICAgIExheW91dFJl
Y3QgcmVwYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRSZWN0OyB9CiAKLSAgICBH
cmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdGlu
YXRpb25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlv
dXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpOwor
ICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0aW5hdGlvbkNvbnRleHQsIFJlbmRlckVsZW1lbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0
ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGxheWVyUmVwYWludFJlY3QpOwogICAgIHZvaWQgYXBwbHlGaWx0ZXJFZmZlY3QoR3JhcGhpY3ND
b250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApp
bmRleCA1MzdlNjU1ZWU1ZDY2NmU0Zjg1NTA4NzRmOTIxYWIyM2YwMWUwZTU0Li5mMTAzNTMzOWVj
NDFkNmU1NDBmMjVmNjFkMWRjNTJiNTY2ZDBhOTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtODIs
NDAgKzgyLDYgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cmVtb3ZlQ2xpZW50RnJv
bUNhY2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwgYm9vbAogICAgIG1hcmtDbGllbnRGb3JJbnZh
bGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9uID8gQm91bmRhcmllc0ludmFsaWRh
dGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8U1ZH
RmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcyhT
VkdGaWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4
Q291bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlmIChmaWx0ZXJFbGVtZW50KCkuY291bnRDaGls
ZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0gZmlsdGVyLnRhcmdldEJvdW5kaW5n
Qm94KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUgYnVpbGRlcgotICAgIGF1dG8gYnVp
bGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4oU291cmNlR3JhcGhpYzo6Y3JlYXRl
KGZpbHRlcikpOwotICAgIGJ1aWxkZXItPnNldFByaW1pdGl2ZVVuaXRzKGZpbHRlckVsZW1lbnQo
KS5wcmltaXRpdmVVbml0cygpKTsKLSAgICBidWlsZGVyLT5zZXRUYXJnZXRCb3VuZGluZ0JveCh0
YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRy
ZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVt
ZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWxlbWVudC5idWlsZChidWlsZGVyLmdl
dCgpLCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkgewotICAgICAgICAgICAgYnVpbGRl
ci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
fQotICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0
LmNvcHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigpKTsKLSAgICAgICAgZWxlbWVudC5zZXRTdGFu
ZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RC
b3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxlbWVudCwgZmlsdGVyRWxlbWVudCgpLnByaW1p
dGl2ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KSk7Ci0gICAgICAgIGlmIChlbGVtZW50LnJl
bmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NS
R0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVudC5y
ZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygp
ID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gRGVzdGluYXRpb25Db2xvclNwYWNl
OjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZWxzZQot
ICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXItPmFk
ZChlbGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkpOwotICAgIH0KLSAgICByZXR1cm4g
YnVpbGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmLCBHcmFwaGljc0Nv
bnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZHUmVzb3VyY2VNb2RlPiByZXNvdXJj
ZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwpAQCAtMTU1LDE4ICsxMjEsMTMgQEAgYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmco
YWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVyU2NhbGUpOwogCiAgICAgLy8gQ3Jl
YXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJvb2wgcHJpbWl0aXZlQm91bmRpbmdCb3hN
b2RlID0gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotICAgIGZpbHRlckRhdGEtPmZpbHRlciA9
IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlclNjYWxlLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIGZp
bHRlckRhdGEtPmJvdW5kYXJpZXMsIHRhcmdldEJvdW5kaW5nQm94LCBwcmltaXRpdmVCb3VuZGlu
Z0JveE1vZGUpOwotCi0gICAgLy8gQ3JlYXRlIGFsbCByZWxldmFudCBmaWx0ZXIgcHJpbWl0aXZl
cy4KLSAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gYnVpbGRQcmltaXRpdmVzKCpmaWx0ZXJEYXRh
LT5maWx0ZXIpOwotICAgIGlmICghZmlsdGVyRGF0YS0+YnVpbGRlcikKKyAgICBmaWx0ZXJEYXRh
LT5idWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWlsZGVyPigpOworICAgIGZpbHRlckRh
dGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlckVsZW1lbnQoKSwgKmZpbHRlckRh
dGEtPmJ1aWxkZXIsIGZpbHRlclNjYWxlLCBhYnNvbHV0ZURyYXdpbmdSZWdpb24sIGZpbHRlckRh
dGEtPmJvdW5kYXJpZXMsIHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICBpZiAoIWZpbHRlckRhdGEt
PmZpbHRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0gICAgRmlsdGVyRWZmZWN0KiBsYXN0
RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOwotICAgIGlmICghbGFz
dEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzKCkgPiBtYXhU
b3RhbE9mRWZmZWN0SW5wdXRzKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBsYXN0
RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVmZmVjdCgpOworICAgIEFTU0VSVChs
YXN0RWZmZWN0KTsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlXG4iIDw8ICpmaWx0ZXJEYXRhLT5i
dWlsZGVyLT5sYXN0RWZmZWN0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBhMmQzNWY5YWM3YTNkMjRlMTJl
Y2VmNjU1MjRmY2RiMWIzNzc4MjFhLi42NGUzYWM1YWVhYzgwYWRmOWUyNmFiNGVmNmI4NWEyN2My
NTQyZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQzMywxMSArNDMzLDEyIEBAIHZvaWQgd3JpdGVTVkdSZXNv
dXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXImCiAgICAgICAgIC8vIENyZWF0aW5nIGEgcGxhY2Vob2xkZXIgZmlsdGVyIHdoaWNoIGlz
IHBhc3NlZCB0byB0aGUgYnVpbGRlci4KICAgICAgICAgRmxvYXRSZWN0IGR1bW15UmVjdDsKICAg
ICAgICAgRmxvYXRTaXplIGR1bW15U2NhbGUoMSwgMSk7Ci0gICAgICAgIGF1dG8gZHVtbXlGaWx0
ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShkdW1teVNjYWxlLCBkdW1teVJlY3QsIGR1bW15UmVjdCwg
ZHVtbXlSZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKGF1dG8gYnVpbGRlciA9IGZpbHRlci5idWls
ZFByaW1pdGl2ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7CisgICAgICAgIFNWR0ZpbHRlckJ1aWxk
ZXIgYnVpbGRlcjsKKyAgICAgICAgYXV0byBkdW1teUZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRl
KGZpbHRlci5maWx0ZXJFbGVtZW50KCksIGJ1aWxkZXIsIGR1bW15U2NhbGUsIGR1bW15UmVjdCwg
ZHVtbXlSZWN0LCBkdW1teVJlY3QpOworICAgICAgICBpZiAoZHVtbXlGaWx0ZXIpIHsKICAgICAg
ICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVudFNjb3BlKHRzKTsKIAotICAgICAg
ICAgICAgaWYgKEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9IGJ1aWxkZXItPmxhc3RFZmZlY3Qo
KSkKKyAgICAgICAgICAgIGlmIChhdXRvIGxhc3RFZmZlY3QgPSBkdW1teUZpbHRlci0+bGFzdEVm
ZmVjdCgpKQogICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmV4dGVybmFsUmVwcmVzZW50YXRp
b24odHMpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS5yZXNvdXJjZVR5cGUo
KSA9PSBDbGlwcGVyUmVzb3VyY2VUeXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAppbmRleCA3MzJlYjE4OGE1YmJjYzg1ODRkYWNj
YmVlMjA4N2YyODAyYTU3YWY2Li5jOWRhMjc4MWQ5NTc0ODgwNjNiOTk1YWIwOTQyMjE5ZjE4ZDAz
ZWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0Zp
bHRlci5jcHAKQEAgLTIyLDggKzIyLDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU1ZHRmlsdGVyLmgiCiAKKyNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCisjaW5jbHVk
ZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitSZWZQdHI8U1ZHRmlsdGVyPiBTVkdGaWx0ZXI6OmNyZWF0ZShT
VkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdGaWx0ZXJCdWlsZGVyJiBidWlsZGVy
LCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUlt
YWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIEZpbHRlckVmZmVjdCYgcHJl
dmlvdXNFZmZlY3QpCit7CisgICAgcmV0dXJuIGNyZWF0ZShmaWx0ZXJFbGVtZW50LCBidWlsZGVy
LCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0ZXJSZWdpb24sIGZpbHRlclJlZ2lv
biwgJnByZXZpb3VzRWZmZWN0KTsKK30KKworUmVmUHRyPFNWR0ZpbHRlcj4gU1ZHRmlsdGVyOjpj
cmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVudCwgU1ZHRmlsdGVyQnVpbGRlciYg
YnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9h
dFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQoreworICAgIHJldHVybiBjcmVhdGUoZmlsdGVyRWxl
bWVudCwgYnVpbGRlciwgZmlsdGVyU2NhbGUsIHNvdXJjZUltYWdlUmVjdCwgZmlsdGVyUmVnaW9u
LCB0YXJnZXRCb3VuZGluZ0JveCwgbnVsbHB0cik7Cit9CisKK1JlZlB0cjxTVkdGaWx0ZXI+IFNW
R0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZpbHRlckVsZW1lbnQsIFNWR0ZpbHRl
ckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgRmlsdGVyRWZmZWN0KiBwcmV2aW91
c0VmZmVjdCkKK3sKKyAgICBib29sIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSA9IGZpbHRlckVs
ZW1lbnQucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1g7CisKKyAgICBhdXRvIGZpbHRlciA9IGFkb3B0UmVmKCpuZXcgU1ZHRmls
dGVyKGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgdGFyZ2V0Qm91
bmRpbmdCb3gsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSkpOworCisgICAgaWYgKCFwcmV2aW91
c0VmZmVjdCkKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0aW5FZmZlY3RzKFNvdXJjZUdyYXBo
aWM6OmNyZWF0ZShmaWx0ZXIpKTsKKyAgICBlbHNlCisgICAgICAgIGJ1aWxkZXIuc2V0dXBCdWls
dGluRWZmZWN0cyh7ICpwcmV2aW91c0VmZmVjdCB9KTsKKworICAgIGJ1aWxkZXIuc2V0VGFyZ2V0
Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOworICAgIGJ1aWxkZXIuc2V0UHJpbWl0aXZl
VW5pdHMoZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygpKTsKKworICAgIGF1dG8gbGFzdEVm
ZmVjdCA9IGJ1aWxkZXIuYnVpbGRGaWx0ZXJFZmZlY3RzKGZpbHRlciwgZmlsdGVyRWxlbWVudCk7
CisgICAgaWYgKCFsYXN0RWZmZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGZp
bHRlci0+c2V0TGFzdEVmZmVjdChXVEZNb3ZlKGxhc3RFZmZlY3QpKTsKKyAgICByZXR1cm4gZmls
dGVyOworfQorCiBTVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25zdCBGbG9hdFNpemUmIGZpbHRlclNj
YWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBm
aWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGJvb2wgZWZm
ZWN0QkJveE1vZGUpCiAgICAgOiBGaWx0ZXIoRmlsdGVyOjpUeXBlOjpTVkdGaWx0ZXIsIGZpbHRl
clNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbikKICAgICAsIG1fdGFyZ2V0Qm91
bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpCkBAIC0zOSw5ICs3NSwxNCBAQCBGbG9hdFNpemUg
U1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6ZSBzaXplKSBjb25zdAogICAg
IHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUoc2l6ZSk7CiB9CiAKLVJlZjxTVkdG
aWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJl
Z2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwgYm9vbCBlZmZlY3RCQm94
TW9kZSkKK0ludE91dHNldHMgU1ZHRmlsdGVyOjpvdXRzZXRzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9sYXN0RWZmZWN0LT5vdXRzZXRzKCk7Cit9CisKK3ZvaWQgU1ZHRmlsdGVyOjpjbGVhclJl
c3VsdCgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVyKGZpbHRlclNjYWxl
LCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIGVmZmVj
dEJCb3hNb2RlKSk7CisgICAgbV9sYXN0RWZmZWN0LT5jbGVhclJlc3VsdHNSZWN1cnNpdmUoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA1MDgxMWU2ZmI0OWEyMGE1YWUyNzkxYjU0
MDM5YzdmODI3YjY3ZmRhLi4xNjYwMTJmZjRlYmFjZDE2NTQ0ZWUxNDFmMDVkOGM4NjczYTM1Zjg3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIu
aApAQCAtMjcsMTkgKzI3LDMyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU1ZH
RmlsdGVyQnVpbGRlcjsKK2NsYXNzIFNWR0ZpbHRlckVsZW1lbnQ7CisKIGNsYXNzIFNWR0ZpbHRl
ciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U1ZHRmls
dGVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0Qm91bmRpbmdCb3gsIGNv
bnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVmZmVjdEJCb3hNb2RlKTsKKyAgICBz
dGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0
ZXJCdWlsZGVyJiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBGaWx0ZXJF
ZmZlY3QmIHByZXZpb3VzRWZmZWN0KTsKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3Jl
YXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmxvYXRTaXpl
JiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94
KTsKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQm
LCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9u
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBGaWx0ZXJFZmZlY3QqIHByZXZp
b3VzRWZmZWN0KTsKIAogICAgIEZsb2F0U2l6ZSBzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0U2l6
ZSkgY29uc3QgZmluYWw7CiAKICAgICBGbG9hdFJlY3QgdGFyZ2V0Qm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAKKyAgICBSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBsYXN0RWZmZWN0KCkgeyByZXR1cm4gbV9sYXN0RWZmZWN0OyB9CisgICAgdm9pZCBzZXRM
YXN0RWZmZWN0KFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYgbGFzdEVmZmVjdCkgeyBtX2xhc3RFZmZl
Y3QgPSBXVEZNb3ZlKGxhc3RFZmZlY3QpOyB9CisKIHByaXZhdGU6CiAgICAgU1ZHRmlsdGVyKGNv
bnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94LCBjb25zdCBGbG9hdFJlY3Qm
IGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7CiAKKyAgICBJbnRPdXRzZXRzIG91
dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGNsZWFyUmVzdWx0KCkgb3ZlcnJpZGU7
CisKICAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0JveDsKICAgICBib29sIG1fZWZmZWN0
QkJveE1vZGU7CisKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCmluZGV4IDgwMDBmODRiNWNk
NjBlMDZlMjM2NGVkNWNkZThmOGUzZmQ5NDQxNmUuLmJlOGYwZmIxYzNmNTJmZmU1YzllNTQxMWI2
OGNlMWMwZjg0ZjhkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC0yMCwyMSArMjAsOTcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJCdWlsZGVyLmgiCiAKLSNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKKyNpbmNs
dWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJT
b3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAorI2lmIEVOQUJMRShERVNUSU5BVElP
Tl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJC
dWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpCit2b2lkIFNWR0ZpbHRl
ckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNlR3Jh
cGhpYykKIHsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3RO
YW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUFs
cGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKnNvdXJjZUdyYXBoaWMpKTsK
KyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIHNv
dXJjZUdyYXBoaWMucHRyKCkpOworICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUFscGhh
OjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoc291cmNlR3JhcGhpYykpOwogICAg
IGFkZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1Jf
U1BBQ0VfTElORUFSX1NSR0IpCitzdGF0aWMgQ29sb3JJbnRlcnBvbGF0aW9uIGNvbG9ySW50ZXJw
b2xhdGlvbkZvckVsZW1lbnQoU1ZHRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBpZiAoYXV0byBy
ZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5z
dHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpOworCisgICAgLy8g
VHJ5IHRvIGRldGVybWluZSB0aGUgcHJvcGVydHkgdmFsdWUgZnJvbSB0aGUgY29tcHV0ZWQgc3R5
bGUuCisgICAgaWYgKGF1dG8gdmFsdWUgPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKCZlbGVtZW50
KS5wcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Q29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycykpIHsK
KyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgfQorCisgICAg
cmV0dXJuIENvbG9ySW50ZXJwb2xhdGlvbjo6QXV0bzsKK30KKyNlbmRpZgorCitzdGF0aWMgdW5z
aWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZmZWN0KiBlZmZlY3QsIEhhc2hTZXQ8
Y29uc3QgRmlsdGVyRWZmZWN0Kj4mIGFsbEVmZmVjdHMpCit7CisgICAgYWxsRWZmZWN0cy5hZGQo
ZWZmZWN0KTsKKyAgICB1bnNpZ25lZCBzaXplID0gZWZmZWN0LT5udW1iZXJPZkVmZmVjdElucHV0
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGVmZmVjdC0+aW5wdXRFZmZlY3QoaSk7CisgICAgICAgIGNvbGxl
Y3RFZmZlY3RzKGluLCBhbGxFZmZlY3RzKTsKKyAgICB9CisgICAgcmV0dXJuIGFsbEVmZmVjdHMu
c2l6ZSgpOworfQorCitzdGF0aWMgdW5zaWduZWQgdG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzKGNv
bnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKK3sKKyAgICBIYXNoU2V0PGNvbnN0IEZpbHRl
ckVmZmVjdCo+IGFsbEVmZmVjdHM7CisgICAgcmV0dXJuIGNvbGxlY3RFZmZlY3RzKCZsYXN0RWZm
ZWN0LCBhbGxFZmZlY3RzKTsKK30KKworUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRmlsdGVyQnVp
bGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RzKEZpbHRlciYgZmlsdGVyLCBTVkdGaWx0ZXJFbGVtZW50
JiBmaWx0ZXJFbGVtZW50KQoreworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4Q291
bnRDaGlsZE5vZGVzID0gMjAwOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4VG90
YWxOdW1iZXJGaWx0ZXJFZmZlY3RzID0gMTAwOworCisgICAgaWYgKGZpbHRlckVsZW1lbnQuY291
bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0OworCisgICAgZm9yIChhdXRv
JiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KSkgeworICAgICAgICBlZmZlY3QgPSBlZmZlY3RF
bGVtZW50LmJ1aWxkKHRoaXMsIGZpbHRlcik7CisgICAgICAgIGlmICghZWZmZWN0KSB7CisgICAg
ICAgICAgICBjbGVhckVmZmVjdHMoKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisKKyAgICAgICAgZWZmZWN0RWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZm
ZWN0LmdldCgpKTsKKyAgICAgICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0
aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzPigmZWZmZWN0RWxlbWVudCwgbV9wcmltaXRpdmVVbml0cywgbV90YXJnZXRCb3VuZGlu
Z0JveCkpOworCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdC
KQorICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0aW9uRm9yRWxlbWVudChlZmZlY3RFbGVtZW50
KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQikKKyAgICAgICAgICAgIGVmZmVjdC0+
c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0Io
KSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBlZmZlY3RFbGVtZW50LnJl
bmRlcmVyKCkpCisgICAgICAgICAgICBhcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZm
ZWN0LmNvcHlSZWYoKSwgcmVuZGVyZXIpOworCisgICAgICAgIGFkZChlZmZlY3RFbGVtZW50LnJl
c3VsdCgpLCBlZmZlY3QpOworICAgIH0KKworICAgIGlmICghZWZmZWN0IHx8IHRvdGFsTnVtYmVy
RmlsdGVyRWZmZWN0cygqZWZmZWN0KSA+IG1heFRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cykKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZWZmZWN0OworfQorCiB2b2lkIFNW
R0ZpbHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gZWZmZWN0KQogewogICAgIGlmIChpZC5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRl
eCBjNzdhZTA4YmFjNjVjM2MyY2ZjODk3NGZhMzNlNzY0NjBjZTk3ZmE3Li4zNzViZGIxNTMxZWY0
M2FlMmI3MTU2NmY2NjU4ZGVjMzRkOGQ0OGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0zNyw3ICszNyw3
IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaFNl
dDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CiAKLSAgICBTVkdGaWx0ZXJCdWlsZGVy
KFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMpOworICAgIFNWR0ZpbHRlckJ1aWxk
ZXIoKSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIHNldFRhcmdldEJvdW5kaW5nQm94KGNvbnN0IEZs
b2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0gcjsgfQogICAgIEZsb2F0UmVjdCB0
YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0Qm91bmRpbmdCb3g7IH0K
QEAgLTY1LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7CiAgICAg
dm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0Kik7CiAKKyAgICB2b2lkIHNl
dHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4gc291cmNlR3JhcGhpYyk7CisgICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRGaWx0ZXJFZmZlY3RzKEZpbHRlciYsIFNWR0ZpbHRl
ckVsZW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0
cygpCiAgICAgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDVlNTU2ZTQyYzRhZDZiYjUzNWRjMDk2ODEwMDJlZDA4ZWIxNzY4
YWQuLmMxZGMwNTBlZDJjZjQxNWZkYzUxNWQ1YmNmYjY3OGM0YWJjNDRkZTUgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAyMS0xMS0xMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWlkQGFwcGxlLmNv
bT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIE1ha2UgQ1NTRmlsdGVyIGJlIGEgY29tcG9zaXRl
IG9mIEZpbHRlckZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMyNDY5CisgICAgICAgIHJkYXI6Ly84NTA0NzE0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICBVbnNraXAgZmlsdGVyIGhpZHBpIGxh
eW91dCB0ZXN0cy4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisKIDIwMjEtMTEtMTAg
IFNhaWQgQWJvdS1IYWxsYXdhICA8c2FpZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0dQVSBQcm9j
ZXNzXSBNYWtlIFNWR0ZpbHRlciBhbmQgQ1NTRmlsdGVyIHdvcmsgaW4gdGhlIHNhbWUgY29vcmRp
bmF0ZXMgc3lzdGVtCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zIGIv
TGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBhMzlmMDlhNDc3ZDUxNThiM2I4ODky
M2U1OTNkMzFhZTUzNzQzY2M2Li4yN2I2YTczYjU4ZmU5NTNmNWFmMDcxZTM3OTk0MzQzZjkyNjgy
NmUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91
dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTUxNzQsNTMgKzUxNzQsMTUgQEAganMvZG9tL3Jl
ZmxlY3Qtc2V0LW9udG8tZG9tLmh0bWwgWyBTa2lwIF0KIHVzZXJzY3JpcHRzL3VzZXItc2NyaXB0
LXBsdWdpbi1kb2N1bWVudC5odG1sIFsgU2tpcCBdCiAKICMgVGhlc2UgZmlsdGVyIHJlbGF0ZWQg
ZmFpbHVyZXMgc2hvdWxkIGJlIGZpeGVkIG9uY2Ugd2Via2l0Lm9yZy9iLzIzMjcwNSBpcyByZXNv
bHZlZAotd2Via2l0Lm9yZy9iLzIzMjcwNSBjb21wb3NpdGluZy9maWx0ZXJzL2Ryb3Atc2hhZG93
Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY29tcG9zaXRpbmcvZmlsdGVycy9z
aW1wbGUtaW1hZ2Utd2l0aC1zdmctZmlsdGVyLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8y
MzI3MDUgY3NzMy9maWx0ZXJzL2JhY2tkcm9wL2JhY2tkcm9wLWZpbHRlci13aXRoLWJvcmRlci1y
YWRpdXMtYW5kLXJlZmxlY3Rpb24tcmVtb3ZlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8y
MzI3MDUgY3NzMy9maWx0ZXJzL2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycy5odG1sIFsgU2tp
cCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvZmlsdGVycy9jc3Mtb3BhY2l0eS13aXRoLWRy
b3Atc2hhZG93Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9maWx0ZXJz
L2Ryb3Atc2hhZG93Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9maWx0
ZXJzL2VmZmVjdC1icmlnaHRuZXNzLXNxdWFyZS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2Iv
MjMyNzA1IGNzczMvZmlsdGVycy9lZmZlY3QtY29udHJhc3Qtc3F1YXJlLmh0bWwgWyBTa2lwIF0K
LXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9maWx0ZXJzL2VmZmVjdC1ncmF5c2NhbGUtc3F1YXJl
Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9maWx0ZXJzL2VmZmVjdC1o
dWUtcm90YXRlLXNxdWFyZS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNzczMv
ZmlsdGVycy9lZmZlY3QtaW52ZXJ0LXNxdWFyZS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2Iv
MjMyNzA1IGNzczMvZmlsdGVycy9lZmZlY3QtcmVmZXJlbmNlLWxvY2FsLXVybC13aXRoLWJhc2Uu
aHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvZWZmZWN0LXNh
dHVyYXRlLXNxdWFyZS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvZmls
dGVycy9lZmZlY3Qtc2VwaWEtc3F1YXJlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3
MDUgY3NzMy9maWx0ZXJzL2ZpbHRlci1pcy1vbi1zdWJwaXhlbC1wb3NpdGlvbi5odG1sIFsgU2tp
cCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvZmlsdGVycy9maWx0ZXItb24tb3ZlcmZsb3ct
aGlkZGVuLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9maWx0ZXJzL2Zp
bHRlcnMtb24tc3ZnLXJvb3QuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3Mz
L2ZpbHRlcnMvaGlkcGktZmVDb252b2x2ZU1hdHJpeC5odG1sIFsgU2tpcCBdCi13ZWJraXQub3Jn
L2IvMjMyNzA1IGNzczMvZmlsdGVycy9oaWRwaS1maWx0ZXItaXMtb24tc3VicGl4ZWwtcG9zaXRp
b24uaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvaW52YWxp
ZGF0ZS1zb3VyY2VBbHBoYS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNzczMv
ZmlsdGVycy9udWxsLWVmZmVjdC1jaGVjay5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMy
NzA1IGNzczMvZmlsdGVycy9yZWZlcmVuY2UtZmlsdGVyLXNldC1maWx0ZXItcmVnaW9ucy5odG1s
IFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvbWFza2luZy9jbGlwLXBhdGgtZmls
dGVyLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzI3MDUgY29tcG9zaXRpbmcvZmlsdGVy
cy9zdy1uZXN0ZWQtc2hhZG93LW92ZXJsYXBzLWh3LW5lc3RlZC1zaGFkb3cuaHRtbCBbIFNraXAg
XQord2Via2l0Lm9yZy9iLzIzMjcwNSBjb21wb3NpdGluZy9maWx0ZXJzL3N3LXNoYWRvdy1vdmVy
bGFwcy1ody1sYXllci5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjMyNzA1IGNvbXBvc2l0
aW5nL2ZpbHRlcnMvc3ctc2hhZG93LW92ZXJsYXBzLWh3LXNoYWRvdy5odG1sIFsgU2tpcCBdCit3
ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvZmlsdGVycy9zdmctYmx1ci1maWx0ZXItY2xpcHBlZC5o
dG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjMyNzA1IGZhc3QvZmlsdGVyLWltYWdlL2JhY2tn
cm91bmQtZmlsdGVyLWltYWdlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzI3MDUgZmFz
dC9maWx0ZXItaW1hZ2UvZmlsdGVyLWltYWdlLWJsdXIuaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzIzMjcwNSBmYXN0L2ZpbHRlci1pbWFnZS9maWx0ZXItaW1hZ2Utc3ZnLmh0bWwgWyBTa2lw
IF0KIHdlYmtpdC5vcmcvYi8yMzI3MDUgZmFzdC9maWx0ZXItaW1hZ2UvZmlsdGVyLWltYWdlLmh0
bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgZmFzdC9ncmFkaWVudHMvY29uaWMtZ3Jh
ZGllbnQtYWxwaGEuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2dyYWRp
ZW50cy9jb25pYy1ncmFkaWVudC1leHRlbmRlZC1zdG9wcy5odG1sIFsgU2tpcCBdCi13ZWJraXQu
b3JnL2IvMjMyNzA1IGZhc3QvZ3JhZGllbnRzL2NvbmljLWdyYWRpZW50Lmh0bWwgWyBTa2lwIF0K
LXdlYmtpdC5vcmcvYi8yMzI3MDUgZmFzdC9oaWRwaS9maWx0ZXJzLWFuZC1pbWFnZS1idWZmZXIt
cmVzb2x1dGlvbi5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGZhc3QvaGlkcGkv
ZmlsdGVycy1ibHVyLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgZmFzdC9oaWRw
aS9maWx0ZXJzLWNvbXBvbmVudC10cmFuc2Zlci5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2Iv
MjMyNzA1IGZhc3QvaGlkcGkvZmlsdGVycy1odWUtcm90YXRlLmh0bWwgWyBTa2lwIF0KLXdlYmtp
dC5vcmcvYi8yMzI3MDUgZmFzdC9oaWRwaS9maWx0ZXJzLWludmVydC5odG1sIFsgU2tpcCBdCi13
ZWJraXQub3JnL2IvMjMyNzA1IGZhc3QvaGlkcGkvZmlsdGVycy1tb3JwaG9sb2d5Lmh0bWwgWyBT
a2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgZmFzdC9oaWRwaS9maWx0ZXJzLW11bHRpcGxlLmh0
bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgZmFzdC9oaWRwaS9maWx0ZXJzLXJlZmVy
ZW5jZS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGZhc3QvaGlkcGkvZmlsdGVy
cy1zaGFkb3cuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2hpZHBpL2Zp
bHRlcnMtdHVyYnVsZW5jZS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGZhc3Qv
bXVsdGljb2wvZmlsdGVyLWluLWNvbHVtbnMuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIz
MjcwNSBodHRwL3Rlc3RzL2Nzcy9maWx0ZXJzLW9uLWlmcmFtZXMuaHRtbCBbIFNraXAgXQotd2Vi
a2l0Lm9yZy9iLzIzMjcwNSBpbXBvcnRlZC9ibGluay9jc3MzL2ZpbHRlcnMvZWZmZWN0LXJlZmVy
ZW5jZS1hZGQtaHcuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBpbXBvcnRlZC9i
bGluay9jc3MzL2ZpbHRlcnMvZWZmZWN0LXJlZmVyZW5jZS1vbi10cmFuc3BhcmVudC1lbGVtZW50
Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgaW1wb3J0ZWQvYmxpbmsvY3NzMy9m
aWx0ZXJzL2VmZmVjdC1yZWZlcmVuY2Utc291cmNlLWFscGhhLWh3Lmh0bWwgWyBTa2lwIF0KLXdl
YmtpdC5vcmcvYi8yMzI3MDUgaW1wb3J0ZWQvYmxpbmsvc3ZnL2ZpbHRlcnMvZmlsdGVyLWh1Z2Ut
Y2xhbXBpbmcuc3ZnIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGltcG9ydGVkL21vemls
bGEvc3ZnL3N2Zy1lZmZlY3RzLWFyZWEtdW56b29tZWQueGh0bWwgWyBTa2lwIF0KLXdlYmtpdC5v
cmcvYi8yMzI3MDUgaW1wb3J0ZWQvbW96aWxsYS9zdmcvc3ZnLWVmZmVjdHMtYXJlYS16b29tZWQt
aW4ueGh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgaW1wb3J0ZWQvbW96aWxsYS9z
dmcvc3ZnLWVmZmVjdHMtYXJlYS16b29tZWQtb3V0LnhodG1sIFsgU2tpcCBdCi13ZWJraXQub3Jn
L2IvMjMyNzA1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1vdmVyZmxv
dy9vdmVyZmxvdy1zY3JvbGwtcmVzaXplLXZpc2liaWxpdHktaGlkZGVuLmh0bWwgWyBTa2lwIF0K
LXdlYmtpdC5vcmcvYi8yMzI3MDUgc3ZnL2N1c3RvbS9mZUNvbG9yTWF0cml4LXZhbHVlcy1sZWFk
aW5nLXNwYWNlcy5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IHN2Zy9jdXN0b20v
cmVzb3VyY2VzLWNzcy1zY2FsZWQuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBz
dmcvZmlsdGVycy9iaWctc2l6ZWQtb2ZmLXZpZXdwb3J0LWZpbHRlci5zdmcgWyBTa2lwIF0KK3dl
YmtpdC5vcmcvYi8yMzI3MDUgaW1wb3J0ZWQvbW96aWxsYS9zdmcvZHluYW1pYy1maWx0ZXItY29u
dGVudHMtMDFhLnN2ZyBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzMjcwNSBpbXBvcnRlZC9tb3pp
bGxhL3N2Zy9maWx0ZXJzL2ZlQ29tcG9zaXRlLTIuc3ZnIFsgU2tpcCBdCit3ZWJraXQub3JnL2Iv
MjMyNzA1IGltcG9ydGVkL21vemlsbGEvc3ZnL2ZpbHRlcnMvZmVTcGVjdWxhckxpZ2h0aW5nLTEu
c3ZnIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjMyNzA1IHN2Zy9maWx0ZXJzL2ZlTGlnaHRpbmct
Y2xpcHBlZC5zdmcgWyBTa2lwIF0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>443899</attachid>
            <date>2021-11-10 19:58:07 -0800</date>
            <delta_ts>2021-11-10 20:31:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232469-20211110195806.patch</filename>
            <type>text/plain</type>
            <size>68081</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg1NjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJhNjczZjc2NDRlNDM4
NzQ2NjgxMmU3NGUyNzM2ZmIyY2VkOWZkNS4uM2ZlOWQxZWFhM2IzODY0ZTU1N2NiM2RhOWU2N2M1
NTJjZWFiM2E0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDIxLTExLTEwICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFUgUHJvY2Vzc10g
TWFrZSBDU1NGaWx0ZXIgYmUgYSBjb21wb3NpdGUgb2YgRmlsdGVyRnVuY3Rpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzI0NjkKKyAgICAgICAg
cmRhcjovLzg1MDQ3MTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisg
ICAgICAgIEluIHRoaXMgcGF0Y2gsIHRoZSBDU1MgcmVmZXJlbmNlIGZpbHRlciBpcyBidWlsdCBh
cyBhbiBTVkdGaWx0ZXIgYW5kIGl0CisgICAgICAgIGlzIGtlcHQgYXMgYSBGaWx0ZXJGdW5jdGlv
biBpbiB0aGUgQ1NTRmlsdGVyIGZ1bmN0aW9ucycgbGlzdC4gVGhlIEZpbHRlciAKKyAgICAgICAg
YXNzb2NpYXRlZCB3aXRoIHRoZSBGaWx0ZXJFZmZlY3RzIG9mIHRoZSByZWZlcmVuY2VkIGZpbHRl
ciB3aWxsIGJlIGFuCisgICAgICAgIFNWR0ZpbHRlciBpbnN0ZWFkIG9mIHRoZSByb290IENTU0Zp
bHRlci4gVGhpcyB3aWxsIGFsbG93IGhhdmluZyBjb2xvcgorICAgICAgICBzcGFjaW5nIGZvciB0
aGUgcmVmZXJlbmNlZCBmaWx0ZXJzIGRpZmZlcmVudCBmcm9tIHRoZSBjb2xvciBzcGFjaW5nIG9m
CisgICAgICAgIENTU0ZpbHRlci4gCisKKyAgICAgICAgQWxzbyB0aGlzIHBhdGNoIG1ha2VzIGEg
c2luZ2xlIGZ1bmN0aW9uIGZvciBidWlsZGluZyB0aGUgcHJpbWl0aXZlcyBvZgorICAgICAgICB0
aGUgU1ZHRmlsdGVyIGluc3RlYWQgb2YgaGF2aW5nIHR3byBmdW5jdGlvbnMuCisKKyAgICAgICAg
VG8gYWxsb3cgb3BlcmF0aW5nIHRocm91Z2ggdGhlIFNWR0ZpbHRlciBhcyBhIEZpbHRlckZ1bmN0
aW9uIG93bmVkIGJ5CisgICAgICAgIENTU0ZpbHRlciwgdGhlIFNWR0ZpbHRlciB3aWxsIGhhdmUg
YSBwb2ludGVyIHRvIGl0cyBsYXN0RWZmZWN0LgorCisgICAgICAgICogY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y29sbGVjdEVmZmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0Ojp0b3RhbE51bWJlck9mRWZmZWN0SW5wdXRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpudW1iZXJPZkVmZmVjdElucHV0cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE1heEVmZmVjdFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvdXRzZXRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6b3V0c2V0cyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJGdW5jdGlvbjo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpDU1NGaWx0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6bV9oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVCbHVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUJyaWdodG5lc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29udHJhc3RF
ZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJvcFNoYWRvd0VmZmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVHcmF5U2NhbGVFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlSHVlUm90YXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludmVydEVm
ZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcGFjaXR5RWZmZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVNhdHVyYXRlRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNlcGlhRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNWR0ZpbHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZpbHRlcjo6YnVpbGRGaWx0ZXJGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRmlsdGVyOjppbnB1dENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjph
bGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6bGFzdEVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmNs
ZWFySW50ZXJtZWRpYXRlUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFw
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlcjo6c2V0U291cmNlSW1hZ2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZpbHRlcjo6b3V0cHV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91
dHNldHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6bV9zb3VyY2VHcmFwaGljKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjpidWlsZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6Om91dHB1dCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OnNldE1heEVmZmVjdFJlY3RzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlcjo6b3V0cHV0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0ZXJz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdpbkZpbHRlckVmZmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckZpbHRlcnM6OmFwcGx5RmlsdGVyRWZmZWN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlcjo6b3V0c2V0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXI6OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKiBzdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1
aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JJbnRl
cnBvbGF0aW9uRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0RWZmZWN0cyk6
CisgICAgICAgIChXZWJDb3JlOjp0b3RhbE51bWJlckZpbHRlckVmZmVjdHMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIpOiBEZWxldGVkLgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDoKKwogMjAy
MS0xMS0xMCAgSiBQYXNjb2UgIDxqX3Bhc2NvZUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1
dGhuXSBVbmlmeSBfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsIFNQSSBhbmQgQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yJ3MgQ2xpZW50RGF0YUpzb24gZ2VuZXJhdGlvbiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCAzZGVkMDJiOGQyMGFhZTNhOTRkYjQ0
Yjc0ZTcwZmI2ZDI5MTM2ODEyLi5kMzJmZmJjYzNjNTg2MmNiMWVjYTZkNmFlZDk4MmQyMGQ3ZDk0
OWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0x
MTYsMTggKzExNiwyMSBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNm
b3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMg
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAg
YXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4KTsKLSAgICBpZiAoIXRleHR1cmUpCisgICAgYXV0byByZW5kZXJpbmdNb2RlID0g
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKyAgICBhdXRvIHNvdXJjZUltYWdlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCAxLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IoKSwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKKyAgICBpZiAoIXNvdXJjZUltYWdl
KQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIAotICAgIGF1dG8gaW1hZ2VS
ZWN0ID0gRmxvYXRSZWN0IHsgeyB9LCBzaXplIH07Ci0gICAgdGV4dHVyZS0+Y29udGV4dCgpLmRy
YXdJbWFnZSgqaW1hZ2UsIGltYWdlUmVjdCk7CisgICAgYXV0byBzb3VyY2VJbWFnZVJlY3QgPSBG
bG9hdFJlY3QgeyB7IH0sIHNpemUgfTsKKyAgICBzb3VyY2VJbWFnZS0+Y29udGV4dCgpLmRyYXdJ
bWFnZSgqaW1hZ2UsIHNvdXJjZUltYWdlUmVjdCk7CiAKLSAgICBhdXRvIGNzc0ZpbHRlciA9IENT
U0ZpbHRlcjo6Y3JlYXRlKCk7Ci0gICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShXVEZNb3Zl
KHRleHR1cmUpKTsKLSAgICBjc3NGaWx0ZXItPnNldFNvdXJjZUltYWdlUmVjdChpbWFnZVJlY3Qp
OwotICAgIGlmICghY3NzRmlsdGVyLT5idWlsZChyZW5kZXJlciwgbV9maWx0ZXJPcGVyYXRpb25z
LCBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pKQorICAgIGF1dG8gY3NzRmlsdGVyID0g
Q1NTRmlsdGVyOjpjcmVhdGUobV9maWx0ZXJPcGVyYXRpb25zLCByZW5kZXJpbmdNb2RlKTsKKwor
ICAgIGNzc0ZpbHRlci0+c2V0U291cmNlSW1hZ2VSZWN0KHNvdXJjZUltYWdlUmVjdCk7CisgICAg
aWYgKCFjc3NGaWx0ZXItPmJ1aWxkRmlsdGVyRnVuY3Rpb25zKHJlbmRlcmVyLCBtX2ZpbHRlck9w
ZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5jdGlvbikpCiAgICAgICAgIHJldHVy
biAmSW1hZ2U6Om51bGxJbWFnZSgpOworCisgICAgY3NzRmlsdGVyLT5zZXRTb3VyY2VJbWFnZShX
VEZNb3ZlKHNvdXJjZUltYWdlKSk7CiAgICAgY3NzRmlsdGVyLT5hcHBseSgpOwogCiAgICAgYXV0
byogb3V0cHV0ID0gY3NzRmlsdGVyLT5vdXRwdXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IDAyYmY1MTEwNTRmZTYzOWMy
ZjcwOTQ3YzA3NWQ5OTg0MGI1Nzc2YjUuLjEyMWFhZDVjY2E4MzgwZDczYjlhZDI2MzYwMTU1YTIx
OTQyNjYzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuaApAQCAtMjEsMTEgKzIxLDExIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmlsdGVyRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDQwZDIzMDBlMTFlMWMxMjZmNzZi
ODU4MmRhMjk5NGNkNTllMzZiNTIuLjZlZmZjOGYxN2RmYmM2NTRkNWUzZDI3MWQ5MDYzMDRmYzM1
ZDZmZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTE0MywyMyArMTQzLDYgQEAgRmlsdGVyRWZm
ZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0RWZmZWN0KHVuc2lnbmVkIG51bWJlcikgY29uc3QKICAg
ICByZXR1cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5nZXQoKTsKIH0KIAotc3RhdGljIHVu
c2lnbmVkIGNvbGxlY3RFZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdCplZmZlY3QsIEhhc2hTZXQ8
Y29uc3QgRmlsdGVyRWZmZWN0Kj4mIGFsbEVmZmVjdHMpCi17Ci0gICAgYWxsRWZmZWN0cy5hZGQo
ZWZmZWN0KTsKLSAgICB1bnNpZ25lZCBzaXplID0gZWZmZWN0LT5udW1iZXJPZkVmZmVjdElucHV0
cygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGVmZmVjdC0+aW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGNvbGxl
Y3RFZmZlY3RzKGluLCBhbGxFZmZlY3RzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFsbEVmZmVjdHMu
c2l6ZSgpOwotfQotCi11bnNpZ25lZCBGaWx0ZXJFZmZlY3Q6OnRvdGFsTnVtYmVyT2ZFZmZlY3RJ
bnB1dHMoKSBjb25zdAotewotICAgIEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4gYWxsRWZm
ZWN0czsKLSAgICByZXR1cm4gY29sbGVjdEVmZmVjdHModGhpcywgYWxsRWZmZWN0cyk7Ci19Ci0K
IHZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCiB7CiAgICAgaWYgKGhhc1Jlc3VsdCgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmgKaW5kZXggNTUyN2Y2YmY0YmY2MjhlNzE1MGY4MWQ1ZWZiMzlkZjMxYTI5MWI3Mi4u
NjY3NjAwZDMwMmM4ZmM5YjVhOGY0ZjFmYzhmMGM1NjljYmUyYTdiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
CkBAIC00OCw3ICs0OCw3IEBAIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBG
aWx0ZXJFZmZlY3RWZWN0b3I7CiAKIGNsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBGaWx0ZXJG
dW5jdGlvbiB7CiBwdWJsaWM6Ci0gICAgdm9pZCBjbGVhclJlc3VsdCgpOworICAgIHZvaWQgY2xl
YXJSZXN1bHQoKSBvdmVycmlkZTsKICAgICB2b2lkIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZSgpOwog
CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyUmVzdWx0KCk7CkBAIC01OSw3ICs1OSw2IEBA
IHB1YmxpYzoKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0cygpIHsgcmV0dXJu
IG1faW5wdXRFZmZlY3RzOyB9CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVmZmVjdCh1bnNpZ25l
ZCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKSBjb25zdCB7IHJl
dHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0KLSAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9m
RWZmZWN0SW5wdXRzKCkgY29uc3Q7CiAgICAgCiAgICAgaW5saW5lIGJvb2wgaGFzUmVzdWx0KCkg
Y29uc3QKICAgICB7CkBAIC04Myw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFic29s
dXRlUGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGFic29sdXRlUGFpbnRSZWN0KSB7IG1fYWJzb2x1
dGVQYWludFJlY3QgPSBhYnNvbHV0ZVBhaW50UmVjdDsgfQogCiAgICAgRmxvYXRSZWN0IG1heEVm
ZmVjdFJlY3QoKSBjb25zdCB7IHJldHVybiBtX21heEVmZmVjdFJlY3Q7IH0KLSAgICB2b2lkIHNl
dE1heEVmZmVjdFJlY3QoY29uc3QgRmxvYXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZm
ZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7IH0gCisgICAgdm9pZCBzZXRNYXhFZmZlY3RSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgbWF4RWZmZWN0UmVjdCkgeyBtX21heEVmZmVjdFJlY3QgPSBtYXhFZmZl
Y3RSZWN0OyB9CiAKICAgICB2b2lkIGFwcGx5KCk7CiAKQEAgLTk0LDggKzkzLDYgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CiAKLSAg
ICB2aXJ0dWFsIEludE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIEludE91dHNldHMo
KTsgfQotCiAgICAgZW51bSBjbGFzcyBSZXByZXNlbnRhdGlvblR5cGUgeyBUZXN0T3V0cHV0LCBE
ZWJ1Z2dpbmcgfTsKICAgICB2aXJ0dWFsIFdURjo6VGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNl
bnRhdGlvbihXVEY6OlRleHRTdHJlYW0mLCBSZXByZXNlbnRhdGlvblR5cGUgPSBSZXByZXNlbnRh
dGlvblR5cGU6OlRlc3RPdXRwdXQpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckZ1bmN0aW9uLmgKaW5kZXggNzM2
Y2ZjMDIzNDZiZWE0OTI4OWQ2YzkzMTUyMWE2MGNlOTZkYWJhZS4uZTg2NGE4NjBhODE3Zjk3YTZk
YzRkOTgyMTk0ZTdlZjlmNzkwM2I4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRnVuY3Rpb24uaApAQCAtMjUsNiArMjUs
OCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkludFJlY3RFeHRlbnQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIApAQCAtODAsNiArODIsOSBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIEF0b21TdHJpbmcgc291cmNlR3JhcGhpY05hbWUoKSB7IHJldHVybiBmaWx0ZXJOYW1l
KFR5cGU6OlNvdXJjZUdyYXBoaWMpOyB9CiAgICAgQXRvbVN0cmluZyBmaWx0ZXJOYW1lKCkgY29u
c3QgeyByZXR1cm4gZmlsdGVyTmFtZShtX2ZpbHRlclR5cGUpOyB9CiAKKyAgICB2aXJ0dWFsIElu
dE91dHNldHMgb3V0c2V0cygpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclJlc3VsdCgpIHsgfQorCiBwcml2YXRlOgogICAgIFR5cGUgbV9maWx0ZXJUeXBlOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKaW5kZXggY2E1ZDg0ZDBkNzE4
YzhhN2M2MGJlYTQ4MWQ1YWY3YTE1ZDEzZmNmZS4uZjJkMTcxY2JjNjZmNzU5ZmIzMDZhMmUxOWFm
NTQyNDFkYWY2MzIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0Zp
bHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKQEAg
LTI3LDkgKzI3LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXIu
aCIKIAotI2luY2x1ZGUgIkNhY2hlZFNWR0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiQ2FjaGVkU1ZH
RG9jdW1lbnRSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKICNpbmNs
dWRlICJGRUNvbG9yTWF0cml4LmgiCiAjaW5jbHVkZSAiRkVDb21wb25lbnRUcmFuc2Zlci5oIgog
I2luY2x1ZGUgIkZFRHJvcFNoYWRvdy5oIgpAQCAtMzgsMTUgKzM1LDEwIEBACiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0UmVuZGVyZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
UmVmZXJlbmNlZFNWR1Jlc291cmNlcy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5j
bHVkZSAiU1ZHRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgogI2luY2x1ZGUgIlNW
R0ZpbHRlckJ1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiU291
cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBVU0UoRElSRUNUMkQpCiAj
aW5jbHVkZSA8ZDJkMS5oPgpAQCAtNTQsMjU5ICs0NiwyOTMgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1SZWY8Q1NTRmlsdGVyPiBDU1NGaWx0ZXI6OmNyZWF0ZShmbG9hdCBzY2FsZUZhY3Rv
cikKK1JlZlB0cjxDU1NGaWx0ZXI+IENTU0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIG9wZXJhdGlvbnMsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgc2Nh
bGVGYWN0b3IpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTRmlsdGVyKHNjYWxlRmFj
dG9yKSk7CisgICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgPSBvcGVyYXRpb25zLmhh
c0ZpbHRlclRoYXRNb3Zlc1BpeGVscygpOworICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJl
UmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4gPSBvcGVyYXRpb25zLmhhc0ZpbHRlclRoYXRTaG91
bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKCk7CisKKyAgICBhdXRvIGZpbHRlciA9IGFk
b3B0UmVmKCpuZXcgQ1NTRmlsdGVyKGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgaGFzRmlsdGVy
VGhhdFNob3VsZEJlUmVzdHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4sIHNjYWxlRmFjdG9yKSk7CisK
KyAgICBmaWx0ZXItPnNldFJlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSk7CisgICAgcmV0dXJu
IGZpbHRlcjsKIH0KIAotQ1NTRmlsdGVyOjpDU1NGaWx0ZXIoZmxvYXQgc2NhbGVGYWN0b3IpCitD
U1NGaWx0ZXI6OkNTU0ZpbHRlcihib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBo
YXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgZmxvYXQgc2Nh
bGVGYWN0b3IpCiAgICAgOiBGaWx0ZXIoRmlsdGVyOjpUeXBlOjpDU1NGaWx0ZXIsIEZsb2F0U2l6
ZSB7IHNjYWxlRmFjdG9yLCBzY2FsZUZhY3RvciB9KQotICAgICwgbV9zb3VyY2VHcmFwaGljKFNv
dXJjZUdyYXBoaWM6OmNyZWF0ZSgqdGhpcykpCisgICAgLCBtX2hhc0ZpbHRlclRoYXRNb3Zlc1Bp
eGVscyhoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMpCisgICAgLCBtX2hhc0ZpbHRlclRoYXRTaG91
bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luKGhhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3Ry
aWN0ZWRCeVNlY3VyaXR5T3JpZ2luKQogewogfQogCi1HcmFwaGljc0NvbnRleHQqIENTU0ZpbHRl
cjo6aW5wdXRDb250ZXh0KCkKK3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCbHVy
RWZmZWN0KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBCbHVyRmlsdGVyT3BlcmF0aW9uJiBibHVy
T3BlcmF0aW9uLCBGaWx0ZXJDb25zdW1lciBjb25zdW1lcikKIHsKLSAgICByZXR1cm4gc291cmNl
SW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5jb250ZXh0KCkgOiBudWxscHRyOworICAgIGZsb2F0
IHN0ZERldmlhdGlvbiA9IGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ck9wZXJhdGlvbi5zdGREZXZp
YXRpb24oKSwgMCk7CisgICAgcmV0dXJuIEZFR2F1c3NpYW5CbHVyOjpjcmVhdGUoZmlsdGVyLCBz
dGREZXZpYXRpb24sIHN0ZERldmlhdGlvbiwgY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZp
bHRlclByb3BlcnR5ID8gRURHRU1PREVfTk9ORSA6IEVER0VNT0RFX0RVUExJQ0FURSk7Cit9CisK
K3N0YXRpYyBSZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVCcmlnaHRuZXNzRWZmZWN0KENTU0Zp
bHRlciYgZmlsdGVyLCBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
JiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVD
T01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLnNsb3Bl
ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91
bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5pbnRlcmNlcHQgPSAwOworCisgICAgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29tcG9uZW50
VHJhbnNmZXI6OmNyZWF0ZShmaWx0ZXIsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rp
b24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBSZWZQdHI8
RmlsdGVyRWZmZWN0PiBjcmVhdGVDb250cmFzdEVmZmVjdChDU1NGaWx0ZXImIGZpbHRlciwgY29u
c3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNm
ZXJPcGVyYXRpb24pCit7CisgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1
bmN0aW9uOworICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJf
VFlQRV9MSU5FQVI7CisgICAgZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChj
b21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlv
bi5zbG9wZSA9IGFtb3VudDsKKyAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUg
KiBhbW91bnQgKyAwLjU7CisKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKKyAgICByZXR1cm4gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRlKGZpbHRlciwgdHJh
bnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgbnVsbEZ1
bmN0aW9uKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZURyb3BTaGFk
b3dFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRp
b24mIGRyb3BTaGFkb3dPcGVyYXRpb24pCit7CisgICAgZmxvYXQgc3RkID0gZHJvcFNoYWRvd09w
ZXJhdGlvbi5zdGREZXZpYXRpb24oKTsKKyAgICByZXR1cm4gRkVEcm9wU2hhZG93OjpjcmVhdGUo
ZmlsdGVyLCBzdGQsIHN0ZCwgZHJvcFNoYWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVy
YXRpb24ueSgpLCBkcm9wU2hhZG93T3BlcmF0aW9uLmNvbG9yKCksIDEpOworfQorCitzdGF0aWMg
UmVmUHRyPEZpbHRlckVmZmVjdD4gY3JlYXRlR3JheVNjYWxlRWZmZWN0KENTU0ZpbHRlciYgZmls
dGVyLCBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9w
ZXJhdGlvbikKK3sKKyAgICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xv
ck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0dHBz
Oi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI2dy
YXlzY2FsZUVxdWl2YWxlbnQKKyAgICAvLyBmb3IgaW5mb3JtYXRpb24gb24gcGFyYW1ldGVycy4K
KworICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKKyAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAg
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC43MTUyIC0gMC43MTUyICogb25lTWludXNBbW91bnQp
LAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMDcyMiAtIDAuMDcyMiAqIG9uZU1p
bnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKworICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMjEyNiAtIDAuMjEyNiAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAg
bmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCks
CisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4wNzIyIC0gMC4wNzIyICogb25lTWlu
dXNBbW91bnQpLAorICAgICAgICAwLAorICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4yMTI2IC0gMC4yMTI2ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNzE1MiAtIDAuNzE1MiAqIG9uZU1pbnVzQW1vdW50KSwK
KyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVNaW51
c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAgIDAsCisKKyAgICAgICAgMCwKKyAgICAgICAg
MCwKKyAgICAgICAgMCwKKyAgICAgICAgMSwKKyAgICAgICAgMCwKKyAgICB9OworCisgICAgcmV0
dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEZFQ09MT1JNQVRSSVhfVFlQRV9NQVRS
SVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7Cit9CisKK3N0YXRpYyBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBjcmVhdGVIdWVSb3RhdGVFZmZlY3QoQ1NTRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mIGNvbG9yTWF0cml4T3BlcmF0aW9uKQorewor
ICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9h
dChjb2xvck1hdHJpeE9wZXJhdGlvbi5hbW91bnQoKSkgfTsKKyAgICByZXR1cm4gRkVDb2xvck1h
dHJpeDo6Y3JlYXRlKGZpbHRlciwgRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSwgV1RGTW92
ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNy
ZWF0ZUludmVydEVmZmVjdChDU1NGaWx0ZXImIGZpbHRlciwgY29uc3QgQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbiYgY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24pCit7Cisg
ICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uOworICAgIHRyYW5z
ZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7CisgICAg
ZmxvYXQgYW1vdW50ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb21wb25lbnRUcmFuc2Zlck9w
ZXJhdGlvbi5hbW91bnQoKSk7CisgICAgdHJhbnNmZXJGdW5jdGlvbi5zbG9wZSA9IDEgLSAyICog
YW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0gYW1vdW50OworCisgICAg
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rpb247CisgICAgcmV0dXJuIEZFQ29t
cG9uZW50VHJhbnNmZXI6OmNyZWF0ZShmaWx0ZXIsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVy
RnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIG51bGxGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiBjcmVhdGVPcGFjaXR5RWZmZWN0KENTU0ZpbHRlciYgZmlsdGVy
LCBjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJiBjb21wb25lbnRU
cmFuc2Zlck9wZXJhdGlvbikKK3sKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5z
ZmVyRnVuY3Rpb247CisgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0gRkVDT01QT05FTlRUUkFO
U0ZFUl9UWVBFX0xJTkVBUjsKKyAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKKyAgICB0cmFuc2ZlckZ1
bmN0aW9uLnNsb3BlID0gYW1vdW50OworICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0g
MDsKKworICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1bmN0aW9uOworICAgIHJl
dHVybiBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoZmlsdGVyLCBudWxsRnVuY3Rpb24sIG51
bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uKTsKK30KKworc3RhdGlj
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KENTU0ZpbHRlciYgZmls
dGVyLCBjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9w
ZXJhdGlvbikKK3sKKyAgICBWZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7IG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQoY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCkpIH07CisgICAgcmV0
dXJuIEZFQ29sb3JNYXRyaXg6OmNyZWF0ZShmaWx0ZXIsIEZFQ09MT1JNQVRSSVhfVFlQRV9TQVRV
UkFURSwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKK30KKworc3RhdGljIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGNyZWF0ZVNlcGlhRWZmZWN0KENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJiBjb2xvck1hdHJpeE9wZXJhdGlvbikKK3sKKyAg
ICBkb3VibGUgb25lTWludXNBbW91bnQgPSBjbGFtcFRvKDEgLSBjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKSwgMC4wLCAxLjApOworCisgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcv
aGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI3NlcGlhRXF1aXZhbGVudAor
ICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgorCisgICAgVmVjdG9yPGZsb2F0
PiBpbnB1dFBhcmFtZXRlcnMgeworICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkz
ICsgMC42MDcgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQoMC43NjkgLSAwLjc2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lz
aW9uVG9GbG9hdCgwLjE4OSAtIDAuMTg5ICogb25lTWludXNBbW91bnQpLAorICAgICAgICAwLAor
ICAgICAgICAwLAorCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4zNDkgLSAwLjM0
OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4
NiArIDAuMzE0ICogb25lTWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KDAuMTY4IC0gMC4xNjggKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIDAsCisgICAgICAg
IDAsCisKKyAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjI3MiAtIDAuMjcyICogb25l
TWludXNBbW91bnQpLAorICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuNTM0IC0gMC41
MzQgKiBvbmVNaW51c0Ftb3VudCksCisgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4x
MzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKwor
ICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAw
LAorICAgIH07CisKKyAgICByZXR1cm4gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKGZpbHRlciwgRkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWCwgV1RGTW92ZShpbnB1dFBhcmFtZXRlcnMpKTsKIH0KIAot
UmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5k
ZXJFbGVtZW50JiByZW5kZXJlciwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJl
bmNlRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXJPcGVyYXRpb24pCitzdGF0aWMgUmVmUHRyPFNWR0Zp
bHRlcj4gY3JlYXRlU1ZHRmlsdGVyKENTU0ZpbHRlciYgZmlsdGVyLCBjb25zdCBSZWZlcmVuY2VG
aWx0ZXJPcGVyYXRpb24mIGZpbHRlck9wZXJhdGlvbiwgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpCiB7Ci0gICAgYXV0byogZmlsdGVyRWxlbWVu
dCA9IHJlbmRlcmVyLmVuc3VyZVJlZmVyZW5jZWRTVkdSZXNvdXJjZXMoKS5yZWZlcmVuY2VkRmls
dGVyRWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpLCBmaWx0ZXJPcGVyYXRpb24pOworICAgIGF1
dG8mIHJlZmVyZW5jZWRTVkdSZXNvdXJjZXMgPSByZW5kZXJlci5lbnN1cmVSZWZlcmVuY2VkU1ZH
UmVzb3VyY2VzKCk7CisgICAgYXV0byogZmlsdGVyRWxlbWVudCA9IHJlZmVyZW5jZWRTVkdSZXNv
dXJjZXMucmVmZXJlbmNlZEZpbHRlckVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSwgZmlsdGVy
T3BlcmF0aW9uKTsKKwogICAgIGlmICghZmlsdGVyRWxlbWVudCkgewotICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJDU1NGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgYnVp
bGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxlZCB0byBmaW5kIGZpbHRlciByZW5kZXJlciwgYWRkaW5n
IHBlbmRpbmcgcmVzb3VyY2UgIiA8PCBmaWx0ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSk7CisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIiBidWlsZFJlZmVyZW5jZUZp
bHRlcjogZmFpbGVkIHRvIGZpbmQgZmlsdGVyIHJlbmRlcmVyLCBhZGRpbmcgcGVuZGluZyByZXNv
dXJjZSAiIDw8IGZpbHRlck9wZXJhdGlvbi5mcmFnbWVudCgpKTsKICAgICAgICAgLy8gQWx0aG91
Z2ggd2UgZGlkIG5vdCBmaW5kIHRoZSByZWZlcmVuY2VkIGZpbHRlciwgaXQgbWlnaHQgZXhpc3Qg
bGF0ZXIgaW4gdGhlIGRvY3VtZW50LgogICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBhbm9u
eW1vdXMgUmVuZGVyT2JqZWN0cy4gPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEzMTA4NT4KICAgICAg
ICAgLy8gRklYTUU6IFVuY2xlYXIgaWYgdGhpcyBkb2VzIGFueXRoaW5nLgotICAgICAgICBpZiAo
YXV0byogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJlbmRlcmVy
LmRvY3VtZW50KCkuYWNjZXNzU1ZHRXh0ZW5zaW9ucygpLmFkZFBlbmRpbmdSZXNvdXJjZShmaWx0
ZXJPcGVyYXRpb24uZnJhZ21lbnQoKSwgKmVsZW1lbnQpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKLSAgICBhdXRvIGJ1aWxkZXIgPSBtYWtlVW5pcXVlPFNWR0ZpbHRlckJ1aWxk
ZXI+KCZwcmV2aW91c0VmZmVjdCk7Ci0KLSAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Q7
Ci0gICAgVmVjdG9yPFJlZjxGaWx0ZXJFZmZlY3Q+PiByZWZlcmVuY2VFZmZlY3RzOwotCi0gICAg
Zm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigqZmlsdGVyRWxlbWVudCkpIHsKLSAgICAgICAgZWZmZWN0
ID0gZWZmZWN0RWxlbWVudC5idWlsZChidWlsZGVyLmdldCgpLCAqdGhpcyk7Ci0gICAgICAgIGlm
ICghZWZmZWN0KSB7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFt
IDw8ICJDU1NGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgYnVpbGRSZWZlcmVuY2VGaWx0ZXI6IGZhaWxl
ZCB0byBidWlsZCBlZmZlY3QgZnJvbSAiIDw8IGVmZmVjdEVsZW1lbnQpOwotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0
YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVu
dC5yZW5kZXJlcigpKSB7Ci0jaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVB
Ul9TUkdCKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVj
dEVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlv
bkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6TGluZWFyU1JHQigpIDogRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkp
OwotI2Vsc2UKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICBi
dWlsZGVyLT5hZGQoZWZmZWN0RWxlbWVudC5yZXN1bHQoKSwgZWZmZWN0KTsKLSAgICAgICAgcmVm
ZXJlbmNlRWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgfQotICAgIAotICAgIG1fZWZmZWN0
cy5hcHBlbmRWZWN0b3IoV1RGTW92ZShyZWZlcmVuY2VFZmZlY3RzKSk7Ci0gICAgcmV0dXJuIGVm
ZmVjdDsKKyAgICBTVkdGaWx0ZXJCdWlsZGVyIGJ1aWxkZXI7CisgICAgcmV0dXJuIFNWR0ZpbHRl
cjo6Y3JlYXRlKCpmaWx0ZXJFbGVtZW50LCBidWlsZGVyLCBmaWx0ZXIuZmlsdGVyU2NhbGUoKSwg
ZmlsdGVyLnNvdXJjZUltYWdlUmVjdCgpLCBmaWx0ZXIuZmlsdGVyUmVnaW9uKCksIHByZXZpb3Vz
RWZmZWN0KTsKIH0KIAotYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb25zLCBGaWx0ZXJDb25zdW1lciBj
b25zdW1lcikKK3N0YXRpYyB2b2lkIHNldHVwTGFzdEVmZmVjdFByb3BlcnRpZXMoRmlsdGVyRWZm
ZWN0JiBlZmZlY3QsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQogewotICAgIG1faGFzRmlsdGVy
VGhhdE1vdmVzUGl4ZWxzID0gb3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKTsK
LSAgICBtX2hhc0ZpbHRlclRoYXRTaG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luID0g
b3BlcmF0aW9ucy5oYXNGaWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdp
bigpOworICAgIC8vIFVubGlrZSBTVkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1hZ2VzLCBmaWx0
ZXIgZnVuY3Rpb25zIG9uIHRoZSBmaWx0ZXIKKyAgICAvLyBwcm9wZXJ0eSBhcHBsaWVkIGhlcmUg
c2hvdWxkIG5vdCBjbGlwIHRvIHRoZWlyIHByaW1pdGl2ZSBzdWJyZWdpb25zLgorICAgIGVmZmVj
dC5zZXRDbGlwc1RvQm91bmRzKGNvbnN1bWVyID09IEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJGdW5j
dGlvbik7CisgICAgZWZmZWN0LnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCKCkpOworfQogCi0gICAgbV9lZmZlY3RzLmNsZWFyKCk7Citib29sIENTU0Zp
bHRlcjo6YnVpbGRGaWx0ZXJGdW5jdGlvbnMoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIG9wZXJhdGlvbnMsIEZpbHRlckNvbnN1bWVyIGNvbnN1bWVyKQor
eworICAgIG1fZnVuY3Rpb25zLmNsZWFyKCk7CiAgICAgbV9vdXRzZXRzID0geyB9OwogCi0gICAg
UmVmUHRyPEZpbHRlckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBtX3NvdXJjZUdyYXBoaWMucHRy
KCk7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gcHJldmlvdXNFZmZlY3QgPSBTb3VyY2VHcmFw
aGljOjpjcmVhdGUoKnRoaXMpOworICAgIG1fZnVuY3Rpb25zLmFwcGVuZCh7ICpwcmV2aW91c0Vm
ZmVjdCB9KTsKKworICAgIFJlZlB0cjxTVkdGaWx0ZXI+IGZpbHRlcjsKKyAgICAKICAgICBmb3Ig
KGF1dG8mIG9wZXJhdGlvbiA6IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7CiAgICAgICAgIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdDsKLSAgICAgICAgYXV0byYgZmlsdGVyT3BlcmF0aW9u
ID0gKm9wZXJhdGlvbjsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpKSB7
Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0U6IHsKLSAgICAgICAgICAg
IGF1dG8mIHJlZmVyZW5jZU9wZXJhdGlvbiA9IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJh
dGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdCA9IGJ1aWxkUmVmZXJl
bmNlRmlsdGVyKHJlbmRlcmVyLCAqcHJldmlvdXNFZmZlY3QsIHJlZmVyZW5jZU9wZXJhdGlvbik7
CisKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb24tPnR5cGUoKSkgeworICAgICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBp
biAtYXBwbGUtY29sb3ItZmlsdGVyLgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRTogewotICAgICAgICAgICAgYXV0
byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVy
T3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVz
QW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRyaXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwg
MS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9y
YXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1sI2dyYXlzY2FsZUVxdWl2YWxlbnQKLSAgICAg
ICAgICAgIC8vIGZvciBpbmZvcm1hdGlvbiBvbiBwYXJhbWV0ZXJzLgotCi0gICAgICAgICAgICBW
ZWN0b3I8ZmxvYXQ+IGlucHV0UGFyYW1ldGVycyB7Ci0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjIxMjYgKyAwLjc4NzQgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcxNTIgLSAwLjcxNTIgKiBvbmVNaW51
c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIg
LSAwLjA3MjIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAg
ICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIx
MjYgLSAwLjIxMjYgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjcxNTIgKyAwLjI4NDggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjA3MjIgLSAwLjA3MjIgKiBvbmVNaW51
c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAg
ICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjIxMjYgLSAwLjIxMjYgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjcx
NTIgLSAwLjcxNTIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJl
Y2lzaW9uVG9GbG9hdCgwLjA3MjIgKyAwLjkyNzggKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAg
ICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAwLAotCi0gICAgICAgICAgICAgICAgMCwKLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMSwK
LSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgZWZmZWN0
ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
LCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpCTFVSOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlQmx1ckVmZmVjdCgqdGhpcywg
ZG93bmNhc3Q8Qmx1ckZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIGNvbnN1bWVyKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpTRVBJQTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3du
Y2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwot
ICAgICAgICAgICAgZG91YmxlIG9uZU1pbnVzQW1vdW50ID0gY2xhbXBUbygxIC0gY29sb3JNYXRy
aXhPcGVyYXRpb24uYW1vdW50KCksIDAuMCwgMS4wKTsKLQotICAgICAgICAgICAgLy8gU2VlIGh0
dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXctZmlsZS90aXAvZmlsdGVycy9pbmRleC5odG1s
I3NlcGlhRXF1aXZhbGVudAotICAgICAgICAgICAgLy8gZm9yIGluZm9ybWF0aW9uIG9uIHBhcmFt
ZXRlcnMuCi0KLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5wdXRQYXJhbWV0ZXJzIHsKLSAg
ICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMzkzICsgMC42MDcgKiBvbmVN
aW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjc2
OSAtIDAuNzY5ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNp
c2lvblRvRmxvYXQoMC4xODkgLSAwLjE4OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAg
ICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KDAuMzQ5IC0gMC4zNDkgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAg
ICAgICAgbmFycm93UHJlY2lzaW9uVG9GbG9hdCgwLjY4NiArIDAuMzE0ICogb25lTWludXNBbW91
bnQpLAotICAgICAgICAgICAgICAgIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xNjggLSAwLjE2
OCAqIG9uZU1pbnVzQW1vdW50KSwKLSAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAg
IDAsCi0KLSAgICAgICAgICAgICAgICBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KDAuMjcyIC0gMC4y
NzIgKiBvbmVNaW51c0Ftb3VudCksCi0gICAgICAgICAgICAgICAgbmFycm93UHJlY2lzaW9uVG9G
bG9hdCgwLjUzNCAtIDAuNTM0ICogb25lTWludXNBbW91bnQpLAotICAgICAgICAgICAgICAgIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoMC4xMzEgKyAwLjg2OSAqIG9uZU1pbnVzQW1vdW50KSwKLSAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgIDAsCi0KLSAgICAgICAgICAgICAgICAw
LAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAxLAotICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBl
ZmZlY3QgPSBGRUNvbG9yTWF0cml4OjpjcmVhdGUoKnRoaXMsIEZFQ09MT1JNQVRSSVhfVFlQRV9N
QVRSSVgsIFdURk1vdmUoaW5wdXRQYXJhbWV0ZXJzKSk7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVCcmlnaHRu
ZXNzRWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKLSAgICAgICAgICAgIGF1dG8m
IGNvbG9yTWF0cml4T3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9w
ZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gaW5w
dXRQYXJhbWV0ZXJzIHsgbmFycm93UHJlY2lzaW9uVG9GbG9hdChjb2xvck1hdHJpeE9wZXJhdGlv
bi5hbW91bnQoKSkgfTsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29sb3JNYXRyaXg6OmNyZWF0
ZSgqdGhpcywgRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1l
dGVycykpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICAg
ICAgICAgIGVmZmVjdCA9IGNyZWF0ZUNvbnRyYXN0RWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVF
X1JPVEFURTogewotICAgICAgICAgICAgYXV0byYgY29sb3JNYXRyaXhPcGVyYXRpb24gPSBkb3du
Y2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwot
ICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBpbnB1dFBhcmFtZXRlcnMgeyBuYXJyb3dQcmVjaXNp
b25Ub0Zsb2F0KGNvbG9yTWF0cml4T3BlcmF0aW9uLmFtb3VudCgpKSB9OwotICAgICAgICAgICAg
ZWZmZWN0ID0gRkVDb2xvck1hdHJpeDo6Y3JlYXRlKCp0aGlzLCBGRUNPTE9STUFUUklYX1RZUEVf
SFVFUk9UQVRFLCBXVEZNb3ZlKGlucHV0UGFyYW1ldGVycykpOworCisgICAgICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZURy
b3BTaGFkb3dFZmZlY3QoKnRoaXMsIGRvd25jYXN0PERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24+
KCpvcGVyYXRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVu
dFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRl
ck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rp
b24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBm
bG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSAx
IC0gMiAqIGFtb3VudDsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0ID0g
YW1vdW50OwotCi0gICAgICAgICAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIG51bGxGdW5j
dGlvbjsKLSAgICAgICAgICAgIGVmZmVjdCA9IEZFQ29tcG9uZW50VHJhbnNmZXI6OmNyZWF0ZSgq
dGhpcywgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlvbiwgdHJhbnNmZXJGdW5jdGlv
biwgbnVsbEZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVND
QUxFOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlR3JheVNjYWxlRWZmZWN0KCp0aGlzLCBk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QVBQTEVfSU5WRVJUX0xJR0hUTkVTUzoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyBBUFBMRV9JTlZFUlRfTElHSFRORVNTIGlzIG9ubHkgdXNlZCBpbiAtYXBwbGUtY29s
b3ItZmlsdGVyLgorCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgor
ICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSHVlUm90YXRlRWZmZWN0KCp0aGlzLCBkb3duY2Fz
dDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKLSAg
ICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gZG93bmNhc3Q8QmFz
aWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmlsdGVyT3BlcmF0aW9uKTsKLSAg
ICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJhbnNmZXJGdW5jdGlvbjsKLSAg
ICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQ
RV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRy
YW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAgICAgICB0cmFuc2ZlckZ1bmN0
aW9uLmludGVyY2VwdCA9IDA7Ci0KLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gbnVsbEZ1bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zl
cjo6Y3JlYXRlKCp0aGlzLCBudWxsRnVuY3Rpb24sIG51bGxGdW5jdGlvbiwgbnVsbEZ1bmN0aW9u
LCB0cmFuc2ZlckZ1bmN0aW9uKTsKKworICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5W
RVJUOgorICAgICAgICAgICAgZWZmZWN0ID0gY3JlYXRlSW52ZXJ0RWZmZWN0KCp0aGlzLCBkb3du
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QlJJR0hUTkVTUzogewotICAgICAgICAgICAgYXV0byYgY29tcG9uZW50VHJhbnNmZXJP
cGVyYXRpb24gPSBkb3duY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
PihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
biB0cmFuc2ZlckZ1bmN0aW9uOwotICAgICAgICAgICAgdHJhbnNmZXJGdW5jdGlvbi50eXBlID0g
RkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVu
Y3Rpb24uc2xvcGUgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3Bl
cmF0aW9uLmFtb3VudCgpKTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0
ID0gMDsKLQotICAgICAgICAgICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBudWxsRnVuY3Rp
b247Ci0gICAgICAgICAgICBlZmZlY3QgPSBGRUNvbXBvbmVudFRyYW5zZmVyOjpjcmVhdGUoKnRo
aXMsIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24sIHRyYW5zZmVyRnVuY3Rpb24s
IG51bGxGdW5jdGlvbik7CisKKyAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6
CisgICAgICAgICAgICBlZmZlY3QgPSBjcmVhdGVPcGFjaXR5RWZmZWN0KCp0aGlzLCBkb3duY2Fz
dDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6Q09OVFJBU1Q6IHsKLSAgICAgICAgICAgIGF1dG8mIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uID0gZG93bmNhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbj4oZmls
dGVyT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gdHJh
bnNmZXJGdW5jdGlvbjsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24udHlwZSA9IEZFQ09N
UE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVI7Ci0gICAgICAgICAgICBmbG9hdCBhbW91bnQgPSBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLmFtb3VudCgp
KTsKLSAgICAgICAgICAgIHRyYW5zZmVyRnVuY3Rpb24uc2xvcGUgPSBhbW91bnQ7Ci0gICAgICAg
ICAgICB0cmFuc2ZlckZ1bmN0aW9uLmludGVyY2VwdCA9IC0wLjUgKiBhbW91bnQgKyAwLjU7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbnVsbEZ1
bmN0aW9uOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVDb21wb25lbnRUcmFuc2Zlcjo6Y3JlYXRl
KCp0aGlzLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0aW9uLCB0cmFuc2ZlckZ1bmN0
aW9uLCBudWxsRnVuY3Rpb24pOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRV
UkFURToKKyAgICAgICAgICAgIGVmZmVjdCA9IGNyZWF0ZVNhdHVyYXRlRWZmZWN0KCp0aGlzLCBk
b3duY2FzdDxCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QkxVUjogewotICAgICAgICAgICAgYXV0byYgYmx1ck9wZXJhdGlvbiA9IGRvd25jYXN0PEJs
dXJGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmbG9hdCBz
dGREZXZpYXRpb24gPSBmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXJPcGVyYXRpb24uc3RkRGV2aWF0
aW9uKCksIDApOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVHYXVzc2lhbkJsdXI6OmNyZWF0ZSgq
dGhpcywgc3RkRGV2aWF0aW9uLCBzdGREZXZpYXRpb24sIGNvbnN1bWVyID09IEZpbHRlckNvbnN1
bWVyOjpGaWx0ZXJQcm9wZXJ0eSA/IEVER0VNT0RFX05PTkUgOiBFREdFTU9ERV9EVVBMSUNBVEUp
OworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICAgICAgICAgIGVm
ZmVjdCA9IGNyZWF0ZVNlcGlhRWZmZWN0KCp0aGlzLCBkb3duY2FzdDxCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uPigqb3BlcmF0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAg
ICAgICAgIGF1dG8mIGRyb3BTaGFkb3dPcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uPihmaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZWZmZWN0ID0gRkVE
cm9wU2hhZG93OjpjcmVhdGUoKnRoaXMsIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9u
KCksIGRyb3BTaGFkb3dPcGVyYXRpb24uc3RkRGV2aWF0aW9uKCksCi0gICAgICAgICAgICAgICAg
ZHJvcFNoYWRvd09wZXJhdGlvbi54KCksIGRyb3BTaGFkb3dPcGVyYXRpb24ueSgpLCBkcm9wU2hh
ZG93T3BlcmF0aW9uLmNvbG9yKCksIDEpOworCisgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpSRUZFUkVOQ0U6CisgICAgICAgICAgICBmaWx0ZXIgPSBjcmVhdGVTVkdGaWx0ZXIoKnRoaXMs
IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4oKm9wZXJhdGlvbiksIHJlbmRlcmVy
LCAqcHJldmlvdXNFZmZlY3QpOworICAgICAgICAgICAgZWZmZWN0ID0gbnVsbHB0cjsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGZpbHRlcikgeworICAgICAgICAgICAg
ZWZmZWN0ID0gZmlsdGVyLT5sYXN0RWZmZWN0KCk7CisgICAgICAgICAgICBzZXR1cExhc3RFZmZl
Y3RQcm9wZXJ0aWVzKCplZmZlY3QsIGNvbnN1bWVyKTsKKyAgICAgICAgICAgIG1fZnVuY3Rpb25z
LmFwcGVuZChmaWx0ZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBwcmV2aW91c0Vm
ZmVjdCA9IFdURk1vdmUoZWZmZWN0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKICAgICAgICAgaWYgKGVmZmVjdCkgewotICAgICAgICAgICAgLy8gVW5saWtlIFNWRyBGaWx0
ZXJzIGFuZCBDU1NGaWx0ZXJJbWFnZXMsIGZpbHRlciBmdW5jdGlvbnMgb24gdGhlIGZpbHRlcgot
ICAgICAgICAgICAgLy8gcHJvcGVydHkgYXBwbGllZCBoZXJlIHNob3VsZCBub3QgY2xpcCB0byB0
aGVpciBwcmltaXRpdmUgc3VicmVnaW9ucy4KLSAgICAgICAgICAgIGVmZmVjdC0+c2V0Q2xpcHNU
b0JvdW5kcyhjb25zdW1lciA9PSBGaWx0ZXJDb25zdW1lcjo6RmlsdGVyRnVuY3Rpb24pOwotICAg
ICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpbHRlck9wZXJh
dGlvbi50eXBlKCkgIT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAg
ICAgICBlZmZlY3QtPmlucHV0RWZmZWN0cygpID0geyBXVEZNb3ZlKHByZXZpb3VzRWZmZWN0KSB9
OwotICAgICAgICAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBzZXR1cExhc3RFZmZlY3RQcm9wZXJ0aWVzKCplZmZlY3QsIGNvbnN1
bWVyKTsKKyAgICAgICAgICAgIGVmZmVjdC0+aW5wdXRFZmZlY3RzKCkgPSB7IFdURk1vdmUocHJl
dmlvdXNFZmZlY3QpIH07CisgICAgICAgICAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoeyAqZWZmZWN0
IH0pOwogICAgICAgICAgICAgcHJldmlvdXNFZmZlY3QgPSBXVEZNb3ZlKGVmZmVjdCk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgbWFrZSBhbnkgZWZmZWN0cywgdGVs
bCBvdXIgY2FsbGVyIHdlIGFyZSBub3QgdmFsaWQuCi0gICAgaWYgKG1fZWZmZWN0cy5pc0VtcHR5
KCkpCisgICAgaWYgKG1fZnVuY3Rpb25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgbV9lZmZlY3RzLnNocmlua1RvRml0KCk7CisgICAgbV9mdW5jdGlvbnMuc2hyaW5r
VG9GaXQoKTsKIAotICAgIHNldE1heEVmZmVjdFJlY3RzKHNvdXJjZUltYWdlUmVjdCgpKTsKICNp
ZiBVU0UoQ09SRV9JTUFHRSkKICAgICBpZiAoIW1fZmlsdGVyUmVuZGVyZXIpCi0gICAgICAgIG1f
ZmlsdGVyUmVuZGVyZXIgPSBGaWx0ZXJFZmZlY3RSZW5kZXJlcjo6dHJ5Q3JlYXRlKHJlbmRlcmVy
LnNldHRpbmdzKCkuY29yZUltYWdlQWNjZWxlcmF0ZWRGaWx0ZXJSZW5kZXJFbmFibGVkKCksIG1f
ZWZmZWN0cy5sYXN0KCkuZ2V0KCkpOworICAgICAgICBtX2ZpbHRlclJlbmRlcmVyID0gRmlsdGVy
RWZmZWN0UmVuZGVyZXI6OnRyeUNyZWF0ZShyZW5kZXJlci5zZXR0aW5ncygpLmNvcmVJbWFnZUFj
Y2VsZXJhdGVkRmlsdGVyUmVuZGVyRW5hYmxlZCgpLCAqbGFzdEVmZmVjdCgpKTsKICNlbmRpZgog
ICAgIHJldHVybiB0cnVlOwogfQogCitHcmFwaGljc0NvbnRleHQqIENTU0ZpbHRlcjo6aW5wdXRD
b250ZXh0KCkKK3sKKyAgICByZXR1cm4gc291cmNlSW1hZ2UoKSA/ICZzb3VyY2VJbWFnZSgpLT5j
b250ZXh0KCkgOiBudWxscHRyOworfQorCiBib29sIENTU0ZpbHRlcjo6dXBkYXRlQmFja2luZ1N0
b3JlUmVjdChjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlY3QpCiB7CiAgICAgaWYgKGZpbHRlclJl
Y3QuaXNFbXB0eSgpIHx8IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhmaWx0ZXJSZWN0
LnNpemUoKSkpCkBAIC0zMzcsNDIgKzM2Myw1NiBAQCB2b2lkIENTU0ZpbHRlcjo6YWxsb2NhdGVC
YWNraW5nU3RvcmVJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIHRhcmdldENvbnRleAog
ICAgICAgICBSZW5kZXJpbmdNb2RlIG1vZGUgPSBtX2ZpbHRlclJlbmRlcmVyID8gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQgOiByZW5kZXJpbmdNb2RlKCk7CiAgICAgICAgIHNldFNvdXJjZUlt
YWdlKEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIG1vZGUsIDEsIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6U1JHQigpLCBQaXhlbEZvcm1hdDo6QkdSQTgpKTsKICNlbmRpZgorICAgICAg
ICBpZiAoYXV0byBjb250ZXh0ID0gaW5wdXRDb250ZXh0KCkpCisgICAgICAgICAgICBjb250ZXh0
LT5zY2FsZShmaWx0ZXJTY2FsZSgpKTsKICAgICB9CisKICAgICBtX2dyYXBoaWNzQnVmZmVyQXR0
YWNoZWQgPSB0cnVlOwogfQogCitSZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NGaWx0ZXI6Omxhc3RF
ZmZlY3QoKQoreworICAgIGlmIChtX2Z1bmN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgYXV0byYgZnVuY3Rpb24gPSBtX2Z1bmN0aW9ucy5sYXN0KCk7Cisg
ICAgaWYgKGZ1bmN0aW9uLT5pc1NWR0ZpbHRlcigpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8
U1ZHRmlsdGVyPihmdW5jdGlvbi5wdHIoKSktPmxhc3RFZmZlY3QoKTsKKworICAgIHJldHVybiBk
b3duY2FzdDxGaWx0ZXJFZmZlY3Q+KGZ1bmN0aW9uLnB0cigpKTsKK30KKwogdm9pZCBDU1NGaWx0
ZXI6OmRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpCiB7Ci0gICAgYXV0byYgbGFz
dEVmZmVjdCA9IG1fZWZmZWN0cy5sYXN0KCkuZ2V0KCk7Ci0gICAgbGFzdEVmZmVjdC5kZXRlcm1p
bmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKLSAgICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0g
bGFzdEVmZmVjdC5tYXhFZmZlY3RSZWN0KCk7CisgICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0
KCk7CisgICAgZWZmZWN0LT5kZXRlcm1pbmVGaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKTsKKyAg
ICBGbG9hdFJlY3Qgc3ViUmVnaW9uID0gZWZmZWN0LT5tYXhFZmZlY3RSZWN0KCk7CiAgICAgLy8g
QXQgbGVhc3Qgb25lIEZpbHRlckVmZmVjdCBoYXMgYSB0b28gYmlnIGltYWdlIHNpemUsIHJlY2Fs
Y3VsYXRlIHRoZSBlZmZlY3Qgc2l6ZXMgd2l0aCBuZXcgc2NhbGUgZmFjdG9ycy4KICAgICBGbG9h
dFNpemUgZmlsdGVyU2NhbGUgeyAxLCAxIH07CiAgICAgaWYgKEltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyhzdWJSZWdpb24uc2l6ZSgpLCBmaWx0ZXJTY2FsZSkpIHsKICAgICAgICAgc2V0
RmlsdGVyU2NhbGUoZmlsdGVyU2NhbGUpOwotICAgICAgICBsYXN0RWZmZWN0LmRldGVybWluZUZp
bHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOworICAgICAgICBlZmZlY3QtPmRldGVybWluZUZpbHRl
clByaW1pdGl2ZVN1YnJlZ2lvbigpOwogICAgIH0KIH0KIAogdm9pZCBDU1NGaWx0ZXI6OmNsZWFy
SW50ZXJtZWRpYXRlUmVzdWx0cygpCiB7Ci0gICAgbV9zb3VyY2VHcmFwaGljLT5jbGVhclJlc3Vs
dCgpOwotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3Qt
PmNsZWFyUmVzdWx0KCk7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbiA6IG1fZnVuY3Rpb25zKQor
ICAgICAgICBmdW5jdGlvbi0+Y2xlYXJSZXN1bHQoKTsKIH0KIAogdm9pZCBDU1NGaWx0ZXI6OmFw
cGx5KCkKIHsKLSAgICBhdXRvJiBlZmZlY3QgPSBtX2VmZmVjdHMubGFzdCgpLmdldCgpOworICAg
IGF1dG8gZWZmZWN0ID0gbGFzdEVmZmVjdCgpOwogICAgIGlmIChtX2ZpbHRlclJlbmRlcmVyKSB7
Ci0gICAgICAgIG1fZmlsdGVyUmVuZGVyZXItPmFwcGx5RWZmZWN0cyhlZmZlY3QpOworICAgICAg
ICBtX2ZpbHRlclJlbmRlcmVyLT5hcHBseUVmZmVjdHMoKmVmZmVjdCk7CiAgICAgICAgIGlmICht
X2ZpbHRlclJlbmRlcmVyLT5oYXNSZXN1bHQoKSkgewotICAgICAgICAgICAgZWZmZWN0LnRyYW5z
Zm9ybVJlc3VsdENvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCkpOworICAg
ICAgICAgICAgZWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29s
b3JTcGFjZTo6U1JHQigpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0K
LSAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFj
ZShEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKSk7CisgICAgZWZmZWN0LT5hcHBseSgpOwor
ICAgIGVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7CiB9CiAKIExheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1h
Z2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGRpcnR5UmVjdCkKQEAgLTM4NSwzNSArNDI1LDM5IEBAIExheW91dFJlY3Qg
Q1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91
dFJlY3QmIGZpbHRlCiAgICAgcmV0dXJuIHJlY3RGb3JSZXBhaW50OwogfQogCi1JbWFnZUJ1ZmZl
ciogQ1NTRmlsdGVyOjpvdXRwdXQoKSBjb25zdAorSW1hZ2VCdWZmZXIqIENTU0ZpbHRlcjo6b3V0
cHV0KCkKIHsKICAgICBpZiAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5o
YXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG1fZmlsdGVyUmVuZGVyZXItPm91dHB1dCgpOwog
ICAgIAotICAgIHJldHVybiBtX2VmZmVjdHMubGFzdCgpLT5pbWFnZUJ1ZmZlclJlc3VsdCgpOwor
ICAgIHJldHVybiBsYXN0RWZmZWN0KCktPmltYWdlQnVmZmVyUmVzdWx0KCk7CiB9CiAKIHZvaWQg
Q1NTRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFn
ZVJlY3QpCiB7CisgICAgYXV0byBzY2FsZWRTb3VyY2VJbWFnZVJlY3QgPSBzb3VyY2VJbWFnZVJl
Y3Q7CisgICAgc2NhbGVkU291cmNlSW1hZ2VSZWN0LnNjYWxlKGZpbHRlclNjYWxlKCkpOworCiAg
ICAgRmlsdGVyOjpzZXRGaWx0ZXJSZWdpb24oc291cmNlSW1hZ2VSZWN0KTsKLSAgICBGaWx0ZXI6
OnNldFNvdXJjZUltYWdlUmVjdChzb3VyY2VJbWFnZVJlY3QpOwotICAgIHNldE1heEVmZmVjdFJl
Y3RzKHNvdXJjZUltYWdlUmVjdCk7CisgICAgRmlsdGVyOjpzZXRTb3VyY2VJbWFnZVJlY3Qoc2Nh
bGVkU291cmNlSW1hZ2VSZWN0KTsKKworICAgIGZvciAoYXV0byYgZnVuY3Rpb24gOiBtX2Z1bmN0
aW9ucykgeworICAgICAgICBpZiAoZnVuY3Rpb24tPmlzU1ZHRmlsdGVyKCkpIHsKKyAgICAgICAg
ICAgIGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVuY3Rpb24ucHRyKCkpLT5zZXRGaWx0ZXJSZWdpb24o
c291cmNlSW1hZ2VSZWN0KTsKKyAgICAgICAgICAgIGRvd25jYXN0PFNWR0ZpbHRlcj4oZnVuY3Rp
b24ucHRyKCkpLT5zZXRTb3VyY2VJbWFnZVJlY3Qoc2NhbGVkU291cmNlSW1hZ2VSZWN0KTsKKyAg
ICAgICAgfQorICAgIH0KKwogICAgIG1fZ3JhcGhpY3NCdWZmZXJBdHRhY2hlZCA9IGZhbHNlOwog
fQogCi12b2lkIENTU0ZpbHRlcjo6c2V0TWF4RWZmZWN0UmVjdHMoY29uc3QgRmxvYXRSZWN0JiBl
ZmZlY3RSZWN0KQorSW50UmVjdCBDU1NGaWx0ZXI6Om91dHB1dFJlY3QoKQogewotICAgIGZvciAo
YXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQotICAgICAgICBlZmZlY3QtPnNldE1heEVmZmVjdFJl
Y3QoZWZmZWN0UmVjdCk7Ci19CisgICAgYXV0byBlZmZlY3QgPSBsYXN0RWZmZWN0KCk7CisKKyAg
ICBpZiAoZWZmZWN0LT5oYXNSZXN1bHQoKSB8fCAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRl
clJlbmRlcmVyLT5oYXNSZXN1bHQoKSkpCisgICAgICAgIHJldHVybiBlZmZlY3QtPnJlcXVlc3Rl
ZFJlZ2lvbk9mSW5wdXRQaXhlbEJ1ZmZlcihJbnRSZWN0IHsgZmlsdGVyUmVnaW9uKCkgfSk7CiAK
LUludFJlY3QgQ1NTRmlsdGVyOjpvdXRwdXRSZWN0KCkgY29uc3QKLXsKLSAgICBhdXRvJiBsYXN0
RWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKLSAgICAKLSAgICBpZiAobGFzdEVmZmVj
dC5oYXNSZXN1bHQoKSB8fCAobV9maWx0ZXJSZW5kZXJlciAmJiBtX2ZpbHRlclJlbmRlcmVyLT5o
YXNSZXN1bHQoKSkpCi0gICAgICAgIHJldHVybiBsYXN0RWZmZWN0LnJlcXVlc3RlZFJlZ2lvbk9m
SW5wdXRQaXhlbEJ1ZmZlcihJbnRSZWN0IHsgZmlsdGVyUmVnaW9uKCkgfSk7Ci0gICAgCiAgICAg
cmV0dXJuIHsgfTsKIH0KIApAQCAtNDI1LDggKzQ2OSw4IEBAIEludE91dHNldHMgQ1NTRmlsdGVy
OjpvdXRzZXRzKCkgY29uc3QKICAgICBpZiAoIW1fb3V0c2V0cy5pc1plcm8oKSkKICAgICAgICAg
cmV0dXJuIG1fb3V0c2V0czsKIAotICAgIGZvciAoYXV0byYgZWZmZWN0IDogbV9lZmZlY3RzKQot
ICAgICAgICBtX291dHNldHMgKz0gZWZmZWN0LT5vdXRzZXRzKCk7CisgICAgZm9yIChhdXRvJiBm
dW5jdGlvbiA6IG1fZnVuY3Rpb25zKQorICAgICAgICBtX291dHNldHMgKz0gZnVuY3Rpb24tPm91
dHNldHMoKTsKICAgICByZXR1cm4gbV9vdXRzZXRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q1NTRmlsdGVyLmgKaW5kZXggNTE5MzQ3MDFkMzZhZTJmYmNhNDNkOGNhNTE5NWNmZGM1MTYwYTJi
My4uZDZkNjE5NzQxNjJkMTM3M2I1ZjZiYzU2YmE2M2IzZjQ3ZDZkMDE4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NTU0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9DU1NGaWx0ZXIuaApAQCAtNDQsNDggKzQ0LDQzIEBAIGVudW0gY2xhc3MgRmls
dGVyQ29uc3VtZXIgeyBGaWx0ZXJQcm9wZXJ0eSwgRmlsdGVyRnVuY3Rpb24gfTsKIAogY2xhc3Mg
Q1NTRmlsdGVyIGZpbmFsIDogcHVibGljIEZpbHRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci0gICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPENTU0ZpbHRlcj4gY3JlYXRlKGZsb2F0IHNjYWxlRmFjdG9yID0gMSk7Ci0K
LSAgICBJbWFnZUJ1ZmZlciogb3V0cHV0KCkgY29uc3Q7CisgICAgc3RhdGljIFJlZlB0cjxDU1NG
aWx0ZXI+IGNyZWF0ZShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiwgUmVuZGVyaW5nTW9kZSwgZmxv
YXQgc2NhbGVGYWN0b3IgPSAxKTsKIAogICAgIHZvaWQgc2V0U291cmNlSW1hZ2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpOwotICAgIGJvb2wgYnVpbGQoUmVuZGVyRWxlbWVudCYsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmLCBGaWx0ZXJDb25zdW1lcik7Ci0gICAgdm9pZCBjbGVhckludGVybWVkaWF0
ZVJlc3VsdHMoKTsKLSAgICB2b2lkIGFwcGx5KCk7CisgICAgYm9vbCBidWlsZEZpbHRlckZ1bmN0
aW9ucyhSZW5kZXJFbGVtZW50JiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIEZpbHRlckNvbnN1
bWVyKTsKKyAgICB2b2lkIGRldGVybWluZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwogCiAg
ICAgYm9vbCBoYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0Zp
bHRlclRoYXRNb3Zlc1BpeGVsczsgfQogICAgIGJvb2wgaGFzRmlsdGVyVGhhdFNob3VsZEJlUmVz
dHJpY3RlZEJ5U2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0ZpbHRlclRoYXRT
aG91bGRCZVJlc3RyaWN0ZWRCeVNlY3VyaXR5T3JpZ2luOyB9CiAKLSAgICB2b2lkIGRldGVybWlu
ZUZpbHRlclByaW1pdGl2ZVN1YnJlZ2lvbigpOwotICAgIEludE91dHNldHMgb3V0c2V0cygpIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIENTU0ZpbHRlcihmbG9hdCBzY2FsZUZhY3Rvcik7Ci0KLSAg
ICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50
JiwgRmlsdGVyRWZmZWN0JiBwcmV2aW91c0VmZmVjdCwgUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9u
Jik7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbGFzdEVmZmVjdCgpOworICAgIEdyYXBoaWNz
Q29udGV4dCogaW5wdXRDb250ZXh0KCk7CisgICAgSW50T3V0c2V0cyBvdXRzZXRzKCkgY29uc3Qg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldE1heEVmZmVjdFJlY3RzKGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIHZvaWQgY2xlYXJJbnRlcm1lZGlhdGVSZXN1bHRzKCk7CisgICAgdm9pZCBhcHBseSgp
OwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBpbnB1dENvbnRleHQoKTsKKyAgICBJbWFnZUJ1ZmZl
ciogb3V0cHV0KCk7CiAKICAgICBib29sIHVwZGF0ZUJhY2tpbmdTdG9yZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiBmaWx0ZXJSZWN0KTsKICAgICB2b2lkIGFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVk
ZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBJbnRSZWN0IG91dHB1dFJlY3QoKSBj
b25zdDsKKyAgICBJbnRSZWN0IG91dHB1dFJlY3QoKTsKIAogICAgIExheW91dFJlY3QgY29tcHV0
ZVNvdXJjZUltYWdlUmVjdEZvckRpcnR5UmVjdChjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hS
ZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpOwogCi0gICAgVmVjdG9yPFJlZjxGaWx0
ZXJFZmZlY3Q+PiBtX2VmZmVjdHM7Ci0gICAgUmVmPFNvdXJjZUdyYXBoaWM+IG1fc291cmNlR3Jh
cGhpYzsKLQotICAgIG11dGFibGUgSW50T3V0c2V0cyBtX291dHNldHM7Citwcml2YXRlOgorICAg
IENTU0ZpbHRlcihib29sIGhhc0ZpbHRlclRoYXRNb3Zlc1BpeGVscywgYm9vbCBoYXNGaWx0ZXJU
aGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiwgZmxvYXQgc2NhbGVGYWN0b3Ip
OwogCiAgICAgYm9vbCBtX2dyYXBoaWNzQnVmZmVyQXR0YWNoZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9oYXNGaWx0ZXJUaGF0TW92ZXNQaXhlbHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNG
aWx0ZXJUaGF0U2hvdWxkQmVSZXN0cmljdGVkQnlTZWN1cml0eU9yaWdpbiB7IGZhbHNlIH07Ci0g
ICAgCisKKyAgICBWZWN0b3I8UmVmPEZpbHRlckZ1bmN0aW9uPj4gbV9mdW5jdGlvbnM7CisKKyAg
ICBtdXRhYmxlIEludE91dHNldHMgbV9vdXRzZXRzOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZp
bHRlckVmZmVjdFJlbmRlcmVyPiBtX2ZpbHRlclJlbmRlcmVyOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZjU3NjIyOGRlZmFiYjZmODQ5NWNmZWFi
NWVkMTNkYmYyYjViMDNmYi4uMDkyNWQ4MjhmOGFhNWE1YjBjYjRmMmQyNzg2OGIwZmEyOTUyYmFl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0zMjQyLDcg
KzMyNDIsNyBAQCBHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyOjpzZXR1cEZpbHRlcnMoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsCiAKICAgICBhdXRvIHJvb3RSZWxhdGl2
ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9m
ZnNldEZyb21Sb290LCB7IH0pOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0
ID0gcGFpbnRpbmdGaWx0ZXJzLT5iZWdpbkZpbHRlckVmZmVjdChkZXN0aW5hdGlvbkNvbnRleHQs
IGVuY2xvc2luZ0ludFJlY3Qocm9vdFJlbGF0aXZlQm91bmRzKSwgZW5jbG9zaW5nSW50UmVjdChw
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpLCBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlcGFp
bnRSZWN0KSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBmaWx0ZXJDb250ZXh0ID0gcGFpbnRpbmdG
aWx0ZXJzLT5iZWdpbkZpbHRlckVmZmVjdChkZXN0aW5hdGlvbkNvbnRleHQsIHJlbmRlcmVyKCks
IGVuY2xvc2luZ0ludFJlY3Qocm9vdFJlbGF0aXZlQm91bmRzKSwgZW5jbG9zaW5nSW50UmVjdChw
YWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QpLCBlbmNsb3NpbmdJbnRSZWN0KGZpbHRlclJlcGFp
bnRSZWN0KSk7CiAgICAgaWYgKCFmaWx0ZXJDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNw
cAppbmRleCA0YjZlY2ZlZWE1MGNlOTA5MTYzNWIxYWFjNWFhMjRjYTA5NjBkNDVkLi45N2ZlOTY5
MzE0YjI1ZWEzMDU0MjFiYTFkNjAzZTgyZjE1ZDVmMjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcApAQCAtMTE4LDE3ICsxMTgsMTMgQEAg
dm9pZCBSZW5kZXJMYXllckZpbHRlcnM6OnJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKQog
CiB2b2lkIFJlbmRlckxheWVyRmlsdGVyczo6YnVpbGRGaWx0ZXIoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGZsb2F0IHNjYWxlRmFjdG9yLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUpCiB7
Ci0gICAgLy8gRklYTUU6IHRoaXMgcmVidWlsZHMgdGhlIGVudGlyZSBlZmZlY3RzIGNoYWluIGV2
ZW4gaWYgdGhlIGZpbHRlciBzdHlsZSBkaWRuJ3QgY2hhbmdlLgotICAgIG1fZmlsdGVyID0gQ1NT
RmlsdGVyOjpjcmVhdGUoc2NhbGVGYWN0b3IpOwotICAgIG1fZmlsdGVyLT5zZXRSZW5kZXJpbmdN
b2RlKHJlbmRlcmluZ01vZGUpOwotCiAgICAgLy8gSWYgdGhlIGZpbHRlciBmYWlscyB0byBidWls
ZCwgcmVtb3ZlIGl0IGZyb20gdGhlIGxheWVyLiBJdCB3aWxsIHN0aWxsIGF0dGVtcHQgdG8KICAg
ICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vzc2luZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1
dCBuZXZlciBhcHBseSBhbnl0aGluZy4KLSAgICBpZiAoIW1fZmlsdGVyLT5idWlsZChyZW5kZXJl
ciwgcmVuZGVyZXIuc3R5bGUoKS5maWx0ZXIoKSwgRmlsdGVyQ29uc3VtZXI6OkZpbHRlclByb3Bl
cnR5KSkKLSAgICAgICAgbV9maWx0ZXIgPSBudWxscHRyOworICAgIC8vIEZJWE1FOiB0aGlzIHJl
YnVpbGRzIHRoZSBlbnRpcmUgZWZmZWN0cyBjaGFpbiBldmVuIGlmIHRoZSBmaWx0ZXIgc3R5bGUg
ZGlkbid0IGNoYW5nZS4KKyAgICBtX2ZpbHRlciA9IENTU0ZpbHRlcjo6Y3JlYXRlKHJlbmRlcmVy
LnN0eWxlKCkuZmlsdGVyKCksIHJlbmRlcmluZ01vZGUsIHNjYWxlRmFjdG9yKTsKIH0KIAotR3Jh
cGhpY3NDb250ZXh0KiBSZW5kZXJMYXllckZpbHRlcnM6OmJlZ2luRmlsdGVyRWZmZWN0KEdyYXBo
aWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJC
b3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxh
eWVyUmVwYWludFJlY3QpCitHcmFwaGljc0NvbnRleHQqIFJlbmRlckxheWVyRmlsdGVyczo6YmVn
aW5GaWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25z
dCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJl
Y3QpCiB7CiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0x
MzksNiArMTM1LDE1IEBAIEdyYXBoaWNzQ29udGV4dCogUmVuZGVyTGF5ZXJGaWx0ZXJzOjpiZWdp
bkZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgYm9vbCBoYXNVcGRhdGVkQmFja2luZ1N0b3JlID0gZmlsdGVyLnVwZGF0
ZUJhY2tpbmdTdG9yZVJlY3QoZmlsdGVyU291cmNlUmVjdCk7CisKKyAgICAvLyBGSVhNRTogdGhp
cyBjYWxsIHNob3VsZCBiZSBtb3ZlZCB0byBDU1NGaWx0ZXI6OmNyZWF0ZSgpIHdoZW4gRmlsdGVy
RWZmZWN0IGRvZXMgbm90IHN0b3JlIGl0cyBnZW9tZXRyeS4KKyAgICBpZiAoaGFzVXBkYXRlZEJh
Y2tpbmdTdG9yZSB8fCAhbV9maWx0ZXItPmxhc3RFZmZlY3QoKSkgeworICAgICAgICAvLyBJZiB0
aGUgZmlsdGVyIGZhaWxzIHRvIGJ1aWxkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGF5ZXIuIEl0IHdp
bGwgc3RpbGwgYXR0ZW1wdCB0bworICAgICAgICAvLyBnbyB0aHJvdWdoIHJlZ3VsYXIgcHJvY2Vz
c2luZyAoZS5nLiBjb21wb3NpdGluZyksIGJ1dCBuZXZlciBhcHBseSBhbnl0aGluZy4KKyAgICAg
ICAgaWYgKCFtX2ZpbHRlci0+YnVpbGRGaWx0ZXJGdW5jdGlvbnMocmVuZGVyZXIsIHJlbmRlcmVy
LnN0eWxlKCkuZmlsdGVyKCksIEZpbHRlckNvbnN1bWVyOjpGaWx0ZXJQcm9wZXJ0eSkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKCFmaWx0ZXIuaGFz
RmlsdGVyVGhhdE1vdmVzUGl4ZWxzKCkpCiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBkaXJ0eVJl
Y3Q7CiAgICAgZWxzZSB7CkBAIC0xODQsOCArMTg5LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJGaWx0
ZXJzOjphcHBseUZpbHRlckVmZmVjdChHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4
dCkKICAgICBMYXlvdXRSZWN0IGRlc3RSZWN0ID0gZmlsdGVyLm91dHB1dFJlY3QoKTsKICAgICBk
ZXN0UmVjdC5tb3ZlKG1fcGFpbnRPZmZzZXQueCgpLCBtX3BhaW50T2Zmc2V0LnkoKSk7CiAKLSAg
ICBpZiAoYXV0byogb3V0cHV0QnVmZmVyID0gZmlsdGVyLm91dHB1dCgpKQorICAgIGlmIChhdXRv
KiBvdXRwdXRCdWZmZXIgPSBmaWx0ZXIub3V0cHV0KCkpIHsKKyAgICAgICAgZGVzdGluYXRpb25D
b250ZXh0LnNjYWxlKHsgMSAvIGZpbHRlci5maWx0ZXJTY2FsZSgpLndpZHRoKCksIDEgLyBmaWx0
ZXIuZmlsdGVyU2NhbGUoKS5oZWlnaHQoKSB9KTsKICAgICAgICAgZGVzdGluYXRpb25Db250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqb3V0cHV0QnVmZmVyLCBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGRl
c3RSZWN0LCBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rvcigp
KSk7CisgICAgICAgIGRlc3RpbmF0aW9uQ29udGV4dC5zY2FsZShmaWx0ZXIuZmlsdGVyU2NhbGUo
KSk7CisgICAgfQogCiAgICAgZmlsdGVyLmNsZWFySW50ZXJtZWRpYXRlUmVzdWx0cygpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmgKaW5kZXggM2Rh
MTQwYTVjODhmMTU1MzE5MGI3MDAzZDdlNzg0NGM5MTk0NWJmNy4uM2E3NDk5NWYxZjg0YmQ5NzNl
ZDJiODhkMzA0Mzk3YjRjNDRkYTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyRmlsdGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlcnMuaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgLy8gUGVy
IHJlbmRlcgogICAgIExheW91dFJlY3QgcmVwYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
cGFpbnRSZWN0OyB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQqIGJlZ2luRmlsdGVyRWZmZWN0KEdy
YXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBmaWx0
ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGxheWVyUmVwYWludFJlY3QpOworICAgIEdyYXBoaWNzQ29udGV4dCogYmVnaW5GaWx0ZXJFZmZl
Y3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIFJlbmRlckVsZW1lbnQmLCBj
b25zdCBMYXlvdXRSZWN0JiBmaWx0ZXJCb3hSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJl
Y3QsIGNvbnN0IExheW91dFJlY3QmIGxheWVyUmVwYWludFJlY3QpOwogICAgIHZvaWQgYXBwbHlG
aWx0ZXJFZmZlY3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQpOwogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA1MzdlNjU1ZWU1ZDY2NmU0Zjg1NTA4NzRmOTIxYWIy
M2YwMWUwZTU0Li5mMTAzNTMzOWVjNDFkNmU1NDBmMjVmNjFkMWRjNTJiNTY2ZDBhOTNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcApAQCAtODIsNDAgKzgyLDYgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6cmVtb3ZlQ2xpZW50RnJvbUNhY2hlKFJlbmRlckVsZW1lbnQmIGNsaWVudCwgYm9vbAog
ICAgIG1hcmtDbGllbnRGb3JJbnZhbGlkYXRpb24oY2xpZW50LCBtYXJrRm9ySW52YWxpZGF0aW9u
ID8gQm91bmRhcmllc0ludmFsaWRhdGlvbiA6IFBhcmVudE9ubHlJbnZhbGlkYXRpb24pOwogfQog
Ci1zdGQ6OnVuaXF1ZV9wdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OmJ1aWxkUHJpbWl0aXZlcyhTVkdGaWx0ZXImIGZpbHRlcikgY29uc3QKLXsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOwotICAgIGlmIChmaWx0
ZXJFbGVtZW50KCkuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldEJvdW5kaW5nQm94ID0g
ZmlsdGVyLnRhcmdldEJvdW5kaW5nQm94KCk7Ci0KLSAgICAvLyBBZGQgZWZmZWN0cyB0byB0aGUg
YnVpbGRlcgotICAgIGF1dG8gYnVpbGRlciA9IG1ha2VVbmlxdWU8U1ZHRmlsdGVyQnVpbGRlcj4o
U291cmNlR3JhcGhpYzo6Y3JlYXRlKGZpbHRlcikpOwotICAgIGJ1aWxkZXItPnNldFByaW1pdGl2
ZVVuaXRzKGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpKTsKLSAgICBidWlsZGVyLT5z
ZXRUYXJnZXRCb3VuZGluZ0JveCh0YXJnZXRCb3VuZGluZ0JveCk7Ci0gICAgCi0gICAgZm9yIChh
dXRvJiBlbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KCkpKSB7Ci0gICAgICAgIGF1dG8gZWZmZWN0ID0gZWxl
bWVudC5idWlsZChidWlsZGVyLmdldCgpLCBmaWx0ZXIpOwotICAgICAgICBpZiAoIWVmZmVjdCkg
ewotICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7Ci0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0Vm
ZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgZWxlbWVudC5yZW5kZXJlcigpKTsKLSAg
ICAgICAgZWxlbWVudC5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKLSAgICAg
ICAgZWZmZWN0LT5zZXRFZmZlY3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVS
ZWN0YW5nbGU8U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWxlbWVudCwg
ZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRzKCksIHRhcmdldEJvdW5kaW5nQm94KSk7Ci0g
ICAgICAgIGlmIChlbGVtZW50LnJlbmRlcmVyKCkpIHsKLSNpZiBFTkFCTEUoREVTVElOQVRJT05f
Q09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCi0gICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGlu
Z0NvbG9yU3BhY2UoZWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJ
bnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8g
RGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCKCkgOiBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IoKSk7Ci0jZWxzZQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xv
clNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpKTsKLSNlbmRpZgotICAgICAgICB9
Ci0gICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkp
OwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlcjsKLX0KLQogYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVu
ZGVyU3R5bGUmLCBHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBPcHRpb25TZXQ8UmVuZGVyU1ZH
UmVzb3VyY2VNb2RlPiByZXNvdXJjZU1vZGUpCiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwpAQCAt
MTU1LDE4ICsxMjEsMTMgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICBJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoYWJzb2x1dGVEcmF3aW5nUmVnaW9uLnNpemUoKSwgZmlsdGVy
U2NhbGUpOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBTVkdGaWx0ZXIgb2JqZWN0LgotICAgIGJvb2wg
cHJpbWl0aXZlQm91bmRpbmdCb3hNb2RlID0gZmlsdGVyRWxlbWVudCgpLnByaW1pdGl2ZVVuaXRz
KCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwotICAg
IGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlclNjYWxlLCBhYnNv
bHV0ZURyYXdpbmdSZWdpb24sIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHRhcmdldEJvdW5kaW5n
Qm94LCBwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUpOwotCi0gICAgLy8gQ3JlYXRlIGFsbCByZWxl
dmFudCBmaWx0ZXIgcHJpbWl0aXZlcy4KLSAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gYnVpbGRQ
cmltaXRpdmVzKCpmaWx0ZXJEYXRhLT5maWx0ZXIpOwotICAgIGlmICghZmlsdGVyRGF0YS0+YnVp
bGRlcikKKyAgICBmaWx0ZXJEYXRhLT5idWlsZGVyID0gbWFrZVVuaXF1ZTxTVkdGaWx0ZXJCdWls
ZGVyPigpOworICAgIGZpbHRlckRhdGEtPmZpbHRlciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRl
ckVsZW1lbnQoKSwgKmZpbHRlckRhdGEtPmJ1aWxkZXIsIGZpbHRlclNjYWxlLCBhYnNvbHV0ZURy
YXdpbmdSZWdpb24sIGZpbHRlckRhdGEtPmJvdW5kYXJpZXMsIHRhcmdldEJvdW5kaW5nQm94KTsK
KyAgICBpZiAoIWZpbHRlckRhdGEtPmZpbHRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFRvdGFsT2ZFZmZlY3RJbnB1dHMgPSAxMDA7Ci0g
ICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVm
ZmVjdCgpOwotICAgIGlmICghbGFzdEVmZmVjdCB8fCBsYXN0RWZmZWN0LT50b3RhbE51bWJlck9m
RWZmZWN0SW5wdXRzKCkgPiBtYXhUb3RhbE9mRWZmZWN0SW5wdXRzKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgYXV0byBsYXN0RWZmZWN0ID0gZmlsdGVyRGF0YS0+YnVpbGRlci0+bGFzdEVm
ZmVjdCgpOworICAgIEFTU0VSVChsYXN0RWZmZWN0KTsKIAogICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
XG4iIDw8ICpmaWx0ZXJEYXRhLT5idWlsZGVyLT5sYXN0RWZmZWN0KCkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRl
eCBhMmQzNWY5YWM3YTNkMjRlMTJlY2VmNjU1MjRmY2RiMWIzNzc4MjFhLi42NGUzYWM1YWVhYzgw
YWRmOWUyNmFiNGVmNmI4NWEyN2MyNTQyZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQzMywxMSArNDMzLDEy
IEBAIHZvaWQgd3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXImCiAgICAgICAgIC8vIENyZWF0aW5nIGEgcGxhY2Vo
b2xkZXIgZmlsdGVyIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgYnVpbGRlci4KICAgICAgICAgRmxv
YXRSZWN0IGR1bW15UmVjdDsKICAgICAgICAgRmxvYXRTaXplIGR1bW15U2NhbGUoMSwgMSk7Ci0g
ICAgICAgIGF1dG8gZHVtbXlGaWx0ZXIgPSBTVkdGaWx0ZXI6OmNyZWF0ZShkdW1teVNjYWxlLCBk
dW1teVJlY3QsIGR1bW15UmVjdCwgZHVtbXlSZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKGF1dG8g
YnVpbGRlciA9IGZpbHRlci5idWlsZFByaW1pdGl2ZXMoZHVtbXlGaWx0ZXIuZ2V0KCkpKSB7Cisg
ICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYXV0byBkdW1teUZpbHRl
ciA9IFNWR0ZpbHRlcjo6Y3JlYXRlKGZpbHRlci5maWx0ZXJFbGVtZW50KCksIGJ1aWxkZXIsIGR1
bW15U2NhbGUsIGR1bW15UmVjdCwgZHVtbXlSZWN0LCBkdW1teVJlY3QpOworICAgICAgICBpZiAo
ZHVtbXlGaWx0ZXIpIHsKICAgICAgICAgICAgIFRleHRTdHJlYW06OkluZGVudFNjb3BlIGluZGVu
dFNjb3BlKHRzKTsKIAotICAgICAgICAgICAgaWYgKEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCA9
IGJ1aWxkZXItPmxhc3RFZmZlY3QoKSkKKyAgICAgICAgICAgIGlmIChhdXRvIGxhc3RFZmZlY3Qg
PSBkdW1teUZpbHRlci0+bGFzdEVmZmVjdCgpKQogICAgICAgICAgICAgICAgIGxhc3RFZmZlY3Qt
PmV4dGVybmFsUmVwcmVzZW50YXRpb24odHMpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChy
ZXNvdXJjZS5yZXNvdXJjZVR5cGUoKSA9PSBDbGlwcGVyUmVzb3VyY2VUeXBlKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmNwcAppbmRleCA3
MzJlYjE4OGE1YmJjYzg1ODRkYWNjYmVlMjA4N2YyODAyYTU3YWY2Li5jOWRhMjc4MWQ5NTc0ODgw
NjNiOTk1YWIwOTQyMjE5ZjE4ZDAzZWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlci5jcHAKQEAgLTIyLDggKzIyLDQ0IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyLmgiCiAKKyNpbmNsdWRlICJTVkdGaWx0
ZXJCdWlsZGVyLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlNv
dXJjZUdyYXBoaWMuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitSZWZQdHI8U1ZHRmlsdGVy
PiBTVkdGaWx0ZXI6OmNyZWF0ZShTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50LCBTVkdG
aWx0ZXJCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdp
b24sIEZpbHRlckVmZmVjdCYgcHJldmlvdXNFZmZlY3QpCit7CisgICAgcmV0dXJuIGNyZWF0ZShm
aWx0ZXJFbGVtZW50LCBidWlsZGVyLCBmaWx0ZXJTY2FsZSwgc291cmNlSW1hZ2VSZWN0LCBmaWx0
ZXJSZWdpb24sIGZpbHRlclJlZ2lvbiwgJnByZXZpb3VzRWZmZWN0KTsKK30KKworUmVmUHRyPFNW
R0ZpbHRlcj4gU1ZHRmlsdGVyOjpjcmVhdGUoU1ZHRmlsdGVyRWxlbWVudCYgZmlsdGVyRWxlbWVu
dCwgU1ZHRmlsdGVyQnVpbGRlciYgYnVpbGRlciwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2Fs
ZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmls
dGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94KQoreworICAgIHJl
dHVybiBjcmVhdGUoZmlsdGVyRWxlbWVudCwgYnVpbGRlciwgZmlsdGVyU2NhbGUsIHNvdXJjZUlt
YWdlUmVjdCwgZmlsdGVyUmVnaW9uLCB0YXJnZXRCb3VuZGluZ0JveCwgbnVsbHB0cik7Cit9CisK
K1JlZlB0cjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmIGZp
bHRlckVsZW1lbnQsIFNWR0ZpbHRlckJ1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IEZsb2F0U2l6ZSYg
ZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGluZ0JveCwg
RmlsdGVyRWZmZWN0KiBwcmV2aW91c0VmZmVjdCkKK3sKKyAgICBib29sIHByaW1pdGl2ZUJvdW5k
aW5nQm94TW9kZSA9IGZpbHRlckVsZW1lbnQucHJpbWl0aXZlVW5pdHMoKSA9PSBTVkdVbml0VHlw
ZXM6OlNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CisKKyAgICBhdXRvIGZpbHRlciA9
IGFkb3B0UmVmKCpuZXcgU1ZHRmlsdGVyKGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZp
bHRlclJlZ2lvbiwgdGFyZ2V0Qm91bmRpbmdCb3gsIHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSkp
OworCisgICAgaWYgKCFwcmV2aW91c0VmZmVjdCkKKyAgICAgICAgYnVpbGRlci5zZXR1cEJ1aWx0
aW5FZmZlY3RzKFNvdXJjZUdyYXBoaWM6OmNyZWF0ZShmaWx0ZXIpKTsKKyAgICBlbHNlCisgICAg
ICAgIGJ1aWxkZXIuc2V0dXBCdWlsdGluRWZmZWN0cyh7ICpwcmV2aW91c0VmZmVjdCB9KTsKKwor
ICAgIGJ1aWxkZXIuc2V0VGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpOworICAg
IGJ1aWxkZXIuc2V0UHJpbWl0aXZlVW5pdHMoZmlsdGVyRWxlbWVudC5wcmltaXRpdmVVbml0cygp
KTsKKworICAgIGF1dG8gbGFzdEVmZmVjdCA9IGJ1aWxkZXIuYnVpbGRGaWx0ZXJFZmZlY3RzKGZp
bHRlciwgZmlsdGVyRWxlbWVudCk7CisgICAgaWYgKCFsYXN0RWZmZWN0KQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGZpbHRlci0+c2V0TGFzdEVmZmVjdChXVEZNb3ZlKGxhc3RFZmZl
Y3QpKTsKKyAgICByZXR1cm4gZmlsdGVyOworfQorCiBTVkdGaWx0ZXI6OlNWR0ZpbHRlcihjb25z
dCBGbG9hdFNpemUmIGZpbHRlclNjYWxlLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZUltYWdlUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBmaWx0ZXJSZWdpb24sIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
Qm91bmRpbmdCb3gsIGJvb2wgZWZmZWN0QkJveE1vZGUpCiAgICAgOiBGaWx0ZXIoRmlsdGVyOjpU
eXBlOjpTVkdGaWx0ZXIsIGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lv
bikKICAgICAsIG1fdGFyZ2V0Qm91bmRpbmdCb3godGFyZ2V0Qm91bmRpbmdCb3gpCkBAIC0zOSw5
ICs3NSwxNCBAQCBGbG9hdFNpemUgU1ZHRmlsdGVyOjpzY2FsZWRCeUZpbHRlclNjYWxlKEZsb2F0
U2l6ZSBzaXplKSBjb25zdAogICAgIHJldHVybiBGaWx0ZXI6OnNjYWxlZEJ5RmlsdGVyU2NhbGUo
c2l6ZSk7CiB9CiAKLVJlZjxTVkdGaWx0ZXI+IFNWR0ZpbHRlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRCb3VuZGlu
Z0JveCwgYm9vbCBlZmZlY3RCQm94TW9kZSkKK0ludE91dHNldHMgU1ZHRmlsdGVyOjpvdXRzZXRz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXN0RWZmZWN0LT5vdXRzZXRzKCk7Cit9CisKK3Zv
aWQgU1ZHRmlsdGVyOjpjbGVhclJlc3VsdCgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U1ZHRmlsdGVyKGZpbHRlclNjYWxlLCBzb3VyY2VJbWFnZVJlY3QsIGZpbHRlclJlZ2lvbiwgdGFy
Z2V0Qm91bmRpbmdCb3gsIGVmZmVjdEJCb3hNb2RlKSk7CisgICAgbV9sYXN0RWZmZWN0LT5jbGVh
clJlc3VsdHNSZWN1cnNpdmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAppbmRleCA1MDgx
MWU2ZmI0OWEyMGE1YWUyNzkxYjU0MDM5YzdmODI3YjY3ZmRhLi4xNjYwMTJmZjRlYmFjZDE2NTQ0
ZWUxNDFmMDVkOGM4NjczYTM1Zjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXIuaApAQCAtMjcsMTkgKzI3LDMyIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgU1ZHRmlsdGVyQnVpbGRlcjsKK2NsYXNzIFNWR0ZpbHRlckVsZW1l
bnQ7CisKIGNsYXNzIFNWR0ZpbHRlciBmaW5hbCA6IHB1YmxpYyBGaWx0ZXIgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8U1ZHRmlsdGVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJT
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0Qm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBib29sIGVm
ZmVjdEJCb3hNb2RlKTsKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0Zp
bHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJT
Y2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZmlsdGVyUmVnaW9uLCBGaWx0ZXJFZmZlY3QmIHByZXZpb3VzRWZmZWN0KTsKKyAgICBzdGF0aWMg
UmVmUHRyPFNWR0ZpbHRlcj4gY3JlYXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWls
ZGVyJiwgY29uc3QgRmxvYXRTaXplJiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2VJbWFnZVJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldEJvdW5kaW5nQm94KTsKKyAgICBzdGF0aWMgUmVmUHRyPFNWR0ZpbHRlcj4gY3Jl
YXRlKFNWR0ZpbHRlckVsZW1lbnQmLCBTVkdGaWx0ZXJCdWlsZGVyJiwgY29uc3QgRmxvYXRTaXpl
JiBmaWx0ZXJTY2FsZSwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2VJbWFnZVJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZmlsdGVyUmVnaW9uLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5nQm94
LCBGaWx0ZXJFZmZlY3QqIHByZXZpb3VzRWZmZWN0KTsKIAogICAgIEZsb2F0U2l6ZSBzY2FsZWRC
eUZpbHRlclNjYWxlKEZsb2F0U2l6ZSkgY29uc3QgZmluYWw7CiAKICAgICBGbG9hdFJlY3QgdGFy
Z2V0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEJvdW5kaW5nQm94OyB9CiAK
KyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBsYXN0RWZmZWN0KCkgeyByZXR1cm4gbV9sYXN0RWZm
ZWN0OyB9CisgICAgdm9pZCBzZXRMYXN0RWZmZWN0KFJlZlB0cjxGaWx0ZXJFZmZlY3Q+JiYgbGFz
dEVmZmVjdCkgeyBtX2xhc3RFZmZlY3QgPSBXVEZNb3ZlKGxhc3RFZmZlY3QpOyB9CisKIHByaXZh
dGU6CiAgICAgU1ZHRmlsdGVyKGNvbnN0IEZsb2F0U2l6ZSYgZmlsdGVyU2NhbGUsIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlSW1hZ2VSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldEJvdW5kaW5n
Qm94LCBjb25zdCBGbG9hdFJlY3QmIGZpbHRlclJlZ2lvbiwgYm9vbCBlZmZlY3RCQm94TW9kZSk7
CiAKKyAgICBJbnRPdXRzZXRzIG91dHNldHMoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGNs
ZWFyUmVzdWx0KCkgb3ZlcnJpZGU7CisKICAgICBGbG9hdFJlY3QgbV90YXJnZXRCb3VuZGluZ0Jv
eDsKICAgICBib29sIG1fZWZmZWN0QkJveE1vZGU7CisKKyAgICBSZWZQdHI8RmlsdGVyRWZmZWN0
PiBtX2xhc3RFZmZlY3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
Y3BwCmluZGV4IDgwMDBmODRiNWNkNjBlMDZlMjM2NGVkNWNkZThmOGUzZmQ5NDQxNmUuLmJlOGYw
ZmIxYzNmNTJmZmU1YzllNTQxMWI2OGNlMWMwZjg0ZjhkMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBA
IC0yMCwyMSArMjAsOTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTVkdGaWx0
ZXJCdWlsZGVyLmgiCiAKLSNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJFbGVt
ZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlNWR0Zp
bHRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMuaCIKICNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBo
aWMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAor
I2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyNpbmNsdWRl
ICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVW
YWx1ZU1hcHBpbmdzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGaWx0
ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdy
YXBoaWMpCit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OnNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZp
bHRlckVmZmVjdD4gc291cmNlR3JhcGhpYykKIHsKLSAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChT
b3VyY2VHcmFwaGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMpOwotICAgIG1fYnVpbHRp
bkVmZmVjdHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVh
dGUoKnNvdXJjZUdyYXBoaWMpKTsKKyAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VHcmFw
aGljOjplZmZlY3ROYW1lKCksIHNvdXJjZUdyYXBoaWMucHRyKCkpOworICAgIG1fYnVpbHRpbkVm
ZmVjdHMuYWRkKFNvdXJjZUFscGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUo
c291cmNlR3JhcGhpYykpOwogICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKKyNpZiBFTkFC
TEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCitzdGF0aWMgQ29sb3JJbnRl
cnBvbGF0aW9uIGNvbG9ySW50ZXJwb2xhdGlvbkZvckVsZW1lbnQoU1ZHRWxlbWVudCYgZWxlbWVu
dCkKK3sKKyAgICBpZiAoYXV0byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKSkKKyAgICAg
ICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9u
RmlsdGVycygpOworCisgICAgLy8gVHJ5IHRvIGRldGVybWluZSB0aGUgcHJvcGVydHkgdmFsdWUg
ZnJvbSB0aGUgY29tcHV0ZWQgc3R5bGUuCisgICAgaWYgKGF1dG8gdmFsdWUgPSBDb21wdXRlZFN0
eWxlRXh0cmFjdG9yKCZlbGVtZW50KS5wcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5Q29sb3JJbnRl
cnBvbGF0aW9uRmlsdGVycykpIHsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIENvbG9ySW50ZXJwb2xhdGlvbjo6QXV0bzsKK30K
KyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgY29sbGVjdEVmZmVjdHMoY29uc3QgRmlsdGVyRWZm
ZWN0KiBlZmZlY3QsIEhhc2hTZXQ8Y29uc3QgRmlsdGVyRWZmZWN0Kj4mIGFsbEVmZmVjdHMpCit7
CisgICAgYWxsRWZmZWN0cy5hZGQoZWZmZWN0KTsKKyAgICB1bnNpZ25lZCBzaXplID0gZWZmZWN0
LT5udW1iZXJPZkVmZmVjdElucHV0cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKKyAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGVmZmVjdC0+aW5wdXRFZmZl
Y3QoaSk7CisgICAgICAgIGNvbGxlY3RFZmZlY3RzKGluLCBhbGxFZmZlY3RzKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGFsbEVmZmVjdHMuc2l6ZSgpOworfQorCitzdGF0aWMgdW5zaWduZWQgdG90YWxO
dW1iZXJGaWx0ZXJFZmZlY3RzKGNvbnN0IEZpbHRlckVmZmVjdCYgbGFzdEVmZmVjdCkKK3sKKyAg
ICBIYXNoU2V0PGNvbnN0IEZpbHRlckVmZmVjdCo+IGFsbEVmZmVjdHM7CisgICAgcmV0dXJuIGNv
bGxlY3RFZmZlY3RzKCZsYXN0RWZmZWN0LCBhbGxFZmZlY3RzKTsKK30KKworUmVmUHRyPEZpbHRl
ckVmZmVjdD4gU1ZHRmlsdGVyQnVpbGRlcjo6YnVpbGRGaWx0ZXJFZmZlY3RzKEZpbHRlciYgZmls
dGVyLCBTVkdGaWx0ZXJFbGVtZW50JiBmaWx0ZXJFbGVtZW50KQoreworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4Q291bnRDaGlsZE5vZGVzID0gMjAwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4VG90YWxOdW1iZXJGaWx0ZXJFZmZlY3RzID0gMTAwOworCisgICAg
aWYgKGZpbHRlckVsZW1lbnQuY291bnRDaGlsZE5vZGVzKCkgPiBtYXhDb3VudENoaWxkTm9kZXMp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZm
ZWN0OworCisgICAgZm9yIChhdXRvJiBlZmZlY3RFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPihmaWx0ZXJFbGVtZW50KSkgeworICAg
ICAgICBlZmZlY3QgPSBlZmZlY3RFbGVtZW50LmJ1aWxkKHRoaXMsIGZpbHRlcik7CisgICAgICAg
IGlmICghZWZmZWN0KSB7CisgICAgICAgICAgICBjbGVhckVmZmVjdHMoKTsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgZWZmZWN0RWxlbWVudC5zZXRT
dGFuZGFyZEF0dHJpYnV0ZXMoZWZmZWN0LmdldCgpKTsKKyAgICAgICAgZWZmZWN0LT5zZXRFZmZl
Y3RCb3VuZGFyaWVzKFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGU8U1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzPigmZWZmZWN0RWxlbWVudCwgbV9wcmltaXRpdmVV
bml0cywgbV90YXJnZXRCb3VuZGluZ0JveCkpOworCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NP
TE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorICAgICAgICBpZiAoY29sb3JJbnRlcnBvbGF0aW9uRm9y
RWxlbWVudChlZmZlY3RFbGVtZW50KSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQikK
KyAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OkxpbmVhclNSR0IoKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVy
ZXIgPSBlZmZlY3RFbGVtZW50LnJlbmRlcmVyKCkpCisgICAgICAgICAgICBhcHBlbmRFZmZlY3RU
b0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0LmNvcHlSZWYoKSwgcmVuZGVyZXIpOworCisgICAgICAg
IGFkZChlZmZlY3RFbGVtZW50LnJlc3VsdCgpLCBlZmZlY3QpOworICAgIH0KKworICAgIGlmICgh
ZWZmZWN0IHx8IHRvdGFsTnVtYmVyRmlsdGVyRWZmZWN0cygqZWZmZWN0KSA+IG1heFRvdGFsTnVt
YmVyRmlsdGVyRWZmZWN0cykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
ZWZmZWN0OworfQorCiB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9tU3RyaW5n
JiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KQogewogICAgIGlmIChpZC5pc0VtcHR5
KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuaAppbmRleCBjNzdhZTA4YmFjNjVjM2MyY2ZjODk3NGZhMzNlNzY0NjBj
ZTk3ZmE3Li4zNzViZGIxNTMxZWY0M2FlMmI3MTU2NmY2NjU4ZGVjMzRkOGQ0OGFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5oCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgewogcHVibGlj
OgogICAgIHR5cGVkZWYgSGFzaFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CiAK
LSAgICBTVkdGaWx0ZXJCdWlsZGVyKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHNvdXJjZUdyYXBoaWMp
OworICAgIFNWR0ZpbHRlckJ1aWxkZXIoKSA9IGRlZmF1bHQ7CiAKICAgICB2b2lkIHNldFRhcmdl
dEJvdW5kaW5nQm94KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX3RhcmdldEJvdW5kaW5nQm94ID0g
cjsgfQogICAgIEZsb2F0UmVjdCB0YXJnZXRCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGFyZ2V0Qm91bmRpbmdCb3g7IH0KQEAgLTY1LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYXJFZmZlY3RzKCk7CiAgICAgdm9pZCBjbGVhclJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZm
ZWN0Kik7CiAKKyAgICB2b2lkIHNldHVwQnVpbHRpbkVmZmVjdHMoUmVmPEZpbHRlckVmZmVjdD4g
c291cmNlR3JhcGhpYyk7CisgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gYnVpbGRGaWx0ZXJFZmZl
Y3RzKEZpbHRlciYsIFNWR0ZpbHRlckVsZW1lbnQmKTsKKwogcHJpdmF0ZToKICAgICBpbmxpbmUg
dm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCiAgICAgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGEyNmQ1ZTgxYzQ0ZjMyYTE5
OTQxOTY3ZTRlNTlmNjEzYTRmNzhkNjMuLjNiY2NlYTA1MzYyNDJlY2JjNTkwYjVlYzY5YmM0Mjdi
M2ZhMDkxZDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0xMS0xMCAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWlkQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nlc3NdIE1ha2UgQ1NT
RmlsdGVyIGJlIGEgY29tcG9zaXRlIG9mIEZpbHRlckZ1bmN0aW9ucworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDY5CisgICAgICAgIHJkYXI6Ly84
NTA0NzE0OAorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICBV
bnNraXAgZmlsdGVyIGhpZHBpIGxheW91dCB0ZXN0cy4KKworICAgICAgICAqIFRlc3RFeHBlY3Rh
dGlvbnM6CisKIDIwMjEtMTEtMTAgIFRpbSBOZ3V5ZW4gIDxudGltQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW1vdmUgbm9uLXN0YW5kYXJkIC13ZWJraXQtYm9yZGVyLWZpdCBDU1MgcHJvcGVydHkK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9U
ZXN0RXhwZWN0YXRpb25zCmluZGV4IGQ5Zjk4YjQwMzM2Y2IxZjA4ZDAyZjFkZTQ4ODM3ZDdiYjdh
YjM3OWEuLmUyOGM5ZjcwNDRkMTg1ZmEwYTFkMTA5ZGYzYjYxOWJiYWUzZmJlNGIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvVGVzdEV4
cGVjdGF0aW9ucwpAQCAtNTE3Myw1MyArNTE3MywxOSBAQCBqcy9kb20vcmVmbGVjdC1zZXQtb250
by1kb20uaHRtbCBbIFNraXAgXQogdXNlcnNjcmlwdHMvdXNlci1zY3JpcHQtcGx1Z2luLWRvY3Vt
ZW50Lmh0bWwgWyBTa2lwIF0KIAogIyBUaGVzZSBmaWx0ZXIgcmVsYXRlZCBmYWlsdXJlcyBzaG91
bGQgYmUgZml4ZWQgb25jZSB3ZWJraXQub3JnL2IvMjMyNzA1IGlzIHJlc29sdmVkCi13ZWJraXQu
b3JnL2IvMjMyNzA1IGNvbXBvc2l0aW5nL2ZpbHRlcnMvZHJvcC1zaGFkb3cuaHRtbCBbIFNraXAg
XQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjb21wb3NpdGluZy9maWx0ZXJzL3NpbXBsZS1pbWFnZS13
aXRoLXN2Zy1maWx0ZXIuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2Zp
bHRlcnMvYmFja2Ryb3AvYmFja2Ryb3AtZmlsdGVyLXdpdGgtYm9yZGVyLXJhZGl1cy1hbmQtcmVm
bGVjdGlvbi1yZW1vdmUuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2Zp
bHRlcnMvY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5v
cmcvYi8yMzI3MDUgY3NzMy9maWx0ZXJzL2Nzcy1vcGFjaXR5LXdpdGgtZHJvcC1zaGFkb3cuaHRt
bCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvZHJvcC1zaGFkb3cu
aHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvZWZmZWN0LWJy
aWdodG5lc3Mtc3F1YXJlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9m
aWx0ZXJzL2VmZmVjdC1jb250cmFzdC1zcXVhcmUuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9i
LzIzMjcwNSBjc3MzL2ZpbHRlcnMvZWZmZWN0LWdyYXlzY2FsZS1zcXVhcmUuaHRtbCBbIFNraXAg
XQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvZWZmZWN0LWh1ZS1yb3RhdGUtc3F1
YXJlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9maWx0ZXJzL2VmZmVj
dC1pbnZlcnQtc3F1YXJlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9m
aWx0ZXJzL2VmZmVjdC1yZWZlcmVuY2UtbG9jYWwtdXJsLXdpdGgtYmFzZS5odG1sIFsgU2tpcCBd
Ci13ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvZmlsdGVycy9lZmZlY3Qtc2F0dXJhdGUtc3F1YXJl
Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9maWx0ZXJzL2VmZmVjdC1z
ZXBpYS1zcXVhcmUuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRl
cnMvZmlsdGVyLWlzLW9uLXN1YnBpeGVsLXBvc2l0aW9uLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5v
cmcvYi8yMzI3MDUgY3NzMy9maWx0ZXJzL2ZpbHRlci1vbi1vdmVyZmxvdy1oaWRkZW4uaHRtbCBb
IFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBjc3MzL2ZpbHRlcnMvZmlsdGVycy1vbi1zdmct
cm9vdC5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvZmlsdGVycy9oaWRw
aS1mZUNvbnZvbHZlTWF0cml4Lmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3Nz
My9maWx0ZXJzL2hpZHBpLWZpbHRlci1pcy1vbi1zdWJwaXhlbC1wb3NpdGlvbi5odG1sIFsgU2tp
cCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGNzczMvZmlsdGVycy9pbnZhbGlkYXRlLXNvdXJjZUFs
cGhhLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9maWx0ZXJzL251bGwt
ZWZmZWN0LWNoZWNrLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9maWx0
ZXJzL3JlZmVyZW5jZS1maWx0ZXItc2V0LWZpbHRlci1yZWdpb25zLmh0bWwgWyBTa2lwIF0KLXdl
YmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9tYXNraW5nL2NsaXAtcGF0aC1maWx0ZXIuaHRtbCBbIFNr
aXAgXQord2Via2l0Lm9yZy9iLzIzMjcwNSBjb21wb3NpdGluZy9maWx0ZXJzL3N3LW5lc3RlZC1z
aGFkb3ctb3ZlcmxhcHMtaHctbmVzdGVkLXNoYWRvdy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3Jn
L2IvMjMyNzA1IGNvbXBvc2l0aW5nL2ZpbHRlcnMvc3ctc2hhZG93LW92ZXJsYXBzLWh3LWxheWVy
Lmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzI3MDUgY29tcG9zaXRpbmcvZmlsdGVycy9z
dy1zaGFkb3ctb3ZlcmxhcHMtaHctc2hhZG93Lmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8y
MzI3MDUgY3NzMy9maWx0ZXJzL2VmZmVjdC1yZWZlcmVuY2UtZGVsZXRlLmh0bWwgWyBTa2lwIF0K
K3dlYmtpdC5vcmcvYi8yMzI3MDUgY3NzMy9maWx0ZXJzL3N2Zy1ibHVyLWZpbHRlci1jbGlwcGVk
Lmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzI3MDUgZmFzdC9maWx0ZXItaW1hZ2UvYmFj
a2dyb3VuZC1maWx0ZXItaW1hZ2UuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzMjcwNSBm
YXN0L2ZpbHRlci1pbWFnZS9maWx0ZXItaW1hZ2UtYmx1ci5odG1sIFsgU2tpcCBdCit3ZWJraXQu
b3JnL2IvMjMyNzA1IGZhc3QvZmlsdGVyLWltYWdlL2ZpbHRlci1pbWFnZS1zdmcuaHRtbCBbIFNr
aXAgXQogd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2ZpbHRlci1pbWFnZS9maWx0ZXItaW1hZ2Uu
aHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2dyYWRpZW50cy9jb25pYy1n
cmFkaWVudC1hbHBoYS5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGZhc3QvZ3Jh
ZGllbnRzL2NvbmljLWdyYWRpZW50LWV4dGVuZGVkLXN0b3BzLmh0bWwgWyBTa2lwIF0KLXdlYmtp
dC5vcmcvYi8yMzI3MDUgZmFzdC9ncmFkaWVudHMvY29uaWMtZ3JhZGllbnQuaHRtbCBbIFNraXAg
XQotd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2hpZHBpL2ZpbHRlcnMtYW5kLWltYWdlLWJ1ZmZl
ci1yZXNvbHV0aW9uLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgZmFzdC9oaWRw
aS9maWx0ZXJzLWJsdXIuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2hp
ZHBpL2ZpbHRlcnMtY29tcG9uZW50LXRyYW5zZmVyLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcv
Yi8yMzI3MDUgZmFzdC9oaWRwaS9maWx0ZXJzLWh1ZS1yb3RhdGUuaHRtbCBbIFNraXAgXQotd2Vi
a2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2hpZHBpL2ZpbHRlcnMtaW52ZXJ0Lmh0bWwgWyBTa2lwIF0K
LXdlYmtpdC5vcmcvYi8yMzI3MDUgZmFzdC9oaWRwaS9maWx0ZXJzLW1vcnBob2xvZ3kuaHRtbCBb
IFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2hpZHBpL2ZpbHRlcnMtbXVsdGlwbGUu
aHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBmYXN0L2hpZHBpL2ZpbHRlcnMtcmVm
ZXJlbmNlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgZmFzdC9oaWRwaS9maWx0
ZXJzLXNoYWRvdy5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGZhc3QvaGlkcGkv
ZmlsdGVycy10dXJidWxlbmNlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgZmFz
dC9tdWx0aWNvbC9maWx0ZXItaW4tY29sdW1ucy5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2Iv
MjMyNzA1IGh0dHAvdGVzdHMvY3NzL2ZpbHRlcnMtb24taWZyYW1lcy5odG1sIFsgU2tpcCBdCi13
ZWJraXQub3JnL2IvMjMyNzA1IGltcG9ydGVkL2JsaW5rL2NzczMvZmlsdGVycy9lZmZlY3QtcmVm
ZXJlbmNlLWFkZC1ody5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMjMyNzA1IGltcG9ydGVk
L2JsaW5rL2NzczMvZmlsdGVycy9lZmZlY3QtcmVmZXJlbmNlLW9uLXRyYW5zcGFyZW50LWVsZW1l
bnQuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBpbXBvcnRlZC9ibGluay9jc3Mz
L2ZpbHRlcnMvZWZmZWN0LXJlZmVyZW5jZS1zb3VyY2UtYWxwaGEtaHcuaHRtbCBbIFNraXAgXQog
d2Via2l0Lm9yZy9iLzIzMjcwNSBpbXBvcnRlZC9ibGluay9zdmcvZmlsdGVycy9maWx0ZXItaHVn
ZS1jbGFtcGluZy5zdmcgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8yMzI3MDUgaW1wb3J0ZWQvbW96
aWxsYS9zdmcvc3ZnLWVmZmVjdHMtYXJlYS11bnpvb21lZC54aHRtbCBbIFNraXAgXQotd2Via2l0
Lm9yZy9iLzIzMjcwNSBpbXBvcnRlZC9tb3ppbGxhL3N2Zy9zdmctZWZmZWN0cy1hcmVhLXpvb21l
ZC1pbi54aHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzIzMjcwNSBpbXBvcnRlZC9tb3ppbGxh
L3N2Zy9zdmctZWZmZWN0cy1hcmVhLXpvb21lZC1vdXQueGh0bWwgWyBTa2lwIF0KLXdlYmtpdC5v
cmcvYi8yMzI3MDUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLW92ZXJm
bG93L292ZXJmbG93LXNjcm9sbC1yZXNpemUtdmlzaWJpbGl0eS1oaWRkZW4uaHRtbCBbIFNraXAg
XQotd2Via2l0Lm9yZy9iLzIzMjcwNSBzdmcvY3VzdG9tL2ZlQ29sb3JNYXRyaXgtdmFsdWVzLWxl
YWRpbmctc3BhY2VzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzI3MDUgaW1wb3J0ZWQv
bW96aWxsYS9zdmcvZHluYW1pYy1maWx0ZXItY29udGVudHMtMDFhLnN2ZyBbIFNraXAgXQord2Vi
a2l0Lm9yZy9iLzIzMjcwNSBpbXBvcnRlZC9tb3ppbGxhL3N2Zy9maWx0ZXJzL2ZlQ29tcG9zaXRl
LTIuc3ZnIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjMyNzA1IGltcG9ydGVkL21vemlsbGEvc3Zn
L2ZpbHRlcnMvZmVTcGVjdWxhckxpZ2h0aW5nLTEuc3ZnIFsgU2tpcCBdCiB3ZWJraXQub3JnL2Iv
MjMyNzA1IHN2Zy9jdXN0b20vcmVzb3VyY2VzLWNzcy1zY2FsZWQuaHRtbCBbIFNraXAgXQord2Vi
a2l0Lm9yZy9iLzIzMjcwNSBzdmcvZmlsdGVycy9mZUxpZ2h0aW5nLWNsaXBwZWQuc3ZnIFsgU2tp
cCBdCiB3ZWJraXQub3JnL2IvMjMyNzA1IHN2Zy9maWx0ZXJzL2JpZy1zaXplZC1vZmYtdmlld3Bv
cnQtZmlsdGVyLnN2ZyBbIFNraXAgXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>