<?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>226395</bug_id>
          
          <creation_ts>2021-05-28 14:34:30 -0700</creation_ts>
          <short_desc>Clients of optional should use has_value instead of relying on hasValue macro</short_desc>
          <delta_ts>2021-05-29 15:10:18 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>berto</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</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>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jfernandez</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>joepeck</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>mark.lam</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>msaboff</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>rego</cc>
    
    <cc>saam</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>svillar</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tzagallo</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1764932</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-28 14:34:30 -0700</bug_when>
    <thetext>Clients of optional should use has_value instead of relying on hasValue macro</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764945</commentid>
    <comment_count>1</comment_count>
      <attachid>430059</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-28 14:51:14 -0700</bug_when>
    <thetext>Created attachment 430059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764946</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-28 14:52:09 -0700</bug_when>
    <thetext>Couldn’t do this with a global replace because hasValue is a common name used in classes other than WTF::Optional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764948</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-28 14:52:30 -0700</bug_when>
    <thetext>First version will probably fail EWS if I missed things on non-Mac platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765027</commentid>
    <comment_count>4</comment_count>
      <attachid>430077</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-28 17:28:46 -0700</bug_when>
    <thetext>Created attachment 430077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765028</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-05-28 17:30:05 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765049</commentid>
    <comment_count>6</comment_count>
      <attachid>430077</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-28 19:01:40 -0700</bug_when>
    <thetext>Comment on attachment 430077
Patch

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

r=me

&gt; Source/WebCore/css/FontFace.cpp:273
&gt; +    if (!families.has_value())

Don&apos;t really need .has_value() here.

&gt; Source/WebCore/css/FontFace.cpp:298
&gt; +    if (!styleWrapped.has_value())

ditto.

&gt; Source/WebCore/css/FontFace.cpp:331
&gt; +    if (!weightWrapped.has_value())

ditto

&gt; Source/WebCore/css/FontFace.cpp:354
&gt; +    if (!stretchWrapped.has_value())

ditto.

&gt; Source/WebCore/css/FontFace.cpp:377
&gt; +    if (!rangesWrapped.has_value())

ditto.

&gt; Source/WebCore/css/FontFace.cpp:392
&gt; +    if (!featureSettingsWrapped.has_value())

ditto.

&gt; Source/WebCore/css/FontFace.cpp:407
&gt; +    if (!loadingBehaviorWrapped.has_value())

ditto.

&gt; Source/WebCore/page/scrolling/ScrollSnapOffsetsInfo.cpp:116
&gt; +    if (originalOffsetForDirectionalSnapping.has_value()) {

ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:400
&gt; +        m_presentationSize = getVideoResolutionFromCaps(m_demuxerSrcPadCaps.get()).value_or(WebCore::FloatSize());

probably don&apos;t need the WebCore:: in WebCore.

&gt; Source/WebCore/svg/SVGSVGElement.cpp:317
&gt;          transform.setA(matrixInit.a.value());

*matrixInit.a ?

&gt; Source/WebCore/svg/SVGSVGElement.cpp:319
&gt;          transform.setB(matrixInit.b.value());

ditto.

&gt; Source/WebCore/svg/SVGSVGElement.cpp:321
&gt;          transform.setC(matrixInit.c.value());

ditto.

&gt; Source/WebCore/svg/SVGSVGElement.cpp:323
&gt;          transform.setD(matrixInit.d.value());

ditto.

&gt; Source/WebCore/svg/SVGSVGElement.cpp:325
&gt;          transform.setE(matrixInit.e.value());

ditto.

&gt; Source/WebCore/svg/SVGSVGElement.cpp:327
&gt;          transform.setF(matrixInit.f.value());

ditto.

&gt; Source/WebCore/svg/SVGTransform.h:81
&gt;              transform.setA(matrixInit.a.value());

ditto in this function.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:474
&gt; +    if (!orientation.has_value())

I don&apos;t think the .has_value() helps readability here.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:479
&gt; +    if (!widthVariant.has_value())

ditto.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:484
&gt; +    if (!textRenderingMode.has_value())

ditto.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:489
&gt; +    if (!size.has_value())

ditto.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:494
&gt; +    if (!syntheticBold.has_value())

ditto.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:499
&gt; +    if (!syntheticOblique.has_value())

ditto.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:509
&gt; +    if (!includesCreationData.has_value())

ditto.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:515
&gt; +        if (!fontFaceData.has_value())

ditto.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:520
&gt; +        if (!itemInCollection.has_value())

ditto.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:532
&gt; +        auto creationData = WebCore::FontPlatformData::CreationData { fontFaceData.value(), itemInCollection.value() };

I would prefer *fontFaceData instead of fontFaceData.value(). It is more concise.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:533
&gt; +        return WebCore::FontPlatformData(ctFont.get(), size.value(), syntheticBold.value(), syntheticOblique.value(), orientation.value(), widthVariant.value(), textRenderingMode.value(), &amp;creationData);

ditto.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:538
&gt; +    if (!referenceURL.has_value())

.has_value() is not really useful here.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:543
&gt; +    if (!postScriptName.has_value())

ditto.

&gt; Source/WebKit/Shared/Cocoa/WebCoreArgumentCodersCocoa.mm:552
&gt; +    return WebCore::FontPlatformData(ctFont.get(), size.value(), syntheticBold.value(), syntheticOblique.value(), orientation.value(), widthVariant.value(), textRenderingMode.value());

Could use * instead of .value().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765136</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-29 15:09:07 -0700</bug_when>
    <thetext>Committed r278244 (238281@main): &lt;https://commits.webkit.org/238281@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765137</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-29 15:10:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/78653580&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430059</attachid>
            <date>2021-05-28 14:51:14 -0700</date>
            <delta_ts>2021-05-28 17:28:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226395-20210528145113.patch</filename>
            <type>text/plain</type>
            <size>131341</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NjFmZTkzNzIwOTlhZjZjMTMwYjg0ZTA5ZTNjNmMzMDYxNzg0M2E3Li44YTkwOGJhMTMyZjJkMjQ5
MTMxZTY5YjYyYzQ4NTJiNDIxMjI4Y2Y1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wNS0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQ2xpZW50cyBvZiBvcHRpb25hbCBzaG91bGQgdXNlIGhhc192YWx1ZSBpbnN0ZWFk
IG9mIHJlbHlpbmcgb24gaGFzVmFsdWUgbWFjcm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjM5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6Cisg
ICAgICAgIChKU0M6OlJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZSk6IERvbid0IHVzZSBoYXNWYWx1
ZS4KKwogMjAyMS0wNS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTmV4dCBzdGVwIHRvd2FyZCB1c2luZyBzdGQ6Om9wdGlvbmFsIGRpcmVjdGx5IGluc3RlYWQg
b2YgdGhyb3VnaCBXVEY6Ok9wdGlvbmFsIHR5cGVkZWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYmI2MDMwNjk1ZWM4ZDU1M2M5
NjVmYjhhMjg0MzBkMTI5ODM3MTFlZS4uNDNkOWU3MDdkYTM2ZjkwNzYzNDdjZjYwNzRiZTE5YmE2
NjFjMzY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dU
Ri9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wNS0yOCAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xpZW50cyBvZiBvcHRpb25hbCBzaG91bGQgdXNl
IGhhc192YWx1ZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gaGFzVmFsdWUgbWFjcm8KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjM5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hlci5oOiBV
c2UgaGFzX3ZhbHVlLgorCisgICAgICAgICogd3RmL09wdGlvbmFsLmg6IFJlbW92ZSBoYXNWYWx1
ZSBtYWNyby4gTm90IG5lZWRlZCBhbnkgbW9yZSwgYnV0IGFsc28gYSBiaXQKKyAgICAgICAgZGFu
Z2Vyb3VzIGJlY2F1c2Ugb2YgaG93IHdpZGVzcHJlYWQgdGhlIHVzZSBvZiBoYXNWYWx1ZSBpcyBm
b3IgdGhpbmdzIG90aGVyCisgICAgICAgIHRoYW4gV1RGOjpPcHRpb25hbC4KKwogMjAyMS0wNS0y
NyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTmV4dCBzdGVwIHRv
d2FyZCB1c2luZyBzdGQ6Om9wdGlvbmFsIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhyb3VnaCBXVEY6
Ok9wdGlvbmFsIHR5cGVkZWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NTZhNTY3NzQyNzZmYWIyNmY0ZTg4ZTk5
MjFjYTUyMTA5ZjdhZmZkLi5hODgwNTBiZmI5ZjMwZTI5MDNkYjQxNjNiNDQ5ZmZlOTdhMWE0Y2Yy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMxIEBACisyMDIxLTA1LTI4ICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDbGllbnRzIG9mIG9wdGlvbmFsIHNob3VsZCB1
c2UgaGFzX3ZhbHVlIGluc3RlYWQgb2YgcmVseWluZyBvbiBoYXNWYWx1ZSBtYWNybworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2Mzk1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gc29tZSBmaWxlcyB3
ZSBhcmUgdG91Y2hpbmcsIG1vdmVkIGZyb20gT3B0aW9uYWwgdG8gc3RkOjpvcHRpb25hbCwgYnV0
IGRvaW5nCisgICAgICAgIHRoYXQgY29uc2lzdGVudGx5IGluIGZpbGVzIHdlIGFyZSBub3Qgb3Ro
ZXJ3aXNlIG1vZGlmeWluZyBpcyBvdXQgb2Ygc2NvcGUgaGVyZS4KKworICAgICAgICBJbiBzb21l
IHBsYWNlcywgdXNlIGhhc192YWx1ZSBpbnN0ZWFkIG9mIGhhc1ZhbHVlLiBJbiBvdGhlcnMsIGlt
cHJvdmVkIGZ1cnRoZXIKKyAgICAgICAgYnkgbm90IHVzaW5nIGhhc192YWx1ZSBleHBsaWNpdGx5
IHdoZW4gaXQncyBjbGVhcmVyIHRvIGRvIHNvLiBXYXNuJ3QgMTAwJQorICAgICAgICBjb25zaXN0
ZW50IGFib3V0IHRoYXQsIGJ1dCBkaWQgYWltIHRvIGNvdmVyIDEwMCUgb2YgdGhlIGhhc1ZhbHVl
IGNhbGwgc2l0ZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZSk6IERvbid0IHVzZSBo
YXNWYWx1ZS4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSRnJhbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViWFJGcmFtZTo6Z2V0Vmlld2VyUG9zZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6V2ViWFJGcmFtZTo6Z2V0UG9zZSk6IERpdHRvLgorICAgICAgICAqIE1vZHVsZXMv
d2VieHIvV2ViWFJHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlhSR2FtZXBhZDo6
V2ViWFJHYW1lcGFkKTogRGl0dG8uCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSSW5w
dXRTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViWFJJbnB1dFNvdXJjZTo6cmVxdWly
ZXNJbnB1dFNvdXJjZUNoYW5nZSk6IFVzZSBoYXNfdmFsdWUuCisgICAgICAgICogYmluZGluZ3Mv
anMvRE9NUHJvbWlzZVByb3h5Lmg6CisgICAgICAgIChXZWJDb3JlOjpET01Qcm9taXNlUHJveHk8
SURMVHlwZT46OmlzRnVsZmlsbGVkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
T01Qcm9taXNlUHJveHk8SURMVW5kZWZpbmVkPjo6aXNGdWxmaWxsZWQgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRPTVByb21pc2VQcm94eVdpdGhSZXNvbHZlQ2FsbGJhY2s8SURM
VHlwZT46OmlzRnVsZmlsbGVkIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpyZWFkVGVybWluYWwpOiBEaXR0by4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFj
ZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNldDo6YWRkVG9GYWNlc0xv
b2t1cFRhYmxlKTogUmVtb3ZlZCB1bm5lZWRlZCBkb3VibGUgY2hlY2sKKyAgICAgICAgb2Ygb3B0
aW9uYWwgdmFsdWUuICF4IGFuZCAheC5oYXNfdmFsdWUoKSBjaGVjayB0aGUgc2FtZSB0aGluZy4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0OjpyZW1vdmUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU2V0Ojpmb250RmFjZSk6IFNpbXBsaWZpZWQgY29kZSB3
aXRoIGV4dHJhIGxvY2FsIHZhcmlhYmxlcworICAgICAgICB0byB1c2UgYW4gaWRpb20gdGhhdCBk
b2VzIG5vdCB1c2UgaGFzVmFsdWUuIFNpbmNlIHVzaW5nICosIC0+LCBvciB2YWx1ZSgpIG9uIGFu
CisgICAgICAgIG9wdGlvbmFsIGFscmVhZHkgYXNzZXJ0cywgdGhlcmUgaXMgbm8gbmVlZCB0byBl
eHBsaWNpdGx5IGFzc2VydCBpbiB0aGUgY2FsbGVyLgorCisgICAgICAgICogY3NzL0NTU0dyYWRp
ZW50VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRTdG9wOjppc1NwZWNpZmll
ZCBjb25zdCk6IFVzZSBoYXNfdmFsdWUuCisKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9u
dEZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRS
YW5nZXMpOiBSZW1vdmVkIHVubmVlZGVkIGNhbGxzIHRvIGhhc1ZhbHVlLgorCisgICAgICAgICog
Y3NzL0ZvbnRGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpmYW1pbHkgY29u
c3QpOiBVc2UgaGFzX3ZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OnN0eWxlIGNv
bnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6d2VpZ2h0IGNvbnN0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6c3RyZXRjaCBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OnVuaWNvZGVSYW5nZSBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OmZlYXR1cmVTZXR0aW5ncyBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2U6OmRpc3BsYXkgY29uc3QpOiBEaXR0by4K
KyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnN1bWVBTlBsdXNCKTogRGl0dG8uCisgICAgICAgICogZGlzcGxheS9jc3MvRGlz
cGxheVN0eWxlLmg6IERpdHRvLgorICAgICAgICAqIGRvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5o
OiBEaXR0by4KKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnVwZGF0ZUhpZ2hsaWdodFBvc2l0aW9ucyk6IERpdHRvLgorICAgICAgICAqIGRv
bS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6YWRkRXZl
bnRMaXN0ZW5lcik6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpoYXNQZW5kaW5nQ29ycmVjdGlvbiBjb25zdCk6IERpdHRvLgorCisgICAgICAgICogZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZSk6IERvbid0IGNhbGwgaGFzVmFsdWUuCisgICAgICAgICog
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6OmNhcHRpb25EaXNwbGF5TW9kZSk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSW1hZ2VC
aXRtYXAuaDogRGl0dG8uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNj
cmVlblNpemVPdmVycmlkZSk6IFVzZSBoYXNfdmFsdWUuCisgICAgICAgICogbGF5b3V0L0xheW91
dFBoYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6UGhhc2VTY29wZTo6UGhhc2VT
Y29wZSk6IERpdHRvLgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5l
L0lubGluZUNvbnRlbnRCcmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lQ29udGVudEJyZWFrZXI6OnRyeUJyZWFraW5nVGV4dFJ1biBjb25zdCk6IERpdHRvLgorICAg
ICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUuaDogRGl0
dG8uCisgICAgICAgICogbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VBY2Nlc3NDb250cm9sTWF4QWdlKTogRGl0dG8uCisg
ICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpkZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIpOiBEaXR0by4KKyAgICAgICAgKiBwYWdl
L2lvcy9Db250ZW50Q2hhbmdlT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dENoYW5nZU9ic2VydmVyOjpTdHlsZUNoYW5nZVNjb3BlOjp+U3R5bGVDaGFuZ2VTY29wZSk6IERp
dHRvLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQW5kQXhpcyk6IERp
dHRvLgorCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlvbik6IERv
bid0IHVzZSBoYXNWYWx1ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2NvY29hL1N5c3RlbUJhdHRl
cnkubW06CisgICAgICAgIChXZWJDb3JlOjpzeXN0ZW1IYXNCYXR0ZXJ5KTogVXNlIGhhc192YWx1
ZS4KKyAgICAgICAgKFdlYkNvcmU6OnN5c3RlbUhhc0FDKTogVXNlIGhhc192YWx1ZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
Ojp3b3VsZFRhaW50T3JpZ2luIGNvbnN0KTogQ2hhbmdlZCBpZGlvbSB0byBub3QgdXNlIGhhc1Zh
bHVlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1T
dGF0ZS5oOiBVc2UgaGFzX3ZhbHVlLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9WaWRlb0Z1bGxz
Y3JlZW5JbnRlcmZhY2VBVktpdC5tbToKKyAgICAgICAgKFdlYkNvcmU6OnN1cHBvcnRzUGljdHVy
ZUluUGljdHVyZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9OU1Njcm9sbGVySW1w
RGV0YWlscy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVk
U2Nyb2xsZXJTdHlsZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNl
Ojppc1N5c3RlbVByZXZpZXcgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS94ci9v
cGVueHIvT3BlblhSSW5wdXRTb3VyY2UuY3BwOgorICAgICAgICAoUGxhdGZvcm1YUjo6T3BlblhS
SW5wdXRTb3VyY2U6OmdldElucHV0U291cmNlIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL0V2ZW50UmVnaW9uLmg6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL0dyaWRU
cmFja1NpemluZ0FsZ29yaXRobS5oOiBSZW1vdmUgdW5uZWNlc3NhcnkgYXNzZXJ0aW9uLCBzaW5j
ZQorICAgICAgICB0aGUgKiBvcGVyYXRvciBhbHJlYWR5IGRvZXMgdGhlIGFzc2VydGlvbi4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6Y2FuQ29tcHV0ZVBlcmNlbnRhZ2VGbGV4QmFzaXMpOiBV
c2UgaGFzX3ZhbHVlLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6c2V0RXhwbGljaXRWYWx1ZSk6IERpdHRv
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lSU9TOjpzeXN0ZW1Gb2N1c1JpbmdDb2xvcik6IERpdHRvLgorICAgICAg
ICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUcmVlQnVpbGRlcjo6cmVtb3ZlQW5vbnltb3VzV3JhcHBlcnNGb3JJbmxp
bmVDaGlsZHJlbklmTmVlZGVkKTogRGl0dG8uCisKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdUcmFuc2Zv
cm1Gcm9tTWF0cml4KTogQ2hhbmdlZCBpZGlvbSB0byBub3QKKyAgICAgICAgY2FsbCBoYXNWYWx1
ZS4KKyAgICAgICAgKiBzdmcvU1ZHVHJhbnNmb3JtLmg6IERpdHRvLgorICAgICAgICAqIHRlc3Rp
bmcvV2ViRmFrZVhSRGV2aWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkZha2VYUkRldmlj
ZTo6c2V0Vmlld3MpOiBEaXR0by4KKwogMjAyMS0wNS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgTmV4dCBzdGVwIHRvd2FyZCB1c2luZyBzdGQ6Om9wdGlvbmFs
IGRpcmVjdGx5IGluc3RlYWQgb2YgdGhyb3VnaCBXVEY6Ok9wdGlvbmFsIHR5cGVkZWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggYjc2MGQ2NDdkNjljZjEyNmE0YjQwMjAwODMxYTM3NmU2YTI2NmUxMC4uMGQwMzNjZDEx
ZDg0NjU1MTM0N2U4MGFmMTAzNjYzNWFjNTdkMzZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBA
QAorMjAyMS0wNS0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
Q2xpZW50cyBvZiBvcHRpb25hbCBzaG91bGQgdXNlIGhhc192YWx1ZSBpbnN0ZWFkIG9mIHJlbHlp
bmcgb24gaGFzVmFsdWUgbWFjcm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNjM5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1t
OiBSZW1vdmVkIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlLgorICAgICAgICAoSVBDOjpBcmd1bWVu
dENvZGVyPFJlZjxXZWJDb3JlOjpGb250Pj46OmRlY29kZVBsYXRmb3JtRGF0YSk6IFVzZSBoYXNf
dmFsdWUuCisgICAgICAgICogU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvQ29jb2EvWFBDU2Vy
dmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5tbToKKyAgICAgICAgKFdlYktpdDo6WFBDU2Vydmlj
ZUluaXRpYWxpemVyRGVsZWdhdGU6OmdldENsaWVudFNES1ZlcnNpb24pOiBEaXR0by4KKworICAg
ICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpk
ZWNvZGVJbWFnZSk6IENoYW5nZWQgaWRpb20gdG8gbm90IGNhbGwgaGFzVmFsdWUuCisgICAgICAg
IChJUEM6OkFyZ3VtZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZGVjb2RlKTogRGl0dG8uCisKKyAgICAg
ICAgKiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TWVkaWFGb3JtYXRSZWFkZXI6OmZpbmlzaFBhcnNpbmcpOiBVc2Ug
aGFzX3ZhbHVlLgorICAgICAgICAoV2ViS2l0OjpNZWRpYUZvcm1hdFJlYWRlcjo6Y29weVByb3Bl
cnR5KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Ok1lZGlhRm9ybWF0UmVhZGVyOjpjb3B5VHJh
Y2tBcnJheSk6IERpdHRvLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdDb25maWd1cmF0aW9uLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXdDb25maWd1cmF0aW9uIGVu
Y29kZVdpdGhDb2RlcjpdKTogQ2hhbmdlZCBpZGlvbSB0byBub3QgdXNlIGhhc1ZhbHVlLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6QXV0b21hdGlvbkNvbW1hbmRFcnJvcjo6dG9Qcm90b2NvbFN0cmluZyk6
IERpdHRvLgorCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNv
Y29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYXN0ZWJvYXJkUHJveHk6OmRldGVybWluZURh
dGFPd25lciBjb25zdCk6IFVzZSBoYXNfdmFsdWUuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
bWVkaWEvTWVkaWFTb3VyY2VQcml2YXRlUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWVk
aWFTb3VyY2VQcml2YXRlUmVtb3RlOjphZGRTb3VyY2VCdWZmZXIpOiBEaXR0by4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpwbGF0Zm9ybURpZFJlY2VpdmVMb2FkUGFyYW1ldGVycyk6IERpdHRvLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3M6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZCk6IENoYW5nZWQg
aWRpb20gdG8gbm90CisgICAgICAgIGNhbGwgaGFzVmFsdWUuCisKIDIwMjEtMDUtMjcgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE5leHQgc3RlcCB0b3dhcmQgdXNp
bmcgc3RkOjpvcHRpb25hbCBkaXJlY3RseSBpbnN0ZWFkIG9mIHRocm91Z2ggV1RGOjpPcHRpb25h
bCB0eXBlZGVmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAKaW5kZXggN2MxOGI4MTNkZmU2MzZkZDY0Y2M1OTk4ZDUyZjE0ZWI2MWU3
MzRlYi4uOWM0MDNjMmEwYzU3YmUwZmNkMWFlY2U3MjUyODI4ODliNzg1YTFkOCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApA
QCAtMTU4LDcgKzE1OCw3IEBAIFJlZ2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgYXV0byBmbGFncyA9IFlhcnI6OnBhcnNlRmxhZ3MobV9mbGFncy5z
dHJpbmcoKSk7Ci0gICAgQVNTRVJUKGZsYWdzLmhhc1ZhbHVlKCkpOworICAgIEFTU0VSVChmbGFn
cyk7CiAgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShnZW5lcmF0b3Iudm0oKSwg
bV9wYXR0ZXJuLnN0cmluZygpLCBmbGFncy52YWx1ZSgpKTsKICAgICBpZiAocmVnRXhwLT5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld1JlZ0V4cChnZW5lcmF0b3Iu
ZmluYWxEZXN0aW5hdGlvbihkc3QpLCByZWdFeHApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaAppbmRleCBmNmFhOTAzY2QyOTJl
NzM5MGZlYTc2MDI0NDJlM2IzZjY0ODkxZjZjLi44ZmU5YjI0MGMwZWZhYzcwOGFjODAzZjU1MDE1
MGQ4Y2E1OTM1MmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMjAsNyArMjAsNyBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPG9wdGlvbmFsPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVVJMLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQXRvbVN0cmluZy5oPgpAQCAtMTU5LDEwICsxNTksMTAgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVHVwbGVMaWtlPiBzdGQ6OmVuYWJsZV9pZl90PElzVHlwZUNvbXBsZXRlPHN0ZDo6dHVw
bGVfc2l6ZTxUdXAKICAgICBhZGRUdXBsZUxpa2VIZWxwZXIoaGFzaGVyLCB0dXBsZSwgc3RkOjpt
YWtlX2luZGV4X3NlcXVlbmNlPHN0ZDo6dHVwbGVfc2l6ZTxUdXBsZUxpa2U+Ojp2YWx1ZT4geyB9
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNv
bnN0IE9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYWRk
KEhhc2hlciYgaGFzaGVyLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKIHsKLSAg
ICBhZGQoaGFzaGVyLCBvcHRpb25hbC5oYXNWYWx1ZSgpKTsKLSAgICBpZiAob3B0aW9uYWwuaGFz
VmFsdWUoKSkKKyAgICBhZGQoaGFzaGVyLCBvcHRpb25hbC5oYXNfdmFsdWUoKSk7CisgICAgaWYg
KG9wdGlvbmFsLmhhc192YWx1ZSgpKQogICAgICAgICBhZGQoaGFzaGVyLCBvcHRpb25hbC52YWx1
ZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvT3B0aW9uYWwuaCBiL1NvdXJj
ZS9XVEYvd3RmL09wdGlvbmFsLmgKaW5kZXggNzlkZTkyNjY2NzBlYTNkYmRlZWY2MmMwODBlZjEz
NWRlNzc5MjIwMy4uYWRmNmZhODBjNGY5ZmUwODRkMjFjZDNlYzYzMWVjMjBhMDMwMDcxZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvT3B0aW9uYWwuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9P
cHRpb25hbC5oCkBAIC0yNiw3ICsyNiw2IEBAIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB1c2luZyBPcHRpb25hbCA9IHN0ZDo6b3B0aW9uYWw8VD47CiAKLS8vIEZJWE1F
OiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRoaXM7IGl0J3Mgb25seSB1c2VkIGluIDUgcGxhY2Vz
LgogdGVtcGxhdGU8dHlwZW5hbWUgT3B0aW9uYWxUeXBlLCBjbGFzcyBDYWxsYmFjaz4gYXV0byB2
YWx1ZU9yQ29tcHV0ZShPcHRpb25hbFR5cGUgb3B0aW9uYWwsIENhbGxiYWNrIGNhbGxiYWNrKSAt
PiB0eXBlbmFtZSBPcHRpb25hbFR5cGU6OnZhbHVlX3R5cGUKIHsKICAgICByZXR1cm4gb3B0aW9u
YWwgPyAqb3B0aW9uYWwgOiBjYWxsYmFjaygpOwpAQCAtMzYsNiArMzUsMyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcHRpb25hbFR5cGUsIGNsYXNzIENhbGxiYWNrPiBhdXRvIHZhbHVlT3JDb21wdXRl
KE9wdGlvbmFsVHlwZQogCiB1c2luZyBXVEY6Ok9wdGlvbmFsOwogdXNpbmcgV1RGOjp2YWx1ZU9y
Q29tcHV0ZTsKLQotLy8gRklYTUU6IFRoaXMgbWFjcm8gaXMgYSB3b3JrYXJvdW5kIHRvIGFsbG93
IHVzIHRvIHVzZSBzdGQ6Om9wdGlvbmFsIHdpdGhvdXQgYSBnbG9iYWwgcmVwbGFjZTsgaXQgY2Fu
IGJlIHJlbW92ZWQgYWZ0ZXIgdGhlIGdsb2JhbCByZXBsYWNlLgotI2RlZmluZSBoYXNWYWx1ZSBo
YXNfdmFsdWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250
ZXh0LmNwcAppbmRleCBmMDQ4MDY3NWZlZTU3ZmQ3NWNlMWUxOGQ3NjkwZjI3ZjAzZTg1OTBlLi5l
ZGYwMmIwNGMyMDc2MmNmYzUxOWQyMWQ5YzYzNTA5MTVkMzFhOGMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCkBAIC0xMDIsNyArMTAy
LDcgQEAgRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQ29udGV4dD4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
KERvY3VtZW50JiBkb2N1bWVudCwgQXVkaW9Db24KICAgICBpZiAoIWNvbnRleHRPcHRpb25zLnNh
bXBsZVJhdGUgJiYgZGVmYXVsdFNhbXBsZVJhdGVGb3JUZXN0aW5nKCkpCiAgICAgICAgIGNvbnRl
eHRPcHRpb25zLnNhbXBsZVJhdGUgPSAqZGVmYXVsdFNhbXBsZVJhdGVGb3JUZXN0aW5nKCk7CiAK
LSAgICBpZiAoY29udGV4dE9wdGlvbnMuc2FtcGxlUmF0ZS5oYXNWYWx1ZSgpICYmICFpc1N1cHBv
cnRlZFNhbXBsZVJhdGUoY29udGV4dE9wdGlvbnMuc2FtcGxlUmF0ZS52YWx1ZSgpKSkKKyAgICBp
ZiAoY29udGV4dE9wdGlvbnMuc2FtcGxlUmF0ZSAmJiAhaXNTdXBwb3J0ZWRTYW1wbGVSYXRlKCpj
b250ZXh0T3B0aW9ucy5zYW1wbGVSYXRlKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5
bnRheEVycm9yLCAic2FtcGxlUmF0ZSBpcyBub3QgaW4gcmFuZ2UiX3MgfTsKICAgICAKICAgICBh
dXRvIGF1ZGlvQ29udGV4dCA9IGFkb3B0UmVmKCpuZXcgQXVkaW9Db250ZXh0KGRvY3VtZW50LCBj
b250ZXh0T3B0aW9ucykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4
ci9XZWJYUkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJGcmFt
ZS5jcHAKaW5kZXggOWIwNWY3MGU0NWE4OThkZDM2ZTUxMzQyNmYwZTYwODNhMzg3YWViOS4uMjMz
M2Q2OTA0YWMzNDMxMTI3M2Q1NWNiYWQwMDAyNGYzMGNjMTlmYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnhyL1dlYlhSRnJhbWUuY3BwCkBAIC05Niw3ICs5Niw3IEBAIHN0cnVjdCBX
ZWJYUkZyYW1lOjpQb3B1bGF0ZWRQb3NlIHsKIH07CiAKIC8vIGh0dHBzOi8vaW1tZXJzaXZlLXdl
Yi5naXRodWIuaW8vd2VieHIvI3BvcHVsYXRlLXRoZS1wb3NlCi1FeGNlcHRpb25PcjxPcHRpb25h
bDxXZWJYUkZyYW1lOjpQb3B1bGF0ZWRQb3NlPj4gV2ViWFJGcmFtZTo6cG9wdWxhdGVQb3NlKGNv
bnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgV2ViWFJTcGFjZSYgc3BhY2UsIGNvbnN0IFdl
YlhSU3BhY2UmIGJhc2VTcGFjZSkKK0V4Y2VwdGlvbk9yPHN0ZDo6b3B0aW9uYWw8V2ViWFJGcmFt
ZTo6UG9wdWxhdGVkUG9zZT4+IFdlYlhSRnJhbWU6OnBvcHVsYXRlUG9zZShjb25zdCBEb2N1bWVu
dCYgZG9jdW1lbnQsIGNvbnN0IFdlYlhSU3BhY2UmIHNwYWNlLCBjb25zdCBXZWJYUlNwYWNlJiBi
YXNlU3BhY2UpCiB7CiAgICAgLy8gMS4gSWYgZnJhbWXigJlzIGFjdGl2ZSBib29sZWFuIGlzIGZh
bHNlLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuCiAg
ICAgaWYgKCFtX2FjdGl2ZSkKQEAgLTE1OSw3ICsxNTksNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8
V2ViWFJWaWV3ZXJQb3NlPj4gV2ViWFJGcmFtZTo6Z2V0Vmlld2VyUG9zZShjb25zdCBEb2N1bWVu
dCYgZAogCiAgICAgLy8gNi4gSWYgcG9zZSBpcyBudWxsIHJldHVybiBudWxsLgogICAgIGF1dG8g
cG9wdWxhdGVWYWx1ZSA9IHBvcHVsYXRlUG9zZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsK
LSAgICBpZiAoIXBvcHVsYXRlVmFsdWUuaGFzVmFsdWUoKSkKKyAgICBpZiAoIXBvcHVsYXRlVmFs
dWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPFdlYlhSVmlld2VyUG9z
ZT4gcG9zZSA9IFdlYlhSVmlld2VyUG9zZTo6Y3JlYXRlKFdlYlhSUmlnaWRUcmFuc2Zvcm06OmNy
ZWF0ZShwb3B1bGF0ZVZhbHVlLT50cmFuc2Zvcm0pLCBwb3B1bGF0ZVZhbHVlLT5lbXVsYXRlZFBv
c2l0aW9uKTsKQEAgLTIyNyw3ICsyMjcsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8V2ViWFJQb3Nl
Pj4gV2ViWFJGcmFtZTo6Z2V0UG9zZShjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbgogICAg
ICAgICByZXR1cm4gcG9wdWxhdGVQb3NlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKIAogICAg
IGF1dG8gcG9wdWxhdGVWYWx1ZSA9IHBvcHVsYXRlUG9zZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFs
dWUoKTsKLSAgICBpZiAoIXBvcHVsYXRlVmFsdWUuaGFzVmFsdWUoKSkKKyAgICBpZiAoIXBvcHVs
YXRlVmFsdWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gNC4gUmV0dXJuIHBv
c2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSR2FtZXBh
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSR2FtZXBhZC5jcHAKaW5k
ZXggNzJmZGY1NWFjNDg5YjgxMTgwOWVhNjgwMjg2OGQzZjAxYzgyYzYzYS4uNTI4NjgxMDg5ZTVh
M2M1ZDFiMmNhOTQ1NGNjMjM1NGY1YjA2MjU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ4ci9XZWJYUkdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2VieHIvV2ViWFJHYW1lcGFkLmNwcApAQCAtNDYsNyArNDYsNyBAQCBXZWJYUkdhbWVwYWQ6
OldlYlhSR2FtZXBhZChkb3VibGUgdGltZXN0YW1wLCBkb3VibGUgY29ubmVjdFRpbWUsIGNvbnN0
IFBsYXRmb3JtWAogICAgIG1fY29ubmVjdFRpbWUgPSBNb25vdG9uaWNUaW1lOjpmcm9tUmF3U2Vj
b25kcyhTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKGNvbm5lY3RUaW1lKS52YWx1ZSgpKTsKICAg
ICAvLyBJbiBvcmRlciB0byByZXBvcnQgYSBtYXBwaW5nIG9mICJ4ci1zdGFuZGFyZCIgdGhlIGRl
dmljZSBNVVNUIHJlcG9ydCBhIHRhcmdldFJheU1vZGUgb2YgInRyYWNrZWQtcG9pbnRlciIgYW5k
IE1VU1QgaGF2ZSBhIG5vbi1udWxsIGdyaXBTcGFjZS4KICAgICAvLyBJdCBNVVNUIGhhdmUgYXQg
bGVhc3Qgb25lIHByaW1hcnkgdHJpZ2dlciwgc2VwYXJhdGUgZnJvbSBhbnkgdG91Y2hwYWRzIG9y
IHRodW1ic3RpY2tzCi0gICAgaWYgKHNvdXJjZS50YXJnZXRSYXlNb2RlID09IFhSVGFyZ2V0UmF5
TW9kZTo6VHJhY2tlZFBvaW50ZXIgJiYgIXNvdXJjZS5idXR0b25zLmlzRW1wdHkoKSAmJiBzb3Vy
Y2UuZ3JpcE9yaWdpbi5oYXNWYWx1ZSgpKQorICAgIGlmIChzb3VyY2UudGFyZ2V0UmF5TW9kZSA9
PSBYUlRhcmdldFJheU1vZGU6OlRyYWNrZWRQb2ludGVyICYmICFzb3VyY2UuYnV0dG9ucy5pc0Vt
cHR5KCkgJiYgc291cmNlLmdyaXBPcmlnaW4pCiAgICAgICAgIG1fbWFwcGluZyA9IHhyU3RhbmRh
cmRHYW1lcGFkTWFwcGluZ1N0cmluZygpOwogICAgIG1fYXhlcyA9IHNvdXJjZS5heGVzLm1hcChb
XShhdXRvIHZhbHVlKSB7CiAgICAgICAgIHJldHVybiBTaGFyZWRHYW1lcGFkVmFsdWUodmFsdWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUklucHV0U291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJbnB1dFNvdXJjZS5j
cHAKaW5kZXggM2Q4NmIyMjBlN2NhMGUwY2E5ODFlYjI5NDMwYmRkOGZmNDgyYmQyOS4uMjYzYmI1
ODI2ZmQ4M2QzZTNhODVjYmE2MzE3YmNlOTBiMzVhNzNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUklucHV0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSSW5wdXRTb3VyY2UuY3BwCkBAIC05Myw3ICs5Myw3IEBA
IGJvb2wgV2ViWFJJbnB1dFNvdXJjZTo6cmVxdWlyZXNJbnB1dFNvdXJjZUNoYW5nZShjb25zdCBJ
bnB1dFNvdXJjZSYgc291cmNlKQogICAgIHJldHVybiBtX3NvdXJjZS5oYW5kZW5lc3MgIT0gc291
cmNlLmhhbmRlbmVzcwogICAgICAgICB8fCBtX3NvdXJjZS50YXJnZXRSYXlNb2RlICE9IHNvdXJj
ZS50YXJnZXRSYXlNb2RlCiAgICAgICAgIHx8IG1fc291cmNlLnByb2ZpbGVzICE9IHNvdXJjZS5w
cm9maWxlcwotICAgICAgICB8fCBzdGF0aWNfY2FzdDxib29sPihtX2dyaXBTcGFjZSkgIT0gc291
cmNlLmdyaXBPcmlnaW4uaGFzVmFsdWUoKTsKKyAgICAgICAgfHwgc3RhdGljX2Nhc3Q8Ym9vbD4o
bV9ncmlwU3BhY2UpICE9IHNvdXJjZS5ncmlwT3JpZ2luLmhhc192YWx1ZSgpOwogfQogCiB2b2lk
IFdlYlhSSW5wdXRTb3VyY2U6OmRpc2Nvbm5lY3QoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRE9NUHJvbWlzZVByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01Qcm9taXNlUHJveHkuaAppbmRleCA2NGMzYmQ2Mjk5Y2ViMzYwM2EzYWFmODM4NGQ3
MzE5NTc2ZTIxZmNjLi4zODI5YzFlMWQwNTRhYWQ1MGZiMTlhYmY3MmM0MGZiOTczMDFhOWQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01Qcm9taXNlUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01Qcm9taXNlUHJveHkuaApAQCAtMTQ5
LDcgKzE0OSw3IEBAIGlubGluZSB2b2lkIERPTVByb21pc2VQcm94eTxJRExUeXBlPjo6Y2xlYXIo
KQogdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KIGlubGluZSBib29sIERPTVByb21pc2VQcm94
eTxJRExUeXBlPjo6aXNGdWxmaWxsZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX3ZhbHVlT3JF
eGNlcHRpb24uaGFzVmFsdWUoKTsKKyAgICByZXR1cm4gbV92YWx1ZU9yRXhjZXB0aW9uLmhhc192
YWx1ZSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgpAQCAtMjE4LDcgKzIxOCw3
IEBAIGlubGluZSB2b2lkIERPTVByb21pc2VQcm94eTxJRExVbmRlZmluZWQ+OjpjbGVhcigpCiAK
IGlubGluZSBib29sIERPTVByb21pc2VQcm94eTxJRExVbmRlZmluZWQ+Ojppc0Z1bGZpbGxlZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdmFsdWVPckV4Y2VwdGlvbi5oYXNWYWx1ZSgpOworICAg
IHJldHVybiBtX3ZhbHVlT3JFeGNlcHRpb24uaGFzX3ZhbHVlKCk7CiB9CiAKIGlubGluZSB2b2lk
IERPTVByb21pc2VQcm94eTxJRExVbmRlZmluZWQ+OjpyZXNvbHZlKCkKQEAgLTI4OCw3ICsyODgs
NyBAQCBpbmxpbmUgdm9pZCBET01Qcm9taXNlUHJveHlXaXRoUmVzb2x2ZUNhbGxiYWNrPElETFR5
cGU+OjpjbGVhcigpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgogaW5saW5lIGJvb2wgRE9N
UHJvbWlzZVByb3h5V2l0aFJlc29sdmVDYWxsYmFjazxJRExUeXBlPjo6aXNGdWxmaWxsZWQoKSBj
b25zdAogewotICAgIHJldHVybiBtX3ZhbHVlT3JFeGNlcHRpb24uaGFzVmFsdWUoKTsKKyAgICBy
ZXR1cm4gbV92YWx1ZU9yRXhjZXB0aW9uLmhhc192YWx1ZSgpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggZDUwOTk2NjU2MzllZTdkYjNmMzZlMGM2OGZmZjE4
MmU5N2JiMjNjMC4uMDAwODc0OTkwNzYyMzkyMGUxYmEzOGQzZjRiMTE2Zjk2Y2I2NDdhNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCkBAIC0zNDgyLDcgKzM0ODIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFy
ZWFkU3RyaW5nRGF0YShmbGFncykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAgICAgICAgIGF1dG8gcmVGbGFncyA9IFlhcnI6OnBhcnNlRmxhZ3MoZmxhZ3MtPnN0cmlu
ZygpKTsKLSAgICAgICAgICAgIEFTU0VSVChyZUZsYWdzLmhhc1ZhbHVlKCkpOworICAgICAgICAg
ICAgQVNTRVJUKHJlRmxhZ3MuaGFzX3ZhbHVlKCkpOwogICAgICAgICAgICAgVk0mIHZtID0gbV9s
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBS
ZWdFeHA6OmNyZWF0ZSh2bSwgcGF0dGVybi0+c3RyaW5nKCksIHJlRmxhZ3MudmFsdWUoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIG1fZ2xvYmFsT2JqZWN0
LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
ZXQuY3BwCmluZGV4IDYzNGU3ODBjODk2ZGEwMGFhMGEzNzk3NWMxODFiYjYyMWZkNTBiMDMuLjdi
NDI4NzFkMmI5NTMzOGNjZjVjOTYxZjk4MzQ0NjYwY2NkMTJkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlU2V0LmNwcApAQCAtMTYyLDcgKzE2Miw3IEBAIFN0cmluZyBDU1NGb250RmFj
ZVNldDo6ZmFtaWx5TmFtZUZyb21QcmltaXRpdmUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZh
bHVlKQogCiB2b2lkIENTU0ZvbnRGYWNlU2V0OjphZGRUb0ZhY2VzTG9va3VwVGFibGUoQ1NTRm9u
dEZhY2UmIGZhY2UpCiB7Ci0gICAgaWYgKCFmYWNlLmZhbWlsaWVzKCkgfHwgIWZhY2UuZmFtaWxp
ZXMoKS5oYXNWYWx1ZSgpKQorICAgIGlmICghZmFjZS5mYW1pbGllcygpKQogICAgICAgICByZXR1
cm47CiAgICAgYXV0byBmYW1pbGllcyA9IGZhY2UuZmFtaWxpZXMoKS52YWx1ZSgpOwogCkBAIC0y
NDUsNyArMjQ1LDcgQEAgdm9pZCBDU1NGb250RmFjZVNldDo6cmVtb3ZlKGNvbnN0IENTU0ZvbnRG
YWNlJiBmYWNlKQogICAgICAgICBvYnNlcnZlcigpOwogICAgIH0pOwogICAgIAotICAgIGlmIChm
YWNlLmZhbWlsaWVzKCkgJiYgZmFjZS5mYW1pbGllcygpLmhhc1ZhbHVlKCkpCisgICAgaWYgKGZh
Y2UuZmFtaWxpZXMoKSkKICAgICAgICAgcmVtb3ZlRnJvbUZhY2VzTG9va3VwVGFibGUoZmFjZSwg
KmZhY2UuZmFtaWxpZXMoKS52YWx1ZSgpKTsKIAogICAgIGlmIChmYWNlLmNzc0Nvbm5lY3Rpb24o
KSkgewpAQCAtNDUxLDI1ICs0NTEsMjEgQEAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIENTU0ZvbnRG
YWNlU2V0Ojpmb250RmFjZShGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBjb24KICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDU1NGb250RmFjZT4sIDMyPiBjYW5kaWRhdGVG
b250RmFjZXM7CiAgICAgZm9yIChpbnQgaSA9IGZhbWlseUZvbnRGYWNlcy5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkgewogICAgICAgICBDU1NGb250RmFjZSYgY2FuZGlkYXRlID0gZmFtaWx5Rm9u
dEZhY2VzW2ldOwotICAgICAgICBhdXRvIGNhcGFiaWxpdGllc1dyYXBwZWQgPSBjYW5kaWRhdGUu
Zm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcygpOwotICAgICAgICBpZiAoIWNhcGFiaWxpdGllc1dy
YXBwZWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhdXRvIGNh
cGFiaWxpdGllcyA9IGNhcGFiaWxpdGllc1dyYXBwZWQudmFsdWUoKTsKLSAgICAgICAgaWYgKCFp
c0l0YWxpYyhyZXF1ZXN0LnNsb3BlKSAmJiBpc0l0YWxpYyhjYXBhYmlsaXRpZXMuc2xvcGUubWlu
aW11bSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2FuZGlkYXRlRm9udEZhY2Vz
LmFwcGVuZChjYW5kaWRhdGUpOworICAgICAgICBpZiAoYXV0byBjYXBhYmlsaXRpZXMgPSBjYW5k
aWRhdGUuZm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcygpKSB7CisgICAgICAgICAgICBpZiAoIWlz
SXRhbGljKHJlcXVlc3Quc2xvcGUpICYmIGlzSXRhbGljKGNhcGFiaWxpdGllcy0+c2xvcGUubWlu
aW11bSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjYW5kaWRhdGVG
b250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBhdXRv
IGxvY2FsSXRlcmF0b3IgPSBtX2xvY2FsbHlJbnN0YWxsZWRGYWNlc0xvb2t1cFRhYmxlLmZpbmQo
ZmFtaWx5KTsKICAgICBpZiAobG9jYWxJdGVyYXRvciAhPSBtX2xvY2FsbHlJbnN0YWxsZWRGYWNl
c0xvb2t1cFRhYmxlLmVuZCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbG9j
YWxJdGVyYXRvci0+dmFsdWUpIHsKLSAgICAgICAgICAgIGF1dG8gY2FwYWJpbGl0aWVzV3JhcHBl
ZCA9IGNhbmRpZGF0ZS0+Zm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcygpOwotICAgICAgICAgICAg
aWYgKCFjYXBhYmlsaXRpZXNXcmFwcGVkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBhdXRvIGNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllc1dyYXBw
ZWQudmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghaXNJdGFsaWMocmVxdWVzdC5zbG9wZSkgJiYg
aXNJdGFsaWMoY2FwYWJpbGl0aWVzLnNsb3BlLm1pbmltdW0pKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgY2FuZGlkYXRlRm9udEZhY2VzLmFwcGVuZChjYW5kaWRhdGUp
OworICAgICAgICAgICAgaWYgKGF1dG8gY2FwYWJpbGl0aWVzID0gY2FuZGlkYXRlLT5mb250U2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSXRhbGljKHJl
cXVlc3Quc2xvcGUpICYmIGlzSXRhbGljKGNhcGFiaWxpdGllcy0+c2xvcGUubWluaW11bSkpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUZv
bnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KIApAQCAtNDc3LDM1ICs0NzMsMzAgQEAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIENTU0ZvbnRG
YWNlU2V0Ojpmb250RmFjZShGb250U2VsZWN0aW9uUmVxdWVzdCByZXF1ZXN0LCBjb24KICAgICAg
ICAgVmVjdG9yPEZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXM+IGNhcGFiaWxpdGllczsKICAgICAg
ICAgY2FwYWJpbGl0aWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2FuZGlkYXRlRm9udEZhY2Vz
LnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgZmFjZSA6IGNhbmRpZGF0ZUZvbnRGYWNlcykg
ewotICAgICAgICAgICAgYXV0byBmb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzV3JhcHBlZCA9IGZh
Y2UuZ2V0KCkuZm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcygpOwotICAgICAgICAgICAgQVNTRVJU
KGZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXNXcmFwcGVkLmhhc1ZhbHVlKCkpOwotICAgICAgICAg
ICAgYXV0byBmb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzID0gZm9udFNlbGVjdGlvbkNhcGFiaWxp
dGllc1dyYXBwZWQudmFsdWUoKTsKLSAgICAgICAgICAgIGNhcGFiaWxpdGllcy51bmNoZWNrZWRB
cHBlbmQoZm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcyk7CisgICAgICAgICAgICBhdXRvIGZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXMgPSBmYWNlLmdldCgpLmZvbnRTZWxlY3Rpb25DYXBhYmlsaXRp
ZXMoKTsKKyAgICAgICAgICAgIGNhcGFiaWxpdGllcy51bmNoZWNrZWRBcHBlbmQoKmZvbnRTZWxl
Y3Rpb25DYXBhYmlsaXRpZXMpOwogICAgICAgICB9CiAgICAgICAgIEZvbnRTZWxlY3Rpb25BbGdv
cml0aG0gZm9udFNlbGVjdGlvbkFsZ29yaXRobShyZXF1ZXN0LCBjYXBhYmlsaXRpZXMpOwogICAg
ICAgICBzdGQ6OnN0YWJsZV9zb3J0KGNhbmRpZGF0ZUZvbnRGYWNlcy5iZWdpbigpLCBjYW5kaWRh
dGVGb250RmFjZXMuZW5kKCksIFsmZm9udFNlbGVjdGlvbkFsZ29yaXRobV0oY29uc3QgQ1NTRm9u
dEZhY2UmIGZpcnN0LCBjb25zdCBDU1NGb250RmFjZSYgc2Vjb25kKSB7Ci0gICAgICAgICAgICBh
dXRvIGZpcnN0Q2FwYWJpbGl0aWVzV3JhcHBlZCA9IGZpcnN0LmZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXMoKTsKLSAgICAgICAgICAgIGF1dG8gc2Vjb25kQ2FwYWJpbGl0aWVzV3JhcHBlZCA9IHNl
Y29uZC5mb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzKCk7Ci0gICAgICAgICAgICBBU1NFUlQoZmly
c3RDYXBhYmlsaXRpZXNXcmFwcGVkLmhhc1ZhbHVlKCkgJiYgc2Vjb25kQ2FwYWJpbGl0aWVzV3Jh
cHBlZC5oYXNWYWx1ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gZmlyc3RDYXBhYmlsaXRpZXMgPSBm
aXJzdC5mb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzKCk7CisgICAgICAgICAgICBhdXRvIHNlY29u
ZENhcGFiaWxpdGllcyA9IHNlY29uZC5mb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzKCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gZmlyc3RDYXBhYmlsaXRpZXMgPSBmaXJzdENhcGFi
aWxpdGllc1dyYXBwZWQudmFsdWUoKTsKLSAgICAgICAgICAgIGF1dG8gc2Vjb25kQ2FwYWJpbGl0
aWVzID0gc2Vjb25kQ2FwYWJpbGl0aWVzV3JhcHBlZC52YWx1ZSgpOwotICAgICAgICAgICAgYXV0
byBzdHJldGNoRGlzdGFuY2VGaXJzdCA9IGZvbnRTZWxlY3Rpb25BbGdvcml0aG0uc3RyZXRjaERp
c3RhbmNlKGZpcnN0Q2FwYWJpbGl0aWVzKS5kaXN0YW5jZTsKLSAgICAgICAgICAgIGF1dG8gc3Ry
ZXRjaERpc3RhbmNlU2Vjb25kID0gZm9udFNlbGVjdGlvbkFsZ29yaXRobS5zdHJldGNoRGlzdGFu
Y2Uoc2Vjb25kQ2FwYWJpbGl0aWVzKS5kaXN0YW5jZTsKKyAgICAgICAgICAgIGF1dG8gc3RyZXRj
aERpc3RhbmNlRmlyc3QgPSBmb250U2VsZWN0aW9uQWxnb3JpdGhtLnN0cmV0Y2hEaXN0YW5jZSgq
Zmlyc3RDYXBhYmlsaXRpZXMpLmRpc3RhbmNlOworICAgICAgICAgICAgYXV0byBzdHJldGNoRGlz
dGFuY2VTZWNvbmQgPSBmb250U2VsZWN0aW9uQWxnb3JpdGhtLnN0cmV0Y2hEaXN0YW5jZSgqc2Vj
b25kQ2FwYWJpbGl0aWVzKS5kaXN0YW5jZTsKICAgICAgICAgICAgIGlmIChzdHJldGNoRGlzdGFu
Y2VGaXJzdCA8IHN0cmV0Y2hEaXN0YW5jZVNlY29uZCkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIGlmIChzdHJldGNoRGlzdGFuY2VGaXJzdCA+IHN0cmV0Y2hEaXN0
YW5jZVNlY29uZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
IGF1dG8gc3R5bGVEaXN0YW5jZUZpcnN0ID0gZm9udFNlbGVjdGlvbkFsZ29yaXRobS5zdHlsZURp
c3RhbmNlKGZpcnN0Q2FwYWJpbGl0aWVzKS5kaXN0YW5jZTsKLSAgICAgICAgICAgIGF1dG8gc3R5
bGVEaXN0YW5jZVNlY29uZCA9IGZvbnRTZWxlY3Rpb25BbGdvcml0aG0uc3R5bGVEaXN0YW5jZShz
ZWNvbmRDYXBhYmlsaXRpZXMpLmRpc3RhbmNlOworICAgICAgICAgICAgYXV0byBzdHlsZURpc3Rh
bmNlRmlyc3QgPSBmb250U2VsZWN0aW9uQWxnb3JpdGhtLnN0eWxlRGlzdGFuY2UoKmZpcnN0Q2Fw
YWJpbGl0aWVzKS5kaXN0YW5jZTsKKyAgICAgICAgICAgIGF1dG8gc3R5bGVEaXN0YW5jZVNlY29u
ZCA9IGZvbnRTZWxlY3Rpb25BbGdvcml0aG0uc3R5bGVEaXN0YW5jZSgqc2Vjb25kQ2FwYWJpbGl0
aWVzKS5kaXN0YW5jZTsKICAgICAgICAgICAgIGlmIChzdHlsZURpc3RhbmNlRmlyc3QgPCBzdHls
ZURpc3RhbmNlU2Vjb25kKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgaWYgKHN0eWxlRGlzdGFuY2VGaXJzdCA+IHN0eWxlRGlzdGFuY2VTZWNvbmQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBhdXRvIHdlaWdodERpc3RhbmNl
Rmlyc3QgPSBmb250U2VsZWN0aW9uQWxnb3JpdGhtLndlaWdodERpc3RhbmNlKGZpcnN0Q2FwYWJp
bGl0aWVzKS5kaXN0YW5jZTsKLSAgICAgICAgICAgIGF1dG8gd2VpZ2h0RGlzdGFuY2VTZWNvbmQg
PSBmb250U2VsZWN0aW9uQWxnb3JpdGhtLndlaWdodERpc3RhbmNlKHNlY29uZENhcGFiaWxpdGll
cykuZGlzdGFuY2U7CisgICAgICAgICAgICBhdXRvIHdlaWdodERpc3RhbmNlRmlyc3QgPSBmb250
U2VsZWN0aW9uQWxnb3JpdGhtLndlaWdodERpc3RhbmNlKCpmaXJzdENhcGFiaWxpdGllcykuZGlz
dGFuY2U7CisgICAgICAgICAgICBhdXRvIHdlaWdodERpc3RhbmNlU2Vjb25kID0gZm9udFNlbGVj
dGlvbkFsZ29yaXRobS53ZWlnaHREaXN0YW5jZSgqc2Vjb25kQ2FwYWJpbGl0aWVzKS5kaXN0YW5j
ZTsKICAgICAgICAgICAgIGlmICh3ZWlnaHREaXN0YW5jZUZpcnN0IDwgd2VpZ2h0RGlzdGFuY2VT
ZWNvbmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKaW5kZXggNjg2NDlh
NDlkMTAyYWQ5YmE0MmU4N2UwNTE3YWFjYzllYzRmZjZmOS4uYTAwYzIwYmYzYTBhOGRkMjRlNDQ3
N2YwM2VkNzczNTRlYzVhOTc0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmNwcApAQCAtNjksOSArNjksOSBAQCBSZWZQdHI8SW1hZ2U+IENTU0dyYWRpZW50VmFsdWU6Omlt
YWdlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpemUmCiAKIHN0cnVjdCBH
cmFkaWVudFN0b3AgewogICAgIENvbG9yIGNvbG9yOwotICAgIE9wdGlvbmFsPGZsb2F0PiBvZmZz
ZXQ7CisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gb2Zmc2V0OwogCi0gICAgYm9vbCBpc1NwZWNp
ZmllZCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNldC5oYXNWYWx1ZSgpOyB9CisgICAgYm9vbCBpc1Nw
ZWNpZmllZCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNldC5oYXNfdmFsdWUoKTsgfQogICAgIGJvb2wg
aXNNaWRwb2ludCgpIGNvbnN0IHsgcmV0dXJuICFjb2xvci5pc1ZhbGlkKCk7IH0KIH07CiAKQEAg
LTI0MSw3ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBudW1TdG9wcyA9IHN0b3Bz
LnNpemUoKTsKICAgICAgICAgc2l6ZV90IGxhc3RTdG9wSW5kZXggPSBudW1TdG9wcyAtIDE7CiAK
LSAgICAgICAgT3B0aW9uYWw8c2l6ZV90PiBmaXJzdFplcm9PckdyZWF0ZXJJbmRleDsKKyAgICAg
ICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsKICAgICAgICAgICAgIGlm
ICgqc3RvcHNbaV0ub2Zmc2V0ID49IDApIHsKICAgICAgICAgICAgICAgICBmaXJzdFplcm9Pckdy
ZWF0ZXJJbmRleCA9IGk7CkBAIC0yNzEsNyArMjcxLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIHN0b3Aub2Zmc2V0ID0gMDsKICAgICAgICAgfQogCi0gICAgICAgIE9wdGlvbmFsPHNpemVf
dD4gbGFzdE9uZU9yTGVzc0luZGV4OworICAgICAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGFz
dE9uZU9yTGVzc0luZGV4OwogICAgICAgICBmb3IgKGludCBpID0gbGFzdFN0b3BJbmRleDsgaSA+
PSAwOyAtLWkpIHsKICAgICAgICAgICAgIGlmICgqc3RvcHNbaV0ub2Zmc2V0IDw9IDEpIHsKICAg
ICAgICAgICAgICAgICBsYXN0T25lT3JMZXNzSW5kZXggPSBpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKaW5kZXggZTM4MmY5YTJhODhhN2UzMjZmN2MwNTQy
NTkxMTdhZmE1NWQzMzU2Ni4uYTY0YWQ1YWUyM2I2NjU5ZWRlYmIwMzE3ZDYwMDFhYTcwYmIxMzYz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCkBAIC0x
MjAsOSArMTIwLDcgQEAgRm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbmdl
cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGkKICAgICAgICAgaWYgKGZhY2Ut
PmNvbXB1dGVGYWlsdXJlU3RhdGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGF1dG8gc2VsZWN0aW9uQ2FwYWJpbGl0aWVzV3JhcHBlZCA9IGZhY2UtPmZvbnRTZWxlY3Rpb25D
YXBhYmlsaXRpZXMoKTsKLSAgICAgICAgQVNTRVJUKHNlbGVjdGlvbkNhcGFiaWxpdGllc1dyYXBw
ZWQuaGFzVmFsdWUoKSk7Ci0gICAgICAgIGF1dG8gc2VsZWN0aW9uQ2FwYWJpbGl0aWVzID0gc2Vs
ZWN0aW9uQ2FwYWJpbGl0aWVzV3JhcHBlZC52YWx1ZSgpOworICAgICAgICBhdXRvIHNlbGVjdGlv
bkNhcGFiaWxpdGllcyA9ICpmYWNlLT5mb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzKCk7CiAKICAg
ICAgICAgYm9vbCBzeW50aGV0aWNCb2xkID0gKGZvbnREZXNjcmlwdGlvbi5mb250U3ludGhlc2lz
KCkgJiBGb250U3ludGhlc2lzV2VpZ2h0KSAmJiAhaXNGb250V2VpZ2h0Qm9sZChzZWxlY3Rpb25D
YXBhYmlsaXRpZXMud2VpZ2h0Lm1heGltdW0pICYmIGlzRm9udFdlaWdodEJvbGQoZGVzaXJlZFJl
cXVlc3Qud2VpZ2h0KTsKICAgICAgICAgYm9vbCBzeW50aGV0aWNJdGFsaWMgPSAoZm9udERlc2Ny
aXB0aW9uLmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNTdHlsZSkgJiYgIWlzSXRhbGlj
KHNlbGVjdGlvbkNhcGFiaWxpdGllcy5zbG9wZS5tYXhpbXVtKSAmJiBpc0l0YWxpYyhkZXNpcmVk
UmVxdWVzdC5zbG9wZSk7CkBAIC0xMzIsMTAgKzEzMCw3IEBAIEZvbnRSYW5nZXMgQ1NTU2VnbWVu
dGVkRm9udEZhY2U6OmZvbnRSYW5nZXMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpCiAgICAgICAgIGlmIChyYW5nZXMuaXNOdWxsKCkgJiYgIWZvbnRBY2Nlc3Nvci0+Zm9udChF
eHRlcm5hbFJlc291cmNlRG93bmxvYWRQb2xpY3k6OkZvcmJpZCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gZmFjZVJhbmdlc1dyYXBwZWQgPSBmYWNlLT5y
YW5nZXMoKTsKLSAgICAgICAgQVNTRVJUKGZhY2VSYW5nZXNXcmFwcGVkLmhhc1ZhbHVlKCkpOwot
ICAgICAgICBhdXRvIGZhY2VSYW5nZXMgPSBmYWNlUmFuZ2VzV3JhcHBlZC52YWx1ZSgpOwotICAg
ICAgICBhcHBlbmRGb250KHJhbmdlcywgV1RGTW92ZShmb250QWNjZXNzb3IpLCBmYWNlUmFuZ2Vz
KTsKKyAgICAgICAgYXBwZW5kRm9udChyYW5nZXMsIFdURk1vdmUoZm9udEFjY2Vzc29yKSwgKmZh
Y2UtPnJhbmdlcygpKTsKICAgICB9CiAgICAgCiAgICAgcmFuZ2VzLnNocmlua1RvRml0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0ZvbnRGYWNlLmNwcAppbmRleCBhZjQ4MGQwMGIzMWY5Zjg0ZDAzOWQzMTM1NzkxNmU4
OTcxZDYyNWZiLi5hZGIwNjEzYTIzZTcwMTZiODBmNmQ3MGJhZTJkMjM5NzViM2YxMTdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Gb250RmFjZS5jcHAKQEAgLTI3MCw3ICsyNzAsNyBAQCBTdHJpbmcgRm9udEZhY2U6
OmZhbWlseSgpIGNvbnN0CiAgICAgbV9iYWNraW5nLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAK
ICAgICBjb25zdCBhdXRvJiBmYW1pbGllcyA9IG1fYmFja2luZy0+ZmFtaWxpZXMoKTsKLSAgICBp
ZiAoIWZhbWlsaWVzLmhhc1ZhbHVlKCkpCisgICAgaWYgKCFmYW1pbGllcy5oYXNfdmFsdWUoKSkK
ICAgICAgICAgcmV0dXJuICJub3JtYWwiX3M7CiAgICAgYXV0byBmYW1pbGllc1VucndhcHBlZCA9
IGZhbWlsaWVzLnZhbHVlKCk7CiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTYzODEgVGhpcyBpcyBvbmx5IGhlcmUgYmVjYXVzZSBDU1NGb250
RmFjZSBlcnJvbmVvdXNseSB1c2VzIGEgbGlzdCBvZiB2YWx1ZXMgaW5zdGVhZCBvZiBhIHNpbmds
ZSB2YWx1ZS4KQEAgLTI5NSw3ICsyOTUsNyBAQCBTdHJpbmcgRm9udEZhY2U6OnN0eWxlKCkgY29u
c3QKICAgICBtX2JhY2tpbmctPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICBjb25zdCBhdXRv
JiBzdHlsZVdyYXBwZWQgPSBtX2JhY2tpbmctPml0YWxpYygpOwogICAgIAotICAgIGlmICghc3R5
bGVXcmFwcGVkLmhhc1ZhbHVlKCkpCisgICAgaWYgKCFzdHlsZVdyYXBwZWQuaGFzX3ZhbHVlKCkp
CiAgICAgICAgIHJldHVybiAibm9ybWFsIl9zOwogICAgIGF1dG8gc3R5bGUgPSBzdHlsZVdyYXBw
ZWQudmFsdWUoKTsKICAgICBhdXRvIG1pbmltdW0gPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpm
b250U3R5bGVGcm9tU3R5bGVWYWx1ZShzdHlsZS5taW5pbXVtLCBGb250U3R5bGVBeGlzOjppdGFs
KTsKQEAgLTMyOCw3ICszMjgsNyBAQCBTdHJpbmcgRm9udEZhY2U6OndlaWdodCgpIGNvbnN0CiB7
CiAgICAgbV9iYWNraW5nLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgY29uc3QgYXV0byYg
d2VpZ2h0V3JhcHBlZCA9IG1fYmFja2luZy0+d2VpZ2h0KCk7Ci0gICAgaWYgKCF3ZWlnaHRXcmFw
cGVkLmhhc1ZhbHVlKCkpCisgICAgaWYgKCF3ZWlnaHRXcmFwcGVkLmhhc192YWx1ZSgpKQogICAg
ICAgICByZXR1cm4gIm5vcm1hbCJfczsKICAgICBhdXRvIHdlaWdodCA9IHdlaWdodFdyYXBwZWQu
dmFsdWUoKTsKICAgICBhdXRvIG1pbmltdW0gPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpmb250
V2VpZ2h0RnJvbVN0eWxlVmFsdWUod2VpZ2h0Lm1pbmltdW0pOwpAQCAtMzUxLDcgKzM1MSw3IEBA
IFN0cmluZyBGb250RmFjZTo6c3RyZXRjaCgpIGNvbnN0CiB7CiAgICAgbV9iYWNraW5nLT51cGRh
dGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgY29uc3QgYXV0byYgc3RyZXRjaFdyYXBwZWQgPSBtX2Jh
Y2tpbmctPnN0cmV0Y2goKTsKLSAgICBpZiAoIXN0cmV0Y2hXcmFwcGVkLmhhc1ZhbHVlKCkpCisg
ICAgaWYgKCFzdHJldGNoV3JhcHBlZC5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuICJub3Jt
YWwiX3M7CiAgICAgYXV0byBzdHJldGNoID0gc3RyZXRjaFdyYXBwZWQudmFsdWUoKTsKICAgICBh
dXRvIG1pbmltdW0gPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjpmb250U3RyZXRjaEZyb21TdHls
ZVZhbHVlKHN0cmV0Y2gubWluaW11bSk7CkBAIC0zNzQsNyArMzc0LDcgQEAgU3RyaW5nIEZvbnRG
YWNlOjp1bmljb2RlUmFuZ2UoKSBjb25zdAogewogICAgIG1fYmFja2luZy0+dXBkYXRlU3R5bGVJ
Zk5lZWRlZCgpOwogICAgIGNvbnN0IGF1dG8mIHJhbmdlc1dyYXBwZWQgPSBtX2JhY2tpbmctPnJh
bmdlcygpOwotICAgIGlmICghcmFuZ2VzV3JhcHBlZC5oYXNWYWx1ZSgpKQorICAgIGlmICghcmFu
Z2VzV3JhcHBlZC5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuICJVKzAtMTBGRkZGIjsKICAg
ICBhdXRvIHJhbmdlcyA9IHJhbmdlc1dyYXBwZWQudmFsdWUoKTsKICAgICBpZiAoIXJhbmdlcy5z
aXplKCkpCkBAIC0zODksNyArMzg5LDcgQEAgU3RyaW5nIEZvbnRGYWNlOjpmZWF0dXJlU2V0dGlu
Z3MoKSBjb25zdAogewogICAgIG1fYmFja2luZy0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAg
IGNvbnN0IGF1dG8mIGZlYXR1cmVTZXR0aW5nc1dyYXBwZWQgPSBtX2JhY2tpbmctPmZlYXR1cmVT
ZXR0aW5ncygpOwotICAgIGlmICghZmVhdHVyZVNldHRpbmdzV3JhcHBlZC5oYXNWYWx1ZSgpKQor
ICAgIGlmICghZmVhdHVyZVNldHRpbmdzV3JhcHBlZC5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0
dXJuICJub3JtYWwiX3M7CiAgICAgYXV0byBmZWF0dXJlU2V0dGluZ3MgPSBmZWF0dXJlU2V0dGlu
Z3NXcmFwcGVkLnZhbHVlKCk7CiAgICAgaWYgKCFmZWF0dXJlU2V0dGluZ3Muc2l6ZSgpKQpAQCAt
NDA0LDcgKzQwNCw3IEBAIFN0cmluZyBGb250RmFjZTo6ZGlzcGxheShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIG1fYmFja2luZy0+dXBkYXRlU3R5bGVJZk5l
ZWRlZCgpOwogICAgIGNvbnN0IGF1dG8mIGxvYWRpbmdCZWhhdmlvcldyYXBwZWQgPSBtX2JhY2tp
bmctPmxvYWRpbmdCZWhhdmlvcigpOwotICAgIGlmICghbG9hZGluZ0JlaGF2aW9yV3JhcHBlZC5o
YXNWYWx1ZSgpKQorICAgIGlmICghbG9hZGluZ0JlaGF2aW9yV3JhcHBlZC5oYXNfdmFsdWUoKSkK
ICAgICAgICAgcmV0dXJuICJhdXRvIl9zOwogICAgIHJldHVybiBjb250ZXh0LmNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKGxvYWRpbmdCZWhhdmlvcldyYXBwZWQudmFsdWUoKSktPmNzc1RleHQo
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQ
YXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5j
cHAKaW5kZXggNmY1YjI1ZTQzZGI4NzhiMThmMTYwNmNkYmI3MTA2NDc2MGRmZDMwZS4uOTgyNzFk
MDFkMmRiMzQ0NmM3ZmQxMzkzOTBmY2QwYWZiMmFjMWUzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAKQEAgLTg4Nyw3ICs4ODcsNyBAQCBz
dGF0aWMgYm9vbCBjb25zdW1lQU5QbHVzQihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgc3Rk
OjpwYWlyPGludCwgaW50PiYgcmVzdQogICAgIGlmIChuU3RyaW5nLmxlbmd0aCgpID4gMikgewog
ICAgICAgICBhdXRvIHBhcnNlZE51bWJlciA9IHBhcnNlSW50ZWdlcjxpbnQ+KFN0cmluZ1ZpZXcg
eyBuU3RyaW5nIH0uc3Vic3RyaW5nKDEpKTsKICAgICAgICAgcmVzdWx0LnNlY29uZCA9IHBhcnNl
ZE51bWJlci52YWx1ZV9vcigwKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlZE51bWJlci5oYXNWYWx1
ZSgpOworICAgICAgICByZXR1cm4gcGFyc2VkTnVtYmVyLmhhc192YWx1ZSgpOwogICAgIH0KIAog
ICAgIE51bWVyaWNTaWduIHNpZ24gPSBuU3RyaW5nLmxlbmd0aCgpID09IDEgPyBOb1NpZ24gOiBN
aW51c1NpZ247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5
U3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oCmluZGV4
IGI0YTYxNjZjY2M5MTZiN2ZlNGViNzE3NjBiOTI2OGMwMmM5Y2NjNGQuLjJlYTI2OWZmNTljZjkz
YWJmYmYyZTdlNmQwMGE4NTliYzkyYmM5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rp
c3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlTdHlsZS5oCkBAIC03Niw4ICs3Niw4IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25z
dCBTaGFkb3dEYXRhKiBib3hTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX2JveFNoYWRvdy5nZXQo
KTsgfQogCi0gICAgT3B0aW9uYWw8aW50PiB6SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3pJbmRl
eDsgfQotICAgIGJvb2wgaXNTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3pJbmRl
eC5oYXNWYWx1ZSgpOyB9CisgICAgc3RkOjpvcHRpb25hbDxpbnQ+IHpJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1fekluZGV4OyB9CisgICAgYm9vbCBpc1N0YWNraW5nQ29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fekluZGV4Lmhhc192YWx1ZSgpOyB9CiAgICAgCiAgICAgYm9vbCBpc1Bvc2l0aW9u
ZWQoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzLmNvbnRhaW5zKEZsYWdzOjpQb3NpdGlvbmVkKTsg
fQogICAgIGJvb2wgaXNGbG9hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MuY29udGFpbnMo
RmxhZ3M6OkZsb2F0aW5nKTsgfQpAQCAtMTI1LDcgKzEyNSw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgZmxvYXQgbV9vcGFjaXR5OwogCi0gICAgT3B0aW9uYWw8aW50PiBtX3pJbmRleDsKKyAgICBz
dGQ6Om9wdGlvbmFsPGludD4gbV96SW5kZXg7CiAgICAgT3B0aW9uU2V0PEZsYWdzPiBtX2ZsYWdz
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1M
aXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbUxpc3QuaAppbmRleCBl
NTI4ZjY1NDZiNDM2YmM4NTYzZmRhNDY1N2JmOTM5ZTBkY2NjNjU5Li4yMTM1YzIxOGM5MDA3YzAy
ZDg0NDcwM2Q0MjI3MDBiMzBmMDAyYjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RGF0YVRyYW5zZmVySXRlbUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5z
ZmVySXRlbUxpc3QuaApAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZENs
ZWFyU3RyaW5nRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAgIHZvaWQgZGlkU2V0U3RyaW5n
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwotICAgIGJvb2wgaGFzSXRlbXMoKSBjb25zdCB7IHJl
dHVybiBtX2l0ZW1zLmhhc1ZhbHVlKCk7IH0KKyAgICBib29sIGhhc0l0ZW1zKCkgY29uc3QgeyBy
ZXR1cm4gbV9pdGVtcy5oYXNfdmFsdWUoKTsgfQogICAgIGNvbnN0IFZlY3RvcjxSZWY8RGF0YVRy
YW5zZmVySXRlbT4+JiBpdGVtcygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9pdGVt
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCBkN2Q0MmVhMjBmOTExM2NmNDU2YmRlZjFl
NTkzN2U4NDk2NjMwY2Y1Li5iMTk3NTllNGNmOWU1YzZiNGM4YmJkOGE2MmIzNDBmY2M2ODcwYmU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTI4NjMsOSArMjg2Myw5IEBAIHZvaWQgRG9j
dW1lbnQ6OnVwZGF0ZUhpZ2hsaWdodFBvc2l0aW9ucygpCiAgICAgICAgICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHZpc2libGVTZWxlY3Rpb24ocmFuZ2VEYXRhLT5yYW5nZSk7CiAgICAgICAgICAgICBQ
b3NpdGlvbiBzdGFydFBvc2l0aW9uOwogICAgICAgICAgICAgUG9zaXRpb24gZW5kUG9zaXRpb247
Ci0gICAgICAgICAgICBpZiAoIXJhbmdlRGF0YS0+c3RhcnRQb3NpdGlvbi5oYXNWYWx1ZSgpKQor
ICAgICAgICAgICAgaWYgKCFyYW5nZURhdGEtPnN0YXJ0UG9zaXRpb24uaGFzX3ZhbHVlKCkpCiAg
ICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHZpc2libGVTZWxlY3Rpb24udmlzaWJsZVN0
YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAgIGlmICghcmFuZ2VEYXRhLT5lbmRQ
b3NpdGlvbi5oYXNWYWx1ZSgpKQorICAgICAgICAgICAgaWYgKCFyYW5nZURhdGEtPmVuZFBvc2l0
aW9uLmhhc192YWx1ZSgpKQogICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gdmlzaWJsZVNl
bGVjdGlvbi52aXNpYmxlRW5kKCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAgIGlmICgh
d2Vha1JhbmdlRGF0YS5nZXQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuY3BwCmluZGV4IDBjY2RjNGFiM2JlYzNlYzZhODUyZTNkZTAwNGZlNTYz
MTA2NzM2NmIuLmNmZGMxOTFjZDVkY2EyMTg1NWJkMWNhZDFjYmJkZjkwZmE4YzI3NzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcApAQCAtODksNyArODksNyBAQCBib29sIEV2ZW50VGFy
Z2V0OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2
ZW50TGlzdGVuZQogCiAgICAgYXV0byBwYXNzaXZlID0gb3B0aW9ucy5wYXNzaXZlOwogCi0gICAg
aWYgKCFwYXNzaXZlLmhhc1ZhbHVlKCkgJiYgUXVpcmtzOjpzaG91bGRNYWtlRXZlbnRMaXN0ZW5l
clBhc3NpdmUoKnRoaXMsIGV2ZW50VHlwZSwgbGlzdGVuZXIuZ2V0KCkpKQorICAgIGlmICghcGFz
c2l2ZS5oYXNfdmFsdWUoKSAmJiBRdWlya3M6OnNob3VsZE1ha2VFdmVudExpc3RlbmVyUGFzc2l2
ZSgqdGhpcywgZXZlbnRUeXBlLCBsaXN0ZW5lci5nZXQoKSkpCiAgICAgICAgIHBhc3NpdmUgPSB0
cnVlOwogCiAgICAgYm9vbCBsaXN0ZW5lckNyZWF0ZWRGcm9tU2NyaXB0ID0gbGlzdGVuZXItPnR5
cGUoKSA9PSBFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXJUeXBlICYmICFsaXN0ZW5lci0+
d2FzQ3JlYXRlZEZyb21NYXJrdXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDhlNDM1NWZkNDg1Nzg3Nzc0NWYw
Nzg1NTYxODQxNTZiNGY5NjVmYjIuLjY5MmQwZDc2ZWY2ZGEzNzVkYzI2Y2IwNmIxZTUwMWU5Zjhh
ZDM0YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzCiAKIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rp
b24oKSBjb25zdAogewotICAgIHJldHVybiBtX3JhbmdlV2l0aEFsdGVybmF0aXZlLmhhc1ZhbHVl
KCk7CisgICAgcmV0dXJuIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuaGFzX3ZhbHVlKCk7CiB9CiAK
IGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQo
Y29uc3QgU2ltcGxlUmFuZ2UmIG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IDkzODQxNTg3MTZlYzRjMzg4
ZTM5NDkwZDdiMGRkY2UyYzBiMGE1NWYuLmE2MzVmNjI0MTdjNzk2MDM1ZDdiNjZkNTY2Yzk3ODgx
MTYyMjE3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwCkBAIC02MDAsNyArNjAwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxp
bmVTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogICAgIGF1dG8gdGV4dERpcmVjdGlvbiA9IHN0
eWxlLnRleHREaXJlY3Rpb24oKTsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZVdpdGhv
dXRFbWJlZGRpbmc7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gZW1iZWRkaW5nU3R5bGU7Ci0g
ICAgaWYgKHRleHREaXJlY3Rpb24uaGFzVmFsdWUoKSkgeworICAgIGlmICh0ZXh0RGlyZWN0aW9u
KSB7CiAgICAgICAgIC8vIExlYXZlIGFsb25lIGFuIGFuY2VzdG9yIHRoYXQgcHJvdmlkZXMgdGhl
IGRlc2lyZWQgc2luZ2xlIGxldmVsIGVtYmVkZGluZywgaWYgdGhlcmUgaXMgb25lLgogICAgICAg
ICBhdXRvIHN0YXJ0VW5zcGxpdEFuY2VzdG9yID0gc3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJp
ZGkoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgdHJ1ZSwgKnRleHREaXJlY3Rpb24pOwogICAgICAg
ICBhdXRvIGVuZFVuc3BsaXRBbmNlc3RvciA9IHNwbGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRp
KGVuZC5kZXByZWNhdGVkTm9kZSgpLCBmYWxzZSwgKnRleHREaXJlY3Rpb24pOwpAQCAtNjUxLDcg
KzY1MSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUoRWRpdGlu
Z1N0eWxlJiBzdHlsZSkKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwogCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGVUb0FwcGx5ID0g
JnN0eWxlOwotICAgIGlmICh0ZXh0RGlyZWN0aW9uLmhhc1ZhbHVlKCkpIHsKKyAgICBpZiAodGV4
dERpcmVjdGlvbikgewogICAgICAgICAvLyBBdm9pZCBhcHBseWluZyB0aGUgdW5pY29kZS1iaWRp
IGFuZCBkaXJlY3Rpb24gcHJvcGVydGllcyBiZW5lYXRoIGFuY2VzdG9ycyB0aGF0IGFscmVhZHkg
aGF2ZSB0aGVtLgogICAgICAgICBhdXRvIGVtYmVkZGluZ1N0YXJ0Tm9kZSA9IGhpZ2hlc3RFbWJl
ZGRpbmdBbmNlc3RvcihzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBlbmNsb3NpbmdCbG9jayhzdGFy
dC5kZXByZWNhdGVkTm9kZSgpKSk7CiAgICAgICAgIGF1dG8gZW1iZWRkaW5nRW5kTm9kZSA9IGhp
Z2hlc3RFbWJlZGRpbmdBbmNlc3RvcihlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5jbG9zaW5nQmxv
Y2soZW5kLmRlcHJlY2F0ZWROb2RlKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCmluZGV4IGJkMTliYmJhMTA3ZDJkYTc2OTZiMzUwNmRiM2MxZDJhZjY5MTNhYjQu
LjM5ODE4MjIyOTRmNzBlYjJiYzJkMjg5MTA0ZWUyOWQxZmEzNjA1MzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNjU4Myw3ICs2NTgzLDcgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjpjYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKIAogQ2FwdGlvblVz
ZXJQcmVmZXJlbmNlczo6Q2FwdGlvbkRpc3BsYXlNb2RlIEhUTUxNZWRpYUVsZW1lbnQ6OmNhcHRp
b25EaXNwbGF5TW9kZSgpCiB7Ci0gICAgaWYgKCFtX2NhcHRpb25EaXNwbGF5TW9kZS5oYXNWYWx1
ZSgpKSB7CisgICAgaWYgKCFtX2NhcHRpb25EaXNwbGF5TW9kZSkgewogICAgICAgICBpZiAoZG9j
dW1lbnQoKS5wYWdlKCkpCiAgICAgICAgICAgICBtX2NhcHRpb25EaXNwbGF5TW9kZSA9IGRvY3Vt
ZW50KCkucGFnZSgpLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygpLmNhcHRpb25EaXNwbGF5
TW9kZSgpOwogICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lt
YWdlQml0bWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmgKaW5kZXggMmE4
OWFlZjYwZDkyY2Y4NmU0NWI1MGFiMzYwZTE0MDg0ZDA0MGE2Zi4uMzI2ZjgwYjg3Y2Q1Mjk5YmM3
OWZmZGQ2Yjg2NDg3ZTk4YTFkODlkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaApAQCAt
MTAzLDcgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBib29sIGZvcmNpYmx5UHJlbXVsdGlwbHlBbHBo
YSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlICYmIG1fYmFja2luZ1N0b3JlLT5mb3Jj
aWJseVByZW11bHRpcGx5QWxwaGEoKTsgfQogCiAgICAgT3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNr
aW5nPiB0YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCk7Ci0gICAgYm9vbCBpc0RldGFjaGVkKCkgY29u
c3QgeyByZXR1cm4gIW1fYmFja2luZ1N0b3JlLmhhc1ZhbHVlKCk7IH0KKyAgICBib29sIGlzRGV0
YWNoZWQoKSBjb25zdCB7IHJldHVybiAhbV9iYWNraW5nU3RvcmU7IH0KICAgICB2b2lkIGNsb3Nl
KCkgeyB0YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCk7IH0KIAogICAgIHN0YXRpYyBWZWN0b3I8T3B0
aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4gZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPElt
YWdlQml0bWFwPj4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggMTExMWFjYzI1ODhjNjkxNzhjYzY0Yjkz
MTI4OTRjNDZhMTI0OGY3OS4uMzMwYzc1MzY5ZjFhNjA2MDdhNGQ1OWNjM2VkNjY2ZDVmZWI3ZDIw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcApAQCAtMTEwOSw3ICsxMTA5LDcgQEAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUoKQogI2lmICFQTEFURk9S
TShDT0NPQSkKIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2Vu
dDo6c2V0U2NyZWVuU2l6ZU92ZXJyaWRlKE9wdGlvbmFsPGludD4mJiB3aWR0aCwgT3B0aW9uYWw8
aW50PiYmIGhlaWdodCkKIHsKLSAgICBpZiAod2lkdGguaGFzVmFsdWUoKSAhPSBoZWlnaHQuaGFz
VmFsdWUoKSkKKyAgICBpZiAod2lkdGguaGFzX3ZhbHVlKCkgIT0gaGVpZ2h0Lmhhc192YWx1ZSgp
KQogICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlNjcmVlbiB3aWR0aCBhbmQgaGVpZ2h0
IG92ZXJyaWRlIHNob3VsZCBiZSBib3RoIHNwZWNpZmllZCBvciBvbWl0dGVkIl9zKTsKIAogICAg
IGlmICh3aWR0aCAmJiAqd2lkdGggPD0gMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9MYXlvdXRQaGFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0UGhhc2Uu
Y3BwCmluZGV4IDAzMTFhZjgzNDEyNzMxOTZlNThiYTFhYjg4NTRmMDM2YTBkM2I2YTcuLjhkOWEz
ZGNiYmFhMTJmZmQwNWVjNzlhNjE5ZGE3MjA5N2M3YTE0YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9MYXlvdXRQaGFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L0xheW91dFBoYXNlLmNwcApAQCAtNTcsNyArNTcsNyBAQCBib29sIFBoYXNlOjppc0luSW52YWxp
ZGF0aW9uKCkKIFBoYXNlU2NvcGU6OlBoYXNlU2NvcGUoUGhhc2U6OlR5cGUgdHlwZSkKIHsgCiAg
ICAgLy8gU2hvdWxkIG5ldmVyIG5lc3Qgc3RhdGVzIGxpa2UgY2FsbGluZyBUcmVlQnVpbGRpbmcg
ZnJvbSBMYXlvdXQuIAotICAgIEFTU0VSVCghKCpwaGFzZSgpKS5oYXNWYWx1ZSgpKTsKKyAgICBB
U1NFUlQoISgqcGhhc2UoKSkuaGFzX3ZhbHVlKCkpOwogICAgIHBoYXNlKCkuc2V0KHR5cGUpOwog
fQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9pbmxpbmUvSW5saW5lQ29udGVudEJyZWFrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lQ29udGVudEJyZWFrZXIuY3BwCmlu
ZGV4IDhlNzFhNzU5MWE3OWIwZTdiMzRkNDBmZTlhMGYyMzY4NWZkNDBhYTAuLjE3ZjczODVmNDVh
ZDZiMmJkZTNjNjIxYTE2MmQyODk2Mzc3YzFlMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUNvbnRlbnRCcmVha2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9J
bmxpbmVDb250ZW50QnJlYWtlci5jcHAKQEAgLTQyOCw3ICs0MjgsNyBAQCBPcHRpb25hbDxJbmxp
bmVDb250ZW50QnJlYWtlcjo6UGFydGlhbFJ1bj4gSW5saW5lQ29udGVudEJyZWFrZXI6OnRyeUJy
ZWFraW5nVGV4dAogICAgIEFTU0VSVChvdmVyZmxvd2luZ1J1bi5pbmxpbmVJdGVtLmlzVGV4dCgp
KTsKICAgICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPihv
dmVyZmxvd2luZ1J1bi5pbmxpbmVJdGVtKTsKICAgICBhdXRvJiBzdHlsZSA9IGlubGluZVRleHRJ
dGVtLnN0eWxlKCk7Ci0gICAgYXV0byBhdmFpbGFibGVTcGFjZUlzSW5maW5pdGUgPSAhYXZhaWxh
YmxlV2lkdGguaGFzVmFsdWUoKTsKKyAgICBhdXRvIGF2YWlsYWJsZVNwYWNlSXNJbmZpbml0ZSA9
ICFhdmFpbGFibGVXaWR0aC5oYXNfdmFsdWUoKTsKIAogICAgIGF1dG8gYnJlYWtSdWxlcyA9IHdv
cmRCcmVha0JlaGF2aW9yKHN0eWxlLCBoYXNXcmFwT3Bwb3J0dW5pdHlBdFByZXZpb3VzUG9zaXRp
b24pOwogICAgIGlmIChicmVha1J1bGVzLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUxpbmUu
aAppbmRleCBmZTMzNTE5NTIxYWE5ZTRmOTZhNzkzNGFlZDhjMDMyY2M5ZTc5M2Y1Li4yNGQ0ZDVj
MTJiNDY1MDcyMWY5MjFiOTE2OTM2OTI0MDA3OGI4OGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGlu
ZS5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICBJbmxpbmVMYXlvdXRVbml0IHRyaW1t
YWJsZVRyYWlsaW5nV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyaW1tYWJsZVRyYWlsaW5nQ29u
dGVudC53aWR0aCgpOyB9CiAgICAgYm9vbCBpc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUoKSBj
b25zdCB7IHJldHVybiBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5pc1RyYWlsaW5nUnVuRnVs
bHlUcmltbWFibGUoKTsgfQogCi0gICAgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gdHJhaWxp
bmdTb2Z0SHlwaGVuV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nU29mdEh5cGhlbldp
ZHRoOyB9CisgICAgc3RkOjpvcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB0cmFpbGluZ1NvZnRI
eXBoZW5XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdTb2Z0SHlwaGVuV2lkdGg7IH0K
ICAgICB2b2lkIGFkZFRyYWlsaW5nSHlwaGVuKElubGluZUxheW91dFVuaXQgaHlwaGVuTG9naWNh
bFdpZHRoKTsKIAogICAgIHZvaWQgcmVtb3ZlQ29sbGFwc2libGVDb250ZW50KElubGluZUxheW91
dFVuaXQgZXh0cmFIb3Jpem9udGFsU3BhY2UpOwpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAK
ICAgICAgICAgY29uc3QgQm94JiBsYXlvdXRCb3goKSBjb25zdCB7IHJldHVybiAqbV9sYXlvdXRC
b3g7IH0KICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9sYXlvdXRCb3gtPnN0eWxlKCk7IH0KLSAgICAgICAgY29uc3QgT3B0aW9uYWw8TGluZVJ1bjo6
VGV4dD4mIHRleHRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGVudDsgfQorICAg
ICAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPExpbmVSdW46OlRleHQ+JiB0ZXh0Q29udGVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGV4dENvbnRlbnQ7IH0KIAogICAgICAgICBJbmxpbmVMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFdpZHRoOyB9CiAgICAgICAg
IElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxM
ZWZ0OyB9CkBAIC0xMjIsNyArMTIyLDcgQEAgcHVibGljOgogICAgICAgICBib29sIG1fd2hpdGVz
cGFjZUlzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgeyBmYWxzZSB9OwogICAgICAgICBUcmFpbGluZ1do
aXRlc3BhY2UgbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlIHsgVHJhaWxpbmdXaGl0ZXNwYWNlOjpO
b25lIH07CiAgICAgICAgIElubGluZUxheW91dFVuaXQgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0
aCB7IDAgfTsKLSAgICAgICAgT3B0aW9uYWw8TGluZVJ1bjo6VGV4dD4gbV90ZXh0Q29udGVudDsK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxMaW5lUnVuOjpUZXh0PiBtX3RleHRDb250ZW50OwogICAg
ICAgICBMaW5lUnVuOjpFeHBhbnNpb24gbV9leHBhbnNpb247CiAgICAgICAgIHVuc2lnbmVkIG1f
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCB7IDAgfTsKICAgICB9OwpAQCAtMTUzLDcgKzE1Myw3
IEBAIHByaXZhdGU6CiAgICAgICAgIElubGluZUxheW91dFVuaXQgcmVtb3ZlUGFydGlhbGx5VHJp
bW1hYmxlQ29udGVudCgpOwogCiAgICAgICAgIElubGluZUxheW91dFVuaXQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX2Z1bGx5VHJpbW1hYmxlV2lkdGggKyBtX3BhcnRpYWxseVRyaW1tYWJsZVdp
ZHRoOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZpcnN0VHJp
bW1hYmxlUnVuSW5kZXguaGFzVmFsdWUoKTsgfQorICAgICAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiAhbV9maXJzdFRyaW1tYWJsZVJ1bkluZGV4Lmhhc192YWx1ZSgpOyB9CiAgICAg
ICAgIGJvb2wgaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNGdWxseVRyaW1tYWJsZUNvbnRlbnQ7IH0KICAgICAgICAgYm9vbCBpc1RyYWlsaW5nUnVuUGFy
dGlhbGx5VHJpbW1hYmxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJ0aWFsbHlUcmltbWFibGVXaWR0
aDsgfQogCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIFJ1bkxpc3QmIG1fcnVuczsKLSAgICAgICAgT3B0aW9uYWw8c2l6ZV90PiBtX2ZpcnN0VHJp
bW1hYmxlUnVuSW5kZXg7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBtX2ZpcnN0VHJp
bW1hYmxlUnVuSW5kZXg7CiAgICAgICAgIGJvb2wgbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQg
eyBmYWxzZSB9OwogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fZnVsbHlUcmltbWFibGVXaWR0
aCB7IDAgfTsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX3BhcnRpYWxseVRyaW1tYWJsZVdp
ZHRoIHsgMCB9OwpAQCAtMTcyLDcgKzE3Miw3IEBAIHByaXZhdGU6CiAgICAgVHJpbW1hYmxlVHJh
aWxpbmdDb250ZW50IG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50OwogICAgIElubGluZUxheW91
dFVuaXQgbV9jb250ZW50TG9naWNhbFdpZHRoIHsgMCB9OwogICAgIHNpemVfdCBtX25vblNwYW5u
aW5nSW5saW5lTGV2ZWxCb3hDb3VudCB7IDAgfTsKLSAgICBPcHRpb25hbDxJbmxpbmVMYXlvdXRV
bml0PiBtX3RyYWlsaW5nU29mdEh5cGhlbldpZHRoIHsgMCB9OworICAgIHN0ZDo6b3B0aW9uYWw8
SW5saW5lTGF5b3V0VW5pdD4gbV90cmFpbGluZ1NvZnRIeXBoZW5XaWR0aCB7IDAgfTsKIH07CiAK
IGlubGluZSB2b2lkIExpbmU6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6cmVzZXQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0
Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVz
dWx0Q2FjaGUuY3BwCmluZGV4IDkyZTc2OGFhN2Q4ZTg0MmJmZTBhN2Y0NzBiZGU0ZWIxNGVhNzli
OGEuLjkyN2I0YTEwM2VkMWU0YjUwM2RkZGNmYWQ1YTgxZjQ1MTk0NTZmMGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRD
YWNoZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIGJvb2wgcGFyc2VBY2Nlc3NDb250cm9s
TWF4QWdlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBTZWNvbmRzJiBleHBpcnlEZWx0YSkKICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgcmVqZWN0IHN0cmluZ3MgdGhhdCBoYXZlIGEg
bGVhZGluZyAiKyIuCiAgICAgYXV0byBwYXJzZWRJbnRlZ2VyID0gcGFyc2VJbnRlZ2VyPHVpbnQ2
NF90PihzdHJpbmcpOwogICAgIGV4cGlyeURlbHRhID0gU2Vjb25kcyhzdGF0aWNfY2FzdDxkb3Vi
bGU+KHBhcnNlZEludGVnZXIudmFsdWVfb3IoMCkpKTsKLSAgICByZXR1cm4gcGFyc2VkSW50ZWdl
ci5oYXNWYWx1ZSgpOworICAgIHJldHVybiBwYXJzZWRJbnRlZ2VyLmhhc192YWx1ZSgpOwogfQog
CiBFeHBlY3RlZDxVbmlxdWVSZWY8Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW0+
LCBTdHJpbmc+IENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtOjpjcmVhdGUoU3Rv
cmVkQ3JlZGVudGlhbHNQb2xpY3kgcG9saWN5LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBiYjYxNzZmZTgzNThk
N2M5ZGE4YWRhN2U0YjFhMmMyZDAyODg0MDc1Li43ZjY5NjYyMWExMzkzOWQ1OTc5M2NiYTc4ZTg1
ZTI2NDMwNDQxMmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0zMDk2
LDcgKzMwOTYsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVy
KE5vZGUqIHN0YXJ0Tm9kZSwgV2hlZWxFdmVudCYgd2hlZWxFdgogICAgICAgICByZXR1cm47CiAK
ICAgICBhdXRvIHBsYXRmb3JtRXZlbnQgPSB3aGVlbEV2ZW50LnVuZGVybHlpbmdQbGF0Zm9ybUV2
ZW50KCk7Ci0gICAgYm9vbCBpc1VzZXJFdmVudCA9IHBsYXRmb3JtRXZlbnQuaGFzVmFsdWUoKTsK
KyAgICBib29sIGlzVXNlckV2ZW50ID0gcGxhdGZvcm1FdmVudC5oYXNfdmFsdWUoKTsKIAogICAg
IGlmIChpc1VzZXJFdmVudCAmJiAhbV9jdXJyZW50V2hlZWxFdmVudEFsbG93c1Njcm9sbGluZykK
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvQ29u
dGVudENoYW5nZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0NvbnRlbnRD
aGFuZ2VPYnNlcnZlci5jcHAKaW5kZXggYzI2NjlhY2JlNzZhNWUwNjMzZTcwNTYwYjc3ZGI1ZjE4
MWYwZGM5Zi4uZDlhNDQxNjY2YjQ5OWQ1ZGM0NTZmOTM3YzJhNDM1MTJlODAxOTg3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvQ29udGVudENoYW5nZU9ic2VydmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9Db250ZW50Q2hhbmdlT2JzZXJ2ZXIuY3BwCkBA
IC02NTksNyArNjU5LDcgQEAgQ29udGVudENoYW5nZU9ic2VydmVyOjpTdHlsZUNoYW5nZVNjb3Bl
OjpTdHlsZUNoYW5nZVNjb3BlKERvY3VtZW50JiBkb2N1bWVudCwgY28KIENvbnRlbnRDaGFuZ2VP
YnNlcnZlcjo6U3R5bGVDaGFuZ2VTY29wZTo6flN0eWxlQ2hhbmdlU2NvcGUoKQogewogICAgIC8v
IERvIHdlIHRyYWNrIHRoaXMgZWxlbWVudD8KLSAgICBpZiAoIW1fd2FzSGlkZGVuLmhhc1ZhbHVl
KCkpCisgICAgaWYgKCFtX3dhc0hpZGRlbi5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKCFtX2NvbnRlbnRDaGFuZ2VPYnNlcnZlci5pc0NvbnNpZGVyZWRBY3Rpb25hYmxl
Q29udGVudChtX2VsZW1lbnQsIG1faGFkUmVuZGVyZXIgPyBFbGVtZW50SGFkUmVuZGVyZXI6Olll
cyA6IEVsZW1lbnRIYWRSZW5kZXJlcjo6Tm8pKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5jcHAKaW5kZXggZThlMTY1ZWRl
MzM3NGMzYzVkYmM1M2Y5NDkxZjg5MTM4N2NjNjM3Ni4uOGM0YjM3OTQyOGE4MjllNWQwNzA1OGM2
NDE1NWY3YjE2OGRmM2Y3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsU25hcE9mZnNldHNJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwCkBAIC0xMDcsMTUgKzEwNywxNCBAQCBz
dGF0aWMgT3B0aW9uYWw8dW5zaWduZWQ+IGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9y
aWdpbkFuZERlc3RpbmF0aW9uKGNvbgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5mb1R5cGUs
IHR5cGVuYW1lIFNpemVUeXBlLCB0eXBlbmFtZSBMYXlvdXRUeXBlPgotc3RhdGljIHN0ZDo6cGFp
cjxMYXlvdXRUeXBlLCB1bnNpZ25lZD4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0FuZEF4aXMo
Y29uc3QgSW5mb1R5cGUmIGluZm8sIFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBTaXplVHlw
ZSYgdmlld3BvcnRTaXplLCBMYXlvdXRUeXBlIHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9h
dCB2ZWxvY2l0eSwgT3B0aW9uYWw8TGF5b3V0VHlwZT4gb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rp
b25hbFNuYXBwaW5nKQorc3RhdGljIHN0ZDo6cGFpcjxMYXlvdXRUeXBlLCB1bnNpZ25lZD4gY2xv
c2VzdFNuYXBPZmZzZXRXaXRoSW5mb0FuZEF4aXMoY29uc3QgSW5mb1R5cGUmIGluZm8sIFNjcm9s
bEV2ZW50QXhpcyBheGlzLCBjb25zdCBTaXplVHlwZSYgdmlld3BvcnRTaXplLCBMYXlvdXRUeXBl
IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxM
YXlvdXRUeXBlPiBvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcpCiB7CiAgICAg
Y29uc3QgYXV0byYgc25hcE9mZnNldHMgPSBpbmZvLm9mZnNldHNGb3JBeGlzKGF4aXMpOwogICAg
IGlmIChzbmFwT2Zmc2V0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgaW52YWxpZFNuYXBPZmZzZXRJbmRleCk7CiAKLSAg
ICBpZiAob3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBwaW5nLmhhc1ZhbHVlKCkpIHsK
LSAgICAgICAgYXV0byBmaXJzdFNuYXBTdG9wT2Zmc2V0SW5kZXggPSBmaW5kRmlyc3RTbmFwU3Rv
cE9mZnNldEJldHdlZW5PcmlnaW5BbmREZXN0aW5hdGlvbihzbmFwT2Zmc2V0cywgKm9yaWdpbmFs
T2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZywgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQpOwot
ICAgICAgICBpZiAoZmlyc3RTbmFwU3RvcE9mZnNldEluZGV4Lmhhc1ZhbHVlKCkpCisgICAgaWYg
KG9yaWdpbmFsT2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZy5oYXNfdmFsdWUoKSkgeworICAg
ICAgICBpZiAoYXV0byBmaXJzdFNuYXBTdG9wT2Zmc2V0SW5kZXggPSBmaW5kRmlyc3RTbmFwU3Rv
cE9mZnNldEJldHdlZW5PcmlnaW5BbmREZXN0aW5hdGlvbihzbmFwT2Zmc2V0cywgKm9yaWdpbmFs
T2Zmc2V0Rm9yRGlyZWN0aW9uYWxTbmFwcGluZywgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQpKQog
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNuYXBPZmZzZXRzWypmaXJzdFNuYXBT
dG9wT2Zmc2V0SW5kZXhdLm9mZnNldCwgKmZpcnN0U25hcFN0b3BPZmZzZXRJbmRleCk7CiAgICAg
fQogCkBAIC0zNTYsMTMgKzM1NSwxMyBAQCBGbG9hdFNjcm9sbFNuYXBPZmZzZXRzSW5mbyBMYXlv
dXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNvbnZlcnRVbml0cyhmbG9hdCBkZXZpYwogfQogCiB0
ZW1wbGF0ZSA8PiB0ZW1wbGF0ZSA8Pgotc3RkOjpwYWlyPExheW91dFVuaXQsIHVuc2lnbmVkPiBM
YXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50
QXhpcyBheGlzLCBjb25zdCBMYXlvdXRTaXplJiB2aWV3cG9ydFNpemUsIExheW91dFVuaXQgc2Ny
b2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxMYXlvdXRVbml0
PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZykgY29uc3QKK3N0ZDo6cGFp
cjxMYXlvdXRVbml0LCB1bnNpZ25lZD4gTGF5b3V0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9z
ZXN0U25hcE9mZnNldChTY3JvbGxFdmVudEF4aXMgYXhpcywgY29uc3QgTGF5b3V0U2l6ZSYgdmll
d3BvcnRTaXplLCBMYXlvdXRVbml0IHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxv
Y2l0eSwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0
aW9uYWxTbmFwcGluZykgY29uc3QKIHsKICAgICByZXR1cm4gY2xvc2VzdFNuYXBPZmZzZXRXaXRo
SW5mb0FuZEF4aXMoKnRoaXMsIGF4aXMsIHZpZXdwb3J0U2l6ZSwgc2Nyb2xsRGVzdGluYXRpb25P
ZmZzZXQsIHZlbG9jaXR5LCBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZyk7
CiB9CiAKIHRlbXBsYXRlIDw+IHRlbXBsYXRlPD4KLXN0ZDo6cGFpcjxmbG9hdCwgdW5zaWduZWQ+
IEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvOjpjbG9zZXN0U25hcE9mZnNldChTY3JvbGxFdmVu
dEF4aXMgYXhpcywgY29uc3QgRmxvYXRTaXplJiB2aWV3cG9ydFNpemUsIGZsb2F0IHNjcm9sbERl
c3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgT3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFs
UG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdAorc3RkOjpwYWlyPGZsb2F0LCB1
bnNpZ25lZD4gRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zmc2V0KFNj
cm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBGbG9hdFNpemUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQg
c2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPGZs
b2F0PiBvcmlnaW5hbFBvc2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZykgY29uc3QKIHsKICAg
ICByZXR1cm4gY2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0FuZEF4aXMoKnRoaXMsIGF4aXMsIHZp
ZXdwb3J0U2l6ZSwgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIHZlbG9jaXR5LCBvcmlnaW5hbFBv
c2l0aW9uRm9yRGlyZWN0aW9uYWxTbmFwcGluZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCmluZGV4IGI5ZDZiYmQ1NDg2NGEyZjU3NzRkY2ViZmNl
NWUwOWU2ZmYxYWU0MmYuLjc5ZWE1NzI4ZDVjMTcyODg4YWEwOGQ2M2Q5ZDk4OTIwMWFiNjk4MzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwCkBAIC0x
NjgsNyArMTY4LDcgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpzZXROZWFyZXN0U2Nyb2xsU25h
cEluZGV4Rm9yQXhpc0FuZE9mZnNldChTY3JvbGxFdmVudEF4aXMKICAgICBzZXRBY3RpdmVTY3Jv
bGxTbmFwSW5kZXhGb3JBeGlzKGF4aXMsIGFjdGl2ZUluZGV4KTsKIH0KIAotZmxvYXQgU2Nyb2xs
Q29udHJvbGxlcjo6YWRqdXN0U2Nyb2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzIGF4aXMs
IGZsb2F0IGRlc3RpbmF0aW9uT2Zmc2V0LCBmbG9hdCB2ZWxvY2l0eSwgT3B0aW9uYWw8ZmxvYXQ+
IG9yaWdpbmFsT2Zmc2V0KQorZmxvYXQgU2Nyb2xsQ29udHJvbGxlcjo6YWRqdXN0U2Nyb2xsRGVz
dGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGRlc3RpbmF0aW9uT2Zmc2V0LCBm
bG9hdCB2ZWxvY2l0eSwgc3RkOjpvcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQpCiB7CiAg
ICAgaWYgKCF1c2VzU2Nyb2xsU25hcCgpKQogICAgICAgICByZXR1cm4gZGVzdGluYXRpb25PZmZz
ZXQ7CkBAIC0xNzgsOCArMTc4LDggQEAgZmxvYXQgU2Nyb2xsQ29udHJvbGxlcjo6YWRqdXN0U2Ny
b2xsRGVzdGluYXRpb24oU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGZsb2F0IGRlc3QKICAgICBpZiAo
IXNuYXBPZmZzZXRzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uT2Zmc2V0Owog
Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzOwot
ICAgIGlmIChvcmlnaW5hbE9mZnNldC5oYXNWYWx1ZSgpKQorICAgIHN0ZDo6b3B0aW9uYWw8TGF5
b3V0VW5pdD4gb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzOworICAgIGlmIChvcmlnaW5hbE9m
ZnNldCkKICAgICAgICAgb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzID0gTGF5b3V0VW5pdCgq
b3JpZ2luYWxPZmZzZXQgLyBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSk7CiAgICAgTGF5b3V0
U2l6ZSB2aWV3cG9ydFNpemUobV9jbGllbnQudmlld3BvcnRTaXplKCkud2lkdGgoKSwgbV9jbGll
bnQudmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpOwogICAgIExheW91dFVuaXQgb2Zmc2V0ID0gc25h
cFN0YXRlLnNuYXBPZmZzZXRJbmZvKCkuY2xvc2VzdFNuYXBPZmZzZXQoYXhpcywgdmlld3BvcnRT
aXplLCBMYXlvdXRVbml0KGRlc3RpbmF0aW9uT2Zmc2V0IC8gbV9jbGllbnQucGFnZVNjYWxlRmFj
dG9yKCkpLCB2ZWxvY2l0eSwgb3JpZ2luYWxPZmZzZXRJbkxheW91dFVuaXRzKS5maXJzdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1N5c3RlbUJhdHRlcnkubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TeXN0ZW1CYXR0ZXJ5Lm1tCmluZGV4IDdm
ODkxYjQxNGZhZDM5ODc0MDVjOTQ3NzM1ZGMwM2U4MWI5NGQ2OGQuLmQ0NTI5YTIwZjUzOTY3NTIx
OTljMGVjZGFmODY4NThkYWQ3MTUyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1N5c3RlbUJhdHRlcnkubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y29jb2EvU3lzdGVtQmF0dGVyeS5tbQpAQCAtNDQsNyArNDQsNyBAQCBib29sIHN5c3RlbUhhc0Jh
dHRlcnkoKQogICAgIGlmIChhdXRvIG92ZXJyaWRlRm9yVGVzdGluZyA9IFN5c3RlbUJhdHRlcnlT
dGF0dXNUZXN0aW5nT3ZlcnJpZGVzOjpzaW5nbGV0b24oKS5oYXNCYXR0ZXJ5KCkpCiAgICAgICAg
IHJldHVybiAqb3ZlcnJpZGVGb3JUZXN0aW5nOwogCi0gICAgaWYgKCFoYXNCYXR0ZXJ5Lmhhc1Zh
bHVlKCkpIHsKKyAgICBpZiAoIWhhc0JhdHRlcnkuaGFzX3ZhbHVlKCkpIHsKICAgICAgICAgaGFz
QmF0dGVyeSA9IFtdIHsKICNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKFdBVENIT1MpCiAg
ICAgICAgICAgICAvLyBEZXZpY2VzIHJ1bm5pbmcgaU9TIC8gV2F0Y2hPUyBhbHdheXMgaGF2ZSBh
IGJhdHRlcnkuCkBAIC04Nyw3ICs4Nyw3IEBAIGJvb2wgc3lzdGVtSGFzQUMoKQogICAgIGlmIChh
dXRvIG92ZXJyaWRlRm9yVGVzdGluZyA9IFN5c3RlbUJhdHRlcnlTdGF0dXNUZXN0aW5nT3ZlcnJp
ZGVzOjpzaW5nbGV0b24oKS5oYXNBQygpKQogICAgICAgICByZXR1cm4gKm92ZXJyaWRlRm9yVGVz
dGluZzsKIAotICAgIGlmICghaGFzQUMuaGFzVmFsdWUoKSkgeworICAgIGlmICghaGFzQUMuaGFz
X3ZhbHVlKCkpIHsKICAgICAgICAgaGFzQUMgPSBbXSB7CiAjaWYgUExBVEZPUk0oQVBQTEVUVikK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50LmgKaW5kZXggMTM5ZTczNTVhODUyNDIyZDhiODA4NjI5ZTJjYjZjN2Q4OGRl
YzRmMC4uZjI0ZWRiNmRlZTVhYzk5NGExNTdhYTY2NTEwYzNiMjVlM2ZmYjI0YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCkBAIC02OCw3ICs2OCw3IEBA
IHB1YmxpYzoKICAgICAgICAgQ29sb3IgY29sb3I7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3JTdG9wPiBkZWNvZGUoRGVj
b2RlciYpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxDb2xvclN0b3A+IGRlY29kZShEZWNvZGVyJik7CiAgICAgfTsKIAogICAgIHVzaW5n
IENvbG9yU3RvcFZlY3RvciA9IFZlY3RvcjxDb2xvclN0b3AsIDI+OwpAQCAtNzgsNyArNzgsNyBA
QCBwdWJsaWM6CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQxOwogCiAgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPExpbmVhckRhdGE+IGRl
Y29kZShEZWNvZGVyJik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPExpbmVhckRhdGE+IGRlY29kZShEZWNvZGVyJik7CiAgICAgfTsKIAog
ICAgIHN0cnVjdCBSYWRpYWxEYXRhIHsKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgICAg
ICBmbG9hdCBhc3BlY3RSYXRpbzsgLy8gRm9yIGVsbGlwdGljYWwgZ3JhZGllbnQsIHdpZHRoIC8g
aGVpZ2h0LgogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJhZGlhbERhdGE+IGRlY29kZShEZWNvZGVyJik7CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJhZGlhbERhdGE+IGRl
Y29kZShEZWNvZGVyJik7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDb25pY0RhdGEgewpAQCAtOTcs
NyArOTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZsb2F0IGFuZ2xlUmFkaWFuczsKIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb25p
Y0RhdGE+IGRlY29kZShEZWNvZGVyJik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29k
ZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbmljRGF0YT4gZGVjb2RlKERlY29kZXImKTsKICAg
ICB9OwogCiAgICAgdXNpbmcgRGF0YSA9IFZhcmlhbnQ8TGluZWFyRGF0YSwgUmFkaWFsRGF0YSwg
Q29uaWNEYXRhPjsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEdyYWRpZW50
Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0
aWMgc3RkOjpvcHRpb25hbDxSZWY8R3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2
YXRlOgogICAgIGV4cGxpY2l0IEdyYWRpZW50KERhdGEmJik7CkBAIC0xNjgsMTQgKzE2OCwxNCBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50OjpDb2xvclN0b3A6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjbwogICAgIGVuY29kZXIgPDwgY29sb3I7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IE9wdGlvbmFsPEdyYWRpZW50OjpDb2xvclN0b3A+IEdy
YWRpZW50OjpDb2xvclN0b3A6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8dHlw
ZW5hbWUgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxHcmFkaWVudDo6Q29sb3JTdG9wPiBHcmFkaWVu
dDo6Q29sb3JTdG9wOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBPcHRpb25hbDxm
bG9hdD4gb2Zmc2V0OworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9mZnNldDsKICAgICBkZWNv
ZGVyID4+IG9mZnNldDsKICAgICBpZiAoIW9mZnNldCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAotICAgIE9wdGlvbmFsPENvbG9yPiBjb2xvcjsKKyAgICBzdGQ6Om9wdGlvbmFsPENv
bG9yPiBjb2xvcjsKICAgICBkZWNvZGVyID4+IGNvbG9yOwogICAgIGlmICghY29sb3IpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC0xODksMTQgKzE4OSwxNCBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50OjpMaW5lYXJEYXRhOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgYwogICAgIGVuY29kZXIgPDwgcG9pbnQxOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBEZWNvZGVyPiBPcHRpb25hbDxHcmFkaWVudDo6TGluZWFyRGF0YT4gR3JhZGllbnQ6Okxp
bmVhckRhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8dHlwZW5hbWUgRGVj
b2Rlcj4gc3RkOjpvcHRpb25hbDxHcmFkaWVudDo6TGluZWFyRGF0YT4gR3JhZGllbnQ6OkxpbmVh
ckRhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPEZsb2F0UG9p
bnQ+IHBvaW50MDsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MDsKICAgICBk
ZWNvZGVyID4+IHBvaW50MDsKICAgICBpZiAoIXBvaW50MCkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MTsKKyAgICBzdGQ6Om9w
dGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MTsKICAgICBkZWNvZGVyID4+IHBvaW50MTsKICAgICBp
ZiAoIXBvaW50MSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTIxMywyOSArMjEz
LDI5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3JhZGllbnQ6OlJhZGlhbERh
dGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjCiAgICAgZW5jb2RlciA8PCBhc3BlY3RSYXRp
bzsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8R3JhZGllbnQ6OlJh
ZGlhbERhdGE+IEdyYWRpZW50OjpSYWRpYWxEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K3RlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8R3JhZGllbnQ6OlJhZGlh
bERhdGE+IEdyYWRpZW50OjpSYWRpYWxEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsK
LSAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDA7CisgICAgc3RkOjpvcHRpb25hbDxGbG9h
dFBvaW50PiBwb2ludDA7CiAgICAgZGVjb2RlciA+PiBwb2ludDA7CiAgICAgaWYgKCFwb2ludDAp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBPcHRpb25hbDxGbG9hdFBvaW50
PiBwb2ludDE7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDE7CiAgICAgZGVj
b2RlciA+PiBwb2ludDE7CiAgICAgaWYgKCFwb2ludDEpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKLSAgICBPcHRpb25hbDxmbG9hdD4gc3RhcnRSYWRpdXM7CisgICAgc3RkOjpvcHRp
b25hbDxmbG9hdD4gc3RhcnRSYWRpdXM7CiAgICAgZGVjb2RlciA+PiBzdGFydFJhZGl1czsKICAg
ICBpZiAoIXN0YXJ0UmFkaXVzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAg
T3B0aW9uYWw8ZmxvYXQ+IGVuZFJhZGl1czsKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBlbmRS
YWRpdXM7CiAgICAgZGVjb2RlciA+PiBlbmRSYWRpdXM7CiAgICAgaWYgKCFlbmRSYWRpdXMpCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBPcHRpb25hbDxmbG9hdD4gYXNwZWN0
UmF0aW87CisgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gYXNwZWN0UmF0aW87CiAgICAgZGVjb2Rl
ciA+PiBhc3BlY3RSYXRpbzsKICAgICBpZiAoIWFzcGVjdFJhdGlvKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwpAQCAtMjQ5LDE0ICsyNDksMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRW5j
b2Rlcj4gdm9pZCBHcmFkaWVudDo6Q29uaWNEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y28KICAgICBlbmNvZGVyIDw8IGFuZ2xlUmFkaWFuczsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
RGVjb2Rlcj4gT3B0aW9uYWw8R3JhZGllbnQ6OkNvbmljRGF0YT4gR3JhZGllbnQ6OkNvbmljRGF0
YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBz
dGQ6Om9wdGlvbmFsPEdyYWRpZW50OjpDb25pY0RhdGE+IEdyYWRpZW50OjpDb25pY0RhdGE6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50
MDsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MDsKICAgICBkZWNvZGVyID4+
IHBvaW50MDsKICAgICBpZiAoIXBvaW50MCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAotICAgIE9wdGlvbmFsPGZsb2F0PiBhbmdsZVJhZGlhbnM7CisgICAgc3RkOjpvcHRpb25hbDxm
bG9hdD4gYW5nbGVSYWRpYW5zOwogICAgIGRlY29kZXIgPj4gYW5nbGVSYWRpYW5zOwogICAgIGlm
ICghYW5nbGVSYWRpYW5zKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpAQCAtMjcyLDIx
ICsyNzIsMjEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBHcmFkaWVudDo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBtX3NwcmVhZE1ldGhv
ZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gT3B0aW9uYWw8UmVmPEdyYWRpZW50
Pj4gR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8dHlwZW5hbWUg
RGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxSZWY8R3JhZGllbnQ+PiBHcmFkaWVudDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiB7Ci0gICAgT3B0aW9uYWw8RGF0YT4gZGF0YTsKKyAgICBzdGQ6Om9w
dGlvbmFsPERhdGE+IGRhdGE7CiAgICAgZGVjb2RlciA+PiBkYXRhOwogICAgIGlmICghZGF0YSkK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGll
bnQ6OmNyZWF0ZShXVEZNb3ZlKCpkYXRhKSk7CiAKLSAgICBPcHRpb25hbDxDb2xvclN0b3BWZWN0
b3I+IHN0b3BzOworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3JTdG9wVmVjdG9yPiBzdG9wczsKICAg
ICBkZWNvZGVyID4+IHN0b3BzOwogICAgIGlmICghc3RvcHMpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgT3B0aW9uYWw8Ym9vbD4gc3RvcHNTb3J0ZWQ7CisgICAgc3RkOjpvcHRp
b25hbDxib29sPiBzdG9wc1NvcnRlZDsKICAgICBkZWNvZGVyID4+IHN0b3BzU29ydGVkOwotICAg
IGlmICghc3RvcHNTb3J0ZWQuaGFzVmFsdWUoKSkKKyAgICBpZiAoIXN0b3BzU29ydGVkLmhhc192
YWx1ZSgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIGlmICgqc3RvcHNTb3J0
ZWQpCiAgICAgICAgIGdyYWRpZW50LT5zZXRTb3J0ZWRDb2xvclN0b3BzKFdURk1vdmUoKnN0b3Bz
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApp
bmRleCA5MWExM2YzM2Q2ODMxNDU2YmI5YjExODRiNWRkMWM0MTk3YTA5YzFlLi44YWNhYmM3ZTM2
ODkwNWRjN2QyN2JmOGExZjJjODI1ZTY4MjVmYzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgog
ICAgIC8vIEFzeW5jaHJvbm91cyBpbWFnZSBkZWNvZGluZwogICAgIGJvb2wgY2FuVXNlQXN5bmNE
ZWNvZGluZygpOwogICAgIHZvaWQgc3RhcnRBc3luY0RlY29kaW5nUXVldWUoKTsKLSAgICB2b2lk
IHJlcXVlc3RGcmFtZUFzeW5jRGVjb2RpbmdBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZl
bCwgY29uc3QgT3B0aW9uYWw8SW50U2l6ZT4mID0geyB9KTsKKyAgICB2b2lkIHJlcXVlc3RGcmFt
ZUFzeW5jRGVjb2RpbmdBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxJbnRTaXplPiYgPSB7IH0pOwogICAgIHZvaWQgc3RvcEFzeW5jRGVjb2RpbmdR
dWV1ZSgpOwogICAgIGJvb2wgaGFzQXN5bmNEZWNvZGluZ1F1ZXVlKCkgY29uc3QgeyByZXR1cm4g
bV9kZWNvZGluZ1F1ZXVlOyB9CiAgICAgYm9vbCBpc0FzeW5jRGVjb2RpbmdRdWV1ZUlkbGUoKSBj
b25zdDsKQEAgLTk1LDkgKzk1LDkgQEAgcHVibGljOgogICAgIFN0cmluZyB1dGkoKTsKICAgICBT
dHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKTsKICAgICBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2Ny
aXB0aW9uKCk7Ci0gICAgT3B0aW9uYWw8SW50UG9pbnQ+IGhvdFNwb3QoKTsKLSAgICBPcHRpb25h
bDxJbnRTaXplPiBkZW5zaXR5Q29ycmVjdGVkU2l6ZShJbWFnZU9yaWVudGF0aW9uID0gSW1hZ2VP
cmllbnRhdGlvbjo6RnJvbUltYWdlKTsKLSAgICBib29sIGhhc0RlbnNpdHlDb3JyZWN0ZWRTaXpl
KCkgeyByZXR1cm4gZGVuc2l0eUNvcnJlY3RlZFNpemUoKS5oYXNWYWx1ZSgpOyB9CisgICAgc3Rk
OjpvcHRpb25hbDxJbnRQb2ludD4gaG90U3BvdCgpOworICAgIHN0ZDo6b3B0aW9uYWw8SW50U2l6
ZT4gZGVuc2l0eUNvcnJlY3RlZFNpemUoSW1hZ2VPcmllbnRhdGlvbiA9IEltYWdlT3JpZW50YXRp
b246OkZyb21JbWFnZSk7CisgICAgYm9vbCBoYXNEZW5zaXR5Q29ycmVjdGVkU2l6ZSgpIHsgcmV0
dXJuIGRlbnNpdHlDb3JyZWN0ZWRTaXplKCkuaGFzX3ZhbHVlKCk7IH0KIAogICAgIEltYWdlT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24oKTsKIApAQCAtMTEzLDggKzExMyw4IEBAIHB1YmxpYzoKICAg
ICBEZWNvZGluZ1N0YXR1cyBmcmFtZURlY29kaW5nU3RhdHVzQXRJbmRleChzaXplX3QpOwogICAg
IGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KTsKICAgICBib29sIGZyYW1lSGFzSW1h
Z2VBdEluZGV4KHNpemVfdCk7Ci0gICAgYm9vbCBmcmFtZUhhc0Z1bGxTaXplTmF0aXZlSW1hZ2VB
dEluZGV4KHNpemVfdCwgY29uc3QgT3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mKTsKLSAgICBi
b29sIGZyYW1lSGFzRGVjb2RlZE5hdGl2ZUltYWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRl
eChzaXplX3QsIGNvbnN0IE9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiwgY29uc3QgRGVjb2Rp
bmdPcHRpb25zJik7CisgICAgYm9vbCBmcmFtZUhhc0Z1bGxTaXplTmF0aXZlSW1hZ2VBdEluZGV4
KHNpemVfdCwgY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYpOworICAgIGJv
b2wgZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4
KHNpemVfdCwgY29uc3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYsIGNvbnN0IERl
Y29kaW5nT3B0aW9ucyYpOwogICAgIFN1YnNhbXBsaW5nTGV2ZWwgZnJhbWVTdWJzYW1wbGluZ0xl
dmVsQXRJbmRleChzaXplX3QpOwogCiAgICAgLy8gSW1hZ2VGcmFtZSBtZXRhZGF0YSB3aGljaCBm
b3JjZXMgY2FjaGluZyBvciByZS1jYWNoaW5nIHRoZSBJbWFnZUZyYW1lLgpAQCAtMTUzLDcgKzE1
Myw3IEBAIHByaXZhdGU6CiAgICAgVCBtZXRhZGF0YUNhY2hlSWZOZWVkZWQoVCYgY2FjaGVkVmFs
dWUsIGNvbnN0IFQmIGRlZmF1bHRWYWx1ZSwgTWV0YWRhdGFUeXBlLCBUIChJbWFnZURlY29kZXI6
OipmdW5jdG9yKSgpIGNvbnN0KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCBm
aXJzdEZyYW1lTWV0YWRhdGFDYWNoZUlmTmVlZGVkKFQmIGNhY2hlZFZhbHVlLCBNZXRhZGF0YVR5
cGUsIFQgKEltYWdlRnJhbWU6OipmdW5jdG9yKSgpIGNvbnN0LCBJbWFnZUZyYW1lOjpDYWNoaW5n
LCBjb25zdCBPcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgPSB7IH0pOworICAgIFQgZmlyc3RG
cmFtZU1ldGFkYXRhQ2FjaGVJZk5lZWRlZChUJiBjYWNoZWRWYWx1ZSwgTWV0YWRhdGFUeXBlLCBU
IChJbWFnZUZyYW1lOjoqZnVuY3RvcikoKSBjb25zdCwgSW1hZ2VGcmFtZTo6Q2FjaGluZywgY29u
c3Qgc3RkOjpvcHRpb25hbDxTdWJzYW1wbGluZ0xldmVsPiYgPSB7IH0pOwogCiAgICAgYm9vbCBl
bnN1cmVEZWNvZGVyQXZhaWxhYmxlKFNoYXJlZEJ1ZmZlciogZGF0YSk7CiAgICAgYm9vbCBpc0Rl
Y29kZXJBdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kZXI7IH0KQEAgLTE3Niw3ICsx
NzYsNyBAQCBwcml2YXRlOgogICAgIFN5bmNocm9uaXplZEZpeGVkUXVldWU8SW1hZ2VGcmFtZVJl
cXVlc3QsIEJ1ZmZlclNpemU+JiBmcmFtZVJlcXVlc3RRdWV1ZSgpOwogCiAgICAgY29uc3QgSW1h
Z2VGcmFtZSYgZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkgeyByZXR1cm4gaW5kZXggPCBtX2Zy
YW1lcy5zaXplKCkgPyBtX2ZyYW1lc1tpbmRleF0gOiBJbWFnZUZyYW1lOjpkZWZhdWx0RnJhbWUo
KTsgfQotICAgIGNvbnN0IEltYWdlRnJhbWUmIGZyYW1lQXRJbmRleENhY2hlSWZOZWVkZWQoc2l6
ZV90LCBJbWFnZUZyYW1lOjpDYWNoaW5nLCBjb25zdCBPcHRpb25hbDxTdWJzYW1wbGluZ0xldmVs
PiYgPSB7IH0pOworICAgIGNvbnN0IEltYWdlRnJhbWUmIGZyYW1lQXRJbmRleENhY2hlSWZOZWVk
ZWQoc2l6ZV90LCBJbWFnZUZyYW1lOjpDYWNoaW5nLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNh
bXBsaW5nTGV2ZWw+JiA9IHsgfSk7CiAKICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpOwogCkBA
IC0yMTQsMTEgKzIxNCwxMSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3V0aTsKICAgICBTdHJp
bmcgbV9maWxlbmFtZUV4dGVuc2lvbjsKICAgICBTdHJpbmcgbV9hY2Nlc3NpYmlsaXR5RGVzY3Jp
cHRpb247Ci0gICAgT3B0aW9uYWw8SW50UG9pbnQ+IG1faG90U3BvdDsKKyAgICBzdGQ6Om9wdGlv
bmFsPEludFBvaW50PiBtX2hvdFNwb3Q7CiAKICAgICAvLyBJbWFnZSBtZXRhZGF0YSB3aGljaCBp
cyBjYWxjdWxhdGVkIGZyb20gdGhlIGZpcnN0IEltYWdlRnJhbWUuCiAgICAgSW50U2l6ZSBtX3Np
emU7Ci0gICAgT3B0aW9uYWw8SW50U2l6ZT4gbV9kZW5zaXR5Q29ycmVjdGVkU2l6ZTsKKyAgICBz
dGQ6Om9wdGlvbmFsPEludFNpemU+IG1fZGVuc2l0eUNvcnJlY3RlZFNpemU7CiAgICAgSW1hZ2VP
cmllbnRhdGlvbiBtX29yaWVudGF0aW9uOwogICAgIENvbG9yIG1fc2luZ2xlUGl4ZWxTb2xpZENv
bG9yOwogICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9tYXhpbXVtU3Vic2FtcGxpbmdMZXZlbCB7IFN1
YnNhbXBsaW5nTGV2ZWw6OkRlZmF1bHQgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCBkZmFjYzYyNGIxODcxODhmMzUxZDdjZWE5
OTQzNTYzMTg0NGI1ZTI3Li5mOTgyMmY4MTFkY2Y1N2Y4YWNkODE5MzlmY2M2ZDczYmUzNGM5MThh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
Y3BwCkBAIC0xMTY1LDkgKzExNjUsOCBAQCBib29sIE1lZGlhUGxheWVyOjpkaWRQYXNzQ09SU0Fj
Y2Vzc0NoZWNrKCkgY29uc3QKIAogYm9vbCBNZWRpYVBsYXllcjo6d291bGRUYWludE9yaWdpbihj
b25zdCBTZWN1cml0eU9yaWdpbiYgb3JpZ2luKSBjb25zdAogewotICAgIGF1dG8gd291bGRUYWlu
dCA9IG1fcHJpdmF0ZS0+d291bGRUYWludE9yaWdpbihvcmlnaW4pOwotICAgIGlmICh3b3VsZFRh
aW50Lmhhc1ZhbHVlKCkpCi0gICAgICAgIHJldHVybiB3b3VsZFRhaW50LnZhbHVlKCk7CisgICAg
aWYgKGF1dG8gd291bGRUYWludCA9IG1fcHJpdmF0ZS0+d291bGRUYWludE9yaWdpbihvcmlnaW4p
KQorICAgICAgICByZXR1cm4gKndvdWxkVGFpbnQ7CiAKICAgICBpZiAobV91cmwucHJvdG9jb2xJ
c0RhdGEoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0ZS5oCmlu
ZGV4IDA5Y2ViYTM4MjdlZDJkN2RjNTFlZWY0MmZhYjQ3MDE4YjgyNzc4NzAuLmQxMDFjZjg2YjBk
NDg1ODYzNWU1YmIxMDQwYjI2MmIzYjk1MzNmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtU3RhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmgK
QEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJMYXlv
dXRTaXplLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDxvcHRpb25hbD4KIAogbmFtZXNwYWNlIFdURiB7CiBj
bGFzcyBUZXh0U3RyZWFtOwpAQCAtODIsMTQgKzgyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9s
YXN0UGxhbmFyUXVhZCA9IHF1YWQ7CiAgICAgfQogCi0gICAgdm9pZCBzZXRTZWNvbmRhcnlRdWFk
KGNvbnN0IE9wdGlvbmFsPEZsb2F0UXVhZD4mIHF1YWQpCisgICAgdm9pZCBzZXRTZWNvbmRhcnlR
dWFkKGNvbnN0IHN0ZDo6b3B0aW9uYWw8RmxvYXRRdWFkPiYgcXVhZCkKICAgICB7CiAgICAgICAg
IC8vIFdlIG11c3QgYmUgaW4gYSBmbGF0dGVuZWQgc3RhdGUgKG5vIGFjY3VtdWxhdGVkIG9mZnNl
dCkgd2hlbiBzZXR0aW5nIHRoaXMgc2Vjb25kYXJ5IHF1YWQuCiAgICAgICAgIEFTU0VSVChtX2Fj
Y3VtdWxhdGVkT2Zmc2V0ID09IExheW91dFNpemUoKSk7CiAgICAgICAgIG1fbGFzdFBsYW5hclNl
Y29uZGFyeVF1YWQgPSBxdWFkOwogICAgIH0KIAotICAgIHZvaWQgc2V0TGFzdFBsYW5hclNlY29u
ZGFyeVF1YWQoY29uc3QgT3B0aW9uYWw8RmxvYXRRdWFkPiYpOworICAgIHZvaWQgc2V0TGFzdFBs
YW5hclNlY29uZGFyeVF1YWQoY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFF1YWQ+Jik7CiAKICAg
ICB2b2lkIG1vdmUoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0IHksIFRyYW5zZm9ybUFjY3VtdWxh
dGlvbiBhY2N1bXVsYXRlID0gRmxhdHRlblRyYW5zZm9ybSkKICAgICB7CkBAIC0xMDQsMTMgKzEw
NCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuIHRoZSBjb29yZHMgb2YgdGhlIHBvaW50IG9y
IHF1YWQgaW4gdGhlIGxhc3QgZmxhdHRlbmVkIGxheWVyCiAgICAgRmxvYXRQb2ludCBsYXN0UGxh
bmFyUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQbGFuYXJQb2ludDsgfQogICAgIEZsb2F0
UXVhZCBsYXN0UGxhbmFyUXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBsYW5hclF1YWQ7IH0K
LSAgICBPcHRpb25hbDxGbG9hdFF1YWQ+IGxhc3RQbGFuYXJTZWNvbmRhcnlRdWFkKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXN0UGxhbmFyU2Vjb25kYXJ5UXVhZDsgfQotICAgIGJvb2wgaXNNYXBwaW5n
U2Vjb25kYXJ5UXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBsYW5hclNlY29uZGFyeVF1YWQu
aGFzVmFsdWUoKTsgfQorICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRRdWFkPiBsYXN0UGxhbmFyU2Vj
b25kYXJ5UXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBsYW5hclNlY29uZGFyeVF1YWQ7IH0K
KyAgICBib29sIGlzTWFwcGluZ1NlY29uZGFyeVF1YWQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQ
bGFuYXJTZWNvbmRhcnlRdWFkLmhhc192YWx1ZSgpOyB9CiAKICAgICAvLyBSZXR1cm4gdGhlIHBv
aW50IG9yIHF1YWQgbWFwcGVkIHRocm91Z2ggdGhlIGN1cnJlbnQgdHJhbnNmb3JtCiAgICAgRmxv
YXRQb2ludCBtYXBwZWRQb2ludChib29sKiB3YXNDbGFtcGVkID0gbnVsbHB0cikgY29uc3Q7CiAg
ICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQoYm9vbCogd2FzQ2xhbXBlZCA9IG51bGxwdHIpIGNvbnN0
OwotICAgIE9wdGlvbmFsPEZsb2F0UXVhZD4gbWFwcGVkU2Vjb25kYXJ5UXVhZChib29sKiB3YXND
bGFtcGVkID0gbnVsbHB0cikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFF1YWQ+IG1h
cHBlZFNlY29uZGFyeVF1YWQoYm9vbCogd2FzQ2xhbXBlZCA9IG51bGxwdHIpIGNvbnN0OwogCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIGFjY3VtdWxhdGVkVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV9hY2N1bXVsYXRlZFRyYW5zZm9ybS5nZXQoKTsgfQogCkBAIC0xMjcsNyArMTI3LDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICBGbG9hdFBvaW50IG1fbGFzdFBsYW5hclBvaW50OwogICAg
IEZsb2F0UXVhZCBtX2xhc3RQbGFuYXJRdWFkOwotICAgIE9wdGlvbmFsPEZsb2F0UXVhZD4gbV9s
YXN0UGxhbmFyU2Vjb25kYXJ5UXVhZDsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UXVhZD4gbV9s
YXN0UGxhbmFyU2Vjb25kYXJ5UXVhZDsKIAogICAgIC8vIFdlIG9ubHkgYWxsb2NhdGUgdGhlIHRy
YW5zZm9ybSBpZiB3ZSBuZWVkIHRvCiAgICAgc3RkOjp1bmlxdWVfcHRyPFRyYW5zZm9ybWF0aW9u
TWF0cml4PiBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1tCmlu
ZGV4IDk2MWU0MmZiMjc3Yzk3ODA3OTgxZjFmMDFiM2I4MjIzMGNmZWYxY2QuLjVlNGJjOWY4NzIx
NjdhMGEzZDE5NGU4ZTVmYTdmNGI4Mzg5Zjk5N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRlcmZhY2VBVktpdC5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZLaXQubW0K
QEAgLTE2NDQsNyArMTY0NCw3IEBAIHZvaWQgV2ViQ29yZTo6c2V0U3VwcG9ydHNQaWN0dXJlSW5Q
aWN0dXJlKGJvb2wgaXNTdXBwb3J0ZWQpCiBib29sIFdlYkNvcmU6OnN1cHBvcnRzUGljdHVyZUlu
UGljdHVyZSgpCiB7CiAjaWYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAmJiAhUExB
VEZPUk0oV0FUQ0hPUykKLSAgICBpZiAoaXNQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydGVkLmhhc1Zh
bHVlKCkpCisgICAgaWYgKGlzUGljdHVyZUluUGljdHVyZVN1cHBvcnRlZC5oYXNfdmFsdWUoKSkK
ICAgICAgICAgcmV0dXJuICppc1BpY3R1cmVJblBpY3R1cmVTdXBwb3J0ZWQ7CiAgICAgcmV0dXJu
IFtnZXRBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyQ2xhc3MoKSBpc1BpY3R1cmVJblBpY3R1
cmVTdXBwb3J0ZWRdOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbQppbmRleCBkYWQwNDVmMGQ2Mjg3YTRmZjcyNmI2NTMz
MGJhOTg4ZDRhOWFkYmUyLi5hMjI5NjQ5NDUwZGIxMDRmYmUzZjMxYjEzN2U3NjkyYTNiYTVhZjhl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTlNTY3JvbGxlckltcERl
dGFpbHMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBE
ZXRhaWxzLm1tCkBAIC0zOCw5ICszOCw4IEBAIE9wdGlvbmFsPGJvb2w+IFNjcm9sbGVyU3R5bGU6
Om1fdXNlT3ZlcmxheVNjcm9sbGJhcnM7CiAKIE5TU2Nyb2xsZXJTdHlsZSBTY3JvbGxlclN0eWxl
OjpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKQogewotICAgIGlmIChtX3VzZU92ZXJsYXlTY3Jv
bGxiYXJzLmhhc1ZhbHVlKCkpCisgICAgaWYgKG1fdXNlT3ZlcmxheVNjcm9sbGJhcnMuaGFzX3Zh
bHVlKCkpCiAgICAgICAgIHJldHVybiAqbV91c2VPdmVybGF5U2Nyb2xsYmFycyA/IE5TU2Nyb2xs
ZXJTdHlsZU92ZXJsYXkgOiBOU1Njcm9sbGVyU3R5bGVMZWdhY3k7Ci0gICAgCiAgICAgaWYgKERl
cHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc092ZXJsYXlTY3JvbGxiYXJzKCkpCiAgICAgICAg
IHJldHVybiBOU1Njcm9sbGVyU3R5bGVPdmVybGF5OwogICAgIHJldHVybiBbTlNTY3JvbGxlciBw
cmVmZXJyZWRTY3JvbGxlclN0eWxlXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCmluZGV4IDIwNDc1ODMxYzU5MTI1
N2ZjMTI5YWYyZGNmODg0YjJiZGI1YTg5MDAuLjQ2ZTc4NTIyOWU2MGY2MmJjN2IzYWNlNGRjODMx
YTdmMjc1YTgxYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcApAQCAtNjAyLDkgKzYwMiwxMCBAQCB2b2lkIFJl
c291cmNlUmVxdWVzdEJhc2U6OnNldEhUVFBIZWFkZXJGaWVsZHMoSFRUUEhlYWRlck1hcCBoZWFk
ZXJGaWVsZHMpCiB9CiAKICNpZiBVU0UoU1lTVEVNX1BSRVZJRVcpCisKIGJvb2wgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6aXNTeXN0ZW1QcmV2aWV3KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zeXN0
ZW1QcmV2aWV3SW5mby5oYXNWYWx1ZSgpOworICAgIHJldHVybiBtX3N5c3RlbVByZXZpZXdJbmZv
Lmhhc192YWx1ZSgpOwogfQogCiBTeXN0ZW1QcmV2aWV3SW5mbyBSZXNvdXJjZVJlcXVlc3RCYXNl
OjpzeXN0ZW1QcmV2aWV3SW5mbygpIGNvbnN0CkBAIC02MTYsNiArNjE3LDcgQEAgdm9pZCBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpzZXRTeXN0ZW1QcmV2aWV3SW5mbyhjb25zdCBTeXN0ZW1QcmV2aWV3
SW5mbyYgaW5mbykKIHsKICAgICBtX3N5c3RlbVByZXZpZXdJbmZvID0gaW5mbzsKIH0KKwogI2Vu
ZGlmCiAKIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBSZXNvdXJjZVJlcXVl
c3RCYXNlJiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3RCYXNlJiBiKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0U291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5jcHAKaW5k
ZXggM2RkMTZjZjYwMGM2YTM0NWRkYmNkMWYzYjY3MGU2M2RmZTI3NDg5Zi4uNTU1MTJhY2UwMDMy
MDVlNjUzYmExODE5ZDliMDM2OGE1NTFmNmRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuY3BwCkBAIC0xNjIsNyAr
MTYyLDcgQEAgT3B0aW9uYWw8RGV2aWNlOjpGcmFtZURhdGE6OklucHV0U291cmNlPiBPcGVuWFJJ
bnB1dFNvdXJjZTo6Z2V0SW5wdXRTb3VyY2UoWHJTcGEKICAgICAgICAgYnV0dG9ucy5hcHBlbmQo
Z2V0QnV0dG9uKHR5cGUpKTsKIAogICAgIC8vIFRyaWdnZXIgaXMgbWFuZGF0b3J5IGluIHhyLXN0
YW5kYXJkIG1hcHBpbmcuCi0gICAgaWYgKGJ1dHRvbnMuaXNFbXB0eSgpIHx8ICFidXR0b25zLmZp
cnN0KCkuaGFzVmFsdWUoKSkKKyAgICBpZiAoYnV0dG9ucy5pc0VtcHR5KCkgfHwgIWJ1dHRvbnMu
Zmlyc3QoKS5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYnV0dG9ucy5zaXplKCk7ICsraSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V2ZW50UmVnaW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXZlbnRSZWdpb24uaAppbmRleCA2YTFhYzRlM2IzOTVmODI4NGVjN2E3YzZk
YmE2MzEwOThlZWFkODE2Li5jNjJhNmY5NzI5ZjAyZGU1OWUzNDcxODQxMDRkOTc5NmJlMGM1YjFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXZlbnRSZWdpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXZlbnRSZWdpb24uaApAQCAtODgsNyArODgsNyBA
QCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoRURJVEFCTEVfUkVHSU9OKQogICAgIHZvaWQgZW5zdXJl
RWRpdGFibGVSZWdpb24oKTsKLSAgICBib29sIGhhc0VkaXRhYmxlUmVnaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9lZGl0YWJsZVJlZ2lvbi5oYXNWYWx1ZSgpOyB9CisgICAgYm9vbCBoYXNFZGl0YWJs
ZVJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdGFibGVSZWdpb24uaGFzX3ZhbHVlKCk7IH0K
ICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNvbnRhaW5zRWRpdGFibGVFbGVtZW50c0luUmVjdChj
b25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgVmVjdG9yPEludFJlY3QsIDE+IHJlY3RzRm9yRWRp
dGFibGVFbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdGFibGVSZWdpb24gPyBtX2VkaXRh
YmxlUmVnaW9uLT5yZWN0cygpIDogVmVjdG9yPEludFJlY3QsIDE+IHsgfTsgfQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
LmgKaW5kZXggM2VkMDVlNGZkNWQ4MjlhNDE1MGRlOTUwOTFjM2IwYjMyYmFkMmVjZC4uODk2MDgx
ODU4MWVmYmNkZWQyYjMzZWMwMTZhMWY2Yjg0YjllYTYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaApAQCAtNzMsMTEgKzcz
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0R3Jvd3RoTGltaXRDYXAoT3B0aW9uYWw8TGF5b3V0
VW5pdD4pOwogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGdyb3d0aExpbWl0Q2FwKCkgY29uc3Qg
eyByZXR1cm4gbV9ncm93dGhMaW1pdENhcDsgfQogCi0gICAgY29uc3QgR3JpZFRyYWNrU2l6ZSYg
Y2FjaGVkVHJhY2tTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2NhY2hlZFRy
YWNrU2l6ZS5oYXNWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIG1fY2FjaGVkVHJhY2tTaXplLnZh
bHVlKCk7Ci0gICAgfQorICAgIGNvbnN0IEdyaWRUcmFja1NpemUmIGNhY2hlZFRyYWNrU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuICptX2NhY2hlZFRyYWNrU2l6ZTsgfQogICAgIHZvaWQgc2V0Q2FjaGVk
VHJhY2tTaXplKGNvbnN0IEdyaWRUcmFja1NpemUmKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCmluZGV4IDY3N2M0NzgyNjc0
ZjFmZGUyZmQzNDhmMTVkM2I3OGFjMjVjZDlkODQuLjU5NmEzYWY5YWFmODY3YjNhYzQxNmEwNzI2
ZTczZDJkYjBmZWQ0OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbGV4aWJsZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmNwcApAQCAtODYyLDcgKzg2Miw3IEBAIGJvb2wgUmVuZGVyRmxleGlibGVCb3g6
OmNhbkNvbXB1dGVQZXJjZW50YWdlRmxleEJhc2lzKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIGNv
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChtX2hhc0RlZmluaXRlSGVpZ2h0ID09IFNp
emVEZWZpbml0ZW5lc3M6OkluZGVmaW5pdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBi
b29sIGRlZmluaXRlID0gY2hpbGQuY29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGZsZXhC
YXNpcywgdXBkYXRlRGVzY2VuZGFudHMpLmhhc1ZhbHVlKCk7CisgICAgYm9vbCBkZWZpbml0ZSA9
IGNoaWxkLmNvbXB1dGVQZXJjZW50YWdlTG9naWNhbEhlaWdodChmbGV4QmFzaXMsIHVwZGF0ZURl
c2NlbmRhbnRzKS5oYXNfdmFsdWUoKTsKICAgICBpZiAobV9pbkxheW91dCAmJiAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA9PSBjaGlsZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkgewog
ICAgICAgICAvLyBXZSBjYW4gcmVhY2ggdGhpcyBjb2RlIGV2ZW4gd2hpbGUgd2UncmUgbm90IGxh
eWluZyBvdXJzZWx2ZXMgb3V0LCBzdWNoCiAgICAgICAgIC8vIGFzIGZyb20gbWFpblNpemVGb3JQ
ZXJjZW50YWdlUmVzb2x1dGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEl0ZW0uY3BwCmluZGV4IGZkYmUxMzA5ZjcxOTY5Y2IwZWVhMTlkMDFlNmFkNWQyNTE2YTJhNDEu
LmRkOWM5ZDNlMDIzYjc4NWZmN2NhNTcwNzU4ODNjMDcxNmM4OTEzZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcApAQCAtMzE5LDcgKzMxOSw3IEBAIHZv
aWQgUmVuZGVyTGlzdEl0ZW06OnNldEV4cGxpY2l0VmFsdWUoT3B0aW9uYWw8aW50PiB2YWx1ZSkK
ICAgICAgICAgaWYgKG1fdmFsdWVXYXNTZXRFeHBsaWNpdGx5ICYmIG1fdmFsdWUgPT0gdmFsdWUp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fdmFsdWVXYXNTZXRFeHBsaWNpdGx5
ID0gdmFsdWUuaGFzVmFsdWUoKTsKKyAgICBtX3ZhbHVlV2FzU2V0RXhwbGljaXRseSA9IHZhbHVl
Lmhhc192YWx1ZSgpOwogICAgIG1fdmFsdWUgPSB2YWx1ZTsKICAgICBleHBsaWNpdFZhbHVlQ2hh
bmdlZCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmlu
ZGV4IGU2ZjhmMjJlMTM5NmE2MmQyMzBhNTA0NzM1OWNjYzUxMzM4NTJiMDIuLjExODA3OTRjNjNh
ODJlMjBhZmY1ZWQzNzkwMzJkMjEwZDFjM2JhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTEyMzcsNyArMTIzNyw3IEBAIHN0YXRpYyBPcHRpb25h
bDxDb2xvcj4mIGNhY2hlZEZvY3VzUmluZ0NvbG9yKCkKIAogQ29sb3IgUmVuZGVyVGhlbWVJT1M6
OnN5c3RlbUZvY3VzUmluZ0NvbG9yKCkKIHsKLSAgICBpZiAoIWNhY2hlZEZvY3VzUmluZ0NvbG9y
KCkuaGFzVmFsdWUoKSkgeworICAgIGlmICghY2FjaGVkRm9jdXNSaW5nQ29sb3IoKS5oYXNfdmFs
dWUoKSkgewogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIGJlIHVzaW5nIC1rZXlib2FyZEZvY3Vz
SW5kaWNhdG9yQ29sb3IuIEZvciBub3csIHdvcmsgYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS81MDgz
ODg4Nj4uCiAgICAgICAgIGNhY2hlZEZvY3VzUmluZ0NvbG9yKCkgPSBjb2xvckZyb21VSUNvbG9y
KFtQQUw6OmdldFVJQ29sb3JDbGFzcygpIHN5c3RlbUJsdWVDb2xvcl0pOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZUJ1aWxk
ZXIuY3BwCmluZGV4IDdiYmFiNzcyY2Y3ZWNiNDI4NjY5NmVjZDdkNDRhNDRjMWJiZWQzYzcuLjZm
NTE2N2ExZWE1NGI0NjhjMmM0MDU4Y2Y1MmU1MmU3NzMxNWExNjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlQnVpbGRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWlsZGVyLmNwcApA
QCAtODA1LDcgKzgwNSw3IEBAIHZvaWQgUmVuZGVyVHJlZUJ1aWxkZXI6OnJlbW92ZUFub255bW91
c1dyYXBwZXJzRm9ySW5saW5lQ2hpbGRyZW5JZk5lZWRlZChSZW5kZXJFCiAgICAgICAgIGlmICgh
Zmlyc3RDaGlsZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvIGlzSW5saW5l
TGV2ZWxCb3ggPSBmaXJzdENoaWxkLT5pc0lubGluZSgpOwotICAgICAgICBpZiAoIXNob3VsZEFs
bENoaWxkcmVuQmVJbmxpbmUuaGFzVmFsdWUoKSkgeworICAgICAgICBpZiAoIXNob3VsZEFsbENo
aWxkcmVuQmVJbmxpbmUuaGFzX3ZhbHVlKCkpIHsKICAgICAgICAgICAgIHNob3VsZEFsbENoaWxk
cmVuQmVJbmxpbmUgPSBpc0lubGluZUxldmVsQm94OwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAppbmRleCBlNmIxZWI3NTIx
ZmRlN2Q0Yzc5OTMzN2RiOTM3YjA0OWIyZmNhZjhkLi5hM2NlZTQ2MzljNTkxNmM3ODE4ZDJmY2Iw
N2Q1MTI0ZTExZmE3ZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCkBAIC0z
MTMsMTcgKzMxMywxNyBAQCBSZWY8U1ZHVHJhbnNmb3JtPiBTVkdTVkdFbGVtZW50OjpjcmVhdGVT
VkdUcmFuc2Zvcm0oKQogUmVmPFNWR1RyYW5zZm9ybT4gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZH
VHJhbnNmb3JtRnJvbU1hdHJpeChET01NYXRyaXgyREluaXQmJiBtYXRyaXhJbml0KQogewogICAg
IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07Ci0gICAgaWYgKG1hdHJpeEluaXQuYS5oYXNWYWx1
ZSgpKQorICAgIGlmIChtYXRyaXhJbml0LmEpCiAgICAgICAgIHRyYW5zZm9ybS5zZXRBKG1hdHJp
eEluaXQuYS52YWx1ZSgpKTsKLSAgICBpZiAobWF0cml4SW5pdC5iLmhhc1ZhbHVlKCkpCisgICAg
aWYgKG1hdHJpeEluaXQuYikKICAgICAgICAgdHJhbnNmb3JtLnNldEIobWF0cml4SW5pdC5iLnZh
bHVlKCkpOwotICAgIGlmIChtYXRyaXhJbml0LmMuaGFzVmFsdWUoKSkKKyAgICBpZiAobWF0cml4
SW5pdC5jKQogICAgICAgICB0cmFuc2Zvcm0uc2V0QyhtYXRyaXhJbml0LmMudmFsdWUoKSk7Ci0g
ICAgaWYgKG1hdHJpeEluaXQuZC5oYXNWYWx1ZSgpKQorICAgIGlmIChtYXRyaXhJbml0LmQpCiAg
ICAgICAgIHRyYW5zZm9ybS5zZXREKG1hdHJpeEluaXQuZC52YWx1ZSgpKTsKLSAgICBpZiAobWF0
cml4SW5pdC5lLmhhc1ZhbHVlKCkpCisgICAgaWYgKG1hdHJpeEluaXQuZSkKICAgICAgICAgdHJh
bnNmb3JtLnNldEUobWF0cml4SW5pdC5lLnZhbHVlKCkpOwotICAgIGlmIChtYXRyaXhJbml0LmYu
aGFzVmFsdWUoKSkKKyAgICBpZiAobWF0cml4SW5pdC5mKQogICAgICAgICB0cmFuc2Zvcm0uc2V0
RihtYXRyaXhJbml0LmYudmFsdWUoKSk7CiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybTo6Y3JlYXRl
KHRyYW5zZm9ybSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNm
b3JtLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtLmgKaW5kZXggOTBjYzJhNTc0
YWVhZTUwMmE2NjA1OTJmZWNiMDM5NTQ2MGEzMWU1Ni4uMzc3MDc5Njc3Yjk3NzMxMDM0ZmY3MDdi
MzMwMTgxN2NmNjcwZDEyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5z
Zm9ybS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaApAQCAtNzcsMTcg
Kzc3LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb01vZGlm
aWNhdGlvbkFsbG93ZWRFcnJvciB9OwogCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zv
cm07Ci0gICAgICAgIGlmIChtYXRyaXhJbml0LmEuaGFzVmFsdWUoKSkKKyAgICAgICAgaWYgKG1h
dHJpeEluaXQuYSkKICAgICAgICAgICAgIHRyYW5zZm9ybS5zZXRBKG1hdHJpeEluaXQuYS52YWx1
ZSgpKTsKLSAgICAgICAgaWYgKG1hdHJpeEluaXQuYi5oYXNWYWx1ZSgpKQorICAgICAgICBpZiAo
bWF0cml4SW5pdC5iKQogICAgICAgICAgICAgdHJhbnNmb3JtLnNldEIobWF0cml4SW5pdC5iLnZh
bHVlKCkpOwotICAgICAgICBpZiAobWF0cml4SW5pdC5jLmhhc1ZhbHVlKCkpCisgICAgICAgIGlm
IChtYXRyaXhJbml0LmMpCiAgICAgICAgICAgICB0cmFuc2Zvcm0uc2V0QyhtYXRyaXhJbml0LmMu
dmFsdWUoKSk7Ci0gICAgICAgIGlmIChtYXRyaXhJbml0LmQuaGFzVmFsdWUoKSkKKyAgICAgICAg
aWYgKG1hdHJpeEluaXQuZCkKICAgICAgICAgICAgIHRyYW5zZm9ybS5zZXREKG1hdHJpeEluaXQu
ZC52YWx1ZSgpKTsKLSAgICAgICAgaWYgKG1hdHJpeEluaXQuZS5oYXNWYWx1ZSgpKQorICAgICAg
ICBpZiAobWF0cml4SW5pdC5lKQogICAgICAgICAgICAgdHJhbnNmb3JtLnNldEUobWF0cml4SW5p
dC5lLnZhbHVlKCkpOwotICAgICAgICBpZiAobWF0cml4SW5pdC5mLmhhc1ZhbHVlKCkpCisgICAg
ICAgIGlmIChtYXRyaXhJbml0LmYpCiAgICAgICAgICAgICB0cmFuc2Zvcm0uc2V0RihtYXRyaXhJ
bml0LmYudmFsdWUoKSk7CiAgICAgICAgIG1fdmFsdWUuc2V0TWF0cml4KHRyYW5zZm9ybSk7CiAg
ICAgICAgIGNvbW1pdENoYW5nZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9XZWJGYWtlWFJEZXZpY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJE
ZXZpY2UuY3BwCmluZGV4IDY3NDM2NGViZDAzNzE1YjJhN2VmZDFkOTg0OWJhOTEyNjg5ZDVlMzku
LmEwYTM5Y2ZiNWM2NGQ1NjRmNmQxNzZlOWY5MzRkZGY1OTdlNTA2ZTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL1dlYkZha2VYUkRldmljZS5jcHAKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lk
IFdlYkZha2VYUkRldmljZTo6c2V0Vmlld3MoY29uc3QgVmVjdG9yPEZha2VYUlZpZXdJbml0PiYg
dmlld3MpCiAgICAgICAgICAgICBhdXRvIGZha2VWaWV3ID0gcGFyc2VkVmlldy5yZWxlYXNlUmV0
dXJuVmFsdWUoKTsKICAgICAgICAgICAgIFBsYXRmb3JtWFI6OkRldmljZTo6RnJhbWVEYXRhOjpW
aWV3IHZpZXc7CiAgICAgICAgICAgICB2aWV3Lm9mZnNldCA9IGZha2VWaWV3LT5vZmZzZXQoKTsK
LSAgICAgICAgICAgIGlmIChmYWtlVmlldy0+ZmllbGRPZlZpZXcoKS5oYXNWYWx1ZSgpKQorICAg
ICAgICAgICAgaWYgKGZha2VWaWV3LT5maWVsZE9mVmlldygpKQogICAgICAgICAgICAgICAgIHZp
ZXcucHJvamVjdGlvbiA9IHsgKmZha2VWaWV3LT5maWVsZE9mVmlldygpIH07CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgdmlldy5wcm9qZWN0aW9uID0geyBmYWtlVmlldy0+cHJv
amVjdGlvbigpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db2NvYS9XZWJD
b3JlQXJndW1lbnRDb2RlcnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dl
YkNvcmVBcmd1bWVudENvZGVyc0NvY29hLm1tCmluZGV4IDM2NDM2ODg2ZWU3YWFlN2RiY2ZkOWZi
MTg2NWVjOTA3ZmMwMWY3ZjAuLjQxMTJjMTM2YmY3ZDk1ZGZjNmI3ZDFlM2E0NjAyNWExY2Y0ZDVj
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVBcmd1bWVu
dENvZGVyc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNvcmVB
cmd1bWVudENvZGVyc0NvY29hLm1tCkBAIC02OSwxNCArNjksMTMgQEAKICNlbmRpZgogCiBuYW1l
c3BhY2UgSVBDIHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiB2b2lkIEFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6QXR0cmlidXRlZFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nJiBhdHRyaWJ1dGVkU3RyaW5nKQogewogICAg
IGVuY29kZXIgPDwgYXR0cmlidXRlZFN0cmluZy5zdHJpbmcgPDwgYXR0cmlidXRlZFN0cmluZy5k
b2N1bWVudEF0dHJpYnV0ZXM7CiB9CiAKLU9wdGlvbmFsPFdlYkNvcmU6OkF0dHJpYnV0ZWRTdHJp
bmc+IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6QXR0cmlidXRlZFN0cmluZz46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nPiBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkF0dHJpYnV0ZWRTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKIHsKICAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVk
U3RyaW5nOwogICAgIGlmICghSVBDOjpkZWNvZGUoZGVjb2RlciwgYXR0cmlidXRlZFN0cmluZykp
CkBAIC05Niw3ICs5NSw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50SW5z
dGFsbG1lbnRDb25maWd1cmF0aW9uPjo6ZW5jb2RlKEVuY29kZXImIGVuCiAgICAgZW5jb2RlciA8
PCBjb25maWd1cmF0aW9uLnBsYXRmb3JtQ29uZmlndXJhdGlvbigpOwogfQogCi1PcHRpb25hbDxX
ZWJDb3JlOjpQYXltZW50SW5zdGFsbG1lbnRDb25maWd1cmF0aW9uPiBBcmd1bWVudENvZGVyPFdl
YkNvcmU6OlBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3VyYXRpb24+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3N0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudEluc3RhbGxtZW50Q29uZmln
dXJhdGlvbj4gQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50SW5zdGFsbG1lbnRDb25maWd1
cmF0aW9uPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgYXV0byBjb25maWd1cmF0
aW9uID0gSVBDOjpkZWNvZGU8UEtQYXltZW50SW5zdGFsbG1lbnRDb25maWd1cmF0aW9uPihkZWNv
ZGVyLCBQQUw6OmdldFBLUGF5bWVudEluc3RhbGxtZW50Q29uZmlndXJhdGlvbkNsYXNzKCkpOwog
ICAgIGlmICghY29uZmlndXJhdGlvbikKQEAgLTExMiwxMyArMTExLDEzIEBAIHZvaWQgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpQYXltZW50Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFdlYkNvcmU6OlBhCiAgICAgZW5jb2RlciA8PCBwYXltZW50LnBrUGF5bWVudCgpOwogfQogCi1P
cHRpb25hbDxXZWJDb3JlOjpQYXltZW50PiBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnQ+
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3N0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVu
dD4gQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50Pjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiB7CiAgICAgYXV0byBwYXltZW50ID0gSVBDOjpkZWNvZGU8UEtQYXltZW50PihkZWNvZGVy
LCBQQUw6OmdldFBLUGF5bWVudENsYXNzKCkpOwogICAgIGlmICghcGF5bWVudCkKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJldHVybiBQYXltZW50IHsgV1RGTW92ZSgqcGF5
bWVudCkgfTsKKyAgICByZXR1cm4gV2ViQ29yZTo6UGF5bWVudCB7IFdURk1vdmUoKnBheW1lbnQp
IH07CiB9CiAKIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50QXV0aG9yaXphdGlv
blJlc3VsdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpQYXltZW50
QXV0aG9yaXphdGlvblJlc3VsdCYgcmVzdWx0KQpAQCAtMTI3LDE0ICsxMjYsMTQgQEAgdm9pZCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uUmVzdWx0Pjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIKICAgICBlbmNvZGVyIDw8IHJlc3VsdC5lcnJvcnM7CiB9CiAKLU9w
dGlvbmFsPFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uUmVzdWx0PiBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uUmVzdWx0Pjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCitzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uUmVzdWx0
PiBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9uUmVzdWx0Pjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgT3B0aW9uYWw8UGF5bWVudEF1dGhvcml6YXRp
b25TdGF0dXM+IHN0YXR1czsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRBdXRo
b3JpemF0aW9uU3RhdHVzPiBzdGF0dXM7CiAgICAgZGVjb2RlciA+PiBzdGF0dXM7CiAgICAgaWYg
KCFzdGF0dXMpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBPcHRpb25hbDxW
ZWN0b3I8UmVmUHRyPEFwcGxlUGF5RXJyb3I+Pj4gZXJyb3JzOworICAgIHN0ZDo6b3B0aW9uYWw8
VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpBcHBsZVBheUVycm9yPj4+IGVycm9yczsKICAgICBkZWNv
ZGVyID4+IGVycm9yczsKICAgICBpZiAoIWVycm9ycykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKQEAgLTE0Nyw3ICsxNDYsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5
bWVudENvbnRhY3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQwogICAgIGVu
Y29kZXIgPDwgcGF5bWVudENvbnRhY3QucGtDb250YWN0KCk7CiB9CiAKLU9wdGlvbmFsPFdlYkNv
cmU6OlBheW1lbnRDb250YWN0PiBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRDb250YWN0
Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBheW1l
bnRDb250YWN0PiBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRDb250YWN0Pjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgYXV0byBjb250YWN0ID0gSVBDOjpkZWNvZGU8UEtD
b250YWN0PihkZWNvZGVyLCBQQUw6OmdldFBLQ29udGFjdENsYXNzKCkpOwogICAgIGlmICghY29u
dGFjdCkKQEAgLTE2MSw3ICsxNjAsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5
bWVudE1lcmNoYW50U2Vzc2lvbj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjbwogICAgIGVu
Y29kZXIgPDwgcGF5bWVudE1lcmNoYW50U2Vzc2lvbi5wa1BheW1lbnRNZXJjaGFudFNlc3Npb24o
KTsKIH0KIAotT3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudE1lcmNoYW50U2Vzc2lvbj4gQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpQYXltZW50TWVyY2hhbnRTZXNzaW9uPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCitzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRNZXJjaGFudFNlc3Npb24+
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudE1lcmNoYW50U2Vzc2lvbj46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGF1dG8gcGF5bWVudE1lcmNoYW50U2Vzc2lvbiA9IElQ
Qzo6ZGVjb2RlPFBLUGF5bWVudE1lcmNoYW50U2Vzc2lvbj4oZGVjb2RlciwgUEFMOjpnZXRQS1Bh
eW1lbnRNZXJjaGFudFNlc3Npb25DbGFzcygpKTsKICAgICBpZiAoIXBheW1lbnRNZXJjaGFudFNl
c3Npb24pCkBAIC0xNzUsMTYgKzE3NCwxNiBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
UGF5bWVudE1ldGhvZD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDbwogICAg
IGVuY29kZXIgPDwgcGF5bWVudE1ldGhvZC5wa1BheW1lbnRNZXRob2QoKTsKIH0KIAotT3B0aW9u
YWw8V2ViQ29yZTo6UGF5bWVudE1ldGhvZD4gQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50
TWV0aG9kPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OlBheW1lbnRNZXRob2Q+IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudE1ldGhvZD46OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGF1dG8gcGF5bWVudE1ldGhvZCA9IElQQzo6
ZGVjb2RlPFBLUGF5bWVudE1ldGhvZD4oZGVjb2RlciwgUEFMOjpnZXRQS1BheW1lbnRNZXRob2RD
bGFzcygpKTsKICAgICBpZiAoIXBheW1lbnRNZXRob2QpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKLSAgICByZXR1cm4gUGF5bWVudE1ldGhvZCB7IFdURk1vdmUoKnBheW1lbnRNZXRo
b2QpIH07CisgICAgcmV0dXJuIFdlYkNvcmU6OlBheW1lbnRNZXRob2QgeyBXVEZNb3ZlKCpwYXlt
ZW50TWV0aG9kKSB9OwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8QXBwbGVQYXlTZXNzaW9uUGF5
bWVudFJlcXVlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQXBwbGVQYXlTZXNz
aW9uUGF5bWVudFJlcXVlc3QmIHJlcXVlc3QpCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgV2ViQ29yZTo6QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3QmIHJlcXVlc3QpCiB7
CiAgICAgZW5jb2RlciA8PCByZXF1ZXN0LmNvdW50cnlDb2RlKCk7CiAgICAgZW5jb2RlciA8PCBy
ZXF1ZXN0LmN1cnJlbmN5Q29kZSgpOwpAQCAtMjA5LDcgKzIwOCw3IEBAIHZvaWQgQXJndW1lbnRD
b2RlcjxBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdD46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zCiAjZW5kaWYKIH0KIAotYm9vbCBBcmd1bWVudENvZGVyPEFwcGxlUGF5U2Vzc2lv
blBheW1lbnRSZXF1ZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEFwcGxlUGF5U2Vzc2lv
blBheW1lbnRSZXF1ZXN0JiByZXF1ZXN0KQorYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkFw
cGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdl
YkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIFN0
cmluZyBjb3VudHJ5Q29kZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvdW50cnlDb2RlKSkK
QEAgLTIyMSwyOSArMjIwLDI5IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxBcHBsZVBheVNlc3Npb25Q
YXltZW50UmVxdWVzdD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBBcHBsCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXF1ZXN0LnNldEN1cnJlbmN5Q29kZShjdXJyZW5jeUNvZGUpOwog
Ci0gICAgQXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6OkNvbnRhY3RGaWVsZHMgcmVxdWly
ZWRCaWxsaW5nQ29udGFjdEZpZWxkczsKKyAgICBXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXlt
ZW50UmVxdWVzdDo6Q29udGFjdEZpZWxkcyByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOwog
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoKHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHMpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlcXVlc3Quc2V0UmVxdWlyZWRCaWxsaW5nQ29u
dGFjdEZpZWxkcyhyZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzKTsKIAotICAgIE9wdGlvbmFs
PFBheW1lbnRDb250YWN0PiBiaWxsaW5nQ29udGFjdDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OlBheW1lbnRDb250YWN0PiBiaWxsaW5nQ29udGFjdDsKICAgICBkZWNvZGVyID4+IGJpbGxp
bmdDb250YWN0OwogICAgIGlmICghYmlsbGluZ0NvbnRhY3QpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXF1ZXN0LnNldEJpbGxpbmdDb250YWN0KCpiaWxsaW5nQ29udGFjdCk7CiAKLSAg
ICBBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6Q29udGFjdEZpZWxkcyByZXF1aXJlZFNo
aXBwaW5nQ29udGFjdEZpZWxkczsKKyAgICBXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXltZW50
UmVxdWVzdDo6Q29udGFjdEZpZWxkcyByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczsKICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKChyZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkcykpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVxdWVzdC5zZXRSZXF1aXJlZFNoaXBwaW5nQ29u
dGFjdEZpZWxkcyhyZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkcyk7CiAKLSAgICBPcHRpb25h
bDxQYXltZW50Q29udGFjdD4gc2hpcHBpbmdDb250YWN0OworICAgIHN0ZDo6b3B0aW9uYWw8V2Vi
Q29yZTo6UGF5bWVudENvbnRhY3Q+IHNoaXBwaW5nQ29udGFjdDsKICAgICBkZWNvZGVyID4+IHNo
aXBwaW5nQ29udGFjdDsKICAgICBpZiAoIXNoaXBwaW5nQ29udGFjdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJlcXVlc3Quc2V0U2hpcHBpbmdDb250YWN0KCpzaGlwcGluZ0NvbnRhY3Qp
OwogCi0gICAgQXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6Ok1lcmNoYW50Q2FwYWJpbGl0
aWVzIG1lcmNoYW50Q2FwYWJpbGl0aWVzOworICAgIFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBh
eW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcyBtZXJjaGFudENhcGFiaWxpdGllczsK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1lcmNoYW50Q2FwYWJpbGl0aWVzKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJlcXVlc3Quc2V0TWVyY2hhbnRDYXBhYmlsaXRpZXMobWVyY2hh
bnRDYXBhYmlsaXRpZXMpOwpAQCAtMjUzLDIyICsyNTIsMjIgQEAgYm9vbCBBcmd1bWVudENvZGVy
PEFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IEFwcGwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlcXVlc3Quc2V0U3VwcG9ydGVkTmV0
d29ya3Moc3VwcG9ydGVkTmV0d29ya3MpOwogCi0gICAgQXBwbGVQYXlTZXNzaW9uUGF5bWVudFJl
cXVlc3Q6OlNoaXBwaW5nVHlwZSBzaGlwcGluZ1R5cGU7CisgICAgV2ViQ29yZTo6QXBwbGVQYXlT
ZXNzaW9uUGF5bWVudFJlcXVlc3Q6OlNoaXBwaW5nVHlwZSBzaGlwcGluZ1R5cGU7CiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShzaGlwcGluZ1R5cGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmVxdWVzdC5zZXRTaGlwcGluZ1R5cGUoc2hpcHBpbmdUeXBlKTsKIAotICAgIFZlY3RvcjxB
cHBsZVBheVNoaXBwaW5nTWV0aG9kPiBzaGlwcGluZ01ldGhvZHM7CisgICAgVmVjdG9yPFdlYkNv
cmU6OkFwcGxlUGF5U2hpcHBpbmdNZXRob2Q+IHNoaXBwaW5nTWV0aG9kczsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHNoaXBwaW5nTWV0aG9kcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXF1ZXN0LnNldFNoaXBwaW5nTWV0aG9kcyhzaGlwcGluZ01ldGhvZHMpOwogCi0gICAgVmVj
dG9yPEFwcGxlUGF5TGluZUl0ZW0+IGxpbmVJdGVtczsKKyAgICBWZWN0b3I8V2ViQ29yZTo6QXBw
bGVQYXlMaW5lSXRlbT4gbGluZUl0ZW1zOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGluZUl0
ZW1zKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlcXVlc3Quc2V0TGluZUl0ZW1zKGxp
bmVJdGVtcyk7CiAKLSAgICBPcHRpb25hbDxBcHBsZVBheUxpbmVJdGVtPiB0b3RhbDsKKyAgICBz
dGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkFwcGxlUGF5TGluZUl0ZW0+IHRvdGFsOwogICAgIGRlY29k
ZXIgPj4gdG90YWw7CiAgICAgaWYgKCF0b3RhbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
Mjg0LDEzICsyODMsMTMgQEAgYm9vbCBBcmd1bWVudENvZGVyPEFwcGxlUGF5U2Vzc2lvblBheW1l
bnRSZXF1ZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEFwcGwKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJlcXVlc3Quc2V0U3VwcG9ydGVkQ291bnRyaWVzKFdURk1vdmUoc3VwcG9y
dGVkQ291bnRyaWVzKSk7CiAKLSAgICBBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6UmVx
dWVzdGVyIHJlcXVlc3RlcjsKKyAgICBXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXltZW50UmVx
dWVzdDo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVl
c3RlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXF1ZXN0LnNldFJlcXVlc3Rlcihy
ZXF1ZXN0ZXIpOwogICAgIAogI2lmIEVOQUJMRShBUFBMRV9QQVlfSU5TVEFMTE1FTlRTKQotICAg
IE9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3VyYXRpb24+IGluc3Rh
bGxtZW50Q29uZmlndXJhdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlBheW1lbnRJ
bnN0YWxsbWVudENvbmZpZ3VyYXRpb24+IGluc3RhbGxtZW50Q29uZmlndXJhdGlvbjsKICAgICBk
ZWNvZGVyID4+IGluc3RhbGxtZW50Q29uZmlndXJhdGlvbjsKICAgICBpZiAoIWluc3RhbGxtZW50
Q29uZmlndXJhdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzA1LDcgKzMwNCw3IEBA
IGJvb2wgQXJndW1lbnRDb2RlcjxBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdD46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyLCBBcHBsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJn
dW1lbnRDb2RlcjxBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6Q29udGFjdEZpZWxkcz46
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcHBsZVBheVNlc3Npb25QYXltZW50UmVx
dWVzdDo6Q29udGFjdEZpZWxkcyYgY29udGFjdEZpZWxkcykKK3ZvaWQgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6Q29udGFjdEZpZWxkcz46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXlt
ZW50UmVxdWVzdDo6Q29udGFjdEZpZWxkcyYgY29udGFjdEZpZWxkcykKIHsKICAgICBlbmNvZGVy
IDw8IGNvbnRhY3RGaWVsZHMucG9zdGFsQWRkcmVzczsKICAgICBlbmNvZGVyIDw8IGNvbnRhY3RG
aWVsZHMucGhvbmU7CkBAIC0zMTQsNyArMzEzLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPEFwcGxl
UGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpDb250YWN0RmllbGRzPjo6ZW5jb2RlKEVuY29kZXIK
ICAgICBlbmNvZGVyIDw8IGNvbnRhY3RGaWVsZHMucGhvbmV0aWNOYW1lOwogfQogCi1ib29sIEFy
Z3VtZW50Q29kZXI8QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6OkNvbnRhY3RGaWVsZHM+
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6
OkNvbnRhY3RGaWVsZHMmIGNvbnRhY3RGaWVsZHMpCitib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6OkNvbnRhY3RGaWVsZHM+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6
OkNvbnRhY3RGaWVsZHMmIGNvbnRhY3RGaWVsZHMpCiB7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShjb250YWN0RmllbGRzLnBvc3RhbEFkZHJlc3MpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zMzAsNyArMzI5LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPEFwcGxlUGF5U2Vzc2lvblBheW1l
bnRSZXF1ZXN0OjpDb250YWN0RmllbGRzPjo6ZGVjb2RlKERlY29kZXIKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBBcmd1bWVudENvZGVyPEFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0
OjpNZXJjaGFudENhcGFiaWxpdGllcz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBB
cHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6TWVyY2hhbnRDYXBhYmlsaXRpZXMmIG1lcmNo
YW50Q2FwYWJpbGl0aWVzKQordm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkFwcGxlUGF5U2Vz
c2lvblBheW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcz46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6
TWVyY2hhbnRDYXBhYmlsaXRpZXMmIG1lcmNoYW50Q2FwYWJpbGl0aWVzKQogewogICAgIGVuY29k
ZXIgPDwgbWVyY2hhbnRDYXBhYmlsaXRpZXMuc3VwcG9ydHMzRFM7CiAgICAgZW5jb2RlciA8PCBt
ZXJjaGFudENhcGFiaWxpdGllcy5zdXBwb3J0c0VNVjsKQEAgLTMzOCw3ICszMzcsNyBAQCB2b2lk
IEFyZ3VtZW50Q29kZXI8QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6Ok1lcmNoYW50Q2Fw
YWJpbGl0aWVzPjo6ZW5jb2RlKAogICAgIGVuY29kZXIgPDwgbWVyY2hhbnRDYXBhYmlsaXRpZXMu
c3VwcG9ydHNEZWJpdDsKIH0KIAotYm9vbCBBcmd1bWVudENvZGVyPEFwcGxlUGF5U2Vzc2lvblBh
eW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcz46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6TWVyY2hhbnRDYXBhYmlsaXRpZXMm
IG1lcmNoYW50Q2FwYWJpbGl0aWVzKQorYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkFwcGxl
UGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcz46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6
TWVyY2hhbnRDYXBhYmlsaXRpZXMmIG1lcmNoYW50Q2FwYWJpbGl0aWVzKQogewogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUobWVyY2hhbnRDYXBhYmlsaXRpZXMuc3VwcG9ydHMzRFMpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zNTIsMjUgKzM1MSwyNSBAQCBib29sIEFyZ3VtZW50Q29kZXI8
QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6Ok1lcmNoYW50Q2FwYWJpbGl0aWVzPjo6ZGVj
b2RlKAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPEFw
cGxlUGF5RXJyb3I+Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlZlB0cjxBcHBs
ZVBheUVycm9yPiYgZXJyb3IpCit2b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkFw
cGxlUGF5RXJyb3I+Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlZlB0cjxXZWJD
b3JlOjpBcHBsZVBheUVycm9yPiYgZXJyb3IpCiB7CiAgICAgZW5jb2RlciA8PCAhIWVycm9yOwog
ICAgIGlmIChlcnJvcikKICAgICAgICAgZW5jb2RlciA8PCAqZXJyb3I7CiB9CiAKLU9wdGlvbmFs
PFJlZlB0cjxBcHBsZVBheUVycm9yPj4gQXJndW1lbnRDb2RlcjxSZWZQdHI8QXBwbGVQYXlFcnJv
cj4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3N0ZDo6b3B0aW9uYWw8UmVmUHRyPFdlYkNv
cmU6OkFwcGxlUGF5RXJyb3I+PiBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpBcHBsZVBh
eUVycm9yPj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPGJvb2w+
IGlzVmFsaWQ7CisgICAgc3RkOjpvcHRpb25hbDxib29sPiBpc1ZhbGlkOwogICAgIGRlY29kZXIg
Pj4gaXNWYWxpZDsKICAgICBpZiAoIWlzVmFsaWQpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAKLSAgICBSZWZQdHI8QXBwbGVQYXlFcnJvcj4gZXJyb3I7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkFwcGxlUGF5RXJyb3I+IGVycm9yOwogICAgIGlmICghKmlzVmFsaWQpCiAgICAgICAgIHJl
dHVybiB7IG51bGxwdHIgfTsKIAotICAgIGVycm9yID0gQXBwbGVQYXlFcnJvcjo6ZGVjb2RlKGRl
Y29kZXIpOworICAgIGVycm9yID0gV2ViQ29yZTo6QXBwbGVQYXlFcnJvcjo6ZGVjb2RlKGRlY29k
ZXIpOwogICAgIGlmICghZXJyb3IpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAg
cmV0dXJuIGVycm9yOwpAQCAtMzgxLDcgKzM4MCw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpQYXltZW50U2Vzc2lvbkVycm9yPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
CiAgICAgZW5jb2RlciA8PCBlcnJvci5wbGF0Zm9ybUVycm9yKCk7CiB9CiAKLU9wdGlvbmFsPFdl
YkNvcmU6OlBheW1lbnRTZXNzaW9uRXJyb3I+IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVu
dFNlc3Npb25FcnJvcj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorc3RkOjpvcHRpb25hbDxX
ZWJDb3JlOjpQYXltZW50U2Vzc2lvbkVycm9yPiBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1l
bnRTZXNzaW9uRXJyb3I+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBhdXRvIHBs
YXRmb3JtRXJyb3IgPSBJUEM6OmRlY29kZTxOU0Vycm9yPihkZWNvZGVyKTsKICAgICBpZiAoIXBs
YXRmb3JtRXJyb3IpCkBAIC00MTEsMTQgKzQxMCwxNCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6Rm9udEF0dHJpYnV0ZXM+OjplbmNvZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2Rl
cgogICAgIGVuY29kZXIgPDwgYXR0cmlidXRlcy5mb250OwogfQogCi1PcHRpb25hbDxGb250QXR0
cmlidXRlcz4gQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGb250QXR0cmlidXRlcz46OmRlY29kZVBs
YXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpGb250QXR0cmlidXRlcyYgYXR0
cmlidXRlcykKK3N0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Rm9udEF0dHJpYnV0ZXM+IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6Rm9udEF0dHJpYnV0ZXM+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2Rl
ciYgZGVjb2RlciwgV2ViQ29yZTo6Rm9udEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCiB7CiAgICAg
aWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBhdHRyaWJ1dGVzLmZvbnQpKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQogCi12b2lkIEFyZ3Vt
ZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFJlZjxXZWJDb3JlOjpGb250PiYgZm9udCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZWY8
V2ViQ29yZTo6Rm9udD4+OjplbmNvZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgUmVmPFdlYkNvcmU6OkZvbnQ+JiBmb250KQogewogICAgIGNvbnN0IGF1dG8mIHBsYXRmb3Jt
RGF0YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpOwogICAgIGVuY29kZXIgPDwgcGxhdGZvcm1EYXRh
Lm9yaWVudGF0aW9uKCk7CkBAIC00NjcsNTcgKzQ2Niw1NyBAQCBzdGF0aWMgUmV0YWluUHRyPENU
Rm9udERlc2NyaXB0b3JSZWY+IGZpbmRGb250RGVzY3JpcHRvcihjb25zdCBTdHJpbmcmIHJlZmVy
ZW5jZQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1PcHRpb25hbDxGb250UGxhdGZvcm1EYXRh
PiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBk
ZWNvZGVyKQorc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhPiBBcmd1bWVu
dENvZGVyPFJlZjxXZWJDb3JlOjpGb250Pj46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBk
ZWNvZGVyKQogewotICAgIE9wdGlvbmFsPEZvbnRPcmllbnRhdGlvbj4gb3JpZW50YXRpb247Cisg
ICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGb250T3JpZW50YXRpb24+IG9yaWVudGF0aW9uOwog
ICAgIGRlY29kZXIgPj4gb3JpZW50YXRpb247Ci0gICAgaWYgKCFvcmllbnRhdGlvbi5oYXNWYWx1
ZSgpKQorICAgIGlmICghb3JpZW50YXRpb24uaGFzX3ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKLSAgICBPcHRpb25hbDxGb250V2lkdGhWYXJpYW50PiB3aWR0aFZhcmlh
bnQ7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGb250V2lkdGhWYXJpYW50PiB3aWR0aFZh
cmlhbnQ7CiAgICAgZGVjb2RlciA+PiB3aWR0aFZhcmlhbnQ7Ci0gICAgaWYgKCF3aWR0aFZhcmlh
bnQuaGFzVmFsdWUoKSkKKyAgICBpZiAoIXdpZHRoVmFyaWFudC5oYXNfdmFsdWUoKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPFRleHRSZW5kZXJpbmdNb2Rl
PiB0ZXh0UmVuZGVyaW5nTW9kZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlRleHRSZW5k
ZXJpbmdNb2RlPiB0ZXh0UmVuZGVyaW5nTW9kZTsKICAgICBkZWNvZGVyID4+IHRleHRSZW5kZXJp
bmdNb2RlOwotICAgIGlmICghdGV4dFJlbmRlcmluZ01vZGUuaGFzVmFsdWUoKSkKKyAgICBpZiAo
IXRleHRSZW5kZXJpbmdNb2RlLmhhc192YWx1ZSgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IHNpemU7CisgICAgc3RkOjpvcHRpb25hbDxmbG9h
dD4gc2l6ZTsKICAgICBkZWNvZGVyID4+IHNpemU7Ci0gICAgaWYgKCFzaXplLmhhc1ZhbHVlKCkp
CisgICAgaWYgKCFzaXplLmhhc192YWx1ZSgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogCi0gICAgT3B0aW9uYWw8Ym9vbD4gc3ludGhldGljQm9sZDsKKyAgICBzdGQ6Om9wdGlvbmFs
PGJvb2w+IHN5bnRoZXRpY0JvbGQ7CiAgICAgZGVjb2RlciA+PiBzeW50aGV0aWNCb2xkOwotICAg
IGlmICghc3ludGhldGljQm9sZC5oYXNWYWx1ZSgpKQorICAgIGlmICghc3ludGhldGljQm9sZC5o
YXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIE9wdGlvbmFs
PGJvb2w+IHN5bnRoZXRpY09ibGlxdWU7CisgICAgc3RkOjpvcHRpb25hbDxib29sPiBzeW50aGV0
aWNPYmxpcXVlOwogICAgIGRlY29kZXIgPj4gc3ludGhldGljT2JsaXF1ZTsKLSAgICBpZiAoIXN5
bnRoZXRpY09ibGlxdWUuaGFzVmFsdWUoKSkKKyAgICBpZiAoIXN5bnRoZXRpY09ibGlxdWUuaGFz
X3ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBPcHRpb25hbDxS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPj4gYXR0cmlidXRlczsKKyAgICBzdGQ6Om9wdGlvbmFs
PFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBhdHRyaWJ1dGVzOwogICAgIGRlY29kZXIgPj4g
YXR0cmlidXRlczsKICAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKLSAgICBPcHRpb25hbDxib29sPiBpbmNsdWRlc0NyZWF0aW9uRGF0YTsKKyAgICBz
dGQ6Om9wdGlvbmFsPGJvb2w+IGluY2x1ZGVzQ3JlYXRpb25EYXRhOwogICAgIGRlY29kZXIgPj4g
aW5jbHVkZXNDcmVhdGlvbkRhdGE7Ci0gICAgaWYgKCFpbmNsdWRlc0NyZWF0aW9uRGF0YS5oYXNW
YWx1ZSgpKQorICAgIGlmICghaW5jbHVkZXNDcmVhdGlvbkRhdGEuaGFzX3ZhbHVlKCkpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBpZiAoaW5jbHVkZXNDcmVhdGlvbkRhdGEu
dmFsdWUoKSkgewotICAgICAgICBPcHRpb25hbDxSZWY8U2hhcmVkQnVmZmVyPj4gZm9udEZhY2VE
YXRhOworICAgICAgICBzdGQ6Om9wdGlvbmFsPFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+PiBm
b250RmFjZURhdGE7CiAgICAgICAgIGRlY29kZXIgPj4gZm9udEZhY2VEYXRhOwotICAgICAgICBp
ZiAoIWZvbnRGYWNlRGF0YS5oYXNWYWx1ZSgpKQorICAgICAgICBpZiAoIWZvbnRGYWNlRGF0YS5o
YXNfdmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICAgICAg
T3B0aW9uYWw8U3RyaW5nPiBpdGVtSW5Db2xsZWN0aW9uOworICAgICAgICBzdGQ6Om9wdGlvbmFs
PFN0cmluZz4gaXRlbUluQ29sbGVjdGlvbjsKICAgICAgICAgZGVjb2RlciA+PiBpdGVtSW5Db2xs
ZWN0aW9uOwotICAgICAgICBpZiAoIWl0ZW1JbkNvbGxlY3Rpb24uaGFzVmFsdWUoKSkKKyAgICAg
ICAgaWYgKCFpdGVtSW5Db2xsZWN0aW9uLmhhc192YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKIAogICAgICAgICBhdXRvIGZvbnRDdXN0b21QbGF0Zm9ybURhdGEgPSBj
cmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKGZvbnRGYWNlRGF0YS52YWx1ZSgpLCBpdGVtSW5D
b2xsZWN0aW9uLnZhbHVlKCkpOwpAQCAtNTI5LDE4ICs1MjgsMTggQEAgT3B0aW9uYWw8Rm9udFBs
YXRmb3JtRGF0YT4gQXJndW1lbnRDb2RlcjxSZWY8Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEo
RGVjb2RlciYKICAgICAgICAgYXV0byBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVz
Y3JpcHRvckNyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhiYXNlRm9udERlc2NyaXB0b3IsIGF0dHJp
YnV0ZXMtPmdldCgpKSk7CiAgICAgICAgIGF1dG8gY3RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVh
dGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUudmFsdWUoKSwg
bnVsbHB0cikpOwogCi0gICAgICAgIGF1dG8gY3JlYXRpb25EYXRhID0gRm9udFBsYXRmb3JtRGF0
YTo6Q3JlYXRpb25EYXRhIHsgZm9udEZhY2VEYXRhLnZhbHVlKCksIGl0ZW1JbkNvbGxlY3Rpb24u
dmFsdWUoKSB9OwotICAgICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShjdEZvbnQuZ2V0KCks
IHNpemUudmFsdWUoKSwgc3ludGhldGljQm9sZC52YWx1ZSgpLCBzeW50aGV0aWNPYmxpcXVlLnZh
bHVlKCksIG9yaWVudGF0aW9uLnZhbHVlKCksIHdpZHRoVmFyaWFudC52YWx1ZSgpLCB0ZXh0UmVu
ZGVyaW5nTW9kZS52YWx1ZSgpLCAmY3JlYXRpb25EYXRhKTsKKyAgICAgICAgYXV0byBjcmVhdGlv
bkRhdGEgPSBXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpDcmVhdGlvbkRhdGEgeyBmb250RmFj
ZURhdGEudmFsdWUoKSwgaXRlbUluQ29sbGVjdGlvbi52YWx1ZSgpIH07CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5nZXQoKSwgc2l6ZS52YWx1ZSgpLCBz
eW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlxdWUudmFsdWUoKSwgb3JpZW50YXRp
b24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRleHRSZW5kZXJpbmdNb2RlLnZhbHVl
KCksICZjcmVhdGlvbkRhdGEpOwogICAgIH0KIAotICAgIE9wdGlvbmFsPFN0cmluZz4gcmVmZXJl
bmNlVVJMOworICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiByZWZlcmVuY2VVUkw7CiAgICAgZGVj
b2RlciA+PiByZWZlcmVuY2VVUkw7Ci0gICAgaWYgKCFyZWZlcmVuY2VVUkwuaGFzVmFsdWUoKSkK
KyAgICBpZiAoIXJlZmVyZW5jZVVSTC5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPFN0cmluZz4gcG9zdFNjcmlwdE5hbWU7CisgICAgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+IHBvc3RTY3JpcHROYW1lOwogICAgIGRlY29kZXIgPj4gcG9zdFNj
cmlwdE5hbWU7Ci0gICAgaWYgKCFwb3N0U2NyaXB0TmFtZS5oYXNWYWx1ZSgpKQorICAgIGlmICgh
cG9zdFNjcmlwdE5hbWUuaGFzX3ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAKICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBm
aW5kRm9udERlc2NyaXB0b3IocmVmZXJlbmNlVVJMLnZhbHVlKCksIHBvc3RTY3JpcHROYW1lLnZh
bHVlKCkpOwpAQCAtNTQ5LDcgKzU0OCw3IEBAIE9wdGlvbmFsPEZvbnRQbGF0Zm9ybURhdGE+IEFy
Z3VtZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImCiAgICAg
Zm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aEF0
dHJpYnV0ZXMoZm9udERlc2NyaXB0b3IuZ2V0KCksIGF0dHJpYnV0ZXMtPmdldCgpKSk7CiAgICAg
YXV0byBjdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250
RGVzY3JpcHRvci5nZXQoKSwgc2l6ZS52YWx1ZSgpLCBudWxscHRyKSk7CiAKLSAgICByZXR1cm4g
Rm9udFBsYXRmb3JtRGF0YShjdEZvbnQuZ2V0KCksIHNpemUudmFsdWUoKSwgc3ludGhldGljQm9s
ZC52YWx1ZSgpLCBzeW50aGV0aWNPYmxpcXVlLnZhbHVlKCksIG9yaWVudGF0aW9uLnZhbHVlKCks
IHdpZHRoVmFyaWFudC52YWx1ZSgpLCB0ZXh0UmVuZGVyaW5nTW9kZS52YWx1ZSgpKTsKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YShjdEZvbnQuZ2V0KCksIHNpemUudmFsdWUo
KSwgc3ludGhldGljQm9sZC52YWx1ZSgpLCBzeW50aGV0aWNPYmxpcXVlLnZhbHVlKCksIG9yaWVu
dGF0aW9uLnZhbHVlKCksIHdpZHRoVmFyaWFudC52YWx1ZSgpLCB0ZXh0UmVuZGVyaW5nTW9kZS52
YWx1ZSgpKTsKIH0KIAogdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKQEAgLTYxNSwyMyArNjE0LDIzIEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGVQbGF0Zm9y
bURhdGEoRGVjb2RlciYgZGVjb2RlCiB9CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tf
VEFSR0VUKQotdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRD
b250ZXh0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IE1lZGlh
UGxheWJhY2tUYXJnZXRDb250ZXh0JiB0YXJnZXQpCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQ+OjplbmNvZGVQbGF0Zm9ybURhdGEoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQmIHRh
cmdldCkKIHsKLSAgICBpZiAodGFyZ2V0LnR5cGUoKSA9PSBNZWRpYVBsYXliYWNrVGFyZ2V0Q29u
dGV4dDo6VHlwZTo6QVZPdXRwdXRDb250ZXh0KSB7CisgICAgaWYgKHRhcmdldC50eXBlKCkgPT0g
V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQ6OlR5cGU6OkFWT3V0cHV0Q29udGV4
dCkgewogICAgICAgICBpZiAoW1BBTDo6Z2V0QVZPdXRwdXRDb250ZXh0Q2xhc3MoKSBjb25mb3Jt
c1RvUHJvdG9jb2w6QHByb3RvY29sKE5TU2VjdXJlQ29kaW5nKV0pCiAgICAgICAgICAgICBlbmNv
ZGVyIDw8IHRhcmdldC5vdXRwdXRDb250ZXh0KCk7Ci0gICAgfSBlbHNlIGlmICh0YXJnZXQudHlw
ZSgpID09IE1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0OjpUeXBlOjpTZXJpYWxpemVkQVZPdXRw
dXRDb250ZXh0KSB7CisgICAgfSBlbHNlIGlmICh0YXJnZXQudHlwZSgpID09IFdlYkNvcmU6Ok1l
ZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0OjpUeXBlOjpTZXJpYWxpemVkQVZPdXRwdXRDb250ZXh0
KSB7CiAgICAgICAgIGVuY29kZXIgPDwgdGFyZ2V0LnNlcmlhbGl6ZWRPdXRwdXRDb250ZXh0KCk7
CiAgICAgICAgIGVuY29kZXIgPDwgdGFyZ2V0Lmhhc0FjdGl2ZVJvdXRlKCk7CiAgICAgfSBlbHNl
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQ+OjpkZWNvZGVQbGF0Zm9ybURhdGEo
RGVjb2RlciYgZGVjb2RlciwgTWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQ6OlR5cGUgY29udGV4
dFR5cGUsIE1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0JiB0YXJnZXQpCitib29sIEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQ+OjpkZWNvZGVQbGF0Zm9y
bURhdGEoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRl
eHQ6OlR5cGUgY29udGV4dFR5cGUsIFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0
JiB0YXJnZXQpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHRUeXBlICE9IE1lZGlhUGxheWJhY2tUYXJn
ZXRDb250ZXh0OjpUeXBlOjpNb2NrKTsKKyAgICBBU1NFUlQoY29udGV4dFR5cGUgIT0gV2ViQ29y
ZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQ6OlR5cGU6Ok1vY2spOwogCi0gICAgaWYgKGNv
bnRleHRUeXBlID09IE1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0OjpUeXBlOjpBVk91dHB1dENv
bnRleHQpIHsKKyAgICBpZiAoY29udGV4dFR5cGUgPT0gV2ViQ29yZTo6TWVkaWFQbGF5YmFja1Rh
cmdldENvbnRleHQ6OlR5cGU6OkFWT3V0cHV0Q29udGV4dCkgewogICAgICAgICBpZiAoIVtQQUw6
OmdldEFWT3V0cHV0Q29udGV4dENsYXNzKCkgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChO
U1NlY3VyZUNvZGluZyldKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC02NDMsNyAr
NjQyLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRD
b250ZXh0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY28KICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgaWYgKGNvbnRleHRUeXBlID09IE1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0
OjpUeXBlOjpTZXJpYWxpemVkQVZPdXRwdXRDb250ZXh0KSB7CisgICAgaWYgKGNvbnRleHRUeXBl
ID09IFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0OjpUeXBlOjpTZXJpYWxpemVk
QVZPdXRwdXRDb250ZXh0KSB7CiAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IHNlcmlhbGl6ZWRP
dXRwdXRDb250ZXh0OwogICAgICAgICBpZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIHNlcmlhbGl6
ZWRPdXRwdXRDb250ZXh0KSB8fCAhc2VyaWFsaXplZE91dHB1dENvbnRleHQpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC02NjIsMTIgKzY2MSwxMiBAQCBib29sIEFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6TWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQ+OjpkZWNvZGVQbGF0Zm9ybURhdGEo
RGVjbwogCiAjaWYgRU5BQkxFKElNQUdFX0VYVFJBQ1RJT04pICYmIEVOQUJMRShEQVRBX0RFVEVD
VElPTikKIAotdm9pZCBBcmd1bWVudENvZGVyPEltYWdlRXh0cmFjdGlvbkRhdGFEZXRlY3Rvcklu
Zm8+OjplbmNvZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSW1hZ2VFeHRy
YWN0aW9uRGF0YURldGVjdG9ySW5mbyYgaW5mbykKK3ZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpJbWFnZUV4dHJhY3Rpb25EYXRhRGV0ZWN0b3JJbmZvPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkltYWdlRXh0cmFjdGlvbkRhdGFEZXRlY3Rv
ckluZm8mIGluZm8pCiB7CiAgICAgZW5jb2RlciA8PCBpbmZvLnJlc3VsdC5nZXQoKTsKIH0KIAot
Ym9vbCBBcmd1bWVudENvZGVyPEltYWdlRXh0cmFjdGlvbkRhdGFEZXRlY3RvckluZm8+OjpkZWNv
ZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYgZGVjb2RlciwgSW1hZ2VFeHRyYWN0aW9uRGF0YURldGVj
dG9ySW5mbyYgcmVzdWx0KQorYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkltYWdlRXh0cmFj
dGlvbkRhdGFEZXRlY3RvckluZm8+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYgZGVjb2Rl
ciwgV2ViQ29yZTo6SW1hZ2VFeHRyYWN0aW9uRGF0YURldGVjdG9ySW5mbyYgcmVzdWx0KQogewog
ICAgIGF1dG8gc2Nhbm5lclJlc3VsdCA9IElQQzo6ZGVjb2RlPEREU2Nhbm5lclJlc3VsdD4oZGVj
b2RlciwgQFsgUEFMOjpnZXRERFNjYW5uZXJSZXN1bHRDbGFzcygpIF0pOwogICAgIGlmICghc2Nh
bm5lclJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VudHJ5UG9pbnRV
dGlsaXRpZXMvQ29jb2EvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5tbSBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvQ29jb2EvWFBDU2VydmljZS9YUENT
ZXJ2aWNlRW50cnlQb2ludC5tbQppbmRleCBjOTFkY2ZjYjI4NjliOTdlZDZjMTJhZmMyMDc4YmQy
MmI0ZDIzOTA1Li41NWM1YzgwZjA4MTI1ZDYxZWVkZDFmNDM3MzlkYTk4ZDgwZmRmYzE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL0NvY29hL1hQ
Q1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvRW50cnlQb2ludFV0aWxpdGllcy9Db2NvYS9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBv
aW50Lm1tCkBAIC04NSw3ICs4NSw3IEBAIGJvb2wgWFBDU2VydmljZUluaXRpYWxpemVyRGVsZWdh
dGU6OmdldENsaWVudFNES1ZlcnNpb24odWludDMyX3QmIGNsaWVudFNES1ZlcnNpCiB7CiAgICAg
YXV0byB2ZXJzaW9uID0gcGFyc2VJbnRlZ2VyPHVpbnQzMl90Pih4cGNfZGljdGlvbmFyeV9nZXRf
c3RyaW5nKG1faW5pdGlhbGl6ZXJNZXNzYWdlLCAiY2xpZW50LXNkay12ZXJzaW9uIikpOwogICAg
IGNsaWVudFNES1ZlcnNpb24gPSB2ZXJzaW9uLnZhbHVlX29yKDApOwotICAgIHJldHVybiB2ZXJz
aW9uLmhhc1ZhbHVlKCk7CisgICAgcmV0dXJuIHZlcnNpb24uaGFzX3ZhbHVlKCk7CiB9CiAKIGJv
b2wgWFBDU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGU6OmdldFByb2Nlc3NJZGVudGlmaWVyKFBy
b2Nlc3NJZGVudGlmaWVyJiBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggZjFhOGFjODg1ZjQ2MTAwZmRjNjU2NTg4YmRh
MTcxOTJlYTY2NDNjYi4uMTI5ZWZlZjFkNzI5OTFkMTRjZTVhYjE5ZTM2MzExMmEwOTE4OTE4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBA
IC0xMDY2LDcgKzEwNjYsNyBAQCBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2Rl
SW1hZ2UoRGVjb2RlciYgZGVjb2RlciwgUmVmUHRyPEltYWdlPiYgaW1hZwogewogICAgIE9wdGlv
bmFsPGJvb2w+IGRpZENyZWF0ZUdyYXBoaWNzQ29udGV4dDsKICAgICBkZWNvZGVyID4+IGRpZENy
ZWF0ZUdyYXBoaWNzQ29udGV4dDsKLSAgICBpZiAoIWRpZENyZWF0ZUdyYXBoaWNzQ29udGV4dC5o
YXNWYWx1ZSgpIHx8ICFkaWRDcmVhdGVHcmFwaGljc0NvbnRleHQudmFsdWUoKSkKKyAgICBpZiAo
IWRpZENyZWF0ZUdyYXBoaWNzQ29udGV4dCB8fCAhKmRpZENyZWF0ZUdyYXBoaWNzQ29udGV4dCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFu
ZGxlOwpAQCAtMTEyMSwzMSArMTEyMSwzMSBAQCBPcHRpb25hbDxSZWY8Rm9udD4+IEFyZ3VtZW50
Q29kZXI8UmVmPEZvbnQ+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9u
YWw8Rm9udDo6T3JpZ2luPiBvcmlnaW47CiAgICAgZGVjb2RlciA+PiBvcmlnaW47Ci0gICAgaWYg
KCFvcmlnaW4uaGFzVmFsdWUoKSkKKyAgICBpZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIAogICAgIE9wdGlvbmFsPEZvbnQ6OkludGVyc3RpdGlhbD4gaXNJbnRlcnN0
aXRpYWw7CiAgICAgZGVjb2RlciA+PiBpc0ludGVyc3RpdGlhbDsKLSAgICBpZiAoIWlzSW50ZXJz
dGl0aWFsLmhhc1ZhbHVlKCkpCisgICAgaWYgKCFpc0ludGVyc3RpdGlhbCkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIE9wdGlvbmFsPEZvbnQ6OlZpc2liaWxpdHk+IHZpc2li
aWxpdHk7CiAgICAgZGVjb2RlciA+PiB2aXNpYmlsaXR5OwotICAgIGlmICghdmlzaWJpbGl0eS5o
YXNWYWx1ZSgpKQorICAgIGlmICghdmlzaWJpbGl0eSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAogICAgIE9wdGlvbmFsPEZvbnQ6Ok9yaWVudGF0aW9uRmFsbGJhY2s+IGlzVGV4dE9y
aWVudGF0aW9uRmFsbGJhY2s7CiAgICAgZGVjb2RlciA+PiBpc1RleHRPcmllbnRhdGlvbkZhbGxi
YWNrOwotICAgIGlmICghaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjay5oYXNWYWx1ZSgpKQorICAg
IGlmICghaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAogICAgIE9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gcmVuZGVy
aW5nUmVyc291Y2VJZGVudGlmaWVyOwogICAgIGRlY29kZXIgPj4gcmVuZGVyaW5nUmVyc291Y2VJ
ZGVudGlmaWVyOwotICAgIGlmICghcmVuZGVyaW5nUmVyc291Y2VJZGVudGlmaWVyLmhhc1ZhbHVl
KCkpCisgICAgaWYgKCFyZW5kZXJpbmdSZXJzb3VjZUlkZW50aWZpZXIpCiAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAKICAgICBhdXRvIHBsYXRmb3JtRGF0YSA9IGRlY29kZVBsYXRmb3Jt
RGF0YShkZWNvZGVyKTsKLSAgICBpZiAoIXBsYXRmb3JtRGF0YS5oYXNWYWx1ZSgpKQorICAgIGlm
ICghcGxhdGZvcm1EYXRhKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcmV0
dXJuIEZvbnQ6OmNyZWF0ZShwbGF0Zm9ybURhdGEudmFsdWUoKSwgb3JpZ2luLnZhbHVlKCksIGlz
SW50ZXJzdGl0aWFsLnZhbHVlKCksIHZpc2liaWxpdHkudmFsdWUoKSwgaXNUZXh0T3JpZW50YXRp
b25GYWxsYmFjay52YWx1ZSgpLCByZW5kZXJpbmdSZXJzb3VjZUlkZW50aWZpZXIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhRm9y
bWF0UmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRl
ci9NZWRpYUZvcm1hdFJlYWRlci5jcHAKaW5kZXggYzM4Y2EyZTBiN2U3NDc0MTExYzhiMzllMWQ5
NDFjZDA2NzU0YzI1Yy4uMGM1ZTgyNjQ5N2FkNThkODA3YTAyMjM5NmM0ZDNmNzM3YmM2ZDhmYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01l
ZGlhRm9ybWF0UmVhZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9p
ZCBNZWRpYUZvcm1hdFJlYWRlcjo6ZmluaXNoUGFyc2luZyhSZWY8U291cmNlQnVmZmVyUGFyc2Vy
PiYmIHBhcnNlcikKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwogCiAgICAgTG9ja2Vy
IGxvY2tlciB7IG1fcGFyc2VUcmFja3NMb2NrIH07Ci0gICAgQVNTRVJUKG1fcGFyc2VUcmFja3NT
dGF0dXMuaGFzVmFsdWUoKSk7CisgICAgQVNTRVJUKG1fcGFyc2VUcmFja3NTdGF0dXMuaGFzX3Zh
bHVlKCkpOwogCiAgICAgZm9yIChhdXRvJiB0cmFja1JlYWRlciA6IG1fdHJhY2tSZWFkZXJzKQog
ICAgICAgICB0cmFja1JlYWRlci0+ZmluaXNoUGFyc2luZygpOwpAQCAtMjM0LDcgKzIzNCw3IEBA
IE9TU3RhdHVzIE1lZGlhRm9ybWF0UmVhZGVyOjpjb3B5UHJvcGVydHkoQ0ZTdHJpbmdSZWYga2V5
LCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0CiAgICAgTG9ja2VyIGxvY2tlciB7IG1fcGFyc2VUcmFj
a3NMb2NrIH07CiAgICAgbV9wYXJzZVRyYWNrc0NvbmRpdGlvbi53YWl0KG1fcGFyc2VUcmFja3NM
b2NrLCBbJl0gewogICAgICAgICBhc3NlcnRJc0hlbGQobV9wYXJzZVRyYWNrc0xvY2spOwotICAg
ICAgICByZXR1cm4gbV9wYXJzZVRyYWNrc1N0YXR1cy5oYXNWYWx1ZSgpOworICAgICAgICByZXR1
cm4gbV9wYXJzZVRyYWNrc1N0YXR1cy5oYXNfdmFsdWUoKTsKICAgICB9KTsKIAogICAgIGlmIChD
RkVxdWFsKGtleSwgUEFMOjpnZXRfTWVkaWFUb29sYm94X2tNVFBsdWdpbkZvcm1hdFJlYWRlclBy
b3BlcnR5X0R1cmF0aW9uKCkpKSB7CkBAIC0yNTYsNyArMjU2LDcgQEAgT1NTdGF0dXMgTWVkaWFG
b3JtYXRSZWFkZXI6OmNvcHlUcmFja0FycmF5KENGQXJyYXlSZWYqIHRyYWNrQXJyYXlDb3B5KQog
ICAgIExvY2tlciBsb2NrZXIgeyBtX3BhcnNlVHJhY2tzTG9jayB9OwogICAgIG1fcGFyc2VUcmFj
a3NDb25kaXRpb24ud2FpdChtX3BhcnNlVHJhY2tzTG9jaywgWyZdIHsKICAgICAgICAgYXNzZXJ0
SXNIZWxkKG1fcGFyc2VUcmFja3NMb2NrKTsKLSAgICAgICAgcmV0dXJuIG1fcGFyc2VUcmFja3NT
dGF0dXMuaGFzVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIG1fcGFyc2VUcmFja3NTdGF0dXMuaGFz
X3ZhbHVlKCk7CiAgICAgfSk7CiAKICAgICBpZiAoKm1fcGFyc2VUcmFja3NTdGF0dXMgIT0gbm9F
cnIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Q29uZmlndXJhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCmluZGV4IDczNjdlODgwMjc2ZmE2NDE3YTllNDlmZTg5
ODc5Y2ZjZTk4OWMxNDMuLjQ1NjFjNTY4NjgyYTUyNzc0N2Q2YTUxNWVhM2Y4OGU3OTI5M2EwMjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdD
b25maWd1cmF0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCkBAIC0zMDIsNyArMzAyLDcgQEAgLSAodm9pZCllbmNv
ZGVXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgogCiAgICAgW2NvZGVyIGVuY29kZUJvb2w6c2Vs
Zi5zdXBwcmVzc2VzSW5jcmVtZW50YWxSZW5kZXJpbmcgZm9yS2V5OkAic3VwcHJlc3Nlc0luY3Jl
bWVudGFsUmVuZGVyaW5nIl07CiAKLSAgICBpZiAoX2FwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2Vu
dC5oYXNWYWx1ZSgpKQorICAgIGlmIChfYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KQogICAg
ICAgICBbY29kZXIgZW5jb2RlT2JqZWN0OnNlbGYuYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50
IGZvcktleTpAImFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudCJdOwogCiAgICAgW2NvZGVyIGVu
Y29kZUJvb2w6c2VsZi5hbGxvd3NBaXJQbGF5Rm9yTWVkaWFQbGF5YmFjayBmb3JLZXk6QCJhbGxv
d3NBaXJQbGF5Rm9yTWVkaWFQbGF5YmFjayJdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCBk
ODZmMmYxMWI1MTFiYzlmNGI1MTViYTQ0MDA4MjMyNDhiMjE5ZDY5Li5iNTAwNTg1OTRjZDc5MDU1
MjIzZTI3ZTdmNTVlMDM0MjIwNjliNTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtNjIs
MTAgKzYyLDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBTdHJpbmcgQXV0b21hdGlvbkNv
bW1hbmRFcnJvcjo6dG9Qcm90b2NvbFN0cmluZygpCiB7CiAgICAgU3RyaW5nIHByb3RvY29sRXJy
b3JOYW1lID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHR5cGUpOwotICAgIGlmICghbWVzc2FnZS5oYXNWYWx1ZSgpKQorICAgIGlm
ICghbWVzc2FnZSkKICAgICAgICAgcmV0dXJuIHByb3RvY29sRXJyb3JOYW1lOwotCi0gICAgcmV0
dXJuIG1ha2VTdHJpbmcocHJvdG9jb2xFcnJvck5hbWUsIGVycm9yTmFtZUFuZERldGFpbHNTZXBh
cmF0b3IsIG1lc3NhZ2UudmFsdWUoKSk7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcocHJvdG9jb2xF
cnJvck5hbWUsIGVycm9yTmFtZUFuZERldGFpbHNTZXBhcmF0b3IsICptZXNzYWdlKTsKIH0KICAg
ICAKIC8vIMKnOC4gU2Vzc2lvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0KaW5kZXggMGRhYTExY2QyZWI3NzJi
NzE2OGY3M2VjZjEyZWE3M2FlNmM2MDQ4NS4uY2VhZjdmMjg2Nzg4ZjNmNDg5YmI4MzUyZTAyMmU4
NjQxNmY4N2MzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UGFzdGVib2FyZFByb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0KQEAgLTk1LDcgKzk1LDcgQEAgYm9vbCBXZWJQ
YXN0ZWJvYXJkUHJveHk6OmNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgY28KICAgICByZXR1cm4gdHlwZSAmJiAqdHlwZSA9PSBQYXN0ZWJvYXJkQWNj
ZXNzVHlwZTo6VHlwZXNBbmREYXRhOwogfQogCi1PcHRpb25hbDxXZWJQYXN0ZWJvYXJkUHJveHk6
OlBhc3RlYm9hcmRBY2Nlc3NUeXBlPiBXZWJQYXN0ZWJvYXJkUHJveHk6OmFjY2Vzc1R5cGUoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBj
b25zdAorc3RkOjpvcHRpb25hbDxXZWJQYXN0ZWJvYXJkUHJveHk6OlBhc3RlYm9hcmRBY2Nlc3NU
eXBlPiBXZWJQYXN0ZWJvYXJkUHJveHk6OmFjY2Vzc1R5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBjb25zdAogewogICAgIE1FU1NB
R0VfQ0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUoIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgc3Rk
OjpudWxsb3B0KTsKIApAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5
OjpkaWRNb2RpZnlDb250ZW50c09mUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
CiAgICAgfQogfQogCi12b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFR5cGVz
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkVHlwZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlm
aWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMo
Y29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoeyB9KTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6
Z2V0UGFzdGVib2FyZFR5cGVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgUwog
ICAgIH0pOwogfQogCi12b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFBhdGhu
YW1lc0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxQYWdl
SWRlbnRpZmllcj4gcGFnZUlELAordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9h
cmRQYXRobmFtZXNGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgc3RkOjpv
cHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELAogICAgIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPFN0cmluZz4mJiBwYXRobmFtZXMsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFy
cmF5JiYgc2FuZGJveEV4dGVuc2lvbnMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1F
U1NBR0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVib2FyZFR5cGUuaXNFbXB0eSgpLCBjb21wbGV0
aW9uSGFuZGxlcih7IH0sIHsgfSkpOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3RpCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0
ZWJvYXJkU3RyaW5nRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIE9wdGlv
bmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5n
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBh
c3RlYm9hcmRTdHJpbmdGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgc3Rk
OjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFN0cmluZyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBNRVNTQUdFX0NIRUNLX0NP
TVBMRVRJT04oIXBhc3RlYm9hcmRUeXBlLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoeyB9
KSk7CiAKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFz
dGVib2FyZFN0cmluZ0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLAogICAgIH0p
OwogfQogCi12b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ3NGb3JU
eXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZp
ZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJk
U3RyaW5nc0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBzdGQ6Om9wdGlv
bmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgTUVTU0FHRV9DSEVDS19D
T01QTEVUSU9OKCFwYXN0ZWJvYXJkVHlwZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKHsg
fSkpOwogCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBh
c3RlYm9hcmRTdHJpbmdzRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24KICAgICB9
KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRCdWZmZXJGb3JU
eXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZp
ZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWRNZW1vcnk6OklQQ0hhbmRs
ZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQ
YXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIHN0
ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9hcmRUeXBlLmlzRW1wdHkoKSwgY29t
cGxldGlvbkhhbmRsZXIoeyB9KSk7CiAKQEAgLTI0NCw3ICsyNDQsNyBAQCB2b2lkIFdlYlBhc3Rl
Ym9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLAogICAgIH0pOwogfQogCi12b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFz
dGVib2FyZENoYW5nZUNvdW50KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQg
V2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBzdGQ6Om9wdGlv
bmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRf
dCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9O
KCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKIApAQCAt
MjU2LDcgKzI1Niw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQ2hh
bmdlQ291bnQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjCiAgICAgfSk7CiB9CiAKLXZv
aWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdl
SWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OkNvbG9y
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBh
c3RlYm9hcmRDb2xvcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIHN0ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpDb2xvciYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmREYXRhKGNvbm5lY3Rpb24sIHBhc3Rl
Ym9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CkBAIC0y
NjksNyArMjY5LDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRDb2xv
cihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFMKICAgICB9KTsKIH0KIAotdm9p
ZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRl
bnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9h
cmRVUkwoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
aWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkp
CiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwpAQCAtMjgyLDcgKzI4Miw3
IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkVVJMKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjphZGRQYXN0ZWJvYXJkVHlwZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFz
dGVib2FyZFR5cGVzLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYXN0
ZWJvYXJkUHJveHk6OmFkZFBhc3RlYm9hcmRUeXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXN0ZWJvYXJkVHlwZXMsIHN0ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29t
cGxldGlvbkhhbmRsZXIoMCkpOwogCkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OmFkZFBhc3RlYm9hcmRUeXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IGNvbnN0IFMKICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3Rl
Ym9hcmRUeXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIE9wdGlv
bmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRf
dCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFz
dGVib2FyZFR5cGVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgc3Rk
OjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NBR0VfQ0hFQ0tfQ09N
UExFVElPTighcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7
CiAKQEAgLTMxOCw3ICszMTgsNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVi
b2FyZFR5cGVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgUwogICAgIH0pOwog
fQogCi12b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFVSTChJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFBhc3RlYm9hcmRVUkwmIHBhc3RlYm9hcmRVUkwsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFVSTChJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIGNvbnN0IFBhc3RlYm9hcmRVUkwmIHBhc3RlYm9hcmRVUkwsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIHN0ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBh
Z2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9hcmROYW1lLmlzRW1w
dHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogCkBAIC0zNDIsNyArMzQyLDcgQEAgdm9pZCBX
ZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBjb25zdCBQYXMKICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6
OnNldFBhc3RlYm9hcmRDb2xvcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvciwgT3B0aW9u
YWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0
ZWJvYXJkQ29sb3IoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IsIHN0ZDo6b3B0aW9uYWw8
UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBh
c3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogCkBAIC0zNTcs
NyArMzU3LDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRDb2xvcihJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFMKICAgICB9KTsKIH0KIAotdm9pZCBX
ZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIE9wdGlvbmFsPFBhZ2VJ
ZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFN0
cmluZ0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcm
IHN0cmluZywgc3RkOjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NB
R0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBjb21wbGV0aW9u
SGFuZGxlcigwKSk7CiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkVHlw
ZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKQEAgLTM3Myw3ICszNzMsNyBAQCB2
b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLAogICAgIH0pOwogfQogCi12b2lkIFdlYlBhc3RlYm9hcmRQ
cm94eTo6Y29udGFpbnNVUkxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdl
SWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmNvbnRhaW5zVVJMU3RyaW5n
U3VpdGFibGVGb3JMb2FkaW5nKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgc3RkOjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlE
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmRO
YW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKQEAgLTM4Niw3
ICszODYsNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Y29udGFpbnNVUkxTdHJpbmdTdWl0
YWJsZUZvckxvYWRpbmcoSVBDOjpDb25uZWN0aW9uJiBjbwogICAgIH0pOwogfQogCi12b2lkIFdl
YlBhc3RlYm9hcmRQcm94eTo6dXJsU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8
UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJiB1
cmwsIFN0cmluZyYmIHRpdGxlKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5Ojp1cmxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBzdGQ6Om9wdGlvbmFsPFBh
Z2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYgdXJs
LCBTdHJpbmcmJiB0aXRsZSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFjYW5B
Y2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSk7CkBAIC00MDEsNyArNDAxLDcgQEAg
dm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnVybFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyhJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24KICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJk
UHJveHk6OnNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkVHlwZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmIGlwY0hhbmRsZSwgT3B0aW9u
YWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0
ZWJvYXJkQnVmZmVyRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0
IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiBpcGNIYW5kbGUsIHN0ZDo6b3B0aW9uYWw8UGFnZUlk
ZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9h
cmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogICAgIE1FU1NBR0VfQ0hF
Q0tfQ09NUExFVElPTighcGFzdGVib2FyZFR5cGUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxl
cigwKSk7CkBAIC00MjcsNyArNDI3LDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBh
c3RlYm9hcmRCdWZmZXJGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldE51bWJlck9mRmlsZXMoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRp
b25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2
NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRO
dW1iZXJPZkZpbGVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgc3RkOjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBpZiAoIWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFt
ZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigwKTsKQEAgLTQ0MCw3ICs0NDAs
NyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0TnVtYmVyT2ZGaWxlcyhJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cgogICAgIH0pOwogfQogCi12b2lkIFdlYlBhc3Rl
Ym9hcmRQcm94eTo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcm
IG9yaWdpbiwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8U3RyaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2Vi
UGFzdGVib2FyZFByb3h5Ojp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0
cmluZyYgb3JpZ2luLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFvcmlnaW4uaXNOdWxsKCksIGNvbXBs
ZXRpb25IYW5kbGVyKHsgfSkpOwogCkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGkKICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlQ3Vz
dG9tRGF0YShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFZlY3RvcjxQYXN0ZWJv
YXJkQ3VzdG9tRGF0YT4mIGRhdGEsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlv
bmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRf
dCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVD
dXN0b21EYXRhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgVmVjdG9yPFBhc3Rl
Ym9hcmRDdXN0b21EYXRhPiYgZGF0YSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgc3Rk
OjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NBR0VfQ0hFQ0tfQ09N
UExFVElPTighcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7
CiAKQEAgLTQ3MCw3ICs0NzAsNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVDdXN0
b21EYXRhKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgVmVjdAogICAgIH0pOwog
fQogCi12b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6YWxsUGFzdGVib2FyZEl0ZW1JbmZvKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgaW50
NjRfdCBjaGFuZ2VDb3VudCwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxWZWN0b3I8UGFzdGVib2FyZEl0ZW1JbmZvPj4mJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6YWxsUGFzdGVi
b2FyZEl0ZW1JbmZvKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgaW50NjRfdCBjaGFuZ2VDb3VudCwgc3RkOjpvcHRpb25hbDxQYWdlSWRl
bnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8VmVj
dG9yPFBhc3RlYm9hcmRJdGVtSW5mbz4+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1l
KSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CkBAIC00ODMsNyArNDgz
LDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmFsbFBhc3RlYm9hcmRJdGVtSW5mbyhJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnMKICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0
ZWJvYXJkUHJveHk6OmluZm9ybWF0aW9uRm9ySXRlbUF0SW5kZXgoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBzaXplX3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGlu
dDY0X3QgY2hhbmdlQ291bnQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8UGFzdGVib2FyZEl0ZW1JbmZvPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjppbmZvcm1hdGlvbkZvckl0
ZW1BdEluZGV4KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGluZGV4LCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBpbnQ2NF90IGNoYW5nZUNvdW50LCBzdGQ6Om9wdGlv
bmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpv
cHRpb25hbDxQYXN0ZWJvYXJkSXRlbUluZm8+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmRO
YW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bnVsbG9wdCk7CkBA
IC00OTYsNyArNDk2LDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmluZm9ybWF0aW9uRm9y
SXRlbUF0SW5kZXgoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLAogICAgIH0pOwogfQogCi12
b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25h
bDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0
ZWJvYXJkSXRlbXNDb3VudChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIHN0ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVjdGlvbiwgcGFzdGVib2Fy
ZE5hbWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoMCk7CkBAIC01MDksNyAr
NTA5LDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRJdGVtc0NvdW50
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY28KICAgICB9KTsKIH0KIAotdm9pZCBXZWJQ
YXN0ZWJvYXJkUHJveHk6OnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIHNpemVfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBh
Z2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBzdGQ6Om9wdGlvbmFs
PFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTigh
cGFzdGVib2FyZFR5cGUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcih7IH0pKTsKIApAQCAt
NTI0LDcgKzUyNCw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkU3RyaW5nRnJvbVBh
c3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBzCiAgICAgfSk7CiB9CiAKLXZv
aWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkVVJMRnJvbVBhc3RlYm9hcmQoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBzaXplX3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU3RyaW5nJiYgdXJsLCBTdHJpbmcmJiB0aXRsZSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFVSTEZyb21QYXN0ZWJvYXJkKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU3RyaW5nJiYgdXJsLCBTdHJpbmcmJiB0aXRsZSk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0aW9uLCBwYXN0
ZWJvYXJkTmFtZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0sIHsgfSk7
CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRVUkxGcm9t
UGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHNpemUKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZChJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHNpemVfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlk
ZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5
OjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBz
aXplX3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIHN0ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9hcmRU
eXBlLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoeyB9KSk7CiAKQEAgLTU2Nyw3ICs1Njcs
NyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgcwogICAgIH0pOwogfQogCi12b2lkIFdlYlBhc3Rl
Ym9hcmRQcm94eTo6Y29udGFpbnNTdHJpbmdTYWZlRm9yRE9NVG9SZWFkRm9yVHlwZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5Ojpjb250YWluc1N0cmluZ1NhZmVGb3JET01Ub1JlYWRGb3JUeXBlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYg
KCFjYW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQog
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwpAQCAtNTgyLDcgKzU4Miw3
IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpjb250YWluc1N0cmluZ1NhZmVGb3JET01Ub1Jl
YWRGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAK
LXZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVVSTFRvUGFzdGVib2FyZChJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFBhc3RlYm9hcmRVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkKK3ZvaWQg
V2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVVSTFRvUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIGNvbnN0IFBhc3RlYm9hcmRVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgc3RkOjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlEKQogewogICAg
IE1FU1NBR0VfQ0hFQ0soIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSk7CiAKQEAgLTU5OCw3ICs1
OTgsNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVVUkxUb1Bhc3RlYm9hcmQoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdAogICAgIH0pOwogfQogCi12b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6d3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRl
bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVy
PiBwYWdlSUQpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6d3JpdGVXZWJDb250ZW50VG9QYXN0
ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6UGFzdGVi
b2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIHN0
ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkKIHsKICAgICBNRVNTQUdFX0NIRUNL
KCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCkpOwogCkBAIC02MTQsNyArNjE0LDcgQEAgdm9pZCBX
ZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24KICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6
OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25z
dCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkKK3ZvaWQg
V2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJk
SW1hZ2UsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIHN0ZDo6b3B0aW9uYWw8UGFnZUlk
ZW50aWZpZXI+IHBhZ2VJRCkKIHsKICAgICBNRVNTQUdFX0NIRUNLKCFwYXN0ZWJvYXJkTmFtZS5p
c0VtcHR5KCkpOwogCkBAIC02MzAsNyArNjMwLDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6
OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb24K
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlU3RyaW5nVG9QYXN0
ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlEKQordm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OndyaXRlU3RyaW5nVG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdl
SUQpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpKTsKICAg
ICBNRVNTQUdFX0NIRUNLKCFwYXN0ZWJvYXJkVHlwZS5pc0VtcHR5KCkgfHwgdGV4dC5pc0VtcHR5
KCkpOwpAQCAtNjQ3LDE0ICs2NDcsMTQgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRl
U3RyaW5nVG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY28KICAgICB9
KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVu
dGlmaWVycyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaWRlbnRpZmllcnMsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPikKK3ZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5Ojp1cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnMoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGlkZW50aWZpZXJzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBzdGQ6Om9w
dGlvbmFsPFBhZ2VJZGVudGlmaWVyPikKIHsKICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVi
b2FyZE5hbWUpLnVwZGF0ZVN1cHBvcnRlZFR5cGVJZGVudGlmaWVycyhpZGVudGlmaWVycyk7CiB9
CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCi1PcHRpb25hbDxEYXRhT3duZXJU
eXBlPiBXZWJQYXN0ZWJvYXJkUHJveHk6OmRldGVybWluZURhdGFPd25lcihJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBh
Z2VJZGVudGlmaWVyPiBwYWdlSUQsIFBhc3RlYm9hcmRBY2Nlc3NJbnRlbnQgaW50ZW50KSBjb25z
dAorc3RkOjpvcHRpb25hbDxEYXRhT3duZXJUeXBlPiBXZWJQYXN0ZWJvYXJkUHJveHk6OmRldGVy
bWluZURhdGFPd25lcihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIHN0ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgUGFz
dGVib2FyZEFjY2Vzc0ludGVudCBpbnRlbnQpIGNvbnN0CiB7CiAgICAgTUVTU0FHRV9DSEVDS19X
SVRIX1JFVFVSTl9WQUxVRSghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgpLCBzdGQ6Om51bGxvcHQp
OwogCkBAIC02NjUsNyArNjY1LDcgQEAgT3B0aW9uYWw8RGF0YU93bmVyVHlwZT4gV2ViUGFzdGVi
b2FyZFByb3h5OjpkZXRlcm1pbmVEYXRhT3duZXIoSVBDOjpDb25uZWN0aW9uJgogICAgICAgICBy
ZXR1cm4gRGF0YU93bmVyVHlwZTo6VW5kZWZpbmVkOwogCiAjaWYgSEFWRShQQVNURUJPQVJEX0RB
VEFfT1dORVIpCi0gICAgT3B0aW9uYWw8RGF0YU93bmVyVHlwZT4gcmVzdWx0OworICAgIHN0ZDo6
b3B0aW9uYWw8RGF0YU93bmVyVHlwZT4gcmVzdWx0OwogICAgIGZvciAoYXV0byogcGFnZSA6IHBy
b2Nlc3MtPnBhZ2VzKCkpIHsKICAgICAgICAgaWYgKHBhZ2UtPndlYlBhZ2VJRCgpID09ICpwYWdl
SUQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IHBhZ2UtPmRhdGFPd25lckZvclBhc3RlYm9hcmQo
aW50ZW50KTsKQEAgLTY3NCw3ICs2NzQsNyBAQCBPcHRpb25hbDxEYXRhT3duZXJUeXBlPiBXZWJQ
YXN0ZWJvYXJkUHJveHk6OmRldGVybWluZURhdGFPd25lcihJUEM6OkNvbm5lY3Rpb24mCiAgICAg
fQogICAgIC8vIElmIHRoaXMgbWVzc2FnZSBjaGVjayBpcyBoaXQsIHRoZW4gdGhlIGluY29taW5n
IHdlYiBwYWdlIElEIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgcGFnZQogICAgIC8vIGN1cnJl
bnRseSBrbm93biB0byB0aGUgVUkgcHJvY2Vzcy4KLSAgICBNRVNTQUdFX0NIRUNLX1dJVEhfUkVU
VVJOX1ZBTFVFKHJlc3VsdC5oYXNWYWx1ZSgpLCBzdGQ6Om51bGxvcHQpOworICAgIE1FU1NBR0Vf
Q0hFQ0tfV0lUSF9SRVRVUk5fVkFMVUUocmVzdWx0Lmhhc192YWx1ZSgpLCBzdGQ6Om51bGxvcHQp
OwogICAgIHJldHVybiByZXN1bHQ7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpbnRlbnQpOwpA
QCAtNzA4LDcgKzcwOCw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQWNj
ZXNzSW5mb3JtYXRpb246OnJldm9rZUFjY2VzcyhXZWJQcm9jZXNzUHJvCiAgICAgfSk7CiB9CiAK
LU9wdGlvbmFsPFdlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZEFjY2Vzc1R5cGU+IFdlYlBh
c3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZEFjY2Vzc0luZm9ybWF0aW9uOjphY2Nlc3NUeXBlKFdl
YlByb2Nlc3NQcm94eSYgcHJvY2VzcykgY29uc3QKK3N0ZDo6b3B0aW9uYWw8V2ViUGFzdGVib2Fy
ZFByb3h5OjpQYXN0ZWJvYXJkQWNjZXNzVHlwZT4gV2ViUGFzdGVib2FyZFByb3h5OjpQYXN0ZWJv
YXJkQWNjZXNzSW5mb3JtYXRpb246OmFjY2Vzc1R5cGUoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNz
KSBjb25zdAogewogICAgIGF1dG8gbWF0Y2hJbmRleCA9IHByb2Nlc3Nlcy5maW5kTWF0Y2hpbmco
WyZdKGF1dG8mIHByb2Nlc3NBbmRUeXBlKSB7CiAgICAgICAgIHJldHVybiBwcm9jZXNzQW5kVHlw
ZS5maXJzdCA9PSAmcHJvY2VzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvbWVkaWEvTWVkaWFTb3VyY2VQcml2YXRlUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFTb3VyY2VQcml2YXRlUmVtb3RlLmNwcAppbmRleCA0
YjMwZWRhOTBjMzA1MzI2NDc1MDhjMmFkMDZlZDM5MzRkZGY4YjM0Li4yNTI5ZjliNzRmYjc0OTVm
ZWU1MTAxOThiNDk0ZGNkNjljMjA2MmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL21lZGlhL01lZGlhU291cmNlUHJpdmF0ZVJlbW90ZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVNvdXJjZVByaXZhdGVSZW1vdGUuY3Bw
CkBAIC05OCwxMSArOTgsMTEgQEAgTWVkaWFTb3VyY2VQcml2YXRlOjpBZGRTdGF0dXMgTWVkaWFT
b3VyY2VQcml2YXRlUmVtb3RlOjphZGRTb3VyY2VCdWZmZXIoY29uc3QgQ28KICAgICBpZiAoIW1f
Z3B1UHJvY2Vzc0Nvbm5lY3Rpb24pCiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAKLSAgICBPcHRp
b25hbDxSZW1vdGVTb3VyY2VCdWZmZXJJZGVudGlmaWVyPiByZW1vdGVTb3VyY2VCdWZmZXJJZGVu
dGlmaWVyOworICAgIHN0ZDo6b3B0aW9uYWw8UmVtb3RlU291cmNlQnVmZmVySWRlbnRpZmllcj4g
cmVtb3RlU291cmNlQnVmZmVySWRlbnRpZmllcjsKICAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9u
LT5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZU1lZGlhU291cmNlUHJveHk6
OkFkZFNvdXJjZUJ1ZmZlcihjb250ZW50VHlwZSksIE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVNvdXJj
ZVByb3h5OjpBZGRTb3VyY2VCdWZmZXI6OlJlcGx5KHN0YXR1cywgcmVtb3RlU291cmNlQnVmZmVy
SWRlbnRpZmllciksIG1faWRlbnRpZmllcik7CiAKICAgICBpZiAoc3RhdHVzID09IEFkZFN0YXR1
czo6T2spIHsKLSAgICAgICAgQVNTRVJUKHJlbW90ZVNvdXJjZUJ1ZmZlcklkZW50aWZpZXIuaGFz
VmFsdWUoKSk7CisgICAgICAgIEFTU0VSVChyZW1vdGVTb3VyY2VCdWZmZXJJZGVudGlmaWVyLmhh
c192YWx1ZSgpKTsKICAgICAgICAgYXV0byBuZXdTb3VyY2VCdWZmZXIgPSBTb3VyY2VCdWZmZXJQ
cml2YXRlUmVtb3RlOjpjcmVhdGUoKm1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24sICpyZW1vdGVTb3Vy
Y2VCdWZmZXJJZGVudGlmaWVyLCAqdGhpcywgKm1fbWVkaWFQbGF5ZXJQcml2YXRlKTsKICAgICAg
ICAgb3V0UHJpdmF0ZSA9IG5ld1NvdXJjZUJ1ZmZlci5jb3B5UmVmKCk7CiAgICAgICAgIG1fc291
cmNlQnVmZmVycy5hcHBlbmQoV1RGTW92ZShuZXdTb3VyY2VCdWZmZXIpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpp
bmRleCBmN2JkYjk1NzA0ZGM0NTYwMjM1OTI2MzgxZGY2MDRmMDI4MGQwMTBkLi45Njc0NzgyZGFi
YzM5ODE3MjEzNTFkODY2OTU3OGE2M2ZkYTgyNzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC04Nyw3ICs4
Nyw3IEBAIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1EaWRSZWNlaXZlTG9hZFBhcmFtZXRlcnMoY29u
c3QgTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlm
IChwYXJhbWV0ZXJzLmNvbnRlbnRGaWx0ZXJFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseSgqcGFyYW1ldGVycy5jb250ZW50RmlsdGVy
RXh0ZW5zaW9uSGFuZGxlKTsKLSAgICBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlcjo6c2V0
SGFzQ29uc3VtZWRTYW5kYm94RXh0ZW5zaW9uKHBhcmFtZXRlcnMuY29udGVudEZpbHRlckV4dGVu
c2lvbkhhbmRsZS5oYXNWYWx1ZSgpKTsKKyAgICBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRl
cjo6c2V0SGFzQ29uc3VtZWRTYW5kYm94RXh0ZW5zaW9uKHBhcmFtZXRlcnMuY29udGVudEZpbHRl
ckV4dGVuc2lvbkhhbmRsZS5oYXNfdmFsdWUoKSk7CiAKICAgICBpZiAocGFyYW1ldGVycy5mcm9u
dGJvYXJkU2VydmljZUV4dGVuc2lvbkhhbmRsZSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y29uc3VtZVBlcm1hbmVudGx5KCpwYXJhbWV0ZXJzLmZyb250Ym9hcmRTZXJ2aWNlRXh0ZW5zaW9u
SGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQ
cm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vz
c0NvY29hLm1tCmluZGV4IDQxOGE0YTU3MzE5OWZlNzdiNzhiZmNlYjM0NGU0NWM0ODM5YzM5YTMu
LjFhN2IxNzJiMDc5ZGE5NTc2YWJjYTYxZmNmOWI3M2E2ODYwNjliMjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQpAQCAtMTE0Miw3
ICsxMTQyLDcgQEAgc3RhdGljIHZvaWQgc2V0UHJlZmVyZW5jZVZhbHVlKGNvbnN0IFN0cmluZyYg
ZG9tYWluLCBjb25zdCBTdHJpbmcmIGtleSwgaWQgdmFsdWUKIAogdm9pZCBXZWJQcm9jZXNzOjpu
b3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBPcHRpb25hbDxTdHJpbmc+JiBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgaWYg
KCFlbmNvZGVkVmFsdWUuaGFzVmFsdWUoKSkgeworICAgIGlmICghZW5jb2RlZFZhbHVlKSB7CiAg
ICAgICAgIHNldFByZWZlcmVuY2VWYWx1ZShkb21haW4sIGtleSwgbmlsKTsKICAgICAgICAgZGlz
cGF0Y2hTaW11bGF0ZWROb3RpZmljYXRpb25zRm9yUHJlZmVyZW5jZUNoYW5nZShrZXkpOwogICAg
ICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430077</attachid>
            <date>2021-05-28 17:28:46 -0700</date>
            <delta_ts>2021-05-28 19:01:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226395-20210528172845.patch</filename>
            <type>text/plain</type>
            <size>197697</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
YjNiZDNkZTNlYzhlMTMxOWZkZGIwY2MzMzJmY2RlZWFkMjk2ZDlhLi5iZDU4MGQwMmFkMjRkM2Uw
NmY4Yjg0MjFiZmZmN2Q5N2IxNTExZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wNS0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQ2xpZW50cyBvZiBvcHRpb25hbCBzaG91bGQgdXNlIGhhc192YWx1ZSBpbnN0ZWFk
IG9mIHJlbHlpbmcgb24gaGFzVmFsdWUgbWFjcm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjM5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6Cisg
ICAgICAgIChKU0M6OlJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZSk6IERvbid0IHVzZSBoYXNWYWx1
ZS4KKwogMjAyMS0wNS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAg
ICAgIFN0b3AgdXNpbmcgVW5jaGVja2VkTG9jayBpbiBKU0RPTUdsb2JhbE9iamVjdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCAz
NDg1ZmY1NGRkMDY0NmQ2MzdiNjhiNDZhZWZlZmYxOTIxY2U4NGIwLi41OTU2MWU1ZTA4ODAwOWNj
MzNmNmE1NjA0NmNkYmZjMzAzNWZiOWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA1LTI4
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBDbGllbnRzIG9mIG9w
dGlvbmFsIHNob3VsZCB1c2UgaGFzX3ZhbHVlIGluc3RlYWQgb2YgcmVseWluZyBvbiBoYXNWYWx1
ZSBtYWNybworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI2Mzk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvSGFzaGVyLmg6IFVzZSBoYXNfdmFsdWUuCisKKyAgICAgICAgKiB3dGYvT3B0aW9uYWwu
aDogUmVtb3ZlIGhhc1ZhbHVlIG1hY3JvLiBOb3QgbmVlZGVkIGFueSBtb3JlLCBidXQgYWxzbyBh
IGJpdAorICAgICAgICBkYW5nZXJvdXMgYmVjYXVzZSBvZiBob3cgd2lkZXNwcmVhZCB0aGUgdXNl
IG9mIGhhc1ZhbHVlIGlzIGZvciB0aGluZ3Mgb3RoZXIKKyAgICAgICAgdGhhbiBXVEY6Ok9wdGlv
bmFsLgorCiAyMDIxLTA1LTI4ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+
CiAKICAgICAgICAgRml4IExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0OjpjbGVhcigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggZGY4MzcwMzNiYzRlYjA3MDY5MzRiMWY1MWE4YTgwZDcxMjJmYWRiNi4uZjhm
YjFhNWFjYWU3OTYxMWE5NDcxNjQ5ZWNjMGUyZmRiZWE1ZDkzMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1NiBAQAorMjAyMS0wNS0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgQ2xpZW50cyBvZiBvcHRpb25hbCBzaG91bGQgdXNlIGhhc192YWx1ZSBpbnN0ZWFk
IG9mIHJlbHlpbmcgb24gaGFzVmFsdWUgbWFjcm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjM5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEluIHNvbWUgZmlsZXMgd2UgYXJlIHRvdWNoaW5nLCBtb3Zl
ZCBmcm9tIE9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwsIGJ1dCBkb2luZworICAgICAgICB0aGF0
IGNvbnNpc3RlbnRseSBpbiBmaWxlcyB3ZSBhcmUgbm90IG90aGVyd2lzZSBtb2RpZnlpbmcgaXMg
b3V0IG9mIHNjb3BlIGhlcmUuCisKKyAgICAgICAgSW4gc29tZSBwbGFjZXMsIHVzZSBoYXNfdmFs
dWUgaW5zdGVhZCBvZiBoYXNWYWx1ZS4gSW4gb3RoZXJzLCBpbXByb3ZlZCBmdXJ0aGVyCisgICAg
ICAgIGJ5IG5vdCB1c2luZyBoYXNfdmFsdWUgZXhwbGljaXRseSB3aGVuIGl0J3MgY2xlYXJlciB0
byBkbyBzby4gV2Fzbid0IDEwMCUKKyAgICAgICAgY29uc2lzdGVudCBhYm91dCB0aGF0LCBidXQg
ZGlkIGFpbSB0byBjb3ZlciAxMDAlIG9mIHRoZSBoYXNWYWx1ZSBjYWxsIHNpdGVzLgorCisgICAg
ICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Db250ZXh0OjpjcmVhdGUpOiBEb24ndCB1c2UgaGFzVmFsdWUuCisgICAgICAgICog
TW9kdWxlcy93ZWJ4ci9XZWJYUkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlhSRnJh
bWU6OmdldFZpZXdlclBvc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYlhSRnJhbWU6
OmdldFBvc2UpOiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL3dlYnhyL1dlYlhSR2FtZXBhZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJYUkdhbWVwYWQ6OldlYlhSR2FtZXBhZCk6IERpdHRv
LgorCisgICAgICAgICogTW9kdWxlcy93ZWJ4ci9XZWJYUklucHV0U291cmNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYlhSSW5wdXRTb3VyY2U6OnJlcXVpcmVzSW5wdXRTb3VyY2VDaGFuZ2Up
OiBVc2UgaGFzX3ZhbHVlLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVByb21pc2VQcm94eS5o
OgorICAgICAgICAoV2ViQ29yZTo6RE9NUHJvbWlzZVByb3h5PElETFR5cGU+Ojppc0Z1bGZpbGxl
ZCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9NUHJvbWlzZVByb3h5PElETFVu
ZGVmaW5lZD46OmlzRnVsZmlsbGVkIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
T01Qcm9taXNlUHJveHlXaXRoUmVzb2x2ZUNhbGxiYWNrPElETFR5cGU+Ojppc0Z1bGZpbGxlZCBj
b25zdCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFs
KTogRGl0dG8uCisKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRm9udEZhY2VTZXQ6OmFkZFRvRmFjZXNMb29rdXBUYWJsZSk6IFJlbW92ZWQg
dW5uZWVkZWQgZG91YmxlIGNoZWNrCisgICAgICAgIG9mIG9wdGlvbmFsIHZhbHVlLiAheCBhbmQg
IXguaGFzX3ZhbHVlKCkgY2hlY2sgdGhlIHNhbWUgdGhpbmcuCisgICAgICAgIChXZWJDb3JlOjpD
U1NGb250RmFjZVNldDo6cmVtb3ZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250
RmFjZVNldDo6Zm9udEZhY2UpOiBTaW1wbGlmaWVkIGNvZGUgd2l0aCBleHRyYSBsb2NhbCB2YXJp
YWJsZXMKKyAgICAgICAgdG8gdXNlIGFuIGlkaW9tIHRoYXQgZG9lcyBub3QgdXNlIGhhc1ZhbHVl
LiBTaW5jZSB1c2luZyAqLCAtPiwgb3IgdmFsdWUoKSBvbiBhbgorICAgICAgICBvcHRpb25hbCBh
bHJlYWR5IGFzc2VydHMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBhc3NlcnQgaW4g
dGhlIGNhbGxlci4KKworICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50U3RvcDo6aXNTcGVjaWZpZWQgY29uc3QpOiBVc2UgaGFzX3Zh
bHVlLgorCisgICAgICAgICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1NlZ21lbnRlZEZvbnRGYWNlOjpmb250UmFuZ2VzKTogUmVtb3ZlZCB1bm5l
ZWRlZCBjYWxscyB0byBoYXNWYWx1ZS4KKworICAgICAgICAqIGNzcy9Gb250RmFjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250RmFjZTo6ZmFtaWx5IGNvbnN0KTogVXNlIGhhc192YWx1ZS4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlOjpzdHlsZSBjb25zdCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udEZhY2U6OndlaWdodCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udEZhY2U6OnN0cmV0Y2ggY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRGYWNlOjp1bmljb2RlUmFuZ2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRGYWNlOjpmZWF0dXJlU2V0dGluZ3MgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRGYWNlOjpkaXNwbGF5IGNvbnN0KTogRGl0dG8uCisgICAgICAgICogY3NzL3BhcnNl
ci9DU1NTZWxlY3RvclBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdW1lQU5QbHVz
Qik6IERpdHRvLgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oOiBEaXR0by4K
KyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVySXRlbUxpc3QuaDogRGl0dG8uCisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVIaWdo
bGlnaHRQb3NpdGlvbnMpOiBEaXR0by4KKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIpOiBEaXR0by4K
KyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rp
b24gY29uc3QpOiBEaXR0by4KKworICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5
bGUpOiBEb24ndCBjYWxsIGhhc1ZhbHVlLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjYXB0aW9uRGlzcGxh
eU1vZGUpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmg6IERpdHRvLgorCisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTY3JlZW5TaXplT3ZlcnJpZGUpOiBV
c2UgaGFzX3ZhbHVlLgorICAgICAgICAqIGxheW91dC9MYXlvdXRQaGFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOiBEaXR0by4KKyAgICAg
ICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVDb250ZW50QnJlYWtl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUNvbnRlbnRCcmVha2VyOjp0
cnlCcmVha2luZ1RleHRSdW4gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmg6IERpdHRvLgorICAgICAgICAqIGxvYWRl
ci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlQWNjZXNzQ29udHJvbE1heEFnZSk6IERpdHRvLgorICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGVmYXVsdFdoZWVs
RXZlbnRIYW5kbGVyKTogRGl0dG8uCisgICAgICAgICogcGFnZS9pb3MvQ29udGVudENoYW5nZU9i
c2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRDaGFuZ2VPYnNlcnZlcjo6U3R5
bGVDaGFuZ2VTY29wZTo6flN0eWxlQ2hhbmdlU2NvcGUpOiBEaXR0by4KKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y2xvc2VzdFNuYXBPZmZzZXRXaXRoSW5mb0FuZEF4aXMpOiBEaXR0by4KKworICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29u
dHJvbGxlcjo6YWRqdXN0U2Nyb2xsRGVzdGluYXRpb24pOiBEb24ndCB1c2UgaGFzVmFsdWUuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TeXN0ZW1CYXR0ZXJ5Lm1tOgorICAgICAgICAoV2Vi
Q29yZTo6c3lzdGVtSGFzQmF0dGVyeSk6IFVzZSBoYXNfdmFsdWUuCisgICAgICAgIChXZWJDb3Jl
OjpzeXN0ZW1IYXNBQyk6IFVzZSBoYXNfdmFsdWUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaDogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6d291bGRUYWludE9yaWdpbiBj
b25zdCk6IENoYW5nZWQgaWRpb20gdG8gbm90IHVzZSBoYXNWYWx1ZS4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHA6CisgICAg
ICAgIChzZXRHTENvbnRleHQpOiBEbyBub3QgdXNlIGhhc1ZhbHVlLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJSZWdpc3RyeVNjYW5uZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyOjpFbGVtZW50RmFjdG9yaWVz
OjpoYXNFbGVtZW50Rm9yTWVkaWFUeXBlIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9z
aXRpb24gY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6cGVyZm9ybVRhc2tBdE1lZGlhVGltZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2VyUmVwYWludCk6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94eVRo
dW5kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RNUHJveHlUaHVuZGVyOjpnZXREZWNyeXB0
aW9uU2Vzc2lvbiBjb25zdCk6IFVzZSBoYXNfdmFsdWUuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1UaHVuZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
cnNlZFJlc3BvbnNlTWVzc2FnZTo6aGFzVHlwZSBjb25zdCk6IFVzZSBoYXNfdmFsdWUuCisgICAg
ICAgIChXZWJDb3JlOjpDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyOjpjZG1JbnN0YW5jZVRodW5k
ZXIgY29uc3QpOiBVc2UKKyAgICAgICAgYSBwb2ludGVyIGZvciB0aGUgZXJ0dXJuIHZhbHVlIGlu
c3RlYWQgb2YgT3B0aW9uYWw8Jj4uIFRoaXMgaGFzbid0CisgICAgICAgIGNvbXBpbGVkIHNpbmNl
IHdlIHN3aXRjaGVkIHRvIHN0ZDo6b3B0aW9uYWwgc28gSSBzdXNwZWN0IHRoaXMgY29kZSBpcwor
ICAgICAgICBub3QgY29tcGlsZWQgYnkgRVdTIG9yIHRoZSBidWlsZGJvdC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVRodW5kZXIuaDogVXBkYXRlZCB0byBt
YXRjaCBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
QXBwZW5kUGlwZWxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnBh
cnNlRGVtdXhlclNyY1BhZENhcHMpOiBVc2UgdmFsdWVfb3IuCisgICAgICAgIChXZWJDb3JlOjpB
cHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHNDaGFuZ2VkKTogRG8gbm90IHVzZSBoYXNfdmFsdWUu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFOjp0cmFja0RldGVjdGVkKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0YXRlLmg6IFVzZSBoYXNfdmFsdWUu
CisgICAgICAgICogcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0Lm1t
OgorICAgICAgICAoV2ViQ29yZTo6c3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsZXJTdHlsZTo6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKTogRGl0dG8u
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmlzU3lzdGVtUHJldmlldyBjb25z
dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJj
ZS5jcHA6CisgICAgICAgIChQbGF0Zm9ybVhSOjpPcGVuWFJJbnB1dFNvdXJjZTo6Z2V0SW5wdXRT
b3VyY2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvRXZlbnRSZWdpb24uaDog
RGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmg6
IFJlbW92ZSB1bm5lY2Vzc2FyeSBhc3NlcnRpb24sIHNpbmNlCisgICAgICAgIHRoZSAqIG9wZXJh
dG9yIGFscmVhZHkgZG9lcyB0aGUgYXNzZXJ0aW9uLgorCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94
OjpjYW5Db21wdXRlUGVyY2VudGFnZUZsZXhCYXNpcyk6IFVzZSBoYXNfdmFsdWUuCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RJdGVtOjpzZXRFeHBsaWNpdFZhbHVlKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnN5
c3RlbUZvY3VzUmluZ0NvbG9yKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5n
L1JlbmRlclRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVCdWls
ZGVyOjpyZW1vdmVBbm9ueW1vdXNXcmFwcGVyc0ZvcklubGluZUNoaWxkcmVuSWZOZWVkZWQpOiBE
aXR0by4KKworICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybUZyb21NYXRyaXgpOiBDaGFuZ2Vk
IGlkaW9tIHRvIG5vdAorICAgICAgICBjYWxsIGhhc1ZhbHVlLgorICAgICAgICAqIHN2Zy9TVkdU
cmFuc2Zvcm0uaDogRGl0dG8uCisgICAgICAgICogdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViRmFrZVhSRGV2aWNlOjpzZXRWaWV3cyk6IERpdHRvLgor
CiAyMDIxLTA1LTI4ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtDb2NvYV0gUHJldmVudCBHUFUgUHJvY2VzcyBmcm9tIGF0dGVtcHQgdG8gY29ubmVjdCB0
byB0aGUgQXBwU1NPIHNlcnZpY2UgKFBhcnQgMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2
ZXIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cKaW5kZXggOTNlOGNkODcz
ZjUxOGQzZmQ0NWMxOTVhNGJjYWIxOWUxM2RhOTUxNy4uNzUyNGQ2MDdiNGVjZmYyNmFlNGFiMjY4
YjZlYTRkZDE0OGM5MGE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0w
NS0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xpZW50cyBv
ZiBvcHRpb25hbCBzaG91bGQgdXNlIGhhc192YWx1ZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gaGFz
VmFsdWUgbWFjcm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNjM5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogc29ja2V0L1Nlc3Npb25Ib3N0U29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbkhvc3Q6OmlzQ29ubmVjdGVkIGNvbnN0KTogVXNlIGhhc192YWx1ZS4KKwogMjAyMS0w
NS0yNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgTmV4dCBzdGVw
IHRvd2FyZCB1c2luZyBzdGQ6Om9wdGlvbmFsIGRpcmVjdGx5IGluc3RlYWQgb2YgdGhyb3VnaCBX
VEY6Ok9wdGlvbmFsIHR5cGVkZWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTA2MDYwMzc2N2IyYWM5NDVlYTg1M2M3
ZjA4Nzk1YzBjYjdlMTYxYy4uZjk3ZTU0MDE1ZGVhN2JlY2EzMTc0MTRkNDM0YWRlZWIxMjFiYmMx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAyMS0wNS0yOCAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xpZW50cyBvZiBvcHRpb25hbCBzaG91bGQgdXNl
IGhhc192YWx1ZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gaGFzVmFsdWUgbWFjcm8KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjM5NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vSVBDL0Fy
Z3VtZW50Q29kZXJzLmg6IFVzZSBzdGQ6Om9wdGlvbmFsOyB0aGVyZSB3YXMgbm8gaGFzVmFsdWUK
KyAgICAgICAgaW4gaGVyZSBhbmQgSSBlZGl0ZWQgaXQgYnkgbWlzdGFrZSwgYnV0IHdlIHdhbnQg
dG8gZG8gdGhpcyBldmVudHVhbGx5LgorCisgICAgICAgICogU2hhcmVkL0NvY29hL1dlYkNvcmVB
cmd1bWVudENvZGVyc0NvY29hLm1tOiBSZW1vdmVkIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlLgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZjxXZWJDb3JlOjpGb250Pj46OmRlY29kZVBs
YXRmb3JtRGF0YSk6IFVzZSBoYXNfdmFsdWUuCisgICAgICAgICogU2hhcmVkL0VudHJ5UG9pbnRV
dGlsaXRpZXMvQ29jb2EvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5tbToKKyAgICAg
ICAgKFdlYktpdDo6WFBDU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGU6OmdldENsaWVudFNES1Zl
cnNpb24pOiBEaXR0by4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwOgorICAgICAgICAoSVBDOjpkZWNvZGVJbWFnZSk6IENoYW5nZWQgaWRpb20gdG8gbm90IGNh
bGwgaGFzVmFsdWUuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZGVj
b2RlKTogRGl0dG8uCisKKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01l
ZGlhRm9ybWF0UmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWVkaWFGb3JtYXRSZWFkZXI6
OmZpbmlzaFBhcnNpbmcpOiBVc2UgaGFzX3ZhbHVlLgorICAgICAgICAoV2ViS2l0OjpNZWRpYUZv
cm1hdFJlYWRlcjo6Y29weVByb3BlcnR5KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Ok1lZGlh
Rm9ybWF0UmVhZGVyOjpjb3B5VHJhY2tBcnJheSk6IERpdHRvLgorCisgICAgICAgICogU2hhcmVk
L3dpbi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVu
dENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBsYXRmb3JtRGF0YSk6IERvIG5vdCBjYWxsIGhhc1Zh
bHVlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0
aW9uLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXdDb25maWd1cmF0aW9uIGVuY29kZVdpdGhDb2Rl
cjpdKTogQ2hhbmdlZCBpZGlvbSB0byBub3QgdXNlIGhhc1ZhbHVlLgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9nbGliL0lucHV0TWV0aG9kRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
SW5wdXRNZXRob2RGaWx0ZXI6OnNldFN0YXRlKTogVXNlIGhhc192YWx1ZS4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6QXV0b21hdGlvbkNvbW1hbmRFcnJvcjo6dG9Qcm90b2NvbFN0cmluZyk6IENoYW5n
ZWQgaWRpb20gdG8gbm90IHVzZSBoYXNWYWx1ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2Nv
YS9XZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFzdGVi
b2FyZFByb3h5OjpkZXRlcm1pbmVEYXRhT3duZXIgY29uc3QpOiBVc2UgaGFzX3ZhbHVlLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZW5kV2ViSW5z
cGVjdG9yRXZlbnQpOiBDaGFuZ2VkIGlkaW9tIHRvIG5vdCB1c2UgaGFzVmFsdWUuCisgICAgICAg
ICogVUlQcm9jZXNzL2dsaWIvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHlH
TGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyUHJveHk6OnBsYXRmb3JtVmFsaWRhdGVVc2VyTWVkaWFSZXF1ZXN0Q29uc3RyYWludHMpOiBE
aXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhU291cmNlUHJpdmF0
ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU291cmNlUHJpdmF0ZVJlbW90ZTo6
YWRkU291cmNlQnVmZmVyKTogVXNlIGhhc192YWx1ZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
bGF0Zm9ybURpZFJlY2VpdmVMb2FkUGFyYW1ldGVycyk6IERpdHRvLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3M6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZCk6IENoYW5nZWQgaWRpb20gdG8gbm90Cisg
ICAgICAgIGNhbGwgaGFzVmFsdWUuCisKIDIwMjEtMDUtMjggIERvbiBPbG1zdGVhZCAgPGRvbi5v
bG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBbQ29jb2FdIEhEUiB2YXJpYW50cyBpbiBITFMg
cGxheWxpc3RzIG5vdCBzZWxlY3RlZCB3aGVuIHNjcmVlbiBpcyBIRFIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA3YzE4
YjgxM2RmZTYzNmRkNjRjYzU5OThkNTJmMTRlYjYxZTczNGViLi45YzQwM2MyYTBjNTdiZTBmY2Qx
YWVjZTcyNTI4Mjg4OWI3ODVhMWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgUmVnaXN0
ZXJJRCogUmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIGZs
YWdzID0gWWFycjo6cGFyc2VGbGFncyhtX2ZsYWdzLnN0cmluZygpKTsKLSAgICBBU1NFUlQoZmxh
Z3MuaGFzVmFsdWUoKSk7CisgICAgQVNTRVJUKGZsYWdzKTsKICAgICBSZWdFeHAqIHJlZ0V4cCA9
IFJlZ0V4cDo6Y3JlYXRlKGdlbmVyYXRvci52bSgpLCBtX3BhdHRlcm4uc3RyaW5nKCksIGZsYWdz
LnZhbHVlKCkpOwogICAgIGlmIChyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0TmV3UmVnRXhwKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHJl
Z0V4cCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9XVEYv
d3RmL0hhc2hlci5oCmluZGV4IGY2YWE5MDNjZDI5MmU3MzkwZmVhNzYwMjQ0MmUzYjNmNjQ4OTFm
NmMuLjhmZTliMjQwYzBlZmFjNzA4YWM4MDNmNTUwMTUwZDhjYTU5MzUyZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCkBA
IC0yMCw3ICsyMCw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisjaW5jbHVkZSA8b3B0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+CkBA
IC0xNTksMTAgKzE1OSwxMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUdXBsZUxpa2U+IHN0ZDo6ZW5h
YmxlX2lmX3Q8SXNUeXBlQ29tcGxldGU8c3RkOjp0dXBsZV9zaXplPFR1cAogICAgIGFkZFR1cGxl
TGlrZUhlbHBlcihoYXNoZXIsIHR1cGxlLCBzdGQ6Om1ha2VfaW5kZXhfc2VxdWVuY2U8c3RkOjp0
dXBsZV9zaXplPFR1cGxlTGlrZT46OnZhbHVlPiB7IH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgT3B0aW9uYWw8VD4mIG9wdGlvbmFs
KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8VD4mIG9wdGlvbmFsKQogewotICAgIGFkZChoYXNoZXIsIG9wdGlvbmFsLmhh
c1ZhbHVlKCkpOwotICAgIGlmIChvcHRpb25hbC5oYXNWYWx1ZSgpKQorICAgIGFkZChoYXNoZXIs
IG9wdGlvbmFsLmhhc192YWx1ZSgpKTsKKyAgICBpZiAob3B0aW9uYWwuaGFzX3ZhbHVlKCkpCiAg
ICAgICAgIGFkZChoYXNoZXIsIG9wdGlvbmFsLnZhbHVlKCkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5oIGIvU291cmNlL1dURi93dGYvT3B0aW9uYWwuaAppbmRl
eCA3OWRlOTI2NjY3MGVhM2RiZGVlZjYyYzA4MGVmMTM1ZGU3NzkyMjAzLi5hZGY2ZmE4MGM0Zjlm
ZTA4NGQyMWNkM2VjNjMxZWMyMGEwMzAwNzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9P
cHRpb25hbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgKQEAgLTI2LDcgKzI2LDYg
QEAgbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIE9wdGlvbmFs
ID0gc3RkOjpvcHRpb25hbDxUPjsKIAotLy8gRklYTUU6IFdlIHByb2JhYmx5IGRvbid0IG5lZWQg
dGhpczsgaXQncyBvbmx5IHVzZWQgaW4gNSBwbGFjZXMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcHRp
b25hbFR5cGUsIGNsYXNzIENhbGxiYWNrPiBhdXRvIHZhbHVlT3JDb21wdXRlKE9wdGlvbmFsVHlw
ZSBvcHRpb25hbCwgQ2FsbGJhY2sgY2FsbGJhY2spIC0+IHR5cGVuYW1lIE9wdGlvbmFsVHlwZTo6
dmFsdWVfdHlwZQogewogICAgIHJldHVybiBvcHRpb25hbCA/ICpvcHRpb25hbCA6IGNhbGxiYWNr
KCk7CkBAIC0zNiw2ICszNSwzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wdGlvbmFsVHlwZSwgY2xh
c3MgQ2FsbGJhY2s+IGF1dG8gdmFsdWVPckNvbXB1dGUoT3B0aW9uYWxUeXBlCiAKIHVzaW5nIFdU
Rjo6T3B0aW9uYWw7CiB1c2luZyBXVEY6OnZhbHVlT3JDb21wdXRlOwotCi0vLyBGSVhNRTogVGhp
cyBtYWNybyBpcyBhIHdvcmthcm91bmQgdG8gYWxsb3cgdXMgdG8gdXNlIHN0ZDo6b3B0aW9uYWwg
d2l0aG91dCBhIGdsb2JhbCByZXBsYWNlOyBpdCBjYW4gYmUgcmVtb3ZlZCBhZnRlciB0aGUgZ2xv
YmFsIHJlcGxhY2UuCi0jZGVmaW5lIGhhc1ZhbHVlIGhhc192YWx1ZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCmluZGV4IGYwNDgwNjc1ZmVl
NTdmZDc1Y2UxZTE4ZDc2OTBmMjdmMDNlODU5MGUuLmVkZjAyYjA0YzIwNzYyY2ZjNTE5ZDIxZDlj
NjM1MDkxNWQzMWE4YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBFeGNlcHRpb25PcjxSZWY8QXVk
aW9Db250ZXh0Pj4gQXVkaW9Db250ZXh0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBBdWRp
b0NvbgogICAgIGlmICghY29udGV4dE9wdGlvbnMuc2FtcGxlUmF0ZSAmJiBkZWZhdWx0U2FtcGxl
UmF0ZUZvclRlc3RpbmcoKSkKICAgICAgICAgY29udGV4dE9wdGlvbnMuc2FtcGxlUmF0ZSA9ICpk
ZWZhdWx0U2FtcGxlUmF0ZUZvclRlc3RpbmcoKTsKIAotICAgIGlmIChjb250ZXh0T3B0aW9ucy5z
YW1wbGVSYXRlLmhhc1ZhbHVlKCkgJiYgIWlzU3VwcG9ydGVkU2FtcGxlUmF0ZShjb250ZXh0T3B0
aW9ucy5zYW1wbGVSYXRlLnZhbHVlKCkpKQorICAgIGlmIChjb250ZXh0T3B0aW9ucy5zYW1wbGVS
YXRlICYmICFpc1N1cHBvcnRlZFNhbXBsZVJhdGUoKmNvbnRleHRPcHRpb25zLnNhbXBsZVJhdGUp
KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IsICJzYW1wbGVSYXRlIGlz
IG5vdCBpbiByYW5nZSJfcyB9OwogICAgIAogICAgIGF1dG8gYXVkaW9Db250ZXh0ID0gYWRvcHRS
ZWYoKm5ldyBBdWRpb0NvbnRleHQoZG9jdW1lbnQsIGNvbnRleHRPcHRpb25zKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSRnJhbWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUkZyYW1lLmNwcAppbmRleCA5YjA1ZjcwZTQ1YTg5
OGRkMzZlNTEzNDI2ZjBlNjA4M2EzODdhZWI5Li4yMzMzZDY5MDRhYzM0MzExMjczZDU1Y2JhZDAw
MDI0ZjMwY2MxOWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dl
YlhSRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJGcmFt
ZS5jcHAKQEAgLTk2LDcgKzk2LDcgQEAgc3RydWN0IFdlYlhSRnJhbWU6OlBvcHVsYXRlZFBvc2Ug
ewogfTsKIAogLy8gaHR0cHM6Ly9pbW1lcnNpdmUtd2ViLmdpdGh1Yi5pby93ZWJ4ci8jcG9wdWxh
dGUtdGhlLXBvc2UKLUV4Y2VwdGlvbk9yPE9wdGlvbmFsPFdlYlhSRnJhbWU6OlBvcHVsYXRlZFBv
c2U+PiBXZWJYUkZyYW1lOjpwb3B1bGF0ZVBvc2UoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBj
b25zdCBXZWJYUlNwYWNlJiBzcGFjZSwgY29uc3QgV2ViWFJTcGFjZSYgYmFzZVNwYWNlKQorRXhj
ZXB0aW9uT3I8c3RkOjpvcHRpb25hbDxXZWJYUkZyYW1lOjpQb3B1bGF0ZWRQb3NlPj4gV2ViWFJG
cmFtZTo6cG9wdWxhdGVQb3NlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgV2ViWFJT
cGFjZSYgc3BhY2UsIGNvbnN0IFdlYlhSU3BhY2UmIGJhc2VTcGFjZSkKIHsKICAgICAvLyAxLiBJ
ZiBmcmFtZeKAmXMgYWN0aXZlIGJvb2xlYW4gaXMgZmFsc2UsIHRocm93IGFuIEludmFsaWRTdGF0
ZUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4KICAgICBpZiAoIW1fYWN0aXZlKQpAQCAtMTU5
LDcgKzE1OSw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxXZWJYUlZpZXdlclBvc2U+PiBXZWJYUkZy
YW1lOjpnZXRWaWV3ZXJQb3NlKGNvbnN0IERvY3VtZW50JiBkCiAKICAgICAvLyA2LiBJZiBwb3Nl
IGlzIG51bGwgcmV0dXJuIG51bGwuCiAgICAgYXV0byBwb3B1bGF0ZVZhbHVlID0gcG9wdWxhdGVQ
b3NlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgIGlmICghcG9wdWxhdGVWYWx1ZS5o
YXNWYWx1ZSgpKQorICAgIGlmICghcG9wdWxhdGVWYWx1ZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBSZWZQdHI8V2ViWFJWaWV3ZXJQb3NlPiBwb3NlID0gV2ViWFJWaWV3ZXJQb3Nl
OjpjcmVhdGUoV2ViWFJSaWdpZFRyYW5zZm9ybTo6Y3JlYXRlKHBvcHVsYXRlVmFsdWUtPnRyYW5z
Zm9ybSksIHBvcHVsYXRlVmFsdWUtPmVtdWxhdGVkUG9zaXRpb24pOwpAQCAtMjI3LDcgKzIyNyw3
IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxXZWJYUlBvc2U+PiBXZWJYUkZyYW1lOjpnZXRQb3NlKGNv
bnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uCiAgICAgICAgIHJldHVybiBwb3B1bGF0ZVBvc2VS
ZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogCiAgICAgYXV0byBwb3B1bGF0ZVZhbHVlID0gcG9w
dWxhdGVQb3NlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgIGlmICghcG9wdWxhdGVW
YWx1ZS5oYXNWYWx1ZSgpKQorICAgIGlmICghcG9wdWxhdGVWYWx1ZSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICAvLyA0LiBSZXR1cm4gcG9zZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2VieHIvV2ViWFJHYW1lcGFkLmNwcAppbmRleCA3MmZkZjU1YWM0ODliODExODA5ZWE2
ODAyODY4ZDNmMDFjODJjNjNhLi41Mjg2ODEwODllNWEzYzVkMWIyY2E5NDU0Y2MyMzU0ZjViMDYy
NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSR2FtZXBh
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJ4ci9XZWJYUkdhbWVwYWQuY3Bw
CkBAIC00Niw3ICs0Niw3IEBAIFdlYlhSR2FtZXBhZDo6V2ViWFJHYW1lcGFkKGRvdWJsZSB0aW1l
c3RhbXAsIGRvdWJsZSBjb25uZWN0VGltZSwgY29uc3QgUGxhdGZvcm1YCiAgICAgbV9jb25uZWN0
VGltZSA9IE1vbm90b25pY1RpbWU6OmZyb21SYXdTZWNvbmRzKFNlY29uZHM6OmZyb21NaWxsaXNl
Y29uZHMoY29ubmVjdFRpbWUpLnZhbHVlKCkpOwogICAgIC8vIEluIG9yZGVyIHRvIHJlcG9ydCBh
IG1hcHBpbmcgb2YgInhyLXN0YW5kYXJkIiB0aGUgZGV2aWNlIE1VU1QgcmVwb3J0IGEgdGFyZ2V0
UmF5TW9kZSBvZiAidHJhY2tlZC1wb2ludGVyIiBhbmQgTVVTVCBoYXZlIGEgbm9uLW51bGwgZ3Jp
cFNwYWNlLgogICAgIC8vIEl0IE1VU1QgaGF2ZSBhdCBsZWFzdCBvbmUgcHJpbWFyeSB0cmlnZ2Vy
LCBzZXBhcmF0ZSBmcm9tIGFueSB0b3VjaHBhZHMgb3IgdGh1bWJzdGlja3MKLSAgICBpZiAoc291
cmNlLnRhcmdldFJheU1vZGUgPT0gWFJUYXJnZXRSYXlNb2RlOjpUcmFja2VkUG9pbnRlciAmJiAh
c291cmNlLmJ1dHRvbnMuaXNFbXB0eSgpICYmIHNvdXJjZS5ncmlwT3JpZ2luLmhhc1ZhbHVlKCkp
CisgICAgaWYgKHNvdXJjZS50YXJnZXRSYXlNb2RlID09IFhSVGFyZ2V0UmF5TW9kZTo6VHJhY2tl
ZFBvaW50ZXIgJiYgIXNvdXJjZS5idXR0b25zLmlzRW1wdHkoKSAmJiBzb3VyY2UuZ3JpcE9yaWdp
bikKICAgICAgICAgbV9tYXBwaW5nID0geHJTdGFuZGFyZEdhbWVwYWRNYXBwaW5nU3RyaW5nKCk7
CiAgICAgbV9heGVzID0gc291cmNlLmF4ZXMubWFwKFtdKGF1dG8gdmFsdWUpIHsKICAgICAgICAg
cmV0dXJuIFNoYXJlZEdhbWVwYWRWYWx1ZSh2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhSSW5wdXRTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJ4ci9XZWJYUklucHV0U291cmNlLmNwcAppbmRleCAzZDg2YjIyMGU3Y2EwZTBj
YTk4MWViMjk0MzBiZGQ4ZmY0ODJiZDI5Li4yNjNiYjU4MjZmZDgzZDNlM2E4NWNiYTYzMTdiY2U5
MGIzNWE3M2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnhyL1dlYlhS
SW5wdXRTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2VieHIvV2ViWFJJ
bnB1dFNvdXJjZS5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgYm9vbCBXZWJYUklucHV0U291cmNlOjpy
ZXF1aXJlc0lucHV0U291cmNlQ2hhbmdlKGNvbnN0IElucHV0U291cmNlJiBzb3VyY2UpCiAgICAg
cmV0dXJuIG1fc291cmNlLmhhbmRlbmVzcyAhPSBzb3VyY2UuaGFuZGVuZXNzCiAgICAgICAgIHx8
IG1fc291cmNlLnRhcmdldFJheU1vZGUgIT0gc291cmNlLnRhcmdldFJheU1vZGUKICAgICAgICAg
fHwgbV9zb3VyY2UucHJvZmlsZXMgIT0gc291cmNlLnByb2ZpbGVzCi0gICAgICAgIHx8IHN0YXRp
Y19jYXN0PGJvb2w+KG1fZ3JpcFNwYWNlKSAhPSBzb3VyY2UuZ3JpcE9yaWdpbi5oYXNWYWx1ZSgp
OworICAgICAgICB8fCBzdGF0aWNfY2FzdDxib29sPihtX2dyaXBTcGFjZSkgIT0gc291cmNlLmdy
aXBPcmlnaW4uaGFzX3ZhbHVlKCk7CiB9CiAKIHZvaWQgV2ViWFJJbnB1dFNvdXJjZTo6ZGlzY29u
bmVjdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01Qcm9taXNl
UHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVByb21pc2VQcm94eS5oCmlu
ZGV4IDY0YzNiZDYyOTljZWIzNjAzYTNhYWY4Mzg0ZDczMTk1NzZlMjFmY2MuLjM4MjljMWUxZDA1
NGFhZDUwZmIxOWFiZjcyYzQwZmI5NzMwMWE5ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0RPTVByb21pc2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RPTVByb21pc2VQcm94eS5oCkBAIC0xNDksNyArMTQ5LDcgQEAgaW5saW5lIHZvaWQg
RE9NUHJvbWlzZVByb3h5PElETFR5cGU+OjpjbGVhcigpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPgogaW5saW5lIGJvb2wgRE9NUHJvbWlzZVByb3h5PElETFR5cGU+Ojppc0Z1bGZpbGxlZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdmFsdWVPckV4Y2VwdGlvbi5oYXNWYWx1ZSgpOworICAg
IHJldHVybiBtX3ZhbHVlT3JFeGNlcHRpb24uaGFzX3ZhbHVlKCk7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+CkBAIC0yMTgsNyArMjE4LDcgQEAgaW5saW5lIHZvaWQgRE9NUHJvbWlz
ZVByb3h5PElETFVuZGVmaW5lZD46OmNsZWFyKCkKIAogaW5saW5lIGJvb2wgRE9NUHJvbWlzZVBy
b3h5PElETFVuZGVmaW5lZD46OmlzRnVsZmlsbGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV92
YWx1ZU9yRXhjZXB0aW9uLmhhc1ZhbHVlKCk7CisgICAgcmV0dXJuIG1fdmFsdWVPckV4Y2VwdGlv
bi5oYXNfdmFsdWUoKTsKIH0KIAogaW5saW5lIHZvaWQgRE9NUHJvbWlzZVByb3h5PElETFVuZGVm
aW5lZD46OnJlc29sdmUoKQpAQCAtMjg4LDcgKzI4OCw3IEBAIGlubGluZSB2b2lkIERPTVByb21p
c2VQcm94eVdpdGhSZXNvbHZlQ2FsbGJhY2s8SURMVHlwZT46OmNsZWFyKCkKIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+CiBpbmxpbmUgYm9vbCBET01Qcm9taXNlUHJveHlXaXRoUmVzb2x2ZUNh
bGxiYWNrPElETFR5cGU+Ojppc0Z1bGZpbGxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdmFs
dWVPckV4Y2VwdGlvbi5oYXNWYWx1ZSgpOworICAgIHJldHVybiBtX3ZhbHVlT3JFeGNlcHRpb24u
aGFzX3ZhbHVlKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRl
eCBkNTA5OTY2NTYzOWVlN2RiM2YzNmUwYzY4ZmZmMTgyZTk3YmIyM2MwLi4wMDA4NzQ5OTA3NjIz
OTIwZTFiYTM4ZDNmNGIxMTZmOTZjYjY0N2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTM0ODIsNyArMzQ4Miw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXJlYWRTdHJpbmdEYXRhKGZsYWdzKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgYXV0byByZUZsYWdz
ID0gWWFycjo6cGFyc2VGbGFncyhmbGFncy0+c3RyaW5nKCkpOwotICAgICAgICAgICAgQVNTRVJU
KHJlRmxhZ3MuaGFzVmFsdWUoKSk7CisgICAgICAgICAgICBBU1NFUlQocmVGbGFncy5oYXNfdmFs
dWUoKSk7CiAgICAgICAgICAgICBWTSYgdm0gPSBtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKHZtLCBwYXR0ZXJu
LT5zdHJpbmcoKSwgcmVGbGFncy52YWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybiBSZWdFeHBP
YmplY3Q6OmNyZWF0ZSh2bSwgbV9nbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdF
eHApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNldC5jcHAKaW5kZXggNjM0ZTc4MGM4OTZk
YTAwYWEwYTM3OTc1YzE4MWJiNjIxZmQ1MGIwMy4uN2I0Mjg3MWQyYjk1MzM4Y2NmNWM5NjFmOTgz
NDQ2NjBjY2QxMmQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTZXQuY3BwCkBAIC0x
NjIsNyArMTYyLDcgQEAgU3RyaW5nIENTU0ZvbnRGYWNlU2V0OjpmYW1pbHlOYW1lRnJvbVByaW1p
dGl2ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCiAKIHZvaWQgQ1NTRm9udEZhY2VT
ZXQ6OmFkZFRvRmFjZXNMb29rdXBUYWJsZShDU1NGb250RmFjZSYgZmFjZSkKIHsKLSAgICBpZiAo
IWZhY2UuZmFtaWxpZXMoKSB8fCAhZmFjZS5mYW1pbGllcygpLmhhc1ZhbHVlKCkpCisgICAgaWYg
KCFmYWNlLmZhbWlsaWVzKCkpCiAgICAgICAgIHJldHVybjsKICAgICBhdXRvIGZhbWlsaWVzID0g
ZmFjZS5mYW1pbGllcygpLnZhbHVlKCk7CiAKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIENTU0Zv
bnRGYWNlU2V0OjpyZW1vdmUoY29uc3QgQ1NTRm9udEZhY2UmIGZhY2UpCiAgICAgICAgIG9ic2Vy
dmVyKCk7CiAgICAgfSk7CiAgICAgCi0gICAgaWYgKGZhY2UuZmFtaWxpZXMoKSAmJiBmYWNlLmZh
bWlsaWVzKCkuaGFzVmFsdWUoKSkKKyAgICBpZiAoZmFjZS5mYW1pbGllcygpKQogICAgICAgICBy
ZW1vdmVGcm9tRmFjZXNMb29rdXBUYWJsZShmYWNlLCAqZmFjZS5mYW1pbGllcygpLnZhbHVlKCkp
OwogCiAgICAgaWYgKGZhY2UuY3NzQ29ubmVjdGlvbigpKSB7CkBAIC00NTEsMjUgKzQ1MSwyMSBA
QCBDU1NTZWdtZW50ZWRGb250RmFjZSogQ1NTRm9udEZhY2VTZXQ6OmZvbnRGYWNlKEZvbnRTZWxl
Y3Rpb25SZXF1ZXN0IHJlcXVlc3QsIGNvbgogICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPENTU0ZvbnRGYWNlPiwgMzI+IGNhbmRpZGF0ZUZvbnRGYWNlczsKICAgICBmb3IgKGludCBp
ID0gZmFtaWx5Rm9udEZhY2VzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIENT
U0ZvbnRGYWNlJiBjYW5kaWRhdGUgPSBmYW1pbHlGb250RmFjZXNbaV07Ci0gICAgICAgIGF1dG8g
Y2FwYWJpbGl0aWVzV3JhcHBlZCA9IGNhbmRpZGF0ZS5mb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVz
KCk7Ci0gICAgICAgIGlmICghY2FwYWJpbGl0aWVzV3JhcHBlZC5oYXNWYWx1ZSgpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGF1dG8gY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVz
V3JhcHBlZC52YWx1ZSgpOwotICAgICAgICBpZiAoIWlzSXRhbGljKHJlcXVlc3Quc2xvcGUpICYm
IGlzSXRhbGljKGNhcGFiaWxpdGllcy5zbG9wZS5taW5pbXVtKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBjYW5kaWRhdGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAg
ICAgIGlmIChhdXRvIGNhcGFiaWxpdGllcyA9IGNhbmRpZGF0ZS5mb250U2VsZWN0aW9uQ2FwYWJp
bGl0aWVzKCkpIHsKKyAgICAgICAgICAgIGlmICghaXNJdGFsaWMocmVxdWVzdC5zbG9wZSkgJiYg
aXNJdGFsaWMoY2FwYWJpbGl0aWVzLT5zbG9wZS5taW5pbXVtKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZUZvbnRGYWNlcy5hcHBlbmQoY2FuZGlkYXRl
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGF1dG8gbG9jYWxJdGVyYXRvciA9IG1fbG9jYWxs
eUluc3RhbGxlZEZhY2VzTG9va3VwVGFibGUuZmluZChmYW1pbHkpOwogICAgIGlmIChsb2NhbEl0
ZXJhdG9yICE9IG1fbG9jYWxseUluc3RhbGxlZEZhY2VzTG9va3VwVGFibGUuZW5kKCkpIHsKICAg
ICAgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBsb2NhbEl0ZXJhdG9yLT52YWx1ZSkgewotICAg
ICAgICAgICAgYXV0byBjYXBhYmlsaXRpZXNXcmFwcGVkID0gY2FuZGlkYXRlLT5mb250U2VsZWN0
aW9uQ2FwYWJpbGl0aWVzKCk7Ci0gICAgICAgICAgICBpZiAoIWNhcGFiaWxpdGllc1dyYXBwZWQu
aGFzVmFsdWUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGF1dG8g
Y2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzV3JhcHBlZC52YWx1ZSgpOwotICAgICAgICAgICAg
aWYgKCFpc0l0YWxpYyhyZXF1ZXN0LnNsb3BlKSAmJiBpc0l0YWxpYyhjYXBhYmlsaXRpZXMuc2xv
cGUubWluaW11bSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjYW5k
aWRhdGVGb250RmFjZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICBpZiAoYXV0byBj
YXBhYmlsaXRpZXMgPSBjYW5kaWRhdGUtPmZvbnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMoKSkgewor
ICAgICAgICAgICAgICAgIGlmICghaXNJdGFsaWMocmVxdWVzdC5zbG9wZSkgJiYgaXNJdGFsaWMo
Y2FwYWJpbGl0aWVzLT5zbG9wZS5taW5pbXVtKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlRm9udEZhY2VzLmFwcGVuZChjYW5kaWRhdGUp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC00NzcsMzUgKzQ3MywzMCBA
QCBDU1NTZWdtZW50ZWRGb250RmFjZSogQ1NTRm9udEZhY2VTZXQ6OmZvbnRGYWNlKEZvbnRTZWxl
Y3Rpb25SZXF1ZXN0IHJlcXVlc3QsIGNvbgogICAgICAgICBWZWN0b3I8Rm9udFNlbGVjdGlvbkNh
cGFiaWxpdGllcz4gY2FwYWJpbGl0aWVzOwogICAgICAgICBjYXBhYmlsaXRpZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShjYW5kaWRhdGVGb250RmFjZXMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChh
dXRvJiBmYWNlIDogY2FuZGlkYXRlRm9udEZhY2VzKSB7Ci0gICAgICAgICAgICBhdXRvIGZvbnRT
ZWxlY3Rpb25DYXBhYmlsaXRpZXNXcmFwcGVkID0gZmFjZS5nZXQoKS5mb250U2VsZWN0aW9uQ2Fw
YWJpbGl0aWVzKCk7Ci0gICAgICAgICAgICBBU1NFUlQoZm9udFNlbGVjdGlvbkNhcGFiaWxpdGll
c1dyYXBwZWQuaGFzVmFsdWUoKSk7Ci0gICAgICAgICAgICBhdXRvIGZvbnRTZWxlY3Rpb25DYXBh
YmlsaXRpZXMgPSBmb250U2VsZWN0aW9uQ2FwYWJpbGl0aWVzV3JhcHBlZC52YWx1ZSgpOwotICAg
ICAgICAgICAgY2FwYWJpbGl0aWVzLnVuY2hlY2tlZEFwcGVuZChmb250U2VsZWN0aW9uQ2FwYWJp
bGl0aWVzKTsKKyAgICAgICAgICAgIGF1dG8gZm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcyA9IGZh
Y2UuZ2V0KCkuZm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcygpOworICAgICAgICAgICAgY2FwYWJp
bGl0aWVzLnVuY2hlY2tlZEFwcGVuZCgqZm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcyk7CiAgICAg
ICAgIH0KICAgICAgICAgRm9udFNlbGVjdGlvbkFsZ29yaXRobSBmb250U2VsZWN0aW9uQWxnb3Jp
dGhtKHJlcXVlc3QsIGNhcGFiaWxpdGllcyk7CiAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2Fu
ZGlkYXRlRm9udEZhY2VzLmJlZ2luKCksIGNhbmRpZGF0ZUZvbnRGYWNlcy5lbmQoKSwgWyZmb250
U2VsZWN0aW9uQWxnb3JpdGhtXShjb25zdCBDU1NGb250RmFjZSYgZmlyc3QsIGNvbnN0IENTU0Zv
bnRGYWNlJiBzZWNvbmQpIHsKLSAgICAgICAgICAgIGF1dG8gZmlyc3RDYXBhYmlsaXRpZXNXcmFw
cGVkID0gZmlyc3QuZm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcygpOwotICAgICAgICAgICAgYXV0
byBzZWNvbmRDYXBhYmlsaXRpZXNXcmFwcGVkID0gc2Vjb25kLmZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXMoKTsKLSAgICAgICAgICAgIEFTU0VSVChmaXJzdENhcGFiaWxpdGllc1dyYXBwZWQuaGFz
VmFsdWUoKSAmJiBzZWNvbmRDYXBhYmlsaXRpZXNXcmFwcGVkLmhhc1ZhbHVlKCkpOworICAgICAg
ICAgICAgYXV0byBmaXJzdENhcGFiaWxpdGllcyA9IGZpcnN0LmZvbnRTZWxlY3Rpb25DYXBhYmls
aXRpZXMoKTsKKyAgICAgICAgICAgIGF1dG8gc2Vjb25kQ2FwYWJpbGl0aWVzID0gc2Vjb25kLmZv
bnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0
byBmaXJzdENhcGFiaWxpdGllcyA9IGZpcnN0Q2FwYWJpbGl0aWVzV3JhcHBlZC52YWx1ZSgpOwot
ICAgICAgICAgICAgYXV0byBzZWNvbmRDYXBhYmlsaXRpZXMgPSBzZWNvbmRDYXBhYmlsaXRpZXNX
cmFwcGVkLnZhbHVlKCk7Ci0gICAgICAgICAgICBhdXRvIHN0cmV0Y2hEaXN0YW5jZUZpcnN0ID0g
Zm9udFNlbGVjdGlvbkFsZ29yaXRobS5zdHJldGNoRGlzdGFuY2UoZmlyc3RDYXBhYmlsaXRpZXMp
LmRpc3RhbmNlOwotICAgICAgICAgICAgYXV0byBzdHJldGNoRGlzdGFuY2VTZWNvbmQgPSBmb250
U2VsZWN0aW9uQWxnb3JpdGhtLnN0cmV0Y2hEaXN0YW5jZShzZWNvbmRDYXBhYmlsaXRpZXMpLmRp
c3RhbmNlOworICAgICAgICAgICAgYXV0byBzdHJldGNoRGlzdGFuY2VGaXJzdCA9IGZvbnRTZWxl
Y3Rpb25BbGdvcml0aG0uc3RyZXRjaERpc3RhbmNlKCpmaXJzdENhcGFiaWxpdGllcykuZGlzdGFu
Y2U7CisgICAgICAgICAgICBhdXRvIHN0cmV0Y2hEaXN0YW5jZVNlY29uZCA9IGZvbnRTZWxlY3Rp
b25BbGdvcml0aG0uc3RyZXRjaERpc3RhbmNlKCpzZWNvbmRDYXBhYmlsaXRpZXMpLmRpc3RhbmNl
OwogICAgICAgICAgICAgaWYgKHN0cmV0Y2hEaXN0YW5jZUZpcnN0IDwgc3RyZXRjaERpc3RhbmNl
U2Vjb25kKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgaWYgKHN0
cmV0Y2hEaXN0YW5jZUZpcnN0ID4gc3RyZXRjaERpc3RhbmNlU2Vjb25kKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgYXV0byBzdHlsZURpc3RhbmNlRmlyc3Qg
PSBmb250U2VsZWN0aW9uQWxnb3JpdGhtLnN0eWxlRGlzdGFuY2UoZmlyc3RDYXBhYmlsaXRpZXMp
LmRpc3RhbmNlOwotICAgICAgICAgICAgYXV0byBzdHlsZURpc3RhbmNlU2Vjb25kID0gZm9udFNl
bGVjdGlvbkFsZ29yaXRobS5zdHlsZURpc3RhbmNlKHNlY29uZENhcGFiaWxpdGllcykuZGlzdGFu
Y2U7CisgICAgICAgICAgICBhdXRvIHN0eWxlRGlzdGFuY2VGaXJzdCA9IGZvbnRTZWxlY3Rpb25B
bGdvcml0aG0uc3R5bGVEaXN0YW5jZSgqZmlyc3RDYXBhYmlsaXRpZXMpLmRpc3RhbmNlOworICAg
ICAgICAgICAgYXV0byBzdHlsZURpc3RhbmNlU2Vjb25kID0gZm9udFNlbGVjdGlvbkFsZ29yaXRo
bS5zdHlsZURpc3RhbmNlKCpzZWNvbmRDYXBhYmlsaXRpZXMpLmRpc3RhbmNlOwogICAgICAgICAg
ICAgaWYgKHN0eWxlRGlzdGFuY2VGaXJzdCA8IHN0eWxlRGlzdGFuY2VTZWNvbmQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBpZiAoc3R5bGVEaXN0YW5jZUZpcnN0
ID4gc3R5bGVEaXN0YW5jZVNlY29uZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgICAgIGF1dG8gd2VpZ2h0RGlzdGFuY2VGaXJzdCA9IGZvbnRTZWxlY3Rpb25BbGdv
cml0aG0ud2VpZ2h0RGlzdGFuY2UoZmlyc3RDYXBhYmlsaXRpZXMpLmRpc3RhbmNlOwotICAgICAg
ICAgICAgYXV0byB3ZWlnaHREaXN0YW5jZVNlY29uZCA9IGZvbnRTZWxlY3Rpb25BbGdvcml0aG0u
d2VpZ2h0RGlzdGFuY2Uoc2Vjb25kQ2FwYWJpbGl0aWVzKS5kaXN0YW5jZTsKKyAgICAgICAgICAg
IGF1dG8gd2VpZ2h0RGlzdGFuY2VGaXJzdCA9IGZvbnRTZWxlY3Rpb25BbGdvcml0aG0ud2VpZ2h0
RGlzdGFuY2UoKmZpcnN0Q2FwYWJpbGl0aWVzKS5kaXN0YW5jZTsKKyAgICAgICAgICAgIGF1dG8g
d2VpZ2h0RGlzdGFuY2VTZWNvbmQgPSBmb250U2VsZWN0aW9uQWxnb3JpdGhtLndlaWdodERpc3Rh
bmNlKCpzZWNvbmRDYXBhYmlsaXRpZXMpLmRpc3RhbmNlOwogICAgICAgICAgICAgaWYgKHdlaWdo
dERpc3RhbmNlRmlyc3QgPCB3ZWlnaHREaXN0YW5jZVNlY29uZCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCA2ODY0OWE0OWQxMDJhZDliYTQyZTg3ZTA1MTdhYWNj
OWVjNGZmNmY5Li5hMDBjMjBiZjNhMGE4ZGQyNGU0NDc3ZjAzZWQ3NzM1NGVjNWE5NzQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC02OSw5ICs2OSw5IEBAIFJl
ZlB0cjxJbWFnZT4gQ1NTR3JhZGllbnRWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IEZsb2F0U2l6ZSYKIAogc3RydWN0IEdyYWRpZW50U3RvcCB7CiAgICAgQ29sb3Ig
Y29sb3I7Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IG9mZnNldDsKKyAgICBzdGQ6Om9wdGlvbmFsPGZs
b2F0PiBvZmZzZXQ7CiAKLSAgICBib29sIGlzU3BlY2lmaWVkKCkgY29uc3QgeyByZXR1cm4gb2Zm
c2V0Lmhhc1ZhbHVlKCk7IH0KKyAgICBib29sIGlzU3BlY2lmaWVkKCkgY29uc3QgeyByZXR1cm4g
b2Zmc2V0Lmhhc192YWx1ZSgpOyB9CiAgICAgYm9vbCBpc01pZHBvaW50KCkgY29uc3QgeyByZXR1
cm4gIWNvbG9yLmlzVmFsaWQoKTsgfQogfTsKIApAQCAtMjQxLDcgKzI0MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgc2l6ZV90IG51bVN0b3BzID0gc3RvcHMuc2l6ZSgpOwogICAgICAgICBzaXplX3Qg
bGFzdFN0b3BJbmRleCA9IG51bVN0b3BzIC0gMTsKIAotICAgICAgICBPcHRpb25hbDxzaXplX3Q+
IGZpcnN0WmVyb09yR3JlYXRlckluZGV4OworICAgICAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4g
Zmlyc3RaZXJvT3JHcmVhdGVySW5kZXg7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtU3RvcHM7ICsraSkgewogICAgICAgICAgICAgaWYgKCpzdG9wc1tpXS5vZmZzZXQgPj0gMCkg
ewogICAgICAgICAgICAgICAgIGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID0gaTsKQEAgLTI3MSw3
ICsyNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgc3RvcC5vZmZzZXQgPSAwOwogICAg
ICAgICB9CiAKLSAgICAgICAgT3B0aW9uYWw8c2l6ZV90PiBsYXN0T25lT3JMZXNzSW5kZXg7Cisg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXN0T25lT3JMZXNzSW5kZXg7CiAgICAgICAg
IGZvciAoaW50IGkgPSBsYXN0U3RvcEluZGV4OyBpID49IDA7IC0taSkgewogICAgICAgICAgICAg
aWYgKCpzdG9wc1tpXS5vZmZzZXQgPD0gMSkgewogICAgICAgICAgICAgICAgIGxhc3RPbmVPckxl
c3NJbmRleCA9IGk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVk
Rm9udEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNw
cAppbmRleCBlMzgyZjlhMmE4OGE3ZTMyNmY3YzA1NDI1OTExN2FmYTU1ZDMzNTY2Li5hNjRhZDVh
ZTIzYjY2NTllZGViYjAzMTdkNjAwMWFhNzBiYjEzNjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKQEAgLTEyMCw5ICsxMjAsNyBAQCBGb250UmFuZ2Vz
IENTU1NlZ21lbnRlZEZvbnRGYWNlOjpmb250UmFuZ2VzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aQogICAgICAgICBpZiAoZmFjZS0+Y29tcHV0ZUZhaWx1cmVTdGF0ZSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBzZWxlY3Rpb25DYXBhYmlsaXRp
ZXNXcmFwcGVkID0gZmFjZS0+Zm9udFNlbGVjdGlvbkNhcGFiaWxpdGllcygpOwotICAgICAgICBB
U1NFUlQoc2VsZWN0aW9uQ2FwYWJpbGl0aWVzV3JhcHBlZC5oYXNWYWx1ZSgpKTsKLSAgICAgICAg
YXV0byBzZWxlY3Rpb25DYXBhYmlsaXRpZXMgPSBzZWxlY3Rpb25DYXBhYmlsaXRpZXNXcmFwcGVk
LnZhbHVlKCk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uQ2FwYWJpbGl0aWVzID0gKmZhY2UtPmZv
bnRTZWxlY3Rpb25DYXBhYmlsaXRpZXMoKTsKIAogICAgICAgICBib29sIHN5bnRoZXRpY0JvbGQg
PSAoZm9udERlc2NyaXB0aW9uLmZvbnRTeW50aGVzaXMoKSAmIEZvbnRTeW50aGVzaXNXZWlnaHQp
ICYmICFpc0ZvbnRXZWlnaHRCb2xkKHNlbGVjdGlvbkNhcGFiaWxpdGllcy53ZWlnaHQubWF4aW11
bSkgJiYgaXNGb250V2VpZ2h0Qm9sZChkZXNpcmVkUmVxdWVzdC53ZWlnaHQpOwogICAgICAgICBi
b29sIHN5bnRoZXRpY0l0YWxpYyA9IChmb250RGVzY3JpcHRpb24uZm9udFN5bnRoZXNpcygpICYg
Rm9udFN5bnRoZXNpc1N0eWxlKSAmJiAhaXNJdGFsaWMoc2VsZWN0aW9uQ2FwYWJpbGl0aWVzLnNs
b3BlLm1heGltdW0pICYmIGlzSXRhbGljKGRlc2lyZWRSZXF1ZXN0LnNsb3BlKTsKQEAgLTEzMiwx
MCArMTMwLDcgQEAgRm9udFJhbmdlcyBDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJhbmdlcyhj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGkKICAgICAgICAgaWYgKHJhbmdlcy5p
c051bGwoKSAmJiAhZm9udEFjY2Vzc29yLT5mb250KEV4dGVybmFsUmVzb3VyY2VEb3dubG9hZFBv
bGljeTo6Rm9yYmlkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAg
YXV0byBmYWNlUmFuZ2VzV3JhcHBlZCA9IGZhY2UtPnJhbmdlcygpOwotICAgICAgICBBU1NFUlQo
ZmFjZVJhbmdlc1dyYXBwZWQuaGFzVmFsdWUoKSk7Ci0gICAgICAgIGF1dG8gZmFjZVJhbmdlcyA9
IGZhY2VSYW5nZXNXcmFwcGVkLnZhbHVlKCk7Ci0gICAgICAgIGFwcGVuZEZvbnQocmFuZ2VzLCBX
VEZNb3ZlKGZvbnRBY2Nlc3NvciksIGZhY2VSYW5nZXMpOworICAgICAgICBhcHBlbmRGb250KHJh
bmdlcywgV1RGTW92ZShmb250QWNjZXNzb3IpLCAqZmFjZS0+cmFuZ2VzKCkpOwogICAgIH0KICAg
ICAKICAgICByYW5nZXMuc2hyaW5rVG9GaXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuY3BwCmluZGV4
IGFmNDgwZDAwYjMxZjlmODRkMDM5ZDMxMzU3OTE2ZTg5NzFkNjI1ZmIuLmFkYjA2MTNhMjNlNzAx
NmI4MGY2ZDcwYmFlMmQyMzk3NWIzZjExN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9Gb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmNwcApAQCAt
MjcwLDcgKzI3MCw3IEBAIFN0cmluZyBGb250RmFjZTo6ZmFtaWx5KCkgY29uc3QKICAgICBtX2Jh
Y2tpbmctPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKIAogICAgIGNvbnN0IGF1dG8mIGZhbWlsaWVz
ID0gbV9iYWNraW5nLT5mYW1pbGllcygpOwotICAgIGlmICghZmFtaWxpZXMuaGFzVmFsdWUoKSkK
KyAgICBpZiAoIWZhbWlsaWVzLmhhc192YWx1ZSgpKQogICAgICAgICByZXR1cm4gIm5vcm1hbCJf
czsKICAgICBhdXRvIGZhbWlsaWVzVW5yd2FwcGVkID0gZmFtaWxpZXMudmFsdWUoKTsKICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjM4MSBU
aGlzIGlzIG9ubHkgaGVyZSBiZWNhdXNlIENTU0ZvbnRGYWNlIGVycm9uZW91c2x5IHVzZXMgYSBs
aXN0IG9mIHZhbHVlcyBpbnN0ZWFkIG9mIGEgc2luZ2xlIHZhbHVlLgpAQCAtMjk1LDcgKzI5NSw3
IEBAIFN0cmluZyBGb250RmFjZTo6c3R5bGUoKSBjb25zdAogICAgIG1fYmFja2luZy0+dXBkYXRl
U3R5bGVJZk5lZWRlZCgpOwogICAgIGNvbnN0IGF1dG8mIHN0eWxlV3JhcHBlZCA9IG1fYmFja2lu
Zy0+aXRhbGljKCk7CiAgICAgCi0gICAgaWYgKCFzdHlsZVdyYXBwZWQuaGFzVmFsdWUoKSkKKyAg
ICBpZiAoIXN0eWxlV3JhcHBlZC5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuICJub3JtYWwi
X3M7CiAgICAgYXV0byBzdHlsZSA9IHN0eWxlV3JhcHBlZC52YWx1ZSgpOwogICAgIGF1dG8gbWlu
aW11bSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZvbnRTdHlsZUZyb21TdHlsZVZhbHVlKHN0
eWxlLm1pbmltdW0sIEZvbnRTdHlsZUF4aXM6Oml0YWwpOwpAQCAtMzI4LDcgKzMyOCw3IEBAIFN0
cmluZyBGb250RmFjZTo6d2VpZ2h0KCkgY29uc3QKIHsKICAgICBtX2JhY2tpbmctPnVwZGF0ZVN0
eWxlSWZOZWVkZWQoKTsKICAgICBjb25zdCBhdXRvJiB3ZWlnaHRXcmFwcGVkID0gbV9iYWNraW5n
LT53ZWlnaHQoKTsKLSAgICBpZiAoIXdlaWdodFdyYXBwZWQuaGFzVmFsdWUoKSkKKyAgICBpZiAo
IXdlaWdodFdyYXBwZWQuaGFzX3ZhbHVlKCkpCiAgICAgICAgIHJldHVybiAibm9ybWFsIl9zOwog
ICAgIGF1dG8gd2VpZ2h0ID0gd2VpZ2h0V3JhcHBlZC52YWx1ZSgpOwogICAgIGF1dG8gbWluaW11
bSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OmZvbnRXZWlnaHRGcm9tU3R5bGVWYWx1ZSh3ZWln
aHQubWluaW11bSk7CkBAIC0zNTEsNyArMzUxLDcgQEAgU3RyaW5nIEZvbnRGYWNlOjpzdHJldGNo
KCkgY29uc3QKIHsKICAgICBtX2JhY2tpbmctPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKICAgICBj
b25zdCBhdXRvJiBzdHJldGNoV3JhcHBlZCA9IG1fYmFja2luZy0+c3RyZXRjaCgpOwotICAgIGlm
ICghc3RyZXRjaFdyYXBwZWQuaGFzVmFsdWUoKSkKKyAgICBpZiAoIXN0cmV0Y2hXcmFwcGVkLmhh
c192YWx1ZSgpKQogICAgICAgICByZXR1cm4gIm5vcm1hbCJfczsKICAgICBhdXRvIHN0cmV0Y2gg
PSBzdHJldGNoV3JhcHBlZC52YWx1ZSgpOwogICAgIGF1dG8gbWluaW11bSA9IENvbXB1dGVkU3R5
bGVFeHRyYWN0b3I6OmZvbnRTdHJldGNoRnJvbVN0eWxlVmFsdWUoc3RyZXRjaC5taW5pbXVtKTsK
QEAgLTM3NCw3ICszNzQsNyBAQCBTdHJpbmcgRm9udEZhY2U6OnVuaWNvZGVSYW5nZSgpIGNvbnN0
CiB7CiAgICAgbV9iYWNraW5nLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgY29uc3QgYXV0
byYgcmFuZ2VzV3JhcHBlZCA9IG1fYmFja2luZy0+cmFuZ2VzKCk7Ci0gICAgaWYgKCFyYW5nZXNX
cmFwcGVkLmhhc1ZhbHVlKCkpCisgICAgaWYgKCFyYW5nZXNXcmFwcGVkLmhhc192YWx1ZSgpKQog
ICAgICAgICByZXR1cm4gIlUrMC0xMEZGRkYiOwogICAgIGF1dG8gcmFuZ2VzID0gcmFuZ2VzV3Jh
cHBlZC52YWx1ZSgpOwogICAgIGlmICghcmFuZ2VzLnNpemUoKSkKQEAgLTM4OSw3ICszODksNyBA
QCBTdHJpbmcgRm9udEZhY2U6OmZlYXR1cmVTZXR0aW5ncygpIGNvbnN0CiB7CiAgICAgbV9iYWNr
aW5nLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgY29uc3QgYXV0byYgZmVhdHVyZVNldHRp
bmdzV3JhcHBlZCA9IG1fYmFja2luZy0+ZmVhdHVyZVNldHRpbmdzKCk7Ci0gICAgaWYgKCFmZWF0
dXJlU2V0dGluZ3NXcmFwcGVkLmhhc1ZhbHVlKCkpCisgICAgaWYgKCFmZWF0dXJlU2V0dGluZ3NX
cmFwcGVkLmhhc192YWx1ZSgpKQogICAgICAgICByZXR1cm4gIm5vcm1hbCJfczsKICAgICBhdXRv
IGZlYXR1cmVTZXR0aW5ncyA9IGZlYXR1cmVTZXR0aW5nc1dyYXBwZWQudmFsdWUoKTsKICAgICBp
ZiAoIWZlYXR1cmVTZXR0aW5ncy5zaXplKCkpCkBAIC00MDQsNyArNDA0LDcgQEAgU3RyaW5nIEZv
bnRGYWNlOjpkaXNwbGF5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgbV9iYWNraW5nLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgY29uc3QgYXV0byYg
bG9hZGluZ0JlaGF2aW9yV3JhcHBlZCA9IG1fYmFja2luZy0+bG9hZGluZ0JlaGF2aW9yKCk7Ci0g
ICAgaWYgKCFsb2FkaW5nQmVoYXZpb3JXcmFwcGVkLmhhc1ZhbHVlKCkpCisgICAgaWYgKCFsb2Fk
aW5nQmVoYXZpb3JXcmFwcGVkLmhhc192YWx1ZSgpKQogICAgICAgICByZXR1cm4gImF1dG8iX3M7
CiAgICAgcmV0dXJuIGNvbnRleHQuY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobG9hZGluZ0Jl
aGF2aW9yV3JhcHBlZC52YWx1ZSgpKS0+Y3NzVGV4dCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcAppbmRleCA2ZjViMjVlNDNkYjg3OGIx
OGYxNjA2Y2RiYjcxMDY0NzYwZGZkMzBlLi45ODI3MWQwMWQyZGIzNDQ2YzdmZDEzOTM5MGZjZDBh
ZmIyYWMxZTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1NlbGVj
dG9yUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9y
UGFyc2VyLmNwcApAQCAtODg3LDcgKzg4Nyw3IEBAIHN0YXRpYyBib29sIGNvbnN1bWVBTlBsdXNC
KENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBzdGQ6OnBhaXI8aW50LCBpbnQ+JiByZXN1CiAg
ICAgaWYgKG5TdHJpbmcubGVuZ3RoKCkgPiAyKSB7CiAgICAgICAgIGF1dG8gcGFyc2VkTnVtYmVy
ID0gcGFyc2VJbnRlZ2VyPGludD4oU3RyaW5nVmlldyB7IG5TdHJpbmcgfS5zdWJzdHJpbmcoMSkp
OwogICAgICAgICByZXN1bHQuc2Vjb25kID0gcGFyc2VkTnVtYmVyLnZhbHVlX29yKDApOwotICAg
ICAgICByZXR1cm4gcGFyc2VkTnVtYmVyLmhhc1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBwYXJz
ZWROdW1iZXIuaGFzX3ZhbHVlKCk7CiAgICAgfQogCiAgICAgTnVtZXJpY1NpZ24gc2lnbiA9IG5T
dHJpbmcubGVuZ3RoKCkgPT0gMSA/IE5vU2lnbiA6IE1pbnVzU2lnbjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgKaW5kZXggYjRhNjE2NmNjYzkxNmI3ZmU0ZWI3MTc2
MGI5MjY4YzAyYzljY2M0ZC4uMmVhMjY5ZmY1OWNmOTNhYmZiZjJlN2U2ZDAwYTg1OWJjOTJiYzk5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgKQEAgLTc2LDgg
Kzc2LDggQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IFNoYWRvd0RhdGEqIGJveFNoYWRvdygp
IGNvbnN0IHsgcmV0dXJuIG1fYm94U2hhZG93LmdldCgpOyB9CiAKLSAgICBPcHRpb25hbDxpbnQ+
IHpJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fekluZGV4OyB9Ci0gICAgYm9vbCBpc1N0YWNraW5n
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fekluZGV4Lmhhc1ZhbHVlKCk7IH0KKyAgICBzdGQ6
Om9wdGlvbmFsPGludD4gekluZGV4KCkgY29uc3QgeyByZXR1cm4gbV96SW5kZXg7IH0KKyAgICBi
b29sIGlzU3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV96SW5kZXguaGFzX3ZhbHVl
KCk7IH0KICAgICAKICAgICBib29sIGlzUG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxh
Z3MuY29udGFpbnMoRmxhZ3M6OlBvc2l0aW9uZWQpOyB9CiAgICAgYm9vbCBpc0Zsb2F0aW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9mbGFncy5jb250YWlucyhGbGFnczo6RmxvYXRpbmcpOyB9CkBAIC0x
MjUsNyArMTI1LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBmbG9hdCBtX29wYWNpdHk7CiAKLSAg
ICBPcHRpb25hbDxpbnQ+IG1fekluZGV4OworICAgIHN0ZDo6b3B0aW9uYWw8aW50PiBtX3pJbmRl
eDsKICAgICBPcHRpb25TZXQ8RmxhZ3M+IG1fZmxhZ3M7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5oCmluZGV4IGU1MjhmNjU0NmI0MzZiYzg1NjNmZGE0NjU3
YmY5MzllMGRjY2M2NTkuLjIxMzVjMjE4YzkwMDdjMDJkODQ0NzAzZDQyMjcwMGIzMGYwMDJiMmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5oCkBAIC02Nyw3ICs2
Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkQ2xlYXJTdHJpbmdEYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSk7CiAgICAgdm9pZCBkaWRTZXRTdHJpbmdEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7
Ci0gICAgYm9vbCBoYXNJdGVtcygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXMuaGFzVmFsdWUoKTsg
fQorICAgIGJvb2wgaGFzSXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zLmhhc192YWx1ZSgp
OyB9CiAgICAgY29uc3QgVmVjdG9yPFJlZjxEYXRhVHJhbnNmZXJJdGVtPj4mIGl0ZW1zKCkgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2l0ZW1zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CmluZGV4IGQ3ZDQyZWEyMGY5MTEzY2Y0NTZiZGVmMWU1OTM3ZTg0OTY2MzBjZjUuLmIxOTc1OWU0
Y2Y5ZTVjNmI0YzhiYmQ4YTYyYjM0MGZjYzY4NzBiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cApAQCAtMjg2Myw5ICsyODYzLDkgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlSGlnaGxpZ2h0UG9z
aXRpb25zKCkKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbihy
YW5nZURhdGEtPnJhbmdlKTsKICAgICAgICAgICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb247CiAg
ICAgICAgICAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbjsKLSAgICAgICAgICAgIGlmICghcmFuZ2VE
YXRhLT5zdGFydFBvc2l0aW9uLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICBpZiAoIXJhbmdlRGF0
YS0+c3RhcnRQb3NpdGlvbi5oYXNfdmFsdWUoKSkKICAgICAgICAgICAgICAgICBzdGFydFBvc2l0
aW9uID0gdmlzaWJsZVNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwot
ICAgICAgICAgICAgaWYgKCFyYW5nZURhdGEtPmVuZFBvc2l0aW9uLmhhc1ZhbHVlKCkpCisgICAg
ICAgICAgICBpZiAoIXJhbmdlRGF0YS0+ZW5kUG9zaXRpb24uaGFzX3ZhbHVlKCkpCiAgICAgICAg
ICAgICAgICAgZW5kUG9zaXRpb24gPSB2aXNpYmxlU2VsZWN0aW9uLnZpc2libGVFbmQoKS5kZWVw
RXF1aXZhbGVudCgpOwogICAgICAgICAgICAgaWYgKCF3ZWFrUmFuZ2VEYXRhLmdldCgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKaW5kZXgg
MGNjZGM0YWIzYmVjM2VjNmE4NTJlM2RlMDA0ZmU1NjMxMDY3MzY2Yi4uY2ZkYzE5MWNkNWRjYTIx
ODU1YmQxY2FkMWNiYmRmOTBmYThjMjc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3Bw
CkBAIC04OSw3ICs4OSw3IEBAIGJvb2wgRXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBSZWY8RXZlbnRMaXN0ZW5lCiAKICAgICBhdXRvIHBh
c3NpdmUgPSBvcHRpb25zLnBhc3NpdmU7CiAKLSAgICBpZiAoIXBhc3NpdmUuaGFzVmFsdWUoKSAm
JiBRdWlya3M6OnNob3VsZE1ha2VFdmVudExpc3RlbmVyUGFzc2l2ZSgqdGhpcywgZXZlbnRUeXBl
LCBsaXN0ZW5lci5nZXQoKSkpCisgICAgaWYgKCFwYXNzaXZlLmhhc192YWx1ZSgpICYmIFF1aXJr
czo6c2hvdWxkTWFrZUV2ZW50TGlzdGVuZXJQYXNzaXZlKCp0aGlzLCBldmVudFR5cGUsIGxpc3Rl
bmVyLmdldCgpKSkKICAgICAgICAgcGFzc2l2ZSA9IHRydWU7CiAKICAgICBib29sIGxpc3RlbmVy
Q3JlYXRlZEZyb21TY3JpcHQgPSBsaXN0ZW5lci0+dHlwZSgpID09IEV2ZW50TGlzdGVuZXI6OkpT
RXZlbnRMaXN0ZW5lclR5cGUgJiYgIWxpc3RlbmVyLT53YXNDcmVhdGVkRnJvbU1hcmt1cCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHAKaW5kZXggOGU0MzU1ZmQ0ODU3ODc3NzQ1ZjA3ODU1NjE4NDE1NmI0Zjk2NWZiMi4uNjky
ZDBkNzZlZjZkYTM3NWRjMjZjYjA2YjFlNTAxZTlmOGFkMzRiNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0xNDYs
NyArMTQ2LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseVBlbmRpbmdD
b3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHMKIAogYm9vbCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpoYXNQZW5kaW5nQ29ycmVjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuaGFzVmFsdWUoKTsKKyAgICByZXR1cm4gbV9yYW5nZVdp
dGhBbHRlcm5hdGl2ZS5oYXNfdmFsdWUoKTsKIH0KIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjppc1NwZWxsaW5nTWFya2VyQWxsb3dlZChjb25zdCBTaW1wbGVSYW5nZSYgbWlzc3Bl
bGxpbmdSYW5nZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAKaW5kZXggOTM4NDE1ODcxNmVjNGMzODhlMzk0OTBkN2IwZGRjZTJjMGIwYTU1Zi4u
YTYzNWY2MjQxN2M3OTYwMzVkN2I2NmQ1NjZjOTc4ODExNjIyMTdlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTYwMCw3ICs2MDAsNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYgc3R5
bGUpCiAgICAgYXV0byB0ZXh0RGlyZWN0aW9uID0gc3R5bGUudGV4dERpcmVjdGlvbigpOwogICAg
IFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlV2l0aG91dEVtYmVkZGluZzsKICAgICBSZWZQdHI8
RWRpdGluZ1N0eWxlPiBlbWJlZGRpbmdTdHlsZTsKLSAgICBpZiAodGV4dERpcmVjdGlvbi5oYXNW
YWx1ZSgpKSB7CisgICAgaWYgKHRleHREaXJlY3Rpb24pIHsKICAgICAgICAgLy8gTGVhdmUgYWxv
bmUgYW4gYW5jZXN0b3IgdGhhdCBwcm92aWRlcyB0aGUgZGVzaXJlZCBzaW5nbGUgbGV2ZWwgZW1i
ZWRkaW5nLCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgICAgIGF1dG8gc3RhcnRVbnNwbGl0QW5jZXN0
b3IgPSBzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShzdGFydC5kZXByZWNhdGVkTm9kZSgp
LCB0cnVlLCAqdGV4dERpcmVjdGlvbik7CiAgICAgICAgIGF1dG8gZW5kVW5zcGxpdEFuY2VzdG9y
ID0gc3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkoZW5kLmRlcHJlY2F0ZWROb2RlKCksIGZh
bHNlLCAqdGV4dERpcmVjdGlvbik7CkBAIC02NTEsNyArNjUxLDcgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogICAgIGRvY3Vt
ZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBzdHlsZVRvQXBwbHkgPSAmc3R5bGU7Ci0gICAgaWYgKHRleHREaXJl
Y3Rpb24uaGFzVmFsdWUoKSkgeworICAgIGlmICh0ZXh0RGlyZWN0aW9uKSB7CiAgICAgICAgIC8v
IEF2b2lkIGFwcGx5aW5nIHRoZSB1bmljb2RlLWJpZGkgYW5kIGRpcmVjdGlvbiBwcm9wZXJ0aWVz
IGJlbmVhdGggYW5jZXN0b3JzIHRoYXQgYWxyZWFkeSBoYXZlIHRoZW0uCiAgICAgICAgIGF1dG8g
ZW1iZWRkaW5nU3RhcnROb2RlID0gaGlnaGVzdEVtYmVkZGluZ0FuY2VzdG9yKHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCksIGVuY2xvc2luZ0Jsb2NrKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpKTsKICAg
ICAgICAgYXV0byBlbWJlZGRpbmdFbmROb2RlID0gaGlnaGVzdEVtYmVkZGluZ0FuY2VzdG9yKGVu
ZC5kZXByZWNhdGVkTm9kZSgpLCBlbmNsb3NpbmdCbG9jayhlbmQuZGVwcmVjYXRlZE5vZGUoKSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggYmQxOWJiYmEx
MDdkMmRhNzY5NmIzNTA2ZGIzYzFkMmFmNjkxM2FiNC4uMzk4MTgyMjI5NGY3MGViMmJjMmQyODkx
MDRlZTI5ZDFmYTM2MDUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwCkBAIC02NTgzLDcgKzY1ODMsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQoKQogCiBDYXB0aW9uVXNlclByZWZlcmVuY2VzOjpDYXB0aW9uRGlz
cGxheU1vZGUgSFRNTE1lZGlhRWxlbWVudDo6Y2FwdGlvbkRpc3BsYXlNb2RlKCkKIHsKLSAgICBp
ZiAoIW1fY2FwdGlvbkRpc3BsYXlNb2RlLmhhc1ZhbHVlKCkpIHsKKyAgICBpZiAoIW1fY2FwdGlv
bkRpc3BsYXlNb2RlKSB7CiAgICAgICAgIGlmIChkb2N1bWVudCgpLnBhZ2UoKSkKICAgICAgICAg
ICAgIG1fY2FwdGlvbkRpc3BsYXlNb2RlID0gZG9jdW1lbnQoKS5wYWdlKCktPmdyb3VwKCkuY2Fw
dGlvblByZWZlcmVuY2VzKCkuY2FwdGlvbkRpc3BsYXlNb2RlKCk7CiAgICAgICAgIGVsc2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW1hZ2VCaXRtYXAuaAppbmRleCAyYTg5YWVmNjBkOTJjZjg2ZTQ1YjUwYWIzNjBl
MTQwODRkMDQwYTZmLi4zMjZmODBiODdjZDUyOTliYzc5ZmZkZDZiODY0ODdlOThhMWQ4OWQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oCkBAIC0xMDMsNyArMTAzLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgZm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
aW5nU3RvcmUgJiYgbV9iYWNraW5nU3RvcmUtPmZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSgpOyB9
CiAKICAgICBPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+IHRha2VJbWFnZUJpdG1hcEJhY2tp
bmcoKTsKLSAgICBib29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiAhbV9iYWNraW5nU3Rv
cmUuaGFzVmFsdWUoKTsgfQorICAgIGJvb2wgaXNEZXRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuICFt
X2JhY2tpbmdTdG9yZTsgfQogICAgIHZvaWQgY2xvc2UoKSB7IHRha2VJbWFnZUJpdG1hcEJhY2tp
bmcoKTsgfQogCiAgICAgc3RhdGljIFZlY3RvcjxPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+
PiBkZXRhY2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cAppbmRleCAxMTExYWNjMjU4OGM2OTE3OGNjNjRiOTMxMjg5NGM0NmExMjQ4Zjc5Li4zMzBjNzUz
NjlmMWE2MDYwN2E0ZDU5Y2MzZWQ2NjZkNWZlYjdkMjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC0xMTA5
LDcgKzExMDksNyBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvclBh
Z2VBZ2VudDo6YXJjaGl2ZSgpCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTY3JlZW5TaXplT3ZlcnJpZGUo
T3B0aW9uYWw8aW50PiYmIHdpZHRoLCBPcHRpb25hbDxpbnQ+JiYgaGVpZ2h0KQogewotICAgIGlm
ICh3aWR0aC5oYXNWYWx1ZSgpICE9IGhlaWdodC5oYXNWYWx1ZSgpKQorICAgIGlmICh3aWR0aC5o
YXNfdmFsdWUoKSAhPSBoZWlnaHQuaGFzX3ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiU2NyZWVuIHdpZHRoIGFuZCBoZWlnaHQgb3ZlcnJpZGUgc2hvdWxkIGJlIGJvdGgg
c3BlY2lmaWVkIG9yIG9taXR0ZWQiX3MpOwogCiAgICAgaWYgKHdpZHRoICYmICp3aWR0aCA8PSAw
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dFBoYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9MYXlvdXRQaGFzZS5jcHAKaW5kZXggMDMxMWFmODM0MTI3MzE5
NmU1OGJhMWFiODg1NGYwMzZhMGQzYjZhNy4uOGQ5YTNkY2JiYWExMmZmZDA1ZWM3OWE2MTlkYTcy
MDk3YzdhMTRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0xheW91dFBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvTGF5b3V0UGhhc2UuY3BwCkBAIC01Nyw3
ICs1Nyw3IEBAIGJvb2wgUGhhc2U6OmlzSW5JbnZhbGlkYXRpb24oKQogUGhhc2VTY29wZTo6UGhh
c2VTY29wZShQaGFzZTo6VHlwZSB0eXBlKQogeyAKICAgICAvLyBTaG91bGQgbmV2ZXIgbmVzdCBz
dGF0ZXMgbGlrZSBjYWxsaW5nIFRyZWVCdWlsZGluZyBmcm9tIExheW91dC4gCi0gICAgQVNTRVJU
KCEoKnBoYXNlKCkpLmhhc1ZhbHVlKCkpOworICAgIEFTU0VSVCghKCpwaGFzZSgpKS5oYXNfdmFs
dWUoKSk7CiAgICAgcGhhc2UoKS5zZXQodHlwZSk7CiB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVDb250ZW50
QnJlYWtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lu
bGluZS9JbmxpbmVDb250ZW50QnJlYWtlci5jcHAKaW5kZXggOGU3MWE3NTkxYTc5YjBlN2IzNGQ0
MGZlOWEwZjIzNjg1ZmQ0MGFhMC4uMTdmNzM4NWY0NWFkNmIyYmRlM2M2MjFhMTYyZDI4OTYzNzdj
MWUyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9pbmxpbmUvSW5saW5lQ29udGVudEJyZWFrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUNvbnRlbnRCcmVha2VyLmNwcApA
QCAtNDI4LDcgKzQyOCw3IEBAIE9wdGlvbmFsPElubGluZUNvbnRlbnRCcmVha2VyOjpQYXJ0aWFs
UnVuPiBJbmxpbmVDb250ZW50QnJlYWtlcjo6dHJ5QnJlYWtpbmdUZXh0CiAgICAgQVNTRVJUKG92
ZXJmbG93aW5nUnVuLmlubGluZUl0ZW0uaXNUZXh0KCkpOwogICAgIGF1dG8mIGlubGluZVRleHRJ
dGVtID0gZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KG92ZXJmbG93aW5nUnVuLmlubGluZUl0ZW0p
OwogICAgIGF1dG8mIHN0eWxlID0gaW5saW5lVGV4dEl0ZW0uc3R5bGUoKTsKLSAgICBhdXRvIGF2
YWlsYWJsZVNwYWNlSXNJbmZpbml0ZSA9ICFhdmFpbGFibGVXaWR0aC5oYXNWYWx1ZSgpOworICAg
IGF1dG8gYXZhaWxhYmxlU3BhY2VJc0luZmluaXRlID0gIWF2YWlsYWJsZVdpZHRoLmhhc192YWx1
ZSgpOwogCiAgICAgYXV0byBicmVha1J1bGVzID0gd29yZEJyZWFrQmVoYXZpb3Ioc3R5bGUsIGhh
c1dyYXBPcHBvcnR1bml0eUF0UHJldmlvdXNQb3NpdGlvbik7CiAgICAgaWYgKGJyZWFrUnVsZXMu
aXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lTGluZS5oCmluZGV4IGZlMzM1MTk1MjFhYTllNGY5
NmE3OTM0YWVkOGMwMzJjYzllNzkzZjUuLjI0ZDRkNWMxMmI0NjUwNzIxZjkyMWI5MTY5MzY5MjQw
MDc4Yjg4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvaW5saW5lL0lubGluZUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVMaW5lLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVi
bGljOgogICAgIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlVHJhaWxpbmdXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LndpZHRoKCk7IH0KICAgICBib29s
IGlzVHJhaWxpbmdSdW5GdWxseVRyaW1tYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJpbW1hYmxl
VHJhaWxpbmdDb250ZW50LmlzVHJhaWxpbmdSdW5GdWxseVRyaW1tYWJsZSgpOyB9CiAKLSAgICBP
cHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB0cmFpbGluZ1NvZnRIeXBoZW5XaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhaWxpbmdTb2Z0SHlwaGVuV2lkdGg7IH0KKyAgICBzdGQ6Om9wdGlvbmFs
PElubGluZUxheW91dFVuaXQ+IHRyYWlsaW5nU29mdEh5cGhlbldpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV90cmFpbGluZ1NvZnRIeXBoZW5XaWR0aDsgfQogICAgIHZvaWQgYWRkVHJhaWxpbmdIeXBo
ZW4oSW5saW5lTGF5b3V0VW5pdCBoeXBoZW5Mb2dpY2FsV2lkdGgpOwogCiAgICAgdm9pZCByZW1v
dmVDb2xsYXBzaWJsZUNvbnRlbnQoSW5saW5lTGF5b3V0VW5pdCBleHRyYUhvcml6b250YWxTcGFj
ZSk7CkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBjb25zdCBCb3gmIGxheW91
dEJveCgpIGNvbnN0IHsgcmV0dXJuICptX2xheW91dEJveDsgfQogICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJveC0+c3R5bGUoKTsgfQot
ICAgICAgICBjb25zdCBPcHRpb25hbDxMaW5lUnVuOjpUZXh0PiYgdGV4dENvbnRlbnQoKSBjb25z
dCB7IHJldHVybiBtX3RleHRDb250ZW50OyB9CisgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
TGluZVJ1bjo6VGV4dD4mIHRleHRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q29udGVu
dDsgfQogCiAgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dpY2FsV2lkdGg7IH0KICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbExlZnQ7IH0KQEAgLTEyMiw3ICsxMjIsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbV93aGl0ZXNwYWNlSXNFeHBhbnNpb25PcHBvcnR1bml0
eSB7IGZhbHNlIH07CiAgICAgICAgIFRyYWlsaW5nV2hpdGVzcGFjZSBtX3RyYWlsaW5nV2hpdGVz
cGFjZVR5cGUgeyBUcmFpbGluZ1doaXRlc3BhY2U6Ok5vbmUgfTsKICAgICAgICAgSW5saW5lTGF5
b3V0VW5pdCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OwotICAgICAgICBPcHRpb25h
bDxMaW5lUnVuOjpUZXh0PiBtX3RleHRDb250ZW50OworICAgICAgICBzdGQ6Om9wdGlvbmFsPExp
bmVSdW46OlRleHQ+IG1fdGV4dENvbnRlbnQ7CiAgICAgICAgIExpbmVSdW46OkV4cGFuc2lvbiBt
X2V4cGFuc2lvbjsKICAgICAgICAgdW5zaWduZWQgbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50
IHsgMCB9OwogICAgIH07CkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgSW5s
aW5lTGF5b3V0VW5pdCByZW1vdmVQYXJ0aWFsbHlUcmltbWFibGVDb250ZW50KCk7CiAKICAgICAg
ICAgSW5saW5lTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbHlUcmltbWFi
bGVXaWR0aCArIG1fcGFydGlhbGx5VHJpbW1hYmxlV2lkdGg7IH0KLSAgICAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QgeyByZXR1cm4gIW1fZmlyc3RUcmltbWFibGVSdW5JbmRleC5oYXNWYWx1ZSgp
OyB9CisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZpcnN0VHJpbW1h
YmxlUnVuSW5kZXguaGFzX3ZhbHVlKCk7IH0KICAgICAgICAgYm9vbCBpc1RyYWlsaW5nUnVuRnVs
bHlUcmltbWFibGUoKSBjb25zdCB7IHJldHVybiBtX2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudDsg
fQogICAgICAgICBib29sIGlzVHJhaWxpbmdSdW5QYXJ0aWFsbHlUcmltbWFibGUoKSBjb25zdCB7
IHJldHVybiBtX3BhcnRpYWxseVRyaW1tYWJsZVdpZHRoOyB9CiAKQEAgLTE2MSw3ICsxNjEsNyBA
QCBwcml2YXRlOgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUnVuTGlzdCYgbV9ydW5zOwotICAg
ICAgICBPcHRpb25hbDxzaXplX3Q+IG1fZmlyc3RUcmltbWFibGVSdW5JbmRleDsKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxzaXplX3Q+IG1fZmlyc3RUcmltbWFibGVSdW5JbmRleDsKICAgICAgICAg
Ym9vbCBtX2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudCB7IGZhbHNlIH07CiAgICAgICAgIElubGlu
ZUxheW91dFVuaXQgbV9mdWxseVRyaW1tYWJsZVdpZHRoIHsgMCB9OwogICAgICAgICBJbmxpbmVM
YXlvdXRVbml0IG1fcGFydGlhbGx5VHJpbW1hYmxlV2lkdGggeyAwIH07CkBAIC0xNzIsNyArMTcy
LDcgQEAgcHJpdmF0ZToKICAgICBUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQgbV90cmltbWFibGVU
cmFpbGluZ0NvbnRlbnQ7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2NvbnRlbnRMb2dpY2FsV2lk
dGggeyAwIH07CiAgICAgc2l6ZV90IG1fbm9uU3Bhbm5pbmdJbmxpbmVMZXZlbEJveENvdW50IHsg
MCB9OwotICAgIE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IG1fdHJhaWxpbmdTb2Z0SHlwaGVu
V2lkdGggeyAwIH07CisgICAgc3RkOjpvcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBtX3RyYWls
aW5nU29mdEh5cGhlbldpZHRoIHsgMCB9OwogfTsKIAogaW5saW5lIHZvaWQgTGluZTo6VHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50OjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKaW5kZXggOTJlNzY4
YWE3ZDhlODQyYmZlMGE3ZjQ3MGJkZTRlYjE0ZWE3OWI4YS4uOTI3YjRhMTAzZWQxZTRiNTAzZGRk
Y2ZhZDVhODFmNDUxOTQ1NmYwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Ny
b3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcApAQCAtNTAsNyArNTAsNyBA
QCBzdGF0aWMgYm9vbCBwYXJzZUFjY2Vzc0NvbnRyb2xNYXhBZ2UoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIFNlY29uZHMmIGV4cGlyeURlbHRhKQogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9i
YWJseSByZWplY3Qgc3RyaW5ncyB0aGF0IGhhdmUgYSBsZWFkaW5nICIrIi4KICAgICBhdXRvIHBh
cnNlZEludGVnZXIgPSBwYXJzZUludGVnZXI8dWludDY0X3Q+KHN0cmluZyk7CiAgICAgZXhwaXJ5
RGVsdGEgPSBTZWNvbmRzKHN0YXRpY19jYXN0PGRvdWJsZT4ocGFyc2VkSW50ZWdlci52YWx1ZV9v
cigwKSkpOwotICAgIHJldHVybiBwYXJzZWRJbnRlZ2VyLmhhc1ZhbHVlKCk7CisgICAgcmV0dXJu
IHBhcnNlZEludGVnZXIuaGFzX3ZhbHVlKCk7CiB9CiAKIEV4cGVjdGVkPFVuaXF1ZVJlZjxDcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbT4sIFN0cmluZz4gQ3Jvc3NPcmlnaW5QcmVm
bGlnaHRSZXN1bHRDYWNoZUl0ZW06OmNyZWF0ZShTdG9yZWRDcmVkZW50aWFsc1BvbGljeSBwb2xp
Y3ksIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCmluZGV4IGJiNjE3NmZlODM1OGQ3YzlkYThhZGE3ZTRiMWEyYzJkMDI4ODQw
NzUuLjdmNjk2NjIxYTEzOTM5ZDU5NzkzY2JhNzhlODVlMjY0MzA0NDEyYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTMwOTYsNyArMzA5Niw3IEBAIHZvaWQgRXZlbnRI
YW5kbGVyOjpkZWZhdWx0V2hlZWxFdmVudEhhbmRsZXIoTm9kZSogc3RhcnROb2RlLCBXaGVlbEV2
ZW50JiB3aGVlbEV2CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gcGxhdGZvcm1FdmVudCA9
IHdoZWVsRXZlbnQudW5kZXJseWluZ1BsYXRmb3JtRXZlbnQoKTsKLSAgICBib29sIGlzVXNlckV2
ZW50ID0gcGxhdGZvcm1FdmVudC5oYXNWYWx1ZSgpOworICAgIGJvb2wgaXNVc2VyRXZlbnQgPSBw
bGF0Zm9ybUV2ZW50Lmhhc192YWx1ZSgpOwogCiAgICAgaWYgKGlzVXNlckV2ZW50ICYmICFtX2N1
cnJlbnRXaGVlbEV2ZW50QWxsb3dzU2Nyb2xsaW5nKQogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9Db250ZW50Q2hhbmdlT2JzZXJ2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9pb3MvQ29udGVudENoYW5nZU9ic2VydmVyLmNwcAppbmRleCBj
MjY2OWFjYmU3NmE1ZTA2MzNlNzA1NjBiNzdkYjVmMTgxZjBkYzlmLi5kOWE0NDE2NjZiNDk5ZDVk
YzQ1NmY5MzdjMmE0MzUxMmU4MDE5ODc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2lvcy9Db250ZW50Q2hhbmdlT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0NvbnRlbnRDaGFuZ2VPYnNlcnZlci5jcHAKQEAgLTY1OSw3ICs2NTksNyBAQCBDb250ZW50
Q2hhbmdlT2JzZXJ2ZXI6OlN0eWxlQ2hhbmdlU2NvcGU6OlN0eWxlQ2hhbmdlU2NvcGUoRG9jdW1l
bnQmIGRvY3VtZW50LCBjbwogQ29udGVudENoYW5nZU9ic2VydmVyOjpTdHlsZUNoYW5nZVNjb3Bl
Ojp+U3R5bGVDaGFuZ2VTY29wZSgpCiB7CiAgICAgLy8gRG8gd2UgdHJhY2sgdGhpcyBlbGVtZW50
PwotICAgIGlmICghbV93YXNIaWRkZW4uaGFzVmFsdWUoKSkKKyAgICBpZiAoIW1fd2FzSGlkZGVu
Lmhhc192YWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW1fY29udGVudENoYW5n
ZU9ic2VydmVyLmlzQ29uc2lkZXJlZEFjdGlvbmFibGVDb250ZW50KG1fZWxlbWVudCwgbV9oYWRS
ZW5kZXJlciA/IEVsZW1lbnRIYWRSZW5kZXJlcjo6WWVzIDogRWxlbWVudEhhZFJlbmRlcmVyOjpO
bykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFw
T2Zmc2V0c0luZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsU25h
cE9mZnNldHNJbmZvLmNwcAppbmRleCBlOGUxNjVlZGUzMzc0YzNjNWRiYzUzZjk0OTFmODkxMzg3
Y2M2Mzc2Li44YzRiMzc5NDI4YTgyOWU1ZDA3MDU4YzY0MTU1ZjdiMTY4ZGYzZjc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxTbmFwT2Zmc2V0c0luZm8u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbFNuYXBPZmZzZXRz
SW5mby5jcHAKQEAgLTEwNywxNSArMTA3LDE0IEBAIHN0YXRpYyBPcHRpb25hbDx1bnNpZ25lZD4g
ZmluZEZpcnN0U25hcFN0b3BPZmZzZXRCZXR3ZWVuT3JpZ2luQW5kRGVzdGluYXRpb24oY29uCiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbmZvVHlwZSwgdHlwZW5hbWUgU2l6ZVR5cGUsIHR5cGVu
YW1lIExheW91dFR5cGU+Ci1zdGF0aWMgc3RkOjpwYWlyPExheW91dFR5cGUsIHVuc2lnbmVkPiBj
bG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQW5kQXhpcyhjb25zdCBJbmZvVHlwZSYgaW5mbywgU2Ny
b2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IFNpemVUeXBlJiB2aWV3cG9ydFNpemUsIExheW91dFR5
cGUgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxMYXlv
dXRUeXBlPiBvcmlnaW5hbE9mZnNldEZvckRpcmVjdGlvbmFsU25hcHBpbmcpCitzdGF0aWMgc3Rk
OjpwYWlyPExheW91dFR5cGUsIHVuc2lnbmVkPiBjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQW5k
QXhpcyhjb25zdCBJbmZvVHlwZSYgaW5mbywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IFNp
emVUeXBlJiB2aWV3cG9ydFNpemUsIExheW91dFR5cGUgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQs
IGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExheW91dFR5cGU+IG9yaWdpbmFsT2Zmc2V0
Rm9yRGlyZWN0aW9uYWxTbmFwcGluZykKIHsKICAgICBjb25zdCBhdXRvJiBzbmFwT2Zmc2V0cyA9
IGluZm8ub2Zmc2V0c0ZvckF4aXMoYXhpcyk7CiAgICAgaWYgKHNuYXBPZmZzZXRzLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNjcm9sbERlc3RpbmF0aW9uT2Zmc2V0
LCBpbnZhbGlkU25hcE9mZnNldEluZGV4KTsKIAotICAgIGlmIChvcmlnaW5hbE9mZnNldEZvckRp
cmVjdGlvbmFsU25hcHBpbmcuaGFzVmFsdWUoKSkgewotICAgICAgICBhdXRvIGZpcnN0U25hcFN0
b3BPZmZzZXRJbmRleCA9IGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9yaWdpbkFuZERl
c3RpbmF0aW9uKHNuYXBPZmZzZXRzLCAqb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBw
aW5nLCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCk7Ci0gICAgICAgIGlmIChmaXJzdFNuYXBTdG9w
T2Zmc2V0SW5kZXguaGFzVmFsdWUoKSkKKyAgICBpZiAob3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rp
b25hbFNuYXBwaW5nLmhhc192YWx1ZSgpKSB7CisgICAgICAgIGlmIChhdXRvIGZpcnN0U25hcFN0
b3BPZmZzZXRJbmRleCA9IGZpbmRGaXJzdFNuYXBTdG9wT2Zmc2V0QmV0d2Vlbk9yaWdpbkFuZERl
c3RpbmF0aW9uKHNuYXBPZmZzZXRzLCAqb3JpZ2luYWxPZmZzZXRGb3JEaXJlY3Rpb25hbFNuYXBw
aW5nLCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoc25hcE9mZnNldHNbKmZpcnN0U25hcFN0b3BPZmZzZXRJbmRleF0ub2Zmc2V0LCAq
Zmlyc3RTbmFwU3RvcE9mZnNldEluZGV4KTsKICAgICB9CiAKQEAgLTM1NiwxMyArMzU1LDEzIEBA
IEZsb2F0U2Nyb2xsU25hcE9mZnNldHNJbmZvIExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5mbzo6
Y29udmVydFVuaXRzKGZsb2F0IGRldmljCiB9CiAKIHRlbXBsYXRlIDw+IHRlbXBsYXRlIDw+Ci1z
dGQ6OnBhaXI8TGF5b3V0VW5pdCwgdW5zaWduZWQ+IExheW91dFNjcm9sbFNuYXBPZmZzZXRzSW5m
bzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0IExheW91dFNp
emUmIHZpZXdwb3J0U2l6ZSwgTGF5b3V0VW5pdCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgZmxv
YXQgdmVsb2NpdHksIE9wdGlvbmFsPExheW91dFVuaXQ+IG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJl
Y3Rpb25hbFNuYXBwaW5nKSBjb25zdAorc3RkOjpwYWlyPExheW91dFVuaXQsIHVuc2lnbmVkPiBM
YXlvdXRTY3JvbGxTbmFwT2Zmc2V0c0luZm86OmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50
QXhpcyBheGlzLCBjb25zdCBMYXlvdXRTaXplJiB2aWV3cG9ydFNpemUsIExheW91dFVuaXQgc2Ny
b2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlvbmFsPExheW91
dFVuaXQ+IG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdAogewog
ICAgIHJldHVybiBjbG9zZXN0U25hcE9mZnNldFdpdGhJbmZvQW5kQXhpcygqdGhpcywgYXhpcywg
dmlld3BvcnRTaXplLCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwgdmVsb2NpdHksIG9yaWdpbmFs
UG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBwaW5nKTsKIH0KIAogdGVtcGxhdGUgPD4gdGVtcGxh
dGU8Pgotc3RkOjpwYWlyPGZsb2F0LCB1bnNpZ25lZD4gRmxvYXRTY3JvbGxTbmFwT2Zmc2V0c0lu
Zm86OmNsb3Nlc3RTbmFwT2Zmc2V0KFNjcm9sbEV2ZW50QXhpcyBheGlzLCBjb25zdCBGbG9hdFNp
emUmIHZpZXdwb3J0U2l6ZSwgZmxvYXQgc2Nyb2xsRGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZl
bG9jaXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxQb3NpdGlvbkZvckRpcmVjdGlvbmFsU25h
cHBpbmcpIGNvbnN0CitzdGQ6OnBhaXI8ZmxvYXQsIHVuc2lnbmVkPiBGbG9hdFNjcm9sbFNuYXBP
ZmZzZXRzSW5mbzo6Y2xvc2VzdFNuYXBPZmZzZXQoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIGNvbnN0
IEZsb2F0U2l6ZSYgdmlld3BvcnRTaXplLCBmbG9hdCBzY3JvbGxEZXN0aW5hdGlvbk9mZnNldCwg
ZmxvYXQgdmVsb2NpdHksIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IG9yaWdpbmFsUG9zaXRpb25Gb3JE
aXJlY3Rpb25hbFNuYXBwaW5nKSBjb25zdAogewogICAgIHJldHVybiBjbG9zZXN0U25hcE9mZnNl
dFdpdGhJbmZvQW5kQXhpcygqdGhpcywgYXhpcywgdmlld3BvcnRTaXplLCBzY3JvbGxEZXN0aW5h
dGlvbk9mZnNldCwgdmVsb2NpdHksIG9yaWdpbmFsUG9zaXRpb25Gb3JEaXJlY3Rpb25hbFNuYXBw
aW5nKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAK
aW5kZXggYjlkNmJiZDU0ODY0YTJmNTc3NGRjZWJmY2U1ZTA5ZTZmZjFhZTQyZi4uNzllYTU3Mjhk
NWMxNzI4ODhhYTA4ZDYzZDlkOTg5MjAxYWI2OTgzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQ29udHJvbGxlci5jcHAKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIFNjcm9s
bENvbnRyb2xsZXI6OnNldE5lYXJlc3RTY3JvbGxTbmFwSW5kZXhGb3JBeGlzQW5kT2Zmc2V0KFNj
cm9sbEV2ZW50QXhpcwogICAgIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoYXhpcywg
YWN0aXZlSW5kZXgpOwogfQogCi1mbG9hdCBTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxE
ZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXMgYXhpcywgZmxvYXQgZGVzdGluYXRpb25PZmZzZXQs
IGZsb2F0IHZlbG9jaXR5LCBPcHRpb25hbDxmbG9hdD4gb3JpZ2luYWxPZmZzZXQpCitmbG9hdCBT
Y3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVudEF4aXMg
YXhpcywgZmxvYXQgZGVzdGluYXRpb25PZmZzZXQsIGZsb2F0IHZlbG9jaXR5LCBzdGQ6Om9wdGlv
bmFsPGZsb2F0PiBvcmlnaW5hbE9mZnNldCkKIHsKICAgICBpZiAoIXVzZXNTY3JvbGxTbmFwKCkp
CiAgICAgICAgIHJldHVybiBkZXN0aW5hdGlvbk9mZnNldDsKQEAgLTE3OCw4ICsxNzgsOCBAQCBm
bG9hdCBTY3JvbGxDb250cm9sbGVyOjphZGp1c3RTY3JvbGxEZXN0aW5hdGlvbihTY3JvbGxFdmVu
dEF4aXMgYXhpcywgZmxvYXQgZGVzdAogICAgIGlmICghc25hcE9mZnNldHMuc2l6ZSgpKQogICAg
ICAgICByZXR1cm4gZGVzdGluYXRpb25PZmZzZXQ7CiAKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0
PiBvcmlnaW5hbE9mZnNldEluTGF5b3V0VW5pdHM7Ci0gICAgaWYgKG9yaWdpbmFsT2Zmc2V0Lmhh
c1ZhbHVlKCkpCisgICAgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBvcmlnaW5hbE9mZnNldElu
TGF5b3V0VW5pdHM7CisgICAgaWYgKG9yaWdpbmFsT2Zmc2V0KQogICAgICAgICBvcmlnaW5hbE9m
ZnNldEluTGF5b3V0VW5pdHMgPSBMYXlvdXRVbml0KCpvcmlnaW5hbE9mZnNldCAvIG1fY2xpZW50
LnBhZ2VTY2FsZUZhY3RvcigpKTsKICAgICBMYXlvdXRTaXplIHZpZXdwb3J0U2l6ZShtX2NsaWVu
dC52aWV3cG9ydFNpemUoKS53aWR0aCgpLCBtX2NsaWVudC52aWV3cG9ydFNpemUoKS5oZWlnaHQo
KSk7CiAgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBzbmFwU3RhdGUuc25hcE9mZnNldEluZm8oKS5j
bG9zZXN0U25hcE9mZnNldChheGlzLCB2aWV3cG9ydFNpemUsIExheW91dFVuaXQoZGVzdGluYXRp
b25PZmZzZXQgLyBtX2NsaWVudC5wYWdlU2NhbGVGYWN0b3IoKSksIHZlbG9jaXR5LCBvcmlnaW5h
bE9mZnNldEluTGF5b3V0VW5pdHMpLmZpcnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvU3lzdGVtQmF0dGVyeS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1N5c3RlbUJhdHRlcnkubW0KaW5kZXggN2Y4OTFiNDE0ZmFkMzk4NzQwNWM5NDc3MzVk
YzAzZTgxYjk0ZDY4ZC4uZDQ1MjlhMjBmNTM5Njc1MjE5OWMwZWNkYWY4Njg1OGRhZDcxNTJiZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU3lzdGVtQmF0dGVyeS5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TeXN0ZW1CYXR0ZXJ5Lm1tCkBA
IC00NCw3ICs0NCw3IEBAIGJvb2wgc3lzdGVtSGFzQmF0dGVyeSgpCiAgICAgaWYgKGF1dG8gb3Zl
cnJpZGVGb3JUZXN0aW5nID0gU3lzdGVtQmF0dGVyeVN0YXR1c1Rlc3RpbmdPdmVycmlkZXM6OnNp
bmdsZXRvbigpLmhhc0JhdHRlcnkoKSkKICAgICAgICAgcmV0dXJuICpvdmVycmlkZUZvclRlc3Rp
bmc7CiAKLSAgICBpZiAoIWhhc0JhdHRlcnkuaGFzVmFsdWUoKSkgeworICAgIGlmICghaGFzQmF0
dGVyeS5oYXNfdmFsdWUoKSkgewogICAgICAgICBoYXNCYXR0ZXJ5ID0gW10gewogI2lmIFBMQVRG
T1JNKElPUykgfHwgUExBVEZPUk0oV0FUQ0hPUykKICAgICAgICAgICAgIC8vIERldmljZXMgcnVu
bmluZyBpT1MgLyBXYXRjaE9TIGFsd2F5cyBoYXZlIGEgYmF0dGVyeS4KQEAgLTg3LDcgKzg3LDcg
QEAgYm9vbCBzeXN0ZW1IYXNBQygpCiAgICAgaWYgKGF1dG8gb3ZlcnJpZGVGb3JUZXN0aW5nID0g
U3lzdGVtQmF0dGVyeVN0YXR1c1Rlc3RpbmdPdmVycmlkZXM6OnNpbmdsZXRvbigpLmhhc0FDKCkp
CiAgICAgICAgIHJldHVybiAqb3ZlcnJpZGVGb3JUZXN0aW5nOwogCi0gICAgaWYgKCFoYXNBQy5o
YXNWYWx1ZSgpKSB7CisgICAgaWYgKCFoYXNBQy5oYXNfdmFsdWUoKSkgewogICAgICAgICBoYXNB
QyA9IFtdIHsKICNpZiBQTEFURk9STShBUFBMRVRWKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAppbmRleCAxMzll
NzM1NWE4NTI0MjJkOGI4MDg2MjllMmNiNmM3ZDg4ZGVjNGYwLi5mMjRlZGI2ZGVlNWFjOTk0YTE1
N2FhNjY1MTBjM2IyNWUzZmZiMjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50LmgKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgogICAgICAgICBDb2xvciBj
b2xvcjsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxDb2xvclN0b3A+IGRlY29kZShEZWNvZGVyJik7CisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPENvbG9yU3RvcD4gZGVjb2Rl
KERlY29kZXImKTsKICAgICB9OwogCiAgICAgdXNpbmcgQ29sb3JTdG9wVmVjdG9yID0gVmVjdG9y
PENvbG9yU3RvcCwgMj47CkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgRmxvYXRQ
b2ludCBwb2ludDE7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8TGluZWFyRGF0YT4gZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGluZWFyRGF0
YT4gZGVjb2RlKERlY29kZXImKTsKICAgICB9OwogCiAgICAgc3RydWN0IFJhZGlhbERhdGEgewpA
QCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgIGZsb2F0IGFzcGVjdFJhdGlvOyAvLyBG
b3IgZWxsaXB0aWNhbCBncmFkaWVudCwgd2lkdGggLyBoZWlnaHQuCiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmFkaWFsRGF0YT4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8UmFkaWFsRGF0YT4gZGVjb2RlKERlY29kZXImKTsKICAgICB9Owog
CiAgICAgc3RydWN0IENvbmljRGF0YSB7CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgZmxvYXQgYW5nbGVSYWRpYW5zOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENvbmljRGF0YT4gZGVjb2RlKERlY29kZXImKTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8
Q29uaWNEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAKICAgICB1c2luZyBEYXRhID0g
VmFyaWFudDxMaW5lYXJEYXRhLCBSYWRpYWxEYXRhLCBDb25pY0RhdGE+OwpAQCAtMTM1LDcgKzEz
NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8R3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJlZjxHcmFk
aWVudD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgR3JhZGll
bnQoRGF0YSYmKTsKQEAgLTE2OCwxNCArMTY4LDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29k
ZXI+IHZvaWQgR3JhZGllbnQ6OkNvbG9yU3RvcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
CiAgICAgZW5jb2RlciA8PCBjb2xvcjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4g
T3B0aW9uYWw8R3JhZGllbnQ6OkNvbG9yU3RvcD4gR3JhZGllbnQ6OkNvbG9yU3RvcDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGQ6Om9wdGlv
bmFsPEdyYWRpZW50OjpDb2xvclN0b3A+IEdyYWRpZW50OjpDb2xvclN0b3A6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPGZsb2F0PiBvZmZzZXQ7CisgICAgc3RkOjpv
cHRpb25hbDxmbG9hdD4gb2Zmc2V0OwogICAgIGRlY29kZXIgPj4gb2Zmc2V0OwogICAgIGlmICgh
b2Zmc2V0KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgT3B0aW9uYWw8Q29s
b3I+IGNvbG9yOworICAgIHN0ZDo6b3B0aW9uYWw8Q29sb3I+IGNvbG9yOwogICAgIGRlY29kZXIg
Pj4gY29sb3I7CiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
QEAgLTE4OSwxNCArMTg5LDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgR3Jh
ZGllbnQ6OkxpbmVhckRhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjCiAgICAgZW5jb2Rl
ciA8PCBwb2ludDE7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IE9wdGlvbmFsPEdy
YWRpZW50OjpMaW5lYXJEYXRhPiBHcmFkaWVudDo6TGluZWFyRGF0YTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPEdyYWRp
ZW50OjpMaW5lYXJEYXRhPiBHcmFkaWVudDo6TGluZWFyRGF0YTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiB7Ci0gICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQwOworICAgIHN0ZDo6b3B0
aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQwOwogICAgIGRlY29kZXIgPj4gcG9pbnQwOwogICAgIGlm
ICghcG9pbnQwKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgT3B0aW9uYWw8
RmxvYXRQb2ludD4gcG9pbnQxOworICAgIHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQx
OwogICAgIGRlY29kZXIgPj4gcG9pbnQxOwogICAgIGlmICghcG9pbnQxKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwpAQCAtMjEzLDI5ICsyMTMsMjkgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
RW5jb2Rlcj4gdm9pZCBHcmFkaWVudDo6UmFkaWFsRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGMKICAgICBlbmNvZGVyIDw8IGFzcGVjdFJhdGlvOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPiBPcHRpb25hbDxHcmFkaWVudDo6UmFkaWFsRGF0YT4gR3JhZGllbnQ6OlJhZGlh
bERhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQordGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rl
cj4gc3RkOjpvcHRpb25hbDxHcmFkaWVudDo6UmFkaWFsRGF0YT4gR3JhZGllbnQ6OlJhZGlhbERh
dGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+
IHBvaW50MDsKKyAgICBzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MDsKICAgICBkZWNv
ZGVyID4+IHBvaW50MDsKICAgICBpZiAoIXBvaW50MCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MTsKKyAgICBzdGQ6Om9wdGlv
bmFsPEZsb2F0UG9pbnQ+IHBvaW50MTsKICAgICBkZWNvZGVyID4+IHBvaW50MTsKICAgICBpZiAo
IXBvaW50MSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPGZs
b2F0PiBzdGFydFJhZGl1czsKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBzdGFydFJhZGl1czsK
ICAgICBkZWNvZGVyID4+IHN0YXJ0UmFkaXVzOwogICAgIGlmICghc3RhcnRSYWRpdXMpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBPcHRpb25hbDxmbG9hdD4gZW5kUmFkaXVz
OworICAgIHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IGVuZFJhZGl1czsKICAgICBkZWNvZGVyID4+IGVu
ZFJhZGl1czsKICAgICBpZiAoIWVuZFJhZGl1cykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIE9wdGlvbmFsPGZsb2F0PiBhc3BlY3RSYXRpbzsKKyAgICBzdGQ6Om9wdGlvbmFs
PGZsb2F0PiBhc3BlY3RSYXRpbzsKICAgICBkZWNvZGVyID4+IGFzcGVjdFJhdGlvOwogICAgIGlm
ICghYXNwZWN0UmF0aW8pCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC0yNDksMTQg
KzI0OSwxNCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50OjpDb25p
Y0RhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjbwogICAgIGVuY29kZXIgPDwgYW5nbGVS
YWRpYW5zOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBPcHRpb25hbDxHcmFkaWVu
dDo6Q29uaWNEYXRhPiBHcmFkaWVudDo6Q29uaWNEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK3RlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8R3JhZGllbnQ6OkNv
bmljRGF0YT4gR3JhZGllbnQ6OkNvbmljRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7
Ci0gICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQwOworICAgIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRQb2ludD4gcG9pbnQwOwogICAgIGRlY29kZXIgPj4gcG9pbnQwOwogICAgIGlmICghcG9pbnQw
KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IGFu
Z2xlUmFkaWFuczsKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0PiBhbmdsZVJhZGlhbnM7CiAgICAg
ZGVjb2RlciA+PiBhbmdsZVJhZGlhbnM7CiAgICAgaWYgKCFhbmdsZVJhZGlhbnMpCiAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC0yNzIsMjEgKzI3MiwyMSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKICAgICBlbmNvZGVyIDw8IG1fc3ByZWFkTWV0aG9kOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBEZWNvZGVyPiBPcHRpb25hbDxSZWY8R3JhZGllbnQ+PiBHcmFkaWVudDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPFJl
ZjxHcmFkaWVudD4+IEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBP
cHRpb25hbDxEYXRhPiBkYXRhOworICAgIHN0ZDo6b3B0aW9uYWw8RGF0YT4gZGF0YTsKICAgICBk
ZWNvZGVyID4+IGRhdGE7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKFdURk1vdmUoKmRhdGEp
KTsKIAotICAgIE9wdGlvbmFsPENvbG9yU3RvcFZlY3Rvcj4gc3RvcHM7CisgICAgc3RkOjpvcHRp
b25hbDxDb2xvclN0b3BWZWN0b3I+IHN0b3BzOwogICAgIGRlY29kZXIgPj4gc3RvcHM7CiAgICAg
aWYgKCFzdG9wcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBPcHRpb25hbDxi
b29sPiBzdG9wc1NvcnRlZDsKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHN0b3BzU29ydGVkOwog
ICAgIGRlY29kZXIgPj4gc3RvcHNTb3J0ZWQ7Ci0gICAgaWYgKCFzdG9wc1NvcnRlZC5oYXNWYWx1
ZSgpKQorICAgIGlmICghc3RvcHNTb3J0ZWQuaGFzX3ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAgICAgaWYgKCpzdG9wc1NvcnRlZCkKICAgICAgICAgZ3JhZGllbnQtPnNl
dFNvcnRlZENvbG9yU3RvcHMoV1RGTW92ZSgqc3RvcHMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDkxYTEzZjMzZDY4MzE0NTZiYjli
MTE4NGI1ZGQxYzQxOTdhMDljMWUuLjhhY2FiYzdlMzY4OTA1ZGM3ZDI3YmY4YTFmMmM4MjVlNjgy
NWZjODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuaApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgLy8gQXN5bmNocm9ub3VzIGltYWdl
IGRlY29kaW5nCiAgICAgYm9vbCBjYW5Vc2VBc3luY0RlY29kaW5nKCk7CiAgICAgdm9pZCBzdGFy
dEFzeW5jRGVjb2RpbmdRdWV1ZSgpOwotICAgIHZvaWQgcmVxdWVzdEZyYW1lQXN5bmNEZWNvZGlu
Z0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsLCBjb25zdCBPcHRpb25hbDxJbnRTaXpl
PiYgPSB7IH0pOworICAgIHZvaWQgcmVxdWVzdEZyYW1lQXN5bmNEZWNvZGluZ0F0SW5kZXgoc2l6
ZV90LCBTdWJzYW1wbGluZ0xldmVsLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEludFNpemU+JiA9IHsg
fSk7CiAgICAgdm9pZCBzdG9wQXN5bmNEZWNvZGluZ1F1ZXVlKCk7CiAgICAgYm9vbCBoYXNBc3lu
Y0RlY29kaW5nUXVldWUoKSBjb25zdCB7IHJldHVybiBtX2RlY29kaW5nUXVldWU7IH0KICAgICBi
b29sIGlzQXN5bmNEZWNvZGluZ1F1ZXVlSWRsZSgpIGNvbnN0OwpAQCAtOTUsOSArOTUsOSBAQCBw
dWJsaWM6CiAgICAgU3RyaW5nIHV0aSgpOwogICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigp
OwogICAgIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKTsKLSAgICBPcHRpb25hbDxJ
bnRQb2ludD4gaG90U3BvdCgpOwotICAgIE9wdGlvbmFsPEludFNpemU+IGRlbnNpdHlDb3JyZWN0
ZWRTaXplKEltYWdlT3JpZW50YXRpb24gPSBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UpOwot
ICAgIGJvb2wgaGFzRGVuc2l0eUNvcnJlY3RlZFNpemUoKSB7IHJldHVybiBkZW5zaXR5Q29ycmVj
dGVkU2l6ZSgpLmhhc1ZhbHVlKCk7IH0KKyAgICBzdGQ6Om9wdGlvbmFsPEludFBvaW50PiBob3RT
cG90KCk7CisgICAgc3RkOjpvcHRpb25hbDxJbnRTaXplPiBkZW5zaXR5Q29ycmVjdGVkU2l6ZShJ
bWFnZU9yaWVudGF0aW9uID0gSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlKTsKKyAgICBib29s
IGhhc0RlbnNpdHlDb3JyZWN0ZWRTaXplKCkgeyByZXR1cm4gZGVuc2l0eUNvcnJlY3RlZFNpemUo
KS5oYXNfdmFsdWUoKTsgfQogCiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpOwog
CkBAIC0xMTMsOCArMTEzLDggQEAgcHVibGljOgogICAgIERlY29kaW5nU3RhdHVzIGZyYW1lRGVj
b2RpbmdTdGF0dXNBdEluZGV4KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRl
eChzaXplX3QpOwogICAgIGJvb2wgZnJhbWVIYXNJbWFnZUF0SW5kZXgoc2l6ZV90KTsKLSAgICBi
b29sIGZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoc2l6ZV90LCBjb25zdCBPcHRp
b25hbDxTdWJzYW1wbGluZ0xldmVsPiYpOwotICAgIGJvb2wgZnJhbWVIYXNEZWNvZGVkTmF0aXZl
SW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KHNpemVfdCwgY29uc3QgT3B0aW9uYWw8
U3Vic2FtcGxpbmdMZXZlbD4mLCBjb25zdCBEZWNvZGluZ09wdGlvbnMmKTsKKyAgICBib29sIGZy
YW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgoc2l6ZV90LCBjb25zdCBzdGQ6Om9wdGlv
bmFsPFN1YnNhbXBsaW5nTGV2ZWw+Jik7CisgICAgYm9vbCBmcmFtZUhhc0RlY29kZWROYXRpdmVJ
bWFnZUNvbXBhdGlibGVXaXRoT3B0aW9uc0F0SW5kZXgoc2l6ZV90LCBjb25zdCBzdGQ6Om9wdGlv
bmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiwgY29uc3QgRGVjb2RpbmdPcHRpb25zJik7CiAgICAgU3Vi
c2FtcGxpbmdMZXZlbCBmcmFtZVN1YnNhbXBsaW5nTGV2ZWxBdEluZGV4KHNpemVfdCk7CiAKICAg
ICAvLyBJbWFnZUZyYW1lIG1ldGFkYXRhIHdoaWNoIGZvcmNlcyBjYWNoaW5nIG9yIHJlLWNhY2hp
bmcgdGhlIEltYWdlRnJhbWUuCkBAIC0xNTMsNyArMTUzLDcgQEAgcHJpdmF0ZToKICAgICBUIG1l
dGFkYXRhQ2FjaGVJZk5lZWRlZChUJiBjYWNoZWRWYWx1ZSwgY29uc3QgVCYgZGVmYXVsdFZhbHVl
LCBNZXRhZGF0YVR5cGUsIFQgKEltYWdlRGVjb2Rlcjo6KmZ1bmN0b3IpKCkgY29uc3QpOwogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGZpcnN0RnJhbWVNZXRhZGF0YUNhY2hlSWZO
ZWVkZWQoVCYgY2FjaGVkVmFsdWUsIE1ldGFkYXRhVHlwZSwgVCAoSW1hZ2VGcmFtZTo6KmZ1bmN0
b3IpKCkgY29uc3QsIEltYWdlRnJhbWU6OkNhY2hpbmcsIGNvbnN0IE9wdGlvbmFsPFN1YnNhbXBs
aW5nTGV2ZWw+JiA9IHsgfSk7CisgICAgVCBmaXJzdEZyYW1lTWV0YWRhdGFDYWNoZUlmTmVlZGVk
KFQmIGNhY2hlZFZhbHVlLCBNZXRhZGF0YVR5cGUsIFQgKEltYWdlRnJhbWU6OipmdW5jdG9yKSgp
IGNvbnN0LCBJbWFnZUZyYW1lOjpDYWNoaW5nLCBjb25zdCBzdGQ6Om9wdGlvbmFsPFN1YnNhbXBs
aW5nTGV2ZWw+JiA9IHsgfSk7CiAKICAgICBib29sIGVuc3VyZURlY29kZXJBdmFpbGFibGUoU2hh
cmVkQnVmZmVyKiBkYXRhKTsKICAgICBib29sIGlzRGVjb2RlckF2YWlsYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGVjb2RlcjsgfQpAQCAtMTc2LDcgKzE3Niw3IEBAIHByaXZhdGU6CiAgICAgU3lu
Y2hyb25pemVkRml4ZWRRdWV1ZTxJbWFnZUZyYW1lUmVxdWVzdCwgQnVmZmVyU2l6ZT4mIGZyYW1l
UmVxdWVzdFF1ZXVlKCk7CiAKICAgICBjb25zdCBJbWFnZUZyYW1lJiBmcmFtZUF0SW5kZXgoc2l6
ZV90IGluZGV4KSB7IHJldHVybiBpbmRleCA8IG1fZnJhbWVzLnNpemUoKSA/IG1fZnJhbWVzW2lu
ZGV4XSA6IEltYWdlRnJhbWU6OmRlZmF1bHRGcmFtZSgpOyB9Ci0gICAgY29uc3QgSW1hZ2VGcmFt
ZSYgZnJhbWVBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIEltYWdlRnJhbWU6OkNhY2hpbmcs
IGNvbnN0IE9wdGlvbmFsPFN1YnNhbXBsaW5nTGV2ZWw+JiA9IHsgfSk7CisgICAgY29uc3QgSW1h
Z2VGcmFtZSYgZnJhbWVBdEluZGV4Q2FjaGVJZk5lZWRlZChzaXplX3QsIEltYWdlRnJhbWU6OkNh
Y2hpbmcsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8U3Vic2FtcGxpbmdMZXZlbD4mID0geyB9KTsKIAog
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJik7CiAKQEAgLTIxNCwxMSArMjE0LDExIEBAIHByaXZh
dGU6CiAgICAgU3RyaW5nIG1fdXRpOwogICAgIFN0cmluZyBtX2ZpbGVuYW1lRXh0ZW5zaW9uOwog
ICAgIFN0cmluZyBtX2FjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbjsKLSAgICBPcHRpb25hbDxJbnRQ
b2ludD4gbV9ob3RTcG90OworICAgIHN0ZDo6b3B0aW9uYWw8SW50UG9pbnQ+IG1faG90U3BvdDsK
IAogICAgIC8vIEltYWdlIG1ldGFkYXRhIHdoaWNoIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZmly
c3QgSW1hZ2VGcmFtZS4KICAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBPcHRpb25hbDxJbnRTaXpl
PiBtX2RlbnNpdHlDb3JyZWN0ZWRTaXplOworICAgIHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4gbV9k
ZW5zaXR5Q29ycmVjdGVkU2l6ZTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247
CiAgICAgQ29sb3IgbV9zaW5nbGVQaXhlbFNvbGlkQ29sb3I7CiAgICAgU3Vic2FtcGxpbmdMZXZl
bCBtX21heGltdW1TdWJzYW1wbGluZ0xldmVsIHsgU3Vic2FtcGxpbmdMZXZlbDo6RGVmYXVsdCB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3Bw
CmluZGV4IGRmYWNjNjI0YjE4NzE4OGYzNTFkN2NlYTk5NDM1NjMxODQ0YjVlMjcuLmY5ODIyZjgx
MWRjZjU3ZjhhY2Q4MTkzOWZjYzZkNzNiZTM0YzkxOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTExNjUsOSArMTE2NSw4IEBA
IGJvb2wgTWVkaWFQbGF5ZXI6OmRpZFBhc3NDT1JTQWNjZXNzQ2hlY2soKSBjb25zdAogCiBib29s
IE1lZGlhUGxheWVyOjp3b3VsZFRhaW50T3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcmln
aW4pIGNvbnN0CiB7Ci0gICAgYXV0byB3b3VsZFRhaW50ID0gbV9wcml2YXRlLT53b3VsZFRhaW50
T3JpZ2luKG9yaWdpbik7Ci0gICAgaWYgKHdvdWxkVGFpbnQuaGFzVmFsdWUoKSkKLSAgICAgICAg
cmV0dXJuIHdvdWxkVGFpbnQudmFsdWUoKTsKKyAgICBpZiAoYXV0byB3b3VsZFRhaW50ID0gbV9w
cml2YXRlLT53b3VsZFRhaW50T3JpZ2luKG9yaWdpbikpCisgICAgICAgIHJldHVybiAqd291bGRU
YWludDsKIAogICAgIGlmIChtX3VybC5wcm90b2NvbElzRGF0YSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAppbmRleCBiMTU4YzVm
ZTBmNDFiMDc4YjA4ZDk1OTcwMjBiZTVlZjZmMDg1ODM4Li5jMzk3YWMwYTQ2MWJiNGRmNTlmZmM4
ZGFlM2RlZTQ1Yzg4MWU2YWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5j
cHAKQEAgLTE4Miw3ICsxODIsNyBAQCBzdGF0aWMgYm9vbCBzZXRHTENvbnRleHQoR3N0RWxlbWVu
dCogZWxlbWVudFNpbmssIGNvbnN0IGNoYXIqIGNvbnRleHRUeXBlKQogICAgIEdSZWZQdHI8R3N0
Q29udGV4dD4gb2xkQ29udGV4dCA9IGdzdF9lbGVtZW50X2dldF9jb250ZXh0KGVsZW1lbnRTaW5r
LCBjb250ZXh0VHlwZSk7CiAgICAgaWYgKCFvbGRDb250ZXh0KSB7CiAgICAgICAgIGF1dG8gbmV3
Q29udGV4dCA9IHJlcXVlc3RHTENvbnRleHQoY29udGV4dFR5cGUpOwotICAgICAgICBpZiAoIW5l
d0NvbnRleHQuaGFzVmFsdWUoKSkKKyAgICAgICAgaWYgKCFuZXdDb250ZXh0KQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChlbGVtZW50
U2luaywgbmV3Q29udGV4dC0+Z2V0KCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJSZWdpc3RyeVNjYW5uZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
clJlZ2lzdHJ5U2Nhbm5lci5jcHAKaW5kZXggYTNhMzkyZjgyYzliNjAwYmFiNjNkNTE4NmVkZTdl
NjBkY2UwNDBmZi4uYTdmMjM0OGE1ZmM2ZTA5M2JiMzQwNTA4Y2Y3YzczZGIzZTg2NDk1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJl
YW1lclJlZ2lzdHJ5U2Nhbm5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lci5jcHAKQEAgLTE0Nyw3ICsx
NDcsNyBAQCBHU3RyZWFtZXJSZWdpc3RyeVNjYW5uZXI6OlJlZ2lzdHJ5TG9va3VwUmVzdWx0IEdT
dHJlYW1lclJlZ2lzdHJ5U2Nhbm5lcjo6RWxlbWVudAogICAgIGJvb2wgaXNTdXBwb3J0ZWQgPSBj
YW5kaWRhdGVzOwogICAgIGJvb2wgaXNVc2luZ0hhcmR3YXJlID0gZmFsc2U7CiAKLSAgICBpZiAo
ZGlzYWxsb3dlZExpc3QuaGFzVmFsdWUoKSAmJiAhZGlzYWxsb3dlZExpc3QtPmlzRW1wdHkoKSkg
eworICAgIGlmIChkaXNhbGxvd2VkTGlzdCAmJiAhZGlzYWxsb3dlZExpc3QtPmlzRW1wdHkoKSkg
ewogICAgICAgICBib29sIGhhc1ZhbGlkQ2FuZGlkYXRlID0gZmFsc2U7CiAgICAgICAgIGZvciAo
R0xpc3QqIGZhY3RvcmllcyA9IGNhbmRpZGF0ZXM7IGZhY3RvcmllczsgZmFjdG9yaWVzID0gZ19s
aXN0X25leHQoZmFjdG9yaWVzKSkgewogICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBTdHJpbmc6
OmZyb21VVEY4KGdzdF9wbHVnaW5fZmVhdHVyZV9nZXRfbmFtZShHU1RfUExVR0lOX0ZFQVRVUkVf
Q0FTVChmYWN0b3JpZXMtPmRhdGEpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDJiYWVmMmE0ZWQyNDkxNzQzODYzODI4MmUxN2ZjMmQ4
YTI5YmExOTcuLjY4MDkxMzk1Y2RlMzNkYjE5MTA3ZTQ3NWUwODI2MmExMmQyZjFkZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xMzQz
LDcgKzEzNDMsNyBAQCBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5
YmFja1Bvc2l0aW9uKCkgY29uc3QKICAgICBpZiAobV9pc0VuZFJlYWNoZWQpCiAgICAgICAgIHJl
dHVybiBtX3BsYXliYWNrUmF0ZSA+IDAgPyBkdXJhdGlvbk1lZGlhVGltZSgpIDogTWVkaWFUaW1l
Ojp6ZXJvVGltZSgpOwogCi0gICAgaWYgKG1fY2FjaGVkUG9zaXRpb24uaGFzVmFsdWUoKSkgewor
ICAgIGlmIChtX2NhY2hlZFBvc2l0aW9uKSB7CiAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlw
ZWxpbmUoKSwgIlJldHVybmluZyBjYWNoZWQgcG9zaXRpb246ICVzIiwgbV9jYWNoZWRQb3NpdGlv
bi52YWx1ZSgpLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBtX2Nh
Y2hlZFBvc2l0aW9uLnZhbHVlKCk7CiAgICAgfQpAQCAtMjg3MSw3ICsyODcxLDcgQEAgYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBlcmZvcm1UYXNrQXRNZWRpYVRpbWUoRnVuY3Rp
b248dm9pZCgpPiYmIHRhc2sKIAogICAgIC8vIERpc3BhdGNoIHRoZSB0YXNrIGlmIHRoZSB0aW1l
IGlzIGFscmVhZHkgcmVhY2hlZC4gRGlzcGF0Y2hpbmcgaW5zdGVhZCBvZiBkaXJlY3RseSBydW5u
aW5nIHRoZQogICAgIC8vIHRhc2sgcHJldmVudHMgaW5maW5pdGUgcmVjdXJzaW9uIGluIGNhc2Ug
dGhlIHRhc2sgY2FsbHMgcGVyZm9ybVRhc2tBdE1lZGlhVGltZSgpIGludGVybmFsbHkuCi0gICAg
aWYgKHRhc2tUb1NjaGVkdWxlLmhhc1ZhbHVlKCkpCisgICAgaWYgKHRhc2tUb1NjaGVkdWxlKQog
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZSh0YXNrVG9TY2hlZHVsZS52
YWx1ZSgpKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxMjQsOCArMzEyNCw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2VyUmVwYWludChHc3RTYW1wbGUqIHNh
bXBsZSkKICAgICBpZiAoYnVmZmVyICYmIEdTVF9CVUZGRVJfUFRTX0lTX1ZBTElEKGJ1ZmZlcikp
IHsKICAgICAgICAgLy8gSGV1cmlzdGljIHRvIGF2b2lkIGFza2luZyBmb3IgcGxheWJhY2tQb3Np
dGlvbigpIGZyb20gYSBub24tbWFpbiB0aHJlYWQuCiAgICAgICAgIE1lZGlhVGltZSBjdXJyZW50
VGltZSA9IE1lZGlhVGltZShnc3Rfc2VnbWVudF90b19zdHJlYW1fdGltZShnc3Rfc2FtcGxlX2dl
dF9zZWdtZW50KHNhbXBsZSksIEdTVF9GT1JNQVRfVElNRSwgR1NUX0JVRkZFUl9QVFMoYnVmZmVy
KSksIEdTVF9TRUNPTkQpOwotICAgICAgICBhdXRvIHRhc2sgPSBob2xkTG9jayhtX1Rhc2tBdE1l
ZGlhVGltZVNjaGVkdWxlckRhdGFNdXRleCktPmNoZWNrVGFza0ZvclNjaGVkdWxpbmcoY3VycmVu
dFRpbWUpOwotICAgICAgICBpZiAodGFzay5oYXNWYWx1ZSgpKQorICAgICAgICBpZiAoYXV0byB0
YXNrID0gaG9sZExvY2sobV9UYXNrQXRNZWRpYVRpbWVTY2hlZHVsZXJEYXRhTXV0ZXgpLT5jaGVj
a1Rhc2tGb3JTY2hlZHVsaW5nKGN1cnJlbnRUaW1lKSkKICAgICAgICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChXVEZNb3ZlKHRhc2sudmFsdWUoKSkpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1Qcm94
eVRodW5kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L2VtZS9DRE1Qcm94eVRodW5kZXIuY3BwCmluZGV4IDdkODM1MmYxNzMyODk0NmM0YWE4MTFlZjkw
OTE5OGRjNDZiYjM2NmEuLjBlOTFkZjFkMmU2ZTY3NDIwYWI5OWZiYzliMjU3ZTBiZDVkY2NjZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9l
bWUvQ0RNUHJveHlUaHVuZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvZW1lL0NETVByb3h5VGh1bmRlci5jcHAKQEAgLTU1LDcgKzU1LDcgQEAg
Qm94UHRyPE9wZW5DRE1TZXNzaW9uPiBDRE1Qcm94eVRodW5kZXI6OmdldERlY3J5cHRpb25TZXNz
aW9uKERlY3J5cHRpb25Db250ZXh0JgogICAgIGF1dG8ga2V5SUQgPSBtYXBwZWRLZXlJRC5jcmVh
dGVWZWN0b3IoKTsKIAogICAgIGF1dG8ga2V5SGFuZGxlID0gZ2V0T3JXYWl0Rm9yS2V5SGFuZGxl
KGtleUlELCBXVEZNb3ZlKGluLmNkbVByb3h5RGVjcnlwdGlvbkNsaWVudCkpOwotICAgIGlmICgh
a2V5SGFuZGxlLmhhc1ZhbHVlKCkgfHwgIWtleUhhbmRsZS52YWx1ZSgpLT5pc1N0YXR1c0N1cnJl
bnRseVZhbGlkKCkpCisgICAgaWYgKCFrZXlIYW5kbGUuaGFzX3ZhbHVlKCkgfHwgIWtleUhhbmRs
ZS52YWx1ZSgpLT5pc1N0YXR1c0N1cnJlbnRseVZhbGlkKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgS2V5SGFuZGxlVmFsdWVWYXJpYW50IGtleURhdGEgPSBrZXlIYW5kbGUudmFs
dWUoKS0+dmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvQ0RNVGh1bmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVRodW5kZXIuY3BwCmluZGV4IDg1ZjdjZjRkNzg2
NGFmODNkMjY1N2Y1YjcyNTY1MjFmNTY3NGM2ZmQuLjg3MGUwY2QxNzYwMDY3ZDliY2UyNWZiZjcy
YTVhYjlhNjFiNDZjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9lbWUvQ0RNVGh1bmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1UaHVuZGVyLmNwcApAQCAtMjUwLDcgKzI1
MCw3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IENETVByaXZhdGVUaHVuZGVyOjpzYW5pdGl6ZVJl
c3BvbnNlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgcmVzCiAgICAgcmV0dXJuIHJlc3BvbnNlLmNvcHko
KTsKIH0KIAotT3B0aW9uYWw8U3RyaW5nPiBDRE1Qcml2YXRlVGh1bmRlcjo6c2FuaXRpemVTZXNz
aW9uSWQoY29uc3QgU3RyaW5nJiBzZXNzaW9uSWQpIGNvbnN0CitzdGQ6Om9wdGlvbmFsPFN0cmlu
Zz4gQ0RNUHJpdmF0ZVRodW5kZXI6OnNhbml0aXplU2Vzc2lvbklkKGNvbnN0IFN0cmluZyYgc2Vz
c2lvbklkKSBjb25zdAogewogICAgIHJldHVybiBzZXNzaW9uSWQ7CiB9CkBAIC0zNjQsNyArMzY0
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGF5bG9hZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGJvb2w+KG1fcGF5bG9hZCk7IH0KICAgICBjb25zdCBSZWY8U2hhcmVkQnVmZmVyPiYg
cGF5bG9hZCgpIGNvbnN0JiB7IEFTU0VSVChtX3BheWxvYWQpOyByZXR1cm4gbV9wYXlsb2FkLnZh
bHVlKCk7IH0KICAgICBSZWY8U2hhcmVkQnVmZmVyPiYgcGF5bG9hZCgpICYgeyBBU1NFUlQobV9w
YXlsb2FkKTsgcmV0dXJuIG1fcGF5bG9hZC52YWx1ZSgpOyB9Ci0gICAgYm9vbCBoYXNUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlLmhhc1ZhbHVlKCk7IH0KKyAgICBib29sIGhhc1R5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUuaGFzX3ZhbHVlKCk7IH0KICAgICBXZWJDb3JlOjpNZWRpYUtl
eU1lc3NhZ2VUeXBlIHR5cGUoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUpOyByZXR1cm4gbV90eXBl
LnZhbHVlKCk7IH0KICAgICBXZWJDb3JlOjpNZWRpYUtleU1lc3NhZ2VUeXBlIHR5cGVPcihXZWJD
b3JlOjpNZWRpYUtleU1lc3NhZ2VUeXBlIGFsdGVybmF0ZSkgY29uc3QgeyByZXR1cm4gbV90eXBl
ID8gbV90eXBlLnZhbHVlKCkgOiBhbHRlcm5hdGU7IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CkBAIC0zNzIsOCArMzcyLDggQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIGJvb2wgbV9pc1ZhbGlkIHsgZmFsc2UgfTsKLSAgICBPcHRp
b25hbDxSZWY8U2hhcmVkQnVmZmVyPj4gbV9wYXlsb2FkOwotICAgIE9wdGlvbmFsPFdlYkNvcmU6
Ok1lZGlhS2V5TWVzc2FnZVR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZjxTaGFy
ZWRCdWZmZXI+PiBtX3BheWxvYWQ7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpNZWRpYUtl
eU1lc3NhZ2VUeXBlPiBtX3R5cGU7CiB9OwogCiB2b2lkIENETUluc3RhbmNlU2Vzc2lvblRodW5k
ZXI6OmNoYWxsZW5nZUdlbmVyYXRlZENhbGxiYWNrKFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYgYnVm
ZmVyKQpAQCAtNDY5LDggKzQ2OSw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uVGh1bmRlcjo6
a2V5c1VwZGF0ZURvbmVDYWxsYmFjaygpCiAgICAgR1NUX0RFQlVHKCJ1cGRhdGUgZG9uZSIpOwog
ICAgIGlmIChtX2RvZXNLZXlTdG9yZU5lZWRNZXJnaW5nKSB7CiAgICAgICAgIG1fZG9lc0tleVN0
b3JlTmVlZE1lcmdpbmcgPSBmYWxzZTsKLSAgICAgICAgYXV0byBpbnN0YW5jZSA9IGNkbUluc3Rh
bmNlVGh1bmRlcigpOwotICAgICAgICBpZiAoaW5zdGFuY2UpCisgICAgICAgIGlmIChhdXRvIGlu
c3RhbmNlID0gY2RtSW5zdGFuY2VUaHVuZGVyKCkpCiAgICAgICAgICAgICBpbnN0YW5jZS0+bWVy
Z2VLZXlzRnJvbShtX2tleVN0b3JlKTsKICAgICB9CiAKQEAgLTY3NCwxMiArNjczLDkgQEAgdm9p
ZCBDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyOjpzdG9yZVJlY29yZE9mS2V5VXNhZ2UoY29uc3Qg
U3RyaW5nJikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1PcHRpb25hbDxDRE1JbnN0YW5j
ZVRodW5kZXImPiBDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyOjpjZG1JbnN0YW5jZVRodW5kZXIo
KSBjb25zdAorQ0RNSW5zdGFuY2VUaHVuZGVyKiBDRE1JbnN0YW5jZVNlc3Npb25UaHVuZGVyOjpj
ZG1JbnN0YW5jZVRodW5kZXIoKSBjb25zdAogewotICAgIGF1dG8gaW5zdGFuY2UgPSBjZG1JbnN0
YW5jZVByb3h5KCk7Ci0gICAgaWYgKCFpbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VUaHVuZGVyJj4oKmluc3Rh
bmNlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0RNSW5zdGFuY2VUaHVuZGVyKj4oY2RtSW5z
dGFuY2VQcm94eSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZS9DRE1UaHVuZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVRo
dW5kZXIuaAppbmRleCA0Y2I5YzQ2ZTVkOGE0MDQyMWFmOWM5NjE3NmNmMjJhZjBmOTJmOGM0Li5k
ZjFiMmQ5OWE1M2Y4MWM4NTIwMDY4Yjc5OTdhYzQ4MmRmYWQzMDk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVRodW5kZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lL0NETVRo
dW5kZXIuaApAQCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdXBwb3J0c0luaXRE
YXRhKGNvbnN0IEF0b21TdHJpbmcmLCBjb25zdCBTaGFyZWRCdWZmZXImKSBjb25zdCBmaW5hbDsK
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzYW5pdGl6ZUluaXREYXRhKGNvbnN0IEF0b21TdHJp
bmcmIGluaXREYXRhVHlwZSwgY29uc3QgU2hhcmVkQnVmZmVyJiBpbml0RGF0YSkgY29uc3QgZmlu
YWw7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2FuaXRpemVSZXNwb25zZShjb25zdCBTaGFy
ZWRCdWZmZXImKSBjb25zdCBmaW5hbDsKLSAgICBPcHRpb25hbDxTdHJpbmc+IHNhbml0aXplU2Vz
c2lvbklkKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBzYW5pdGl6ZVNlc3Npb25JZChjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKIAogcHJp
dmF0ZToKICAgICBTdHJpbmcgbV9rZXlTeXN0ZW07CkBAIC0xNDIsNyArMTQyLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgY2xlYXJDbGllbnQoKSBmaW5hbCB7IG1fY2xpZW50LmNsZWFyKCk7IH0KIAog
cHJpdmF0ZToKLSAgICBPcHRpb25hbDxDRE1JbnN0YW5jZVRodW5kZXImPiBjZG1JbnN0YW5jZVRo
dW5kZXIoKSBjb25zdDsKKyAgICBDRE1JbnN0YW5jZVRodW5kZXIqIGNkbUluc3RhbmNlVGh1bmRl
cigpIGNvbnN0OwogCiAgICAgdXNpbmcgTm90aWZpY2F0aW9uID0gdm9pZCAoQ0RNSW5zdGFuY2VT
ZXNzaW9uVGh1bmRlcjo6KikoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJik7CiAgICAg
dXNpbmcgQ2hhbGxlbmdlR2VuZXJhdGVkQ2FsbGJhY2sgPSBGdW5jdGlvbjx2b2lkKCk+OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9B
cHBlbmRQaXBlbGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcAppbmRleCBkOTM0ZTA4M2ViMDhjMjg5MmFmZDNl
MGEyYzUzNGNiODY4OTMxNTAyLi44NjMxYjAxOTZjN2U5OTI3NzE5NGEwMGExN2I2ZTExYjBmNmQ1
ZThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcApAQCAtMzk0LDE1ICszOTQs
MTAgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2FwcyhHc3RDYXBz
KiBkZW11eGVyU3JjUGFkQ2FwcykKICAgICBjb25zdCBjaGFyKiBvcmlnaW5hbE1lZGlhVHlwZSA9
IGNhcHNNZWRpYVR5cGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSk7CiAgICAgYXV0byYgZ3N0
UmVnaXN0cnlTY2FubmVyID0gR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyTVNFOjpzaW5nbGV0b24o
KTsKICAgICBpZiAoIWdzdFJlZ2lzdHJ5U2Nhbm5lci5pc0NvZGVjU3VwcG9ydGVkKEdTdHJlYW1l
clJlZ2lzdHJ5U2Nhbm5lcjo6Q29uZmlndXJhdGlvbjo6RGVjb2RpbmcsIG9yaWdpbmFsTWVkaWFU
eXBlKSkgewotICAgICAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRT
aXplKCk7Ci0gICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNvdXJjZVN0cmVhbVR5cGVH
U3RyZWFtZXI6OkludmFsaWQ7CisgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6
OkZsb2F0U2l6ZSgpOworICAgICAgICBtX3N0cmVhbVR5cGUgPSBNZWRpYVNvdXJjZVN0cmVhbVR5
cGVHU3RyZWFtZXI6OkludmFsaWQ7CiAgICAgfSBlbHNlIGlmIChkb0NhcHNIYXZlVHlwZShtX2Rl
bXV4ZXJTcmNQYWRDYXBzLmdldCgpLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKLSAg
ICAgICAgT3B0aW9uYWw8RmxvYXRTaXplPiBzaXplID0gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNh
cHMobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSk7Ci0gICAgICAgIGlmIChzaXplLmhhc1ZhbHVl
KCkpCi0gICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBzaXplLnZhbHVlKCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0
U2l6ZSgpOwotCisgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlv
bkZyb21DYXBzKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCkpLnZhbHVlX29yKFdlYkNvcmU6OkZs
b2F0U2l6ZSgpKTsKICAgICAgICAgbV9zdHJlYW1UeXBlID0gTWVkaWFTb3VyY2VTdHJlYW1UeXBl
R1N0cmVhbWVyOjpWaWRlbzsKICAgICB9IGVsc2UgewogICAgICAgICBtX3ByZXNlbnRhdGlvblNp
emUgPSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKQEAgLTQzNiw5ICs0MzEsOCBAQCB2b2lkIEFwcGVu
ZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQoKQogICAgIH0KIAogICAgIGlmIChkb0NhcHNI
YXZlVHlwZShjYXBzLmdldCgpLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKLSAgICAg
ICAgT3B0aW9uYWw8RmxvYXRTaXplPiBzaXplID0gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMo
Y2Fwcy5nZXQoKSk7Ci0gICAgICAgIGlmIChzaXplLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICBt
X3ByZXNlbnRhdGlvblNpemUgPSBzaXplLnZhbHVlKCk7CisgICAgICAgIGlmIChhdXRvIHNpemUg
PSBnZXRWaWRlb1Jlc29sdXRpb25Gcm9tQ2FwcyhjYXBzLmdldCgpKSkKKyAgICAgICAgICAgIG1f
cHJlc2VudGF0aW9uU2l6ZSA9ICpzaXplOwogICAgIH0KIAogICAgIGlmIChtX2FwcHNpbmtDYXBz
ICE9IGNhcHMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFLmNwcAppbmRleCBjMzIyMzM4ZTJhYzRhZDhmYjhjMjBkOWZjZTkzM2M4
NzUzZGE3ZTM1Li40ZWVjMDllMjJkMTdkYzM1MmUyNTA1MDkxNDAxZmI2ZTI2NmQ3OTQ0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0UuY3BwCkBAIC0zNDUsOSArMzQ1LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJNU0U6OnRyYWNrRGV0ZWN0ZWQoQXBwZW5kUGlwZWxpbmUmIGFwcGVuZFBpcGVsaW4KICAgICAv
LyBhdCB0aGUgc2luayBpbiB0aGUgcGxheWJhY2sgcGlwZWxpbmUsIG5vdCBpbiB0aGUgYXBwZW5k
IHBpcGVsaW5lOyBidXQgd2Ugc3RpbGwKICAgICAvLyB3YW50IHRvIHJlcG9ydCBhbiBpbml0aWFs
IHNpemUgZm9yIEhBVkVfTUVUQURBVEEgKGZpcnN0IGluaXRpYWxpemF0aW9uIHNlZ21lbnQpLgog
ICAgIGlmIChtX3ZpZGVvU2l6ZS5pc0VtcHR5KCkgJiYgZG9DYXBzSGF2ZVR5cGUoY2FwcywgR1NU
X1ZJREVPX0NBUFNfVFlQRV9QUkVGSVgpKSB7Ci0gICAgICAgIE9wdGlvbmFsPEZsb2F0U2l6ZT4g
c2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNhcHMpOwotICAgICAgICBpZiAoc2l6
ZS5oYXNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBtX3ZpZGVvU2l6ZSA9IHNpemUudmFsdWUoKTsK
KyAgICAgICAgaWYgKGF1dG8gc2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNhcHMp
KSB7CisgICAgICAgICAgICBtX3ZpZGVvU2l6ZSA9ICpzaXplOwogICAgICAgICAgICAgR1NUX0RF
QlVHKCJTZXR0aW5nIGluaXRpYWwgdmlkZW8gc2l6ZTogJWd4JWciLCBtX3ZpZGVvU2l6ZS53aWR0
aCgpLCBtX3ZpZGVvU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybVN0
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
Zm9ybVN0YXRlLmgKaW5kZXggMDljZWJhMzgyN2VkMmQ3ZGM1MWVlZjQyZmFiNDcwMThiODI3Nzg3
MC4uZDEwMWNmODZiMGQ0ODU4NjM1ZTViYjEwNDBiMjYyYjNiOTUzM2ZiNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1TdGF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJh
bnNmb3JtU3RhdGUuaApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgog
I2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPG9wdGlvbmFsPgogCiBuYW1l
c3BhY2UgV1RGIHsKIGNsYXNzIFRleHRTdHJlYW07CkBAIC04MiwxNCArODIsMTQgQEAgcHVibGlj
OgogICAgICAgICBtX2xhc3RQbGFuYXJRdWFkID0gcXVhZDsKICAgICB9CiAKLSAgICB2b2lkIHNl
dFNlY29uZGFyeVF1YWQoY29uc3QgT3B0aW9uYWw8RmxvYXRRdWFkPiYgcXVhZCkKKyAgICB2b2lk
IHNldFNlY29uZGFyeVF1YWQoY29uc3Qgc3RkOjpvcHRpb25hbDxGbG9hdFF1YWQ+JiBxdWFkKQog
ICAgIHsKICAgICAgICAgLy8gV2UgbXVzdCBiZSBpbiBhIGZsYXR0ZW5lZCBzdGF0ZSAobm8gYWNj
dW11bGF0ZWQgb2Zmc2V0KSB3aGVuIHNldHRpbmcgdGhpcyBzZWNvbmRhcnkgcXVhZC4KICAgICAg
ICAgQVNTRVJUKG1fYWNjdW11bGF0ZWRPZmZzZXQgPT0gTGF5b3V0U2l6ZSgpKTsKICAgICAgICAg
bV9sYXN0UGxhbmFyU2Vjb25kYXJ5UXVhZCA9IHF1YWQ7CiAgICAgfQogCi0gICAgdm9pZCBzZXRM
YXN0UGxhbmFyU2Vjb25kYXJ5UXVhZChjb25zdCBPcHRpb25hbDxGbG9hdFF1YWQ+Jik7CisgICAg
dm9pZCBzZXRMYXN0UGxhbmFyU2Vjb25kYXJ5UXVhZChjb25zdCBzdGQ6Om9wdGlvbmFsPEZsb2F0
UXVhZD4mKTsKIAogICAgIHZvaWQgbW92ZShMYXlvdXRVbml0IHgsIExheW91dFVuaXQgeSwgVHJh
bnNmb3JtQWNjdW11bGF0aW9uIGFjY3VtdWxhdGUgPSBGbGF0dGVuVHJhbnNmb3JtKQogICAgIHsK
QEAgLTEwNCwxMyArMTA0LDEzIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm4gdGhlIGNvb3JkcyBv
ZiB0aGUgcG9pbnQgb3IgcXVhZCBpbiB0aGUgbGFzdCBmbGF0dGVuZWQgbGF5ZXIKICAgICBGbG9h
dFBvaW50IGxhc3RQbGFuYXJQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBsYW5hclBvaW50
OyB9CiAgICAgRmxvYXRRdWFkIGxhc3RQbGFuYXJRdWFkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
UGxhbmFyUXVhZDsgfQotICAgIE9wdGlvbmFsPEZsb2F0UXVhZD4gbGFzdFBsYW5hclNlY29uZGFy
eVF1YWQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQbGFuYXJTZWNvbmRhcnlRdWFkOyB9Ci0gICAg
Ym9vbCBpc01hcHBpbmdTZWNvbmRhcnlRdWFkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGxhbmFy
U2Vjb25kYXJ5UXVhZC5oYXNWYWx1ZSgpOyB9CisgICAgc3RkOjpvcHRpb25hbDxGbG9hdFF1YWQ+
IGxhc3RQbGFuYXJTZWNvbmRhcnlRdWFkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGxhbmFyU2Vj
b25kYXJ5UXVhZDsgfQorICAgIGJvb2wgaXNNYXBwaW5nU2Vjb25kYXJ5UXVhZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdFBsYW5hclNlY29uZGFyeVF1YWQuaGFzX3ZhbHVlKCk7IH0KIAogICAgIC8v
IFJldHVybiB0aGUgcG9pbnQgb3IgcXVhZCBtYXBwZWQgdGhyb3VnaCB0aGUgY3VycmVudCB0cmFu
c2Zvcm0KICAgICBGbG9hdFBvaW50IG1hcHBlZFBvaW50KGJvb2wqIHdhc0NsYW1wZWQgPSBudWxs
cHRyKSBjb25zdDsKICAgICBGbG9hdFF1YWQgbWFwcGVkUXVhZChib29sKiB3YXNDbGFtcGVkID0g
bnVsbHB0cikgY29uc3Q7Ci0gICAgT3B0aW9uYWw8RmxvYXRRdWFkPiBtYXBwZWRTZWNvbmRhcnlR
dWFkKGJvb2wqIHdhc0NsYW1wZWQgPSBudWxscHRyKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UXVhZD4gbWFwcGVkU2Vjb25kYXJ5UXVhZChib29sKiB3YXNDbGFtcGVkID0gbnVsbHB0
cikgY29uc3Q7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogYWNjdW11bGF0ZWRUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLmdldCgpOyB9CiAKQEAg
LTEyNyw3ICsxMjcsNyBAQCBwcml2YXRlOgogICAgIAogICAgIEZsb2F0UG9pbnQgbV9sYXN0UGxh
bmFyUG9pbnQ7CiAgICAgRmxvYXRRdWFkIG1fbGFzdFBsYW5hclF1YWQ7Ci0gICAgT3B0aW9uYWw8
RmxvYXRRdWFkPiBtX2xhc3RQbGFuYXJTZWNvbmRhcnlRdWFkOworICAgIHN0ZDo6b3B0aW9uYWw8
RmxvYXRRdWFkPiBtX2xhc3RQbGFuYXJTZWNvbmRhcnlRdWFkOwogCiAgICAgLy8gV2Ugb25seSBh
bGxvY2F0ZSB0aGUgdHJhbnNmb3JtIGlmIHdlIG5lZWQgdG8KICAgICBzdGQ6OnVuaXF1ZV9wdHI8
VHJhbnNmb3JtYXRpb25NYXRyaXg+IG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlQVZL
aXQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9GdWxsc2NyZWVuSW50ZXJm
YWNlQVZLaXQubW0KaW5kZXggOTYxZTQyZmIyNzdjOTc4MDc5ODFmMWYwMWIzYjgyMjMwY2ZlZjFj
ZC4uNWU0YmM5Zjg3MjE2N2EwYTNkMTk0ZThlNWZhN2Y0YjgzODlmOTk3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvRnVsbHNjcmVlbkludGVyZmFjZUFWS2l0
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb0Z1bGxzY3JlZW5JbnRl
cmZhY2VBVktpdC5tbQpAQCAtMTY0NCw3ICsxNjQ0LDcgQEAgdm9pZCBXZWJDb3JlOjpzZXRTdXBw
b3J0c1BpY3R1cmVJblBpY3R1cmUoYm9vbCBpc1N1cHBvcnRlZCkKIGJvb2wgV2ViQ29yZTo6c3Vw
cG9ydHNQaWN0dXJlSW5QaWN0dXJlKCkKIHsKICNpZiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpICYmICFQTEFURk9STShXQVRDSE9TKQotICAgIGlmIChpc1BpY3R1cmVJblBpY3R1cmVT
dXBwb3J0ZWQuaGFzVmFsdWUoKSkKKyAgICBpZiAoaXNQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydGVk
Lmhhc192YWx1ZSgpKQogICAgICAgICByZXR1cm4gKmlzUGljdHVyZUluUGljdHVyZVN1cHBvcnRl
ZDsKICAgICByZXR1cm4gW2dldEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXJDbGFzcygpIGlz
UGljdHVyZUluUGljdHVyZVN1cHBvcnRlZF07CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tCmluZGV4IGRhZDA0NWYwZDYy
ODdhNGZmNzI2YjY1MzMwYmE5ODhkNGE5YWRiZTIuLmEyMjk2NDk0NTBkYjEwNGZiZTNmMzFiMTM3
ZTc2OTJhM2JhNWFmOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9O
U1Njcm9sbGVySW1wRGV0YWlscy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
TlNTY3JvbGxlckltcERldGFpbHMubW0KQEAgLTM4LDkgKzM4LDggQEAgT3B0aW9uYWw8Ym9vbD4g
U2Nyb2xsZXJTdHlsZTo6bV91c2VPdmVybGF5U2Nyb2xsYmFyczsKIAogTlNTY3JvbGxlclN0eWxl
IFNjcm9sbGVyU3R5bGU6OnJlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpCiB7Ci0gICAgaWYgKG1f
dXNlT3ZlcmxheVNjcm9sbGJhcnMuaGFzVmFsdWUoKSkKKyAgICBpZiAobV91c2VPdmVybGF5U2Ny
b2xsYmFycy5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuICptX3VzZU92ZXJsYXlTY3JvbGxi
YXJzID8gTlNTY3JvbGxlclN0eWxlT3ZlcmxheSA6IE5TU2Nyb2xsZXJTdHlsZUxlZ2FjeTsKLSAg
ICAKICAgICBpZiAoRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1c2VzT3ZlcmxheVNjcm9sbGJh
cnMoKSkKICAgICAgICAgcmV0dXJuIE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXk7CiAgICAgcmV0dXJu
IFtOU1Njcm9sbGVyIHByZWZlcnJlZFNjcm9sbGVyU3R5bGVdOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKaW5kZXgg
MjA0NzU4MzFjNTkxMjU3ZmMxMjlhZjJkY2Y4ODRiMmJkYjVhODkwMC4uNDZlNzg1MjI5ZTYwZjYy
YmM3YjNhY2U0ZGM4MzFhN2YyNzVhODFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCkBAIC02MDIsOSArNjAy
LDEwIEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEhlYWRlckZpZWxkcyhIVFRQ
SGVhZGVyTWFwIGhlYWRlckZpZWxkcykKIH0KIAogI2lmIFVTRShTWVNURU1fUFJFVklFVykKKwog
Ym9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjppc1N5c3RlbVByZXZpZXcoKSBjb25zdAogewotICAg
IHJldHVybiBtX3N5c3RlbVByZXZpZXdJbmZvLmhhc1ZhbHVlKCk7CisgICAgcmV0dXJuIG1fc3lz
dGVtUHJldmlld0luZm8uaGFzX3ZhbHVlKCk7CiB9CiAKIFN5c3RlbVByZXZpZXdJbmZvIFJlc291
cmNlUmVxdWVzdEJhc2U6OnN5c3RlbVByZXZpZXdJbmZvKCkgY29uc3QKQEAgLTYxNiw2ICs2MTcs
NyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OnNldFN5c3RlbVByZXZpZXdJbmZvKGNvbnN0
IFN5c3RlbVByZXZpZXdJbmZvJiBpbmZvKQogewogICAgIG1fc3lzdGVtUHJldmlld0luZm8gPSBp
bmZvOwogfQorCiAjZW5kaWYKIAogYm9vbCBlcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKGNvbnN0
IFJlc291cmNlUmVxdWVzdEJhc2UmIGEsIGNvbnN0IFJlc291cmNlUmVxdWVzdEJhc2UmIGIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRT
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0veHIvb3BlbnhyL09wZW5YUklucHV0
U291cmNlLmNwcAppbmRleCAzZGQxNmNmNjAwYzZhMzQ1ZGRiY2QxZjNiNjcwZTYzZGZlMjc0ODlm
Li41NTUxMmFjZTAwMzIwNWU2NTNiYTE4MTlkOWIwMzY4YTU1MWY2ZGJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS94ci9vcGVueHIvT3BlblhSSW5wdXRTb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3hyL29wZW54ci9PcGVuWFJJbnB1dFNvdXJjZS5j
cHAKQEAgLTE2Miw3ICsxNjIsNyBAQCBPcHRpb25hbDxEZXZpY2U6OkZyYW1lRGF0YTo6SW5wdXRT
b3VyY2U+IE9wZW5YUklucHV0U291cmNlOjpnZXRJbnB1dFNvdXJjZShYclNwYQogICAgICAgICBi
dXR0b25zLmFwcGVuZChnZXRCdXR0b24odHlwZSkpOwogCiAgICAgLy8gVHJpZ2dlciBpcyBtYW5k
YXRvcnkgaW4geHItc3RhbmRhcmQgbWFwcGluZy4KLSAgICBpZiAoYnV0dG9ucy5pc0VtcHR5KCkg
fHwgIWJ1dHRvbnMuZmlyc3QoKS5oYXNWYWx1ZSgpKQorICAgIGlmIChidXR0b25zLmlzRW1wdHko
KSB8fCAhYnV0dG9ucy5maXJzdCgpLmhhc192YWx1ZSgpKQogICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBidXR0b25zLnNpemUoKTsgKytp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXZlbnRSZWdpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FdmVudFJlZ2lvbi5oCmluZGV4IDZhMWFjNGUzYjM5
NWY4Mjg0ZWM3YTdjNmRiYTYzMTA5OGVlYWQ4MTYuLmM2MmE2Zjk3MjlmMDJkZTU5ZTM0NzE4NDEw
NGQ5Nzk2YmUwYzViMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FdmVu
dFJlZ2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FdmVudFJlZ2lvbi5oCkBA
IC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShFRElUQUJMRV9SRUdJT04pCiAg
ICAgdm9pZCBlbnN1cmVFZGl0YWJsZVJlZ2lvbigpOwotICAgIGJvb2wgaGFzRWRpdGFibGVSZWdp
b24oKSBjb25zdCB7IHJldHVybiBtX2VkaXRhYmxlUmVnaW9uLmhhc1ZhbHVlKCk7IH0KKyAgICBi
b29sIGhhc0VkaXRhYmxlUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0YWJsZVJlZ2lvbi5o
YXNfdmFsdWUoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY29udGFpbnNFZGl0YWJsZUVs
ZW1lbnRzSW5SZWN0KGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICBWZWN0b3I8SW50UmVjdCwg
MT4gcmVjdHNGb3JFZGl0YWJsZUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0YWJsZVJl
Z2lvbiA/IG1fZWRpdGFibGVSZWdpb24tPnJlY3RzKCkgOiBWZWN0b3I8SW50UmVjdCwgMT4geyB9
OyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG0uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tT
aXppbmdBbGdvcml0aG0uaAppbmRleCAzZWQwNWU0ZmQ1ZDgyOWE0MTUwZGU5NTA5MWMzYjBiMzJi
YWQyZWNkLi44OTYwODE4NTgxZWZiY2RlZDJiMzNlYzAxNmExZjZiODRiOWVhNjE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5o
CkBAIC03MywxMSArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRHcm93dGhMaW1pdENhcChP
cHRpb25hbDxMYXlvdXRVbml0Pik7CiAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gZ3Jvd3RoTGlt
aXRDYXAoKSBjb25zdCB7IHJldHVybiBtX2dyb3d0aExpbWl0Q2FwOyB9CiAKLSAgICBjb25zdCBH
cmlkVHJhY2tTaXplJiBjYWNoZWRUcmFja1NpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fY2FjaGVkVHJhY2tTaXplLmhhc1ZhbHVlKCkpOwotICAgICAgICByZXR1cm4gbV9jYWNo
ZWRUcmFja1NpemUudmFsdWUoKTsKLSAgICB9CisgICAgY29uc3QgR3JpZFRyYWNrU2l6ZSYgY2Fj
aGVkVHJhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gKm1fY2FjaGVkVHJhY2tTaXplOyB9CiAgICAg
dm9pZCBzZXRDYWNoZWRUcmFja1NpemUoY29uc3QgR3JpZFRyYWNrU2l6ZSYpOwogCiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKaW5k
ZXggNjc3YzQ3ODI2NzRmMWZkZTJmZDM0OGYxNWQzYjc4YWMyNWNkOWQ4NC4uNTk2YTNhZjlhYWY4
NjdiM2FjNDE2YTA3MjZlNzNkMmRiMGZlZDQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCkBAIC04NjIsNyArODYyLDcgQEAgYm9vbCBSZW5k
ZXJGbGV4aWJsZUJveDo6Y2FuQ29tcHV0ZVBlcmNlbnRhZ2VGbGV4QmFzaXMoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCwgY28KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKG1faGFzRGVmaW5p
dGVIZWlnaHQgPT0gU2l6ZURlZmluaXRlbmVzczo6SW5kZWZpbml0ZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGJvb2wgZGVmaW5pdGUgPSBjaGlsZC5jb21wdXRlUGVyY2VudGFnZUxvZ2lj
YWxIZWlnaHQoZmxleEJhc2lzLCB1cGRhdGVEZXNjZW5kYW50cykuaGFzVmFsdWUoKTsKKyAgICBi
b29sIGRlZmluaXRlID0gY2hpbGQuY29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGZsZXhC
YXNpcywgdXBkYXRlRGVzY2VuZGFudHMpLmhhc192YWx1ZSgpOwogICAgIGlmIChtX2luTGF5b3V0
ICYmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNoaWxkLmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpKSB7CiAgICAgICAgIC8vIFdlIGNhbiByZWFjaCB0aGlzIGNvZGUgZXZlbiB3aGls
ZSB3ZSdyZSBub3QgbGF5aW5nIG91cnNlbHZlcyBvdXQsIHN1Y2gKICAgICAgICAgLy8gYXMgZnJv
bSBtYWluU2l6ZUZvclBlcmNlbnRhZ2VSZXNvbHV0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKaW5kZXggZmRiZTEzMDlmNzE5NjljYjBlZWExOWQwMWU2
YWQ1ZDI1MTZhMmE0MS4uZGQ5YzlkM2UwMjNiNzg1ZmY3Y2E1NzA3NTg4M2MwNzE2Yzg5MTNlOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCkBAIC0zMTks
NyArMzE5LDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6c2V0RXhwbGljaXRWYWx1ZShPcHRpb25h
bDxpbnQ+IHZhbHVlKQogICAgICAgICBpZiAobV92YWx1ZVdhc1NldEV4cGxpY2l0bHkgJiYgbV92
YWx1ZSA9PSB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV92YWx1ZVdh
c1NldEV4cGxpY2l0bHkgPSB2YWx1ZS5oYXNWYWx1ZSgpOworICAgIG1fdmFsdWVXYXNTZXRFeHBs
aWNpdGx5ID0gdmFsdWUuaGFzX3ZhbHVlKCk7CiAgICAgbV92YWx1ZSA9IHZhbHVlOwogICAgIGV4
cGxpY2l0VmFsdWVDaGFuZ2VkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVJT1MubW0KaW5kZXggZTZmOGYyMmUxMzk2YTYyZDIzMGE1MDQ3MzU5Y2NjNTEzMzg1MmIw
Mi4uMTE4MDc5NGM2M2E4MmUyMGFmZjVlZDM3OTAzMmQyMTBkMWMzYmFkYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQpAQCAtMTIzNyw3ICsxMjM3LDcgQEAg
c3RhdGljIE9wdGlvbmFsPENvbG9yPiYgY2FjaGVkRm9jdXNSaW5nQ29sb3IoKQogCiBDb2xvciBS
ZW5kZXJUaGVtZUlPUzo6c3lzdGVtRm9jdXNSaW5nQ29sb3IoKQogewotICAgIGlmICghY2FjaGVk
Rm9jdXNSaW5nQ29sb3IoKS5oYXNWYWx1ZSgpKSB7CisgICAgaWYgKCFjYWNoZWRGb2N1c1JpbmdD
b2xvcigpLmhhc192YWx1ZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgdXNpbmcg
LWtleWJvYXJkRm9jdXNJbmRpY2F0b3JDb2xvci4gRm9yIG5vdywgd29yayBhcm91bmQgPHJkYXI6
Ly9wcm9ibGVtLzUwODM4ODg2Pi4KICAgICAgICAgY2FjaGVkRm9jdXNSaW5nQ29sb3IoKSA9IGNv
bG9yRnJvbVVJQ29sb3IoW1BBTDo6Z2V0VUlDb2xvckNsYXNzKCkgc3lzdGVtQmx1ZUNvbG9yXSk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1Jl
bmRlclRyZWVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9S
ZW5kZXJUcmVlQnVpbGRlci5jcHAKaW5kZXggM2MwYjdmN2MwNmRlMWM5NDBkMDkzMjgyYTIxZDgy
ZTA2YTlhNjg2Mi4uYTM0N2QzMTU1MzNjOGFiOWIyODVjMGY3MDBjMmQwYjIyNzZhNDc0NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVCdWls
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJl
ZUJ1aWxkZXIuY3BwCkBAIC03OTEsNyArNzkxLDcgQEAgdm9pZCBSZW5kZXJUcmVlQnVpbGRlcjo6
cmVtb3ZlQW5vbnltb3VzV3JhcHBlcnNGb3JJbmxpbmVDaGlsZHJlbklmTmVlZGVkKFJlbmRlckUK
ICAgICAgICAgaWYgKCFmaXJzdENoaWxkKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IGF1dG8gaXNJbmxpbmVMZXZlbEJveCA9IGZpcnN0Q2hpbGQtPmlzSW5saW5lKCk7Ci0gICAgICAg
IGlmICghc2hvdWxkQWxsQ2hpbGRyZW5CZUlubGluZS5oYXNWYWx1ZSgpKSB7CisgICAgICAgIGlm
ICghc2hvdWxkQWxsQ2hpbGRyZW5CZUlubGluZS5oYXNfdmFsdWUoKSkgewogICAgICAgICAgICAg
c2hvdWxkQWxsQ2hpbGRyZW5CZUlubGluZSA9IGlzSW5saW5lTGV2ZWxCb3g7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCmlu
ZGV4IGU2YjFlYjc1MjFmZGU3ZDRjNzk5MzM3ZGI5MzdiMDQ5YjJmY2FmOGQuLmEzY2VlNDYzOWM1
OTE2Yzc4MThkMmZjYjA3ZDUxMjRlMTFmYTdmNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAKQEAgLTMxMywxNyArMzEzLDE3IEBAIFJlZjxTVkdUcmFuc2Zvcm0+IFNWR1NWR0Vs
ZW1lbnQ6OmNyZWF0ZVNWR1RyYW5zZm9ybSgpCiBSZWY8U1ZHVHJhbnNmb3JtPiBTVkdTVkdFbGVt
ZW50OjpjcmVhdGVTVkdUcmFuc2Zvcm1Gcm9tTWF0cml4KERPTU1hdHJpeDJESW5pdCYmIG1hdHJp
eEluaXQpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKLSAgICBpZiAobWF0cml4
SW5pdC5hLmhhc1ZhbHVlKCkpCisgICAgaWYgKG1hdHJpeEluaXQuYSkKICAgICAgICAgdHJhbnNm
b3JtLnNldEEobWF0cml4SW5pdC5hLnZhbHVlKCkpOwotICAgIGlmIChtYXRyaXhJbml0LmIuaGFz
VmFsdWUoKSkKKyAgICBpZiAobWF0cml4SW5pdC5iKQogICAgICAgICB0cmFuc2Zvcm0uc2V0Qiht
YXRyaXhJbml0LmIudmFsdWUoKSk7Ci0gICAgaWYgKG1hdHJpeEluaXQuYy5oYXNWYWx1ZSgpKQor
ICAgIGlmIChtYXRyaXhJbml0LmMpCiAgICAgICAgIHRyYW5zZm9ybS5zZXRDKG1hdHJpeEluaXQu
Yy52YWx1ZSgpKTsKLSAgICBpZiAobWF0cml4SW5pdC5kLmhhc1ZhbHVlKCkpCisgICAgaWYgKG1h
dHJpeEluaXQuZCkKICAgICAgICAgdHJhbnNmb3JtLnNldEQobWF0cml4SW5pdC5kLnZhbHVlKCkp
OwotICAgIGlmIChtYXRyaXhJbml0LmUuaGFzVmFsdWUoKSkKKyAgICBpZiAobWF0cml4SW5pdC5l
KQogICAgICAgICB0cmFuc2Zvcm0uc2V0RShtYXRyaXhJbml0LmUudmFsdWUoKSk7Ci0gICAgaWYg
KG1hdHJpeEluaXQuZi5oYXNWYWx1ZSgpKQorICAgIGlmIChtYXRyaXhJbml0LmYpCiAgICAgICAg
IHRyYW5zZm9ybS5zZXRGKG1hdHJpeEluaXQuZi52YWx1ZSgpKTsKICAgICByZXR1cm4gU1ZHVHJh
bnNmb3JtOjpjcmVhdGUodHJhbnNmb3JtKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUcmFuc2Zvcm0uaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm0uaApp
bmRleCA5MGNjMmE1NzRhZWFlNTAyYTY2MDU5MmZlY2IwMzk1NDYwYTMxZTU2Li4zNzcwNzk2Nzdi
OTc3MzEwMzRmZjcwN2IzMzAxODE3Y2Y2NzBkMTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVHJhbnNmb3JtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RyYW5zZm9y
bS5oCkBAIC03NywxNyArNzcsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIH07CiAKICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybTsKLSAgICAgICAgaWYgKG1hdHJpeEluaXQuYS5oYXNWYWx1ZSgpKQor
ICAgICAgICBpZiAobWF0cml4SW5pdC5hKQogICAgICAgICAgICAgdHJhbnNmb3JtLnNldEEobWF0
cml4SW5pdC5hLnZhbHVlKCkpOwotICAgICAgICBpZiAobWF0cml4SW5pdC5iLmhhc1ZhbHVlKCkp
CisgICAgICAgIGlmIChtYXRyaXhJbml0LmIpCiAgICAgICAgICAgICB0cmFuc2Zvcm0uc2V0Qiht
YXRyaXhJbml0LmIudmFsdWUoKSk7Ci0gICAgICAgIGlmIChtYXRyaXhJbml0LmMuaGFzVmFsdWUo
KSkKKyAgICAgICAgaWYgKG1hdHJpeEluaXQuYykKICAgICAgICAgICAgIHRyYW5zZm9ybS5zZXRD
KG1hdHJpeEluaXQuYy52YWx1ZSgpKTsKLSAgICAgICAgaWYgKG1hdHJpeEluaXQuZC5oYXNWYWx1
ZSgpKQorICAgICAgICBpZiAobWF0cml4SW5pdC5kKQogICAgICAgICAgICAgdHJhbnNmb3JtLnNl
dEQobWF0cml4SW5pdC5kLnZhbHVlKCkpOwotICAgICAgICBpZiAobWF0cml4SW5pdC5lLmhhc1Zh
bHVlKCkpCisgICAgICAgIGlmIChtYXRyaXhJbml0LmUpCiAgICAgICAgICAgICB0cmFuc2Zvcm0u
c2V0RShtYXRyaXhJbml0LmUudmFsdWUoKSk7Ci0gICAgICAgIGlmIChtYXRyaXhJbml0LmYuaGFz
VmFsdWUoKSkKKyAgICAgICAgaWYgKG1hdHJpeEluaXQuZikKICAgICAgICAgICAgIHRyYW5zZm9y
bS5zZXRGKG1hdHJpeEluaXQuZi52YWx1ZSgpKTsKICAgICAgICAgbV92YWx1ZS5zZXRNYXRyaXgo
dHJhbnNmb3JtKTsKICAgICAgICAgY29tbWl0Q2hhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL1dlYkZha2VYUkRldmljZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL1dlYkZha2VYUkRldmljZS5jcHAKaW5kZXggNjc0MzY0ZWJkMDM3MTViMmE3ZWZkMWQ5ODQ5
YmE5MTI2ODlkNWUzOS4uYTBhMzljZmI1YzY0ZDU2NGY2ZDE3NmU5ZjkzNGRkZjU5N2U1MDZlOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9XZWJGYWtlWFJEZXZpY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvV2ViRmFrZVhSRGV2aWNlLmNwcApAQCAtMjEzLDcg
KzIxMyw3IEBAIHZvaWQgV2ViRmFrZVhSRGV2aWNlOjpzZXRWaWV3cyhjb25zdCBWZWN0b3I8RmFr
ZVhSVmlld0luaXQ+JiB2aWV3cykKICAgICAgICAgICAgIGF1dG8gZmFrZVZpZXcgPSBwYXJzZWRW
aWV3LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgUGxhdGZvcm1YUjo6RGV2aWNl
OjpGcmFtZURhdGE6OlZpZXcgdmlldzsKICAgICAgICAgICAgIHZpZXcub2Zmc2V0ID0gZmFrZVZp
ZXctPm9mZnNldCgpOwotICAgICAgICAgICAgaWYgKGZha2VWaWV3LT5maWVsZE9mVmlldygpLmhh
c1ZhbHVlKCkpCisgICAgICAgICAgICBpZiAoZmFrZVZpZXctPmZpZWxkT2ZWaWV3KCkpCiAgICAg
ICAgICAgICAgICAgdmlldy5wcm9qZWN0aW9uID0geyAqZmFrZVZpZXctPmZpZWxkT2ZWaWV3KCkg
fTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB2aWV3LnByb2plY3Rpb24gPSB7
IGZha2VWaWV3LT5wcm9qZWN0aW9uKCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIv
c29ja2V0L1Nlc3Npb25Ib3N0U29ja2V0LmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvc29ja2V0L1Nl
c3Npb25Ib3N0U29ja2V0LmNwcAppbmRleCAwMDZlMWQzOGI4NTFjNWZkZTBmYzM4M2RkMzZlOWE3
ODNkZDFhYjc1Li4zMTMwNWE0ZDQ3NDY4NzQwZDE4OGE5YzdmN2I3YThmZjc0ZDRmMzdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL3NvY2tldC9TZXNzaW9uSG9zdFNvY2tldC5jcHAKKysr
IGIvU291cmNlL1dlYkRyaXZlci9zb2NrZXQvU2Vzc2lvbkhvc3RTb2NrZXQuY3BwCkBAIC04MCw3
ICs4MCw3IEBAIHZvaWQgU2Vzc2lvbkhvc3Q6OmNvbm5lY3RUb0Jyb3dzZXIoRnVuY3Rpb248dm9p
ZCAoT3B0aW9uYWw8U3RyaW5nPiBlcnJvcik+JiYgY29tCiAKIGJvb2wgU2Vzc2lvbkhvc3Q6Omlz
Q29ubmVjdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jbGllbnRJRC5oYXNWYWx1ZSgpOwor
ICAgIHJldHVybiBtX2NsaWVudElELmhhc192YWx1ZSgpOwogfQogCiB2b2lkIFNlc3Npb25Ib3N0
OjpkaWRDbG9zZShJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvclNvY2tldEVuZHBvaW50JiwgSW5z
cGVjdG9yOjpDb25uZWN0aW9uSUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9Bcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQXJndW1l
bnRDb2RlcnMuaAppbmRleCBhNmZlNTkwMGRkODg2NjY3NDAwZGVjODI5ODE5NjJhYjY2MDBkODlm
Li5jZTA4ZjFiYmUxNGY2MTBjNDNlZDRmZWEwMTg4NmQzNjVlMjNiMDQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Bcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0FyZ3VtZW50Q29kZXJzLmgKQEAgLTYzLDcgKzYzLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IEV4dGVudD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8QXJy
YXlSZWZlcmVuY2U8VCwgRXh0ZW4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZW5jb2Rl
ci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
YXJyYXlSZWZlcmVuY2UuZGF0YSgpKSwgYXJyYXlSZWZlcmVuY2Uuc2l6ZSgpICogc2l6ZW9mKFQp
LCBhbGlnbm9mKFQpKTsKICAgICB9Ci0gICAgc3RhdGljIE9wdGlvbmFsPEFycmF5UmVmZXJlbmNl
VHlwZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAg
ICAgIGlmICghRXh0ZW50KQogICAgICAgICAgICAgcmV0dXJuIEFycmF5UmVmZXJlbmNlVHlwZSgp
OwpAQCAtODQsNyArODQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxBcnJheVJlZmVyZW5jZTxULCBhcnJheVJlZmVyZW5jZUR5bmFtaQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheVJlZmVyZW5jZS5kYXRhKCkpLCBhcnJheVJlZmVy
ZW5jZS5zaXplKCkgKiBzaXplb2YoVCksIGFsaWdub2YoVCkpOwogICAgIH0KLSAgICBzdGF0aWMg
T3B0aW9uYWw8QXJyYXlSZWZlcmVuY2VUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKKyAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxBcnJheVJlZmVyZW5jZVR5cGU+IGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgdWludDY0X3Qgc2l6ZTsKICAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShzaXplKSkKQEAgLTEyMSw5ICsxMjEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxPcHRpb25TZXQ8VD4+IHsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgc3RhdGljIE9wdGlvbmFsPE9wdGlvblNldDxUPj4gZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8T3B0aW9uU2V0PFQ+
PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7Ci0gICAgICAgIE9wdGlvbmFsPHR5cGVu
YW1lIE9wdGlvblNldDxUPjo6U3RvcmFnZVR5cGU+IHZhbHVlOworICAgICAgICBzdGQ6Om9wdGlv
bmFsPHR5cGVuYW1lIE9wdGlvblNldDxUPjo6U3RvcmFnZVR5cGU+IHZhbHVlOwogICAgICAgICBk
ZWNvZGVyID4+IHZhbHVlOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKQEAgLTEzNCw5ICsxMzQsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxPcHRpb25TZXQ8VD4+IHsKICAgICB9CiB9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxPcHRpb25hbDxUPj4gewordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjpvcHRpb25hbDxUPj4gewog
ICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBPcHRpb25hbDxUPiYgb3B0aW9uYWwpCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRW5jb2Rlcj4gc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8VD4mIG9wdGlvbmFsKQogICAgIHsKICAgICAgICAgaWYgKCFv
cHRpb25hbCkgewogICAgICAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKQEAgLTE0Nyw3ICsxNDcs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxPcHRpb25hbDxU
Pj4gewogICAgICAgICBlbmNvZGVyIDw8IG9wdGlvbmFsLnZhbHVlKCk7CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29s
IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBPcHRpb25hbDxUPiYgb3B0aW9uYWwpCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6Om9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKICAgICB7
CiAgICAgICAgIGJvb2wgaXNFbmdhZ2VkOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlz
RW5nYWdlZCkpCkBAIC0xNjYsMjAgKzE2NiwyMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxPcHRpb25hbDxUPj4gewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PE9wdGlvbmFsPFQ+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6Om9wdGlvbmFsPFQ+PiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7Ci0gICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzRW5n
YWdlZDsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxib29sPiBpc0VuZ2FnZWQ7CiAgICAgICAgIGRl
Y29kZXIgPj4gaXNFbmdhZ2VkOwogICAgICAgICBpZiAoIWlzRW5nYWdlZCkKICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIGlmICgqaXNFbmdhZ2VkKSB7Ci0gICAgICAg
ICAgICBPcHRpb25hbDxUPiB2YWx1ZTsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8VD4gdmFs
dWU7CiAgICAgICAgICAgICBkZWNvZGVyID4+IHZhbHVlOwogICAgICAgICAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0
dXJuIE9wdGlvbmFsPE9wdGlvbmFsPFQ+PihXVEZNb3ZlKCp2YWx1ZSkpOworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6b3B0aW9uYWw8c3RkOjpvcHRpb25hbDxUPj4oV1RGTW92ZSgqdmFsdWUpKTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gT3B0aW9uYWw8T3B0aW9uYWw8VD4+KE9wdGlvbmFs
PFQ+KHN0ZDo6bnVsbG9wdCkpOworICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxzdGQ6Om9w
dGlvbmFsPFQ+PihzdGQ6Om9wdGlvbmFsPFQ+KHN0ZDo6bnVsbG9wdCkpOwogICAgIH0KIH07CiAK
QEAgLTIxNCwyMCArMjE0LDIwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPEJveDxUPj4gewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBzdGF0
aWMgT3B0aW9uYWw8Qm94PFQ+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxCb3g8VD4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAg
ICAgICAgT3B0aW9uYWw8Ym9vbD4gaXNFbmdhZ2VkOworICAgICAgICBzdGQ6Om9wdGlvbmFsPGJv
b2w+IGlzRW5nYWdlZDsKICAgICAgICAgZGVjb2RlciA+PiBpc0VuZ2FnZWQ7CiAgICAgICAgIGlm
ICghaXNFbmdhZ2VkKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICAgICAg
aWYgKCppc0VuZ2FnZWQpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFQ+IHZhbHVlOworICAgICAg
ICAgICAgc3RkOjpvcHRpb25hbDxUPiB2YWx1ZTsKICAgICAgICAgICAgIGRlY29kZXIgPj4gdmFs
dWU7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8Qm94PFQ+PihCb3g8VD46OmNy
ZWF0ZShXVEZNb3ZlKCp2YWx1ZSkpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFs
PEJveDxUPj4oQm94PFQ+OjpjcmVhdGUoV1RGTW92ZSgqdmFsdWUpKSk7CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIE9wdGlvbmFsPEJveDxUPj4oQm94PFQ+KG51bGxwdHIpKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6b3B0aW9uYWw8Qm94PFQ+PihCb3g8VD4obnVsbHB0cikpOwogICAgIH0KIH07
CiAKQEAgLTI1MiwxNCArMjUyLDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IHN0cnVjdCBBcmd1bWVudENvZGVyPHN0ZDo6cGFpcjxULCBVPj4gewogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPFQsIFU+PiBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8
VCwgVT4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgT3B0aW9uYWw8
VD4gZmlyc3Q7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8VD4gZmlyc3Q7CiAgICAgICAgIGRlY29k
ZXIgPj4gZmlyc3Q7CiAgICAgICAgIGlmICghZmlyc3QpCiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogICAgICAgICAKLSAgICAgICAgT3B0aW9uYWw8VT4gc2Vjb25kOworICAgICAg
ICBzdGQ6Om9wdGlvbmFsPFU+IHNlY29uZDsKICAgICAgICAgZGVjb2RlciA+PiBzZWNvbmQ7CiAg
ICAgICAgIGlmICghc2Vjb25kKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAg
LTMwMCwxNCArMzAwLDE0IEBAIGF1dG8gdHVwbGVGcm9tVHVwbGVBbmRPYmplY3QoVCYmIG9iamVj
dCwgc3RkOjp0dXBsZTxFbGVtZW50cy4uLj4mJiB0dXBsZSkKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VHlwZSwgdHlwZW5hbWUuLi4gVHlwZXM+CiBzdHJ1Y3QgVHVwbGVEZWNvZGVySW1wbCB7Ci0gICAg
c3RhdGljIE9wdGlvbmFsPHN0ZDo6dHVwbGU8VHlwZSwgVHlwZXMuLi4+PiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnR1cGxlPFR5cGUsIFR5
cGVzLi4uPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAgICBPcHRpb25h
bDxUeXBlPiBvcHRpb25hbDsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxUeXBlPiBvcHRpb25hbDsK
ICAgICAgICAgZGVjb2RlciA+PiBvcHRpb25hbDsKICAgICAgICAgaWYgKCFvcHRpb25hbCkKICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICAgICAgT3B0aW9uYWw8c3RkOjp0
dXBsZTxUeXBlcy4uLj4+IHN1YlR1cGxlID0gVHVwbGVEZWNvZGVySW1wbDxUeXBlcy4uLj46OmRl
Y29kZShkZWNvZGVyKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnR1cGxlPFR5cGVzLi4u
Pj4gc3ViVHVwbGUgPSBUdXBsZURlY29kZXJJbXBsPFR5cGVzLi4uPjo6ZGVjb2RlKGRlY29kZXIp
OwogICAgICAgICBpZiAoIXN1YlR1cGxlKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIApAQCAtMzE3LDkgKzMxNyw5IEBAIHN0cnVjdCBUdXBsZURlY29kZXJJbXBsIHsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVHlwZT4KIHN0cnVjdCBUdXBsZURlY29kZXJJbXBsPFR5cGU+IHsKLSAg
ICBzdGF0aWMgT3B0aW9uYWw8c3RkOjp0dXBsZTxUeXBlPj4gZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjp0dXBsZTxUeXBlPj4gZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAgICBPcHRpb25hbDxUeXBlPiBvcHRpb25hbDsK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxUeXBlPiBvcHRpb25hbDsKICAgICAgICAgZGVjb2RlciA+
PiBvcHRpb25hbDsKICAgICAgICAgaWYgKCFvcHRpb25hbCkKICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CkBAIC0zMjksNyArMzI5LDcgQEAgc3RydWN0IFR1cGxlRGVjb2RlckltcGw8
VHlwZT4gewogCiB0ZW1wbGF0ZTxzaXplX3Qgc2l6ZSwgdHlwZW5hbWUuLi4gRWxlbWVudHM+CiBz
dHJ1Y3QgVHVwbGVEZWNvZGVyIHsKLSAgICBzdGF0aWMgT3B0aW9uYWw8c3RkOjp0dXBsZTxFbGVt
ZW50cy4uLj4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPHN0ZDo6dHVwbGU8RWxlbWVudHMuLi4+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAg
ICB7CiAgICAgICAgIHJldHVybiBUdXBsZURlY29kZXJJbXBsPEVsZW1lbnRzLi4uPjo6ZGVjb2Rl
KGRlY29kZXIpOwogICAgIH0KQEAgLTMzNyw3ICszMzcsNyBAQCBzdHJ1Y3QgVHVwbGVEZWNvZGVy
IHsKIAogdGVtcGxhdGU8Pgogc3RydWN0IFR1cGxlRGVjb2RlcjwwPiB7Ci0gICAgc3RhdGljIE9w
dGlvbmFsPHN0ZDo6dHVwbGU8Pj4gZGVjb2RlKERlY29kZXImKQorICAgIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPHN0ZDo6dHVwbGU8Pj4gZGVjb2RlKERlY29kZXImKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV90dXBsZSgpOwogICAgIH0KQEAgLTM1MCw3ICszNTAsNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBFbGVtZW50cz4gc3RydWN0IEFyZ3VtZW50Q29kZXI8c3RkOjp0dXBsZTxF
bGVtZW50cy4uLj4+IHsKICAgICAgICAgVHVwbGVFbmNvZGVyPHNpemVvZi4uLihFbGVtZW50cyks
IEVsZW1lbnRzLi4uPjo6ZW5jb2RlKGVuY29kZXIsIHR1cGxlKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgT3B0aW9uYWw8c3RkOjp0dXBsZTxFbGVtZW50cy4uLj4+IGRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPHN0ZDo6dHVwbGU8RWxlbWVudHMuLi4+PiBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAgIHJldHVybiBUdXBsZURlY29k
ZXI8c2l6ZW9mLi4uKEVsZW1lbnRzKSwgRWxlbWVudHMuLi4+OjpkZWNvZGUoZGVjb2Rlcik7CiAg
ICAgfQpAQCAtMzkxLDcgKzM5MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluCiAKICAgICBz
dGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIHZl
Y3RvcikKICAgICB7Ci0gICAgICAgIE9wdGlvbmFsPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4+IG9wdGlvbmFsOworICAgICAgICBzdGQ6Om9w
dGlvbmFsPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT4+IG9wdGlvbmFsOwogICAgICAgICBkZWNvZGVyID4+IG9wdGlvbmFsOwogICAgICAgICBp
ZiAoIW9wdGlvbmFsKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk5LDcgKzM5OSw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKKyAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHk+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7CiAgICAgICAg
IHVpbnQ2NF90IHNpemU7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCkBAIC00
MDcsNyArNDA3LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW4KIAogICAgICAgICBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+IHZlY3RvcjsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAg
IE9wdGlvbmFsPFQ+IGVsZW1lbnQ7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFQ+IGVsZW1l
bnQ7CiAgICAgICAgICAgICBkZWNvZGVyID4+IGVsZW1lbnQ7CiAgICAgICAgICAgICBpZiAoIWVs
ZW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTQ1Myw3ICs0
NTMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVu
YW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsK
ICAgICAgICAgdWludDY0X3QgZGVjb2RlZFNpemU7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoZGVjb2RlZFNpemUpKQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtl
eUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlU
cmFpCiAgICAgICAgICAgICBlbmNvZGVyIDw8ICppdDsKICAgICB9CiAKLSAgICBzdGF0aWMgT3B0
aW9uYWw8SGFzaE1hcFR5cGU+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPEhhc2hNYXBUeXBlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICB7
CiAgICAgICAgIHVpbnQzMl90IGhhc2hNYXBTaXplOwogICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGhhc2hNYXBTaXplKSkKQEAgLTUwMCwxMiArNTAwLDEyIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBL
ZXlUcmFpCiAKICAgICAgICAgSGFzaE1hcFR5cGUgaGFzaE1hcDsKICAgICAgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IGhhc2hNYXBTaXplOyArK2kpIHsKLSAgICAgICAgICAgIE9wdGlvbmFs
PEtleUFyZz4ga2V5OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxLZXlBcmc+IGtleTsKICAg
ICAgICAgICAgIGRlY29kZXIgPj4ga2V5OwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFrZXkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIE9w
dGlvbmFsPE1hcHBlZEFyZz4gdmFsdWU7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPE1hcHBl
ZEFyZz4gdmFsdWU7CiAgICAgICAgICAgICBkZWNvZGVyID4+IHZhbHVlOwogICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCF2YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKQEAgLTUyNCw3ICs1MjQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1l
IE1hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaQogCiAgICAgc3Rh
dGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBIYXNo
TWFwVHlwZSYgaGFzaE1hcCkKICAgICB7Ci0gICAgICAgIE9wdGlvbmFsPEhhc2hNYXBUeXBlPiB0
ZW1wSGFzaE1hcDsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxIYXNoTWFwVHlwZT4gdGVtcEhhc2hN
YXA7CiAgICAgICAgIGRlY29kZXIgPj4gdGVtcEhhc2hNYXA7CiAgICAgICAgIGlmICghdGVtcEhh
c2hNYXApCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NDUsNyArNTQ1LDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFp
dHNBcmcsIHR5cGVuYW1lIEhhc2gKIAogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldFR5cGUmIGhhc2hTZXQpCiAgICAgewot
ICAgICAgICBPcHRpb25hbDxIYXNoU2V0VHlwZT4gdGVtcEhhc2hTZXQ7CisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8SGFzaFNldFR5cGU+IHRlbXBIYXNoU2V0OwogICAgICAgICBkZWNvZGVyID4+IHRl
bXBIYXNoU2V0OwogICAgICAgICBpZiAoIXRlbXBIYXNoU2V0KQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtNTU0LDcgKzU1NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlw
ZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBIYXNoCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHN0YXRpYyBPcHRpb25hbDxIYXNoU2V0VHlw
ZT4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SGFz
aFNldFR5cGU+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKICAgICAgICAgdWludDY0
X3QgaGFzaFNldFNpemU7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzaFNldFNpemUp
KQpAQCAtNTYyLDcgKzU2Miw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUg
SGFzaEFyZywgdHlwZW5hbWUgS2V5VHJhaXRzQXJnLCB0eXBlbmFtZSBIYXNoCiAKICAgICAgICAg
SGFzaFNldFR5cGUgaGFzaFNldDsKICAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhh
c2hTZXRTaXplOyArK2kpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPEtleUFyZz4ga2V5OworICAg
ICAgICAgICAgc3RkOjpvcHRpb25hbDxLZXlBcmc+IGtleTsKICAgICAgICAgICAgIGRlY29kZXIg
Pj4ga2V5OwogICAgICAgICAgICAgaWYgKCFrZXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKQEAgLTYzNSwxNSArNjM1LDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
VHlwZSwgdHlwZW5hbWUgRXJyb3JUeXBlPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxFeHBlY3RlZDxW
CiAgICAgICAgIGVuY29kZXIgPDwgZXhwZWN0ZWQudmFsdWUoKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgT3B0aW9uYWw8RXhwZWN0ZWQ8VmFsdWVUeXBlLCBFcnJvclR5cGU+PiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxFeHBlY3RlZDxWYWx1ZVR5cGUs
IEVycm9yVHlwZT4+IGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHsKLSAgICAgICAgT3B0
aW9uYWw8Ym9vbD4gaGFzVmFsdWU7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gaGFzVmFs
dWU7CiAgICAgICAgIGRlY29kZXIgPj4gaGFzVmFsdWU7CiAgICAgICAgIGlmICghaGFzVmFsdWUp
CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgICAgICAKICAgICAgICAgaWYg
KCpoYXNWYWx1ZSkgewotICAgICAgICAgICAgT3B0aW9uYWw8VmFsdWVUeXBlPiB2YWx1ZTsKKyAg
ICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8VmFsdWVUeXBlPiB2YWx1ZTsKICAgICAgICAgICAgIGRl
Y29kZXIgPj4gdmFsdWU7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC02NTEsNyArNjUxLDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBFcnJvclR5cGU+IHN0cnVjdCBBcmd1bWVudENvZGVyPEV4
cGVjdGVkPFYKICAgICAgICAgICAgIEV4cGVjdGVkPFZhbHVlVHlwZSwgRXJyb3JUeXBlPiBleHBl
Y3RlZChXVEZNb3ZlKCp2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkOwogICAg
ICAgICB9Ci0gICAgICAgIE9wdGlvbmFsPEVycm9yVHlwZT4gZXJyb3I7CisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8RXJyb3JUeXBlPiBlcnJvcjsKICAgICAgICAgZGVjb2RlciA+PiBlcnJvcjsKICAg
ICAgICAgaWYgKCFlcnJvcikKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC02
NzAsMTAgKzY3MCwxMCBAQCBzdHJ1Y3QgVmFyaWFudENvZGVyIHsKICAgICAgICAgVmFyaWFudENv
ZGVyPGluZGV4IC0gMSwgVHlwZXMuLi4+OjplbmNvZGUoZW5jb2RlciwgdmFyaWFudCwgaSk7CiAg
ICAgfQogICAgIAotICAgIHN0YXRpYyBPcHRpb25hbDxXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+PiBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgdW5zaWduZWQgaSkKKyAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+PiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgdW5z
aWduZWQgaSkKICAgICB7CiAgICAgICAgIGlmIChpID09IGluZGV4KSB7Ci0gICAgICAgICAgICBP
cHRpb25hbDx0eXBlbmFtZSBXVEY6OnZhcmlhbnRfYWx0ZXJuYXRpdmU8aW5kZXgsIFdURjo6VmFy
aWFudDxUeXBlcy4uLj4+Ojp0eXBlPiBvcHRpb25hbDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9u
YWw8dHlwZW5hbWUgV1RGOjp2YXJpYW50X2FsdGVybmF0aXZlPGluZGV4LCBXVEY6OlZhcmlhbnQ8
VHlwZXMuLi4+Pjo6dHlwZT4gb3B0aW9uYWw7CiAgICAgICAgICAgICBkZWNvZGVyID4+IG9wdGlv
bmFsOwogICAgICAgICAgICAgaWYgKCFvcHRpb25hbCkKICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwpAQCAtNjkxLDEwICs2OTEsMTAgQEAgc3RydWN0IFZhcmlhbnRDb2Rlcjww
LCBUeXBlcy4uLj4gewogICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PDA+KHZhcmlhbnQpOwog
ICAgIH0KICAgICAKLSAgICBzdGF0aWMgT3B0aW9uYWw8V1RGOjpWYXJpYW50PFR5cGVzLi4uPj4g
ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHVuc2lnbmVkIGkpCisgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8V1RGOjpWYXJpYW50PFR5cGVzLi4uPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHVu
c2lnbmVkIGkpCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGksICFpKTsKLSAgICAgICAg
T3B0aW9uYWw8dHlwZW5hbWUgV1RGOjp2YXJpYW50X2FsdGVybmF0aXZlPDAsIFdURjo6VmFyaWFu
dDxUeXBlcy4uLj4+Ojp0eXBlPiBvcHRpb25hbDsKKyAgICAgICAgc3RkOjpvcHRpb25hbDx0eXBl
bmFtZSBXVEY6OnZhcmlhbnRfYWx0ZXJuYXRpdmU8MCwgV1RGOjpWYXJpYW50PFR5cGVzLi4uPj46
OnR5cGU+IG9wdGlvbmFsOwogICAgICAgICBkZWNvZGVyID4+IG9wdGlvbmFsOwogICAgICAgICBp
ZiAoIW9wdGlvbmFsKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTcxMCw5
ICs3MTAsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8V1RGOjpWYXJpYW50PFR5cGVzLi4uPj4gewogICAgICAgICBWYXJpYW50Q29kZXI8c2l6ZW9m
Li4uKFR5cGVzKSAtIDEsIFR5cGVzLi4uPjo6ZW5jb2RlKGVuY29kZXIsIHZhcmlhbnQsIGkpOwog
ICAgIH0KICAgICAKLSAgICBzdGF0aWMgT3B0aW9uYWw8V1RGOjpWYXJpYW50PFR5cGVzLi4uPj4g
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V1RGOjpW
YXJpYW50PFR5cGVzLi4uPj4gZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewotICAgICAg
ICBPcHRpb25hbDx1bnNpZ25lZD4gaTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
aTsKICAgICAgICAgZGVjb2RlciA+PiBpOwogICAgICAgICBpZiAoIWkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwpAQCAtNzIzLDcgKzcyMyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIFR5cGVzPiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXVEY6OlZhcmlhbnQ8VHlwZXMuLi4+PiB7
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdhbGxUaW1lPiB7CiAgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXYWxsVGltZSYpOwogICAgIHN0YXRpYyBXQVJO
X1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdhbGxUaW1lJik7Ci0gICAgc3Rh
dGljIE9wdGlvbmFsPFdhbGxUaW1lPiBkZWNvZGUoRGVjb2RlciYpOworICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFdhbGxUaW1lPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAogdGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxBdG9tU3RyaW5nPiB7CkBAIC03NDAsNyArNzQwLDcgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxTdHJpbmc+IHsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFbmNvZGVyPgogICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU3Ry
aW5nJik7CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVy
JiwgU3RyaW5nJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gZGVjb2RlKERlY29kZXIm
KTsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGRlY29kZShEZWNvZGVyJik7CiB9
OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFNIQTE6OkRpZ2VzdD4gewpAQCAt
NzU3LDcgKzc1Nyw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8YXVkaXRfdG9r
ZW5fdD4gewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPE1vbm9zdGF0ZT4gewog
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgTW9ub3N0YXRlJik7Ci0gICAg
c3RhdGljIE9wdGlvbmFsPE1vbm9zdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxNb25vc3RhdGU+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1dlYkNv
cmVBcmd1bWVudENvZGVyc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzQ29jb2EubW0KaW5kZXggMDIzM2ZkN2M3MmM1ZDJjMGZhYmM3ZGJm
MDg4YmUyYTJkZDUwZTY0NS4uNmEzNTMyMjFjNGVjNjdiYzVkOTg1ZGY4MDA1M2NmZmI1NzJhM2My
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzQ29jb2EubW0KQEAgLTcwLDE0ICs3MCwxMyBAQAogI2VuZGlmCiAKIG5hbWVz
cGFjZSBJUEMgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHZvaWQgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFdlYkNvcmU6OkF0dHJpYnV0ZWRTdHJpbmcmIGF0dHJpYnV0ZWRTdHJpbmcpCiB7CiAgICAg
ZW5jb2RlciA8PCBhdHRyaWJ1dGVkU3RyaW5nLnN0cmluZyA8PCBhdHRyaWJ1dGVkU3RyaW5nLmRv
Y3VtZW50QXR0cmlidXRlczsKIH0KIAotT3B0aW9uYWw8V2ViQ29yZTo6QXR0cmlidXRlZFN0cmlu
Zz4gQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nPjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCitzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkF0dHJpYnV0ZWRTdHJpbmc+IEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6QXR0cmlidXRlZFN0cmluZz46OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogewogICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRT
dHJpbmc7CiAgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBhdHRyaWJ1dGVkU3RyaW5nKSkK
QEAgLTk3LDcgKzk2LDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRJbnN0
YWxsbWVudENvbmZpZ3VyYXRpb24+OjplbmNvZGUoRW5jb2RlciYgZW4KICAgICBlbmNvZGVyIDw8
IGNvbmZpZ3VyYXRpb24ucGxhdGZvcm1Db25maWd1cmF0aW9uKCk7CiB9CiAKLU9wdGlvbmFsPFdl
YkNvcmU6OlBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3VyYXRpb24+IEFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6UGF5bWVudEluc3RhbGxtZW50Q29uZmlndXJhdGlvbj46OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQorc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQYXltZW50SW5zdGFsbG1lbnRDb25maWd1
cmF0aW9uPiBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRJbnN0YWxsbWVudENvbmZpZ3Vy
YXRpb24+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBhdXRvIGNvbmZpZ3VyYXRp
b24gPSBJUEM6OmRlY29kZTxQS1BheW1lbnRJbnN0YWxsbWVudENvbmZpZ3VyYXRpb24+KGRlY29k
ZXIsIFBBTDo6Z2V0UEtQYXltZW50SW5zdGFsbG1lbnRDb25maWd1cmF0aW9uQ2xhc3MoKSk7CiAg
ICAgaWYgKCFjb25maWd1cmF0aW9uKQpAQCAtMTEzLDEzICsxMTIsMTMgQEAgdm9pZCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OlBheW1lbnQ+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
V2ViQ29yZTo6UGEKICAgICBlbmNvZGVyIDw8IHBheW1lbnQucGtQYXltZW50KCk7CiB9CiAKLU9w
dGlvbmFsPFdlYkNvcmU6OlBheW1lbnQ+IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudD46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQYXltZW50
PiBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnQ+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKICAgICBhdXRvIHBheW1lbnQgPSBJUEM6OmRlY29kZTxQS1BheW1lbnQ+KGRlY29kZXIs
IFBBTDo6Z2V0UEtQYXltZW50Q2xhc3MoKSk7CiAgICAgaWYgKCFwYXltZW50KQogICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIFBheW1lbnQgeyBXVEZNb3ZlKCpwYXlt
ZW50KSB9OworICAgIHJldHVybiBXZWJDb3JlOjpQYXltZW50IHsgV1RGTW92ZSgqcGF5bWVudCkg
fTsKIH0KIAogdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRBdXRob3JpemF0aW9u
UmVzdWx0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlBheW1lbnRB
dXRob3JpemF0aW9uUmVzdWx0JiByZXN1bHQpCkBAIC0xMjgsMTQgKzEyNywxNCBAQCB2b2lkIEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25SZXN1bHQ+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcgogICAgIGVuY29kZXIgPDwgcmVzdWx0LmVycm9yczsKIH0KIAotT3B0
aW9uYWw8V2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25SZXN1bHQ+IEFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25SZXN1bHQ+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3N0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25SZXN1bHQ+
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudEF1dGhvcml6YXRpb25SZXN1bHQ+OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBPcHRpb25hbDxQYXltZW50QXV0aG9yaXphdGlv
blN0YXR1cz4gc3RhdHVzOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudEF1dGhv
cml6YXRpb25TdGF0dXM+IHN0YXR1czsKICAgICBkZWNvZGVyID4+IHN0YXR1czsKICAgICBpZiAo
IXN0YXR1cykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPFZl
Y3RvcjxSZWZQdHI8QXBwbGVQYXlFcnJvcj4+PiBlcnJvcnM7CisgICAgc3RkOjpvcHRpb25hbDxW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkFwcGxlUGF5RXJyb3I+Pj4gZXJyb3JzOwogICAgIGRlY29k
ZXIgPj4gZXJyb3JzOwogICAgIGlmICghZXJyb3JzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwpAQCAtMTQ4LDcgKzE0Nyw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXlt
ZW50Q29udGFjdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDCiAgICAgZW5j
b2RlciA8PCBwYXltZW50Q29udGFjdC5wa0NvbnRhY3QoKTsKIH0KIAotT3B0aW9uYWw8V2ViQ29y
ZTo6UGF5bWVudENvbnRhY3Q+IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudENvbnRhY3Q+
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3N0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVu
dENvbnRhY3Q+IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVudENvbnRhY3Q+OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBhdXRvIGNvbnRhY3QgPSBJUEM6OmRlY29kZTxQS0Nv
bnRhY3Q+KGRlY29kZXIsIFBBTDo6Z2V0UEtDb250YWN0Q2xhc3MoKSk7CiAgICAgaWYgKCFjb250
YWN0KQpAQCAtMTYyLDcgKzE2MSw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXlt
ZW50TWVyY2hhbnRTZXNzaW9uPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvCiAgICAgZW5j
b2RlciA8PCBwYXltZW50TWVyY2hhbnRTZXNzaW9uLnBrUGF5bWVudE1lcmNoYW50U2Vzc2lvbigp
OwogfQogCi1PcHRpb25hbDxXZWJDb3JlOjpQYXltZW50TWVyY2hhbnRTZXNzaW9uPiBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OlBheW1lbnRNZXJjaGFudFNlc3Npb24+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3N0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudE1lcmNoYW50U2Vzc2lvbj4g
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50TWVyY2hhbnRTZXNzaW9uPjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiB7CiAgICAgYXV0byBwYXltZW50TWVyY2hhbnRTZXNzaW9uID0gSVBD
OjpkZWNvZGU8UEtQYXltZW50TWVyY2hhbnRTZXNzaW9uPihkZWNvZGVyLCBQQUw6OmdldFBLUGF5
bWVudE1lcmNoYW50U2Vzc2lvbkNsYXNzKCkpOwogICAgIGlmICghcGF5bWVudE1lcmNoYW50U2Vz
c2lvbikKQEAgLTE3NiwxNiArMTc1LDE2IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQ
YXltZW50TWV0aG9kPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvCiAgICAg
ZW5jb2RlciA8PCBwYXltZW50TWV0aG9kLnBrUGF5bWVudE1ldGhvZCgpOwogfQogCi1PcHRpb25h
bDxXZWJDb3JlOjpQYXltZW50TWV0aG9kPiBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBheW1lbnRN
ZXRob2Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3N0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
UGF5bWVudE1ldGhvZD4gQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50TWV0aG9kPjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgYXV0byBwYXltZW50TWV0aG9kID0gSVBDOjpk
ZWNvZGU8UEtQYXltZW50TWV0aG9kPihkZWNvZGVyLCBQQUw6OmdldFBLUGF5bWVudE1ldGhvZENs
YXNzKCkpOwogICAgIGlmICghcGF5bWVudE1ldGhvZCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBQYXltZW50TWV0aG9kIHsgV1RGTW92ZSgqcGF5bWVudE1ldGhv
ZCkgfTsKKyAgICByZXR1cm4gV2ViQ29yZTo6UGF5bWVudE1ldGhvZCB7IFdURk1vdmUoKnBheW1l
bnRNZXRob2QpIH07CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxBcHBsZVBheVNlc3Npb25QYXlt
ZW50UmVxdWVzdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBBcHBsZVBheVNlc3Np
b25QYXltZW50UmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpB
cHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdCYgcmVxdWVzdCkKIHsK
ICAgICBlbmNvZGVyIDw8IHJlcXVlc3QuY291bnRyeUNvZGUoKTsKICAgICBlbmNvZGVyIDw8IHJl
cXVlc3QuY3VycmVuY3lDb2RlKCk7CkBAIC0yMTAsNyArMjA5LDcgQEAgdm9pZCBBcmd1bWVudENv
ZGVyPEFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIsIGNvbnMKICNlbmRpZgogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8QXBwbGVQYXlTZXNzaW9u
UGF5bWVudFJlcXVlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQXBwbGVQYXlTZXNzaW9u
UGF5bWVudFJlcXVlc3QmIHJlcXVlc3QpCitib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6QXBw
bGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2Vi
Q29yZTo6QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgU3Ry
aW5nIGNvdW50cnlDb2RlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY291bnRyeUNvZGUpKQpA
QCAtMjIyLDI5ICsyMjEsMjkgQEAgYm9vbCBBcmd1bWVudENvZGVyPEFwcGxlUGF5U2Vzc2lvblBh
eW1lbnRSZXF1ZXN0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEFwcGwKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIHJlcXVlc3Quc2V0Q3VycmVuY3lDb2RlKGN1cnJlbmN5Q29kZSk7CiAK
LSAgICBBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6Q29udGFjdEZpZWxkcyByZXF1aXJl
ZEJpbGxpbmdDb250YWN0RmllbGRzOworICAgIFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1l
bnRSZXF1ZXN0OjpDb250YWN0RmllbGRzIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM7CiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZSgocmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkcykpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVxdWVzdC5zZXRSZXF1aXJlZEJpbGxpbmdDb250
YWN0RmllbGRzKHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHMpOwogCi0gICAgT3B0aW9uYWw8
UGF5bWVudENvbnRhY3Q+IGJpbGxpbmdDb250YWN0OworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29y
ZTo6UGF5bWVudENvbnRhY3Q+IGJpbGxpbmdDb250YWN0OwogICAgIGRlY29kZXIgPj4gYmlsbGlu
Z0NvbnRhY3Q7CiAgICAgaWYgKCFiaWxsaW5nQ29udGFjdCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJlcXVlc3Quc2V0QmlsbGluZ0NvbnRhY3QoKmJpbGxpbmdDb250YWN0KTsKIAotICAg
IEFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpDb250YWN0RmllbGRzIHJlcXVpcmVkU2hp
cHBpbmdDb250YWN0RmllbGRzOworICAgIFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1lbnRS
ZXF1ZXN0OjpDb250YWN0RmllbGRzIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOwogICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoKHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXF1ZXN0LnNldFJlcXVpcmVkU2hpcHBpbmdDb250
YWN0RmllbGRzKHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzKTsKIAotICAgIE9wdGlvbmFs
PFBheW1lbnRDb250YWN0PiBzaGlwcGluZ0NvbnRhY3Q7CisgICAgc3RkOjpvcHRpb25hbDxXZWJD
b3JlOjpQYXltZW50Q29udGFjdD4gc2hpcHBpbmdDb250YWN0OwogICAgIGRlY29kZXIgPj4gc2hp
cHBpbmdDb250YWN0OwogICAgIGlmICghc2hpcHBpbmdDb250YWN0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmVxdWVzdC5zZXRTaGlwcGluZ0NvbnRhY3QoKnNoaXBwaW5nQ29udGFjdCk7
CiAKLSAgICBBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6TWVyY2hhbnRDYXBhYmlsaXRp
ZXMgbWVyY2hhbnRDYXBhYmlsaXRpZXM7CisgICAgV2ViQ29yZTo6QXBwbGVQYXlTZXNzaW9uUGF5
bWVudFJlcXVlc3Q6Ok1lcmNoYW50Q2FwYWJpbGl0aWVzIG1lcmNoYW50Q2FwYWJpbGl0aWVzOwog
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWVyY2hhbnRDYXBhYmlsaXRpZXMpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmVxdWVzdC5zZXRNZXJjaGFudENhcGFiaWxpdGllcyhtZXJjaGFu
dENhcGFiaWxpdGllcyk7CkBAIC0yNTQsMjIgKzI1MywyMiBAQCBib29sIEFyZ3VtZW50Q29kZXI8
QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
QXBwbAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVxdWVzdC5zZXRTdXBwb3J0ZWROZXR3
b3JrcyhzdXBwb3J0ZWROZXR3b3Jrcyk7CiAKLSAgICBBcHBsZVBheVNlc3Npb25QYXltZW50UmVx
dWVzdDo6U2hpcHBpbmdUeXBlIHNoaXBwaW5nVHlwZTsKKyAgICBXZWJDb3JlOjpBcHBsZVBheVNl
c3Npb25QYXltZW50UmVxdWVzdDo6U2hpcHBpbmdUeXBlIHNoaXBwaW5nVHlwZTsKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHNoaXBwaW5nVHlwZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXF1ZXN0LnNldFNoaXBwaW5nVHlwZShzaGlwcGluZ1R5cGUpOwogCi0gICAgVmVjdG9yPEFw
cGxlUGF5U2hpcHBpbmdNZXRob2Q+IHNoaXBwaW5nTWV0aG9kczsKKyAgICBWZWN0b3I8V2ViQ29y
ZTo6QXBwbGVQYXlTaGlwcGluZ01ldGhvZD4gc2hpcHBpbmdNZXRob2RzOwogICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoc2hpcHBpbmdNZXRob2RzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJlcXVlc3Quc2V0U2hpcHBpbmdNZXRob2RzKHNoaXBwaW5nTWV0aG9kcyk7CiAKLSAgICBWZWN0
b3I8QXBwbGVQYXlMaW5lSXRlbT4gbGluZUl0ZW1zOworICAgIFZlY3RvcjxXZWJDb3JlOjpBcHBs
ZVBheUxpbmVJdGVtPiBsaW5lSXRlbXM7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsaW5lSXRl
bXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVxdWVzdC5zZXRMaW5lSXRlbXMobGlu
ZUl0ZW1zKTsKIAotICAgIE9wdGlvbmFsPEFwcGxlUGF5TGluZUl0ZW0+IHRvdGFsOworICAgIHN0
ZDo6b3B0aW9uYWw8V2ViQ29yZTo6QXBwbGVQYXlMaW5lSXRlbT4gdG90YWw7CiAgICAgZGVjb2Rl
ciA+PiB0b3RhbDsKICAgICBpZiAoIXRvdGFsKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0y
ODUsMTMgKzI4NCwxMyBAQCBib29sIEFyZ3VtZW50Q29kZXI8QXBwbGVQYXlTZXNzaW9uUGF5bWVu
dFJlcXVlc3Q+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgQXBwbAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmVxdWVzdC5zZXRTdXBwb3J0ZWRDb3VudHJpZXMoV1RGTW92ZShzdXBwb3J0
ZWRDb3VudHJpZXMpKTsKIAotICAgIEFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpSZXF1
ZXN0ZXIgcmVxdWVzdGVyOworICAgIFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1
ZXN0OjpSZXF1ZXN0ZXIgcmVxdWVzdGVyOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVxdWVz
dGVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlcXVlc3Quc2V0UmVxdWVzdGVyKHJl
cXVlc3Rlcik7CiAgICAgCiAjaWYgRU5BQkxFKEFQUExFX1BBWV9JTlNUQUxMTUVOVFMpCi0gICAg
T3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudEluc3RhbGxtZW50Q29uZmlndXJhdGlvbj4gaW5zdGFs
bG1lbnRDb25maWd1cmF0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UGF5bWVudElu
c3RhbGxtZW50Q29uZmlndXJhdGlvbj4gaW5zdGFsbG1lbnRDb25maWd1cmF0aW9uOwogICAgIGRl
Y29kZXIgPj4gaW5zdGFsbG1lbnRDb25maWd1cmF0aW9uOwogICAgIGlmICghaW5zdGFsbG1lbnRD
b25maWd1cmF0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMDYsNyArMzA1LDcgQEAg
Ym9vbCBBcmd1bWVudENvZGVyPEFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0Pjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIEFwcGwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcmd1
bWVudENvZGVyPEFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpDb250YWN0RmllbGRzPjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1
ZXN0OjpDb250YWN0RmllbGRzJiBjb250YWN0RmllbGRzKQordm9pZCBBcmd1bWVudENvZGVyPFdl
YkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpDb250YWN0RmllbGRzPjo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1l
bnRSZXF1ZXN0OjpDb250YWN0RmllbGRzJiBjb250YWN0RmllbGRzKQogewogICAgIGVuY29kZXIg
PDwgY29udGFjdEZpZWxkcy5wb3N0YWxBZGRyZXNzOwogICAgIGVuY29kZXIgPDwgY29udGFjdEZp
ZWxkcy5waG9uZTsKQEAgLTMxNSw3ICszMTQsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8QXBwbGVQ
YXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6OkNvbnRhY3RGaWVsZHM+OjplbmNvZGUoRW5jb2Rlcgog
ICAgIGVuY29kZXIgPDwgY29udGFjdEZpZWxkcy5waG9uZXRpY05hbWU7CiB9CiAKLWJvb2wgQXJn
dW1lbnRDb2RlcjxBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6Q29udGFjdEZpZWxkcz46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6
Q29udGFjdEZpZWxkcyYgY29udGFjdEZpZWxkcykKK2Jvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6Q29udGFjdEZpZWxkcz46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6
Q29udGFjdEZpZWxkcyYgY29udGFjdEZpZWxkcykKIHsKICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGNvbnRhY3RGaWVsZHMucG9zdGFsQWRkcmVzcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTMzMSw3ICszMzAsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8QXBwbGVQYXlTZXNzaW9uUGF5bWVu
dFJlcXVlc3Q6OkNvbnRhY3RGaWVsZHM+OjpkZWNvZGUoRGVjb2RlcgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEFyZ3VtZW50Q29kZXI8QXBwbGVQYXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6
Ok1lcmNoYW50Q2FwYWJpbGl0aWVzPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEFw
cGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcyYgbWVyY2hh
bnRDYXBhYmlsaXRpZXMpCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6QXBwbGVQYXlTZXNz
aW9uUGF5bWVudFJlcXVlc3Q6Ok1lcmNoYW50Q2FwYWJpbGl0aWVzPjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpN
ZXJjaGFudENhcGFiaWxpdGllcyYgbWVyY2hhbnRDYXBhYmlsaXRpZXMpCiB7CiAgICAgZW5jb2Rl
ciA8PCBtZXJjaGFudENhcGFiaWxpdGllcy5zdXBwb3J0czNEUzsKICAgICBlbmNvZGVyIDw8IG1l
cmNoYW50Q2FwYWJpbGl0aWVzLnN1cHBvcnRzRU1WOwpAQCAtMzM5LDcgKzMzOCw3IEBAIHZvaWQg
QXJndW1lbnRDb2RlcjxBcHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6TWVyY2hhbnRDYXBh
YmlsaXRpZXM+OjplbmNvZGUoCiAgICAgZW5jb2RlciA8PCBtZXJjaGFudENhcGFiaWxpdGllcy5z
dXBwb3J0c0RlYml0OwogfQogCi1ib29sIEFyZ3VtZW50Q29kZXI8QXBwbGVQYXlTZXNzaW9uUGF5
bWVudFJlcXVlc3Q6Ok1lcmNoYW50Q2FwYWJpbGl0aWVzPjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIEFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpNZXJjaGFudENhcGFiaWxpdGllcyYg
bWVyY2hhbnRDYXBhYmlsaXRpZXMpCitib29sIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6QXBwbGVQ
YXlTZXNzaW9uUGF5bWVudFJlcXVlc3Q6Ok1lcmNoYW50Q2FwYWJpbGl0aWVzPjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkFwcGxlUGF5U2Vzc2lvblBheW1lbnRSZXF1ZXN0OjpN
ZXJjaGFudENhcGFiaWxpdGllcyYgbWVyY2hhbnRDYXBhYmlsaXRpZXMpCiB7CiAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShtZXJjaGFudENhcGFiaWxpdGllcy5zdXBwb3J0czNEUykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTM1MywyNSArMzUyLDI1IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxB
cHBsZVBheVNlc3Npb25QYXltZW50UmVxdWVzdDo6TWVyY2hhbnRDYXBhYmlsaXRpZXM+OjpkZWNv
ZGUoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8QXBw
bGVQYXlFcnJvcj4+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVmUHRyPEFwcGxl
UGF5RXJyb3I+JiBlcnJvcikKK3ZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6QXBw
bGVQYXlFcnJvcj4+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVmUHRyPFdlYkNv
cmU6OkFwcGxlUGF5RXJyb3I+JiBlcnJvcikKIHsKICAgICBlbmNvZGVyIDw8ICEhZXJyb3I7CiAg
ICAgaWYgKGVycm9yKQogICAgICAgICBlbmNvZGVyIDw8ICplcnJvcjsKIH0KIAotT3B0aW9uYWw8
UmVmUHRyPEFwcGxlUGF5RXJyb3I+PiBBcmd1bWVudENvZGVyPFJlZlB0cjxBcHBsZVBheUVycm9y
Pj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorc3RkOjpvcHRpb25hbDxSZWZQdHI8V2ViQ29y
ZTo6QXBwbGVQYXlFcnJvcj4+IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkFwcGxlUGF5
RXJyb3I+Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgT3B0aW9uYWw8Ym9vbD4g
aXNWYWxpZDsKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGlzVmFsaWQ7CiAgICAgZGVjb2RlciA+
PiBpc1ZhbGlkOwogICAgIGlmICghaXNWYWxpZCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKIAotICAgIFJlZlB0cjxBcHBsZVBheUVycm9yPiBlcnJvcjsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6QXBwbGVQYXlFcnJvcj4gZXJyb3I7CiAgICAgaWYgKCEqaXNWYWxpZCkKICAgICAgICAgcmV0
dXJuIHsgbnVsbHB0ciB9OwogCi0gICAgZXJyb3IgPSBBcHBsZVBheUVycm9yOjpkZWNvZGUoZGVj
b2Rlcik7CisgICAgZXJyb3IgPSBXZWJDb3JlOjpBcHBsZVBheUVycm9yOjpkZWNvZGUoZGVjb2Rl
cik7CiAgICAgaWYgKCFlcnJvcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBy
ZXR1cm4gZXJyb3I7CkBAIC0zODIsNyArMzgxLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6OlBheW1lbnRTZXNzaW9uRXJyb3I+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QK
ICAgICBlbmNvZGVyIDw8IGVycm9yLnBsYXRmb3JtRXJyb3IoKTsKIH0KIAotT3B0aW9uYWw8V2Vi
Q29yZTo6UGF5bWVudFNlc3Npb25FcnJvcj4gQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpQYXltZW50
U2Vzc2lvbkVycm9yPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlBheW1lbnRTZXNzaW9uRXJyb3I+IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGF5bWVu
dFNlc3Npb25FcnJvcj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGF1dG8gcGxh
dGZvcm1FcnJvciA9IElQQzo6ZGVjb2RlPE5TRXJyb3I+KGRlY29kZXIpOwogICAgIGlmICghcGxh
dGZvcm1FcnJvcikKQEAgLTQxMiwxNCArNDExLDE0IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpGb250QXR0cmlidXRlcz46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVy
CiAgICAgZW5jb2RlciA8PCBhdHRyaWJ1dGVzLmZvbnQ7CiB9CiAKLU9wdGlvbmFsPEZvbnRBdHRy
aWJ1dGVzPiBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZvbnRBdHRyaWJ1dGVzPjo6ZGVjb2RlUGxh
dGZvcm1EYXRhKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkZvbnRBdHRyaWJ1dGVzJiBhdHRy
aWJ1dGVzKQorc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGb250QXR0cmlidXRlcz4gQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpGb250QXR0cmlidXRlcz46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVy
JiBkZWNvZGVyLCBXZWJDb3JlOjpGb250QXR0cmlidXRlcyYgYXR0cmlidXRlcykKIHsKICAgICBp
ZiAoIUlQQzo6ZGVjb2RlKGRlY29kZXIsIGF0dHJpYnV0ZXMuZm9udCkpCiAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CiB9CiAKLXZvaWQgQXJndW1l
bnRDb2RlcjxSZWY8Rm9udD4+OjplbmNvZGVQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgUmVmPFdlYkNvcmU6OkZvbnQ+JiBmb250KQordm9pZCBBcmd1bWVudENvZGVyPFJlZjxX
ZWJDb3JlOjpGb250Pj46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBSZWY8V2ViQ29yZTo6Rm9udD4mIGZvbnQpCiB7CiAgICAgY29uc3QgYXV0byYgcGxhdGZvcm1E
YXRhID0gZm9udC0+cGxhdGZvcm1EYXRhKCk7CiAgICAgZW5jb2RlciA8PCBwbGF0Zm9ybURhdGEu
b3JpZW50YXRpb24oKTsKQEAgLTQ2OCw1NyArNDY3LDU3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RG
b250RGVzY3JpcHRvclJlZj4gZmluZEZvbnREZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgcmVmZXJl
bmNlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLU9wdGlvbmFsPEZvbnRQbGF0Zm9ybURhdGE+
IEFyZ3VtZW50Q29kZXI8UmVmPEZvbnQ+Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImIGRl
Y29kZXIpCitzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE+IEFyZ3VtZW50
Q29kZXI8UmVmPFdlYkNvcmU6OkZvbnQ+Pjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImIGRl
Y29kZXIpCiB7Ci0gICAgT3B0aW9uYWw8Rm9udE9yaWVudGF0aW9uPiBvcmllbnRhdGlvbjsKKyAg
ICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZvbnRPcmllbnRhdGlvbj4gb3JpZW50YXRpb247CiAg
ICAgZGVjb2RlciA+PiBvcmllbnRhdGlvbjsKLSAgICBpZiAoIW9yaWVudGF0aW9uLmhhc1ZhbHVl
KCkpCisgICAgaWYgKCFvcmllbnRhdGlvbi5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPEZvbnRXaWR0aFZhcmlhbnQ+IHdpZHRoVmFyaWFu
dDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZvbnRXaWR0aFZhcmlhbnQ+IHdpZHRoVmFy
aWFudDsKICAgICBkZWNvZGVyID4+IHdpZHRoVmFyaWFudDsKLSAgICBpZiAoIXdpZHRoVmFyaWFu
dC5oYXNWYWx1ZSgpKQorICAgIGlmICghd2lkdGhWYXJpYW50Lmhhc192YWx1ZSgpKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgT3B0aW9uYWw8VGV4dFJlbmRlcmluZ01vZGU+
IHRleHRSZW5kZXJpbmdNb2RlOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VGV4dFJlbmRl
cmluZ01vZGU+IHRleHRSZW5kZXJpbmdNb2RlOwogICAgIGRlY29kZXIgPj4gdGV4dFJlbmRlcmlu
Z01vZGU7Ci0gICAgaWYgKCF0ZXh0UmVuZGVyaW5nTW9kZS5oYXNWYWx1ZSgpKQorICAgIGlmICgh
dGV4dFJlbmRlcmluZ01vZGUuaGFzX3ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAKLSAgICBPcHRpb25hbDxmbG9hdD4gc2l6ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPGZsb2F0
PiBzaXplOwogICAgIGRlY29kZXIgPj4gc2l6ZTsKLSAgICBpZiAoIXNpemUuaGFzVmFsdWUoKSkK
KyAgICBpZiAoIXNpemUuaGFzX3ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAKLSAgICBPcHRpb25hbDxib29sPiBzeW50aGV0aWNCb2xkOworICAgIHN0ZDo6b3B0aW9uYWw8
Ym9vbD4gc3ludGhldGljQm9sZDsKICAgICBkZWNvZGVyID4+IHN5bnRoZXRpY0JvbGQ7Ci0gICAg
aWYgKCFzeW50aGV0aWNCb2xkLmhhc1ZhbHVlKCkpCisgICAgaWYgKCFzeW50aGV0aWNCb2xkLmhh
c192YWx1ZSgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgT3B0aW9uYWw8
Ym9vbD4gc3ludGhldGljT2JsaXF1ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHN5bnRoZXRp
Y09ibGlxdWU7CiAgICAgZGVjb2RlciA+PiBzeW50aGV0aWNPYmxpcXVlOwotICAgIGlmICghc3lu
dGhldGljT2JsaXF1ZS5oYXNWYWx1ZSgpKQorICAgIGlmICghc3ludGhldGljT2JsaXF1ZS5oYXNf
dmFsdWUoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+PiBhdHRyaWJ1dGVzOworICAgIHN0ZDo6b3B0aW9uYWw8
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4+IGF0dHJpYnV0ZXM7CiAgICAgZGVjb2RlciA+PiBh
dHRyaWJ1dGVzOwogICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAotICAgIE9wdGlvbmFsPGJvb2w+IGluY2x1ZGVzQ3JlYXRpb25EYXRhOworICAgIHN0
ZDo6b3B0aW9uYWw8Ym9vbD4gaW5jbHVkZXNDcmVhdGlvbkRhdGE7CiAgICAgZGVjb2RlciA+PiBp
bmNsdWRlc0NyZWF0aW9uRGF0YTsKLSAgICBpZiAoIWluY2x1ZGVzQ3JlYXRpb25EYXRhLmhhc1Zh
bHVlKCkpCisgICAgaWYgKCFpbmNsdWRlc0NyZWF0aW9uRGF0YS5oYXNfdmFsdWUoKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIGlmIChpbmNsdWRlc0NyZWF0aW9uRGF0YS52
YWx1ZSgpKSB7Ci0gICAgICAgIE9wdGlvbmFsPFJlZjxTaGFyZWRCdWZmZXI+PiBmb250RmFjZURh
dGE7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4+IGZv
bnRGYWNlRGF0YTsKICAgICAgICAgZGVjb2RlciA+PiBmb250RmFjZURhdGE7Ci0gICAgICAgIGlm
ICghZm9udEZhY2VEYXRhLmhhc1ZhbHVlKCkpCisgICAgICAgIGlmICghZm9udEZhY2VEYXRhLmhh
c192YWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgICAgICBP
cHRpb25hbDxTdHJpbmc+IGl0ZW1JbkNvbGxlY3Rpb247CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBpdGVtSW5Db2xsZWN0aW9uOwogICAgICAgICBkZWNvZGVyID4+IGl0ZW1JbkNvbGxl
Y3Rpb247Ci0gICAgICAgIGlmICghaXRlbUluQ29sbGVjdGlvbi5oYXNWYWx1ZSgpKQorICAgICAg
ICBpZiAoIWl0ZW1JbkNvbGxlY3Rpb24uaGFzX3ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCiAgICAgICAgIGF1dG8gZm9udEN1c3RvbVBsYXRmb3JtRGF0YSA9IGNy
ZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZm9udEZhY2VEYXRhLnZhbHVlKCksIGl0ZW1JbkNv
bGxlY3Rpb24udmFsdWUoKSk7CkBAIC01MzAsMTggKzUyOSwxOCBAQCBPcHRpb25hbDxGb250UGxh
dGZvcm1EYXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBsYXRmb3JtRGF0YShE
ZWNvZGVyJgogICAgICAgICBhdXRvIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNj
cmlwdG9yQ3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGJhc2VGb250RGVzY3JpcHRvciwgYXR0cmli
dXRlcy0+Z2V0KCkpKTsKICAgICAgICAgYXV0byBjdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0
ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgc2l6ZS52YWx1ZSgpLCBu
dWxscHRyKSk7CiAKLSAgICAgICAgYXV0byBjcmVhdGlvbkRhdGEgPSBGb250UGxhdGZvcm1EYXRh
OjpDcmVhdGlvbkRhdGEgeyBmb250RmFjZURhdGEudmFsdWUoKSwgaXRlbUluQ29sbGVjdGlvbi52
YWx1ZSgpIH07Ci0gICAgICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5nZXQoKSwg
c2l6ZS52YWx1ZSgpLCBzeW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlxdWUudmFs
dWUoKSwgb3JpZW50YXRpb24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRleHRSZW5k
ZXJpbmdNb2RlLnZhbHVlKCksICZjcmVhdGlvbkRhdGEpOworICAgICAgICBhdXRvIGNyZWF0aW9u
RGF0YSA9IFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkNyZWF0aW9uRGF0YSB7IGZvbnRGYWNl
RGF0YS52YWx1ZSgpLCBpdGVtSW5Db2xsZWN0aW9uLnZhbHVlKCkgfTsKKyAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGEoY3RGb250LmdldCgpLCBzaXplLnZhbHVlKCksIHN5
bnRoZXRpY0JvbGQudmFsdWUoKSwgc3ludGhldGljT2JsaXF1ZS52YWx1ZSgpLCBvcmllbnRhdGlv
bi52YWx1ZSgpLCB3aWR0aFZhcmlhbnQudmFsdWUoKSwgdGV4dFJlbmRlcmluZ01vZGUudmFsdWUo
KSwgJmNyZWF0aW9uRGF0YSk7CiAgICAgfQogCi0gICAgT3B0aW9uYWw8U3RyaW5nPiByZWZlcmVu
Y2VVUkw7CisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IHJlZmVyZW5jZVVSTDsKICAgICBkZWNv
ZGVyID4+IHJlZmVyZW5jZVVSTDsKLSAgICBpZiAoIXJlZmVyZW5jZVVSTC5oYXNWYWx1ZSgpKQor
ICAgIGlmICghcmVmZXJlbmNlVVJMLmhhc192YWx1ZSgpKQogICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCi0gICAgT3B0aW9uYWw8U3RyaW5nPiBwb3N0U2NyaXB0TmFtZTsKKyAgICBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4gcG9zdFNjcmlwdE5hbWU7CiAgICAgZGVjb2RlciA+PiBwb3N0U2Ny
aXB0TmFtZTsKLSAgICBpZiAoIXBvc3RTY3JpcHROYW1lLmhhc1ZhbHVlKCkpCisgICAgaWYgKCFw
b3N0U2NyaXB0TmFtZS5oYXNfdmFsdWUoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAogICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGZp
bmRGb250RGVzY3JpcHRvcihyZWZlcmVuY2VVUkwudmFsdWUoKSwgcG9zdFNjcmlwdE5hbWUudmFs
dWUoKSk7CkBAIC01NTAsNyArNTQ5LDcgQEAgT3B0aW9uYWw8Rm9udFBsYXRmb3JtRGF0YT4gQXJn
dW1lbnRDb2RlcjxSZWY8Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYKICAgICBm
b250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoQXR0
cmlidXRlcyhmb250RGVzY3JpcHRvci5nZXQoKSwgYXR0cmlidXRlcy0+Z2V0KCkpKTsKICAgICBh
dXRvIGN0Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnRE
ZXNjcmlwdG9yLmdldCgpLCBzaXplLnZhbHVlKCksIG51bGxwdHIpKTsKIAotICAgIHJldHVybiBG
b250UGxhdGZvcm1EYXRhKGN0Rm9udC5nZXQoKSwgc2l6ZS52YWx1ZSgpLCBzeW50aGV0aWNCb2xk
LnZhbHVlKCksIHN5bnRoZXRpY09ibGlxdWUudmFsdWUoKSwgb3JpZW50YXRpb24udmFsdWUoKSwg
d2lkdGhWYXJpYW50LnZhbHVlKCksIHRleHRSZW5kZXJpbmdNb2RlLnZhbHVlKCkpOworICAgIHJl
dHVybiBXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhKGN0Rm9udC5nZXQoKSwgc2l6ZS52YWx1ZSgp
LCBzeW50aGV0aWNCb2xkLnZhbHVlKCksIHN5bnRoZXRpY09ibGlxdWUudmFsdWUoKSwgb3JpZW50
YXRpb24udmFsdWUoKSwgd2lkdGhWYXJpYW50LnZhbHVlKCksIHRleHRSZW5kZXJpbmdNb2RlLnZh
bHVlKCkpOwogfQogCiB2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQpAQCAtNjE3LDQ2ICs2MTYsNDYgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdD46OmRlY29kZVBsYXRmb3Jt
RGF0YShEZWNvZGVyJiBkZWNvZGUKIAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKIAotdm9p
ZCBBcmd1bWVudENvZGVyPERhdGFEZXRlY3RvckVsZW1lbnRJbmZvPjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IERhdGFEZXRlY3RvckVsZW1lbnRJbmZvJiBpbmZvKQordm9pZCBBcmd1
bWVudENvZGVyPFdlYkNvcmU6OkRhdGFEZXRlY3RvckVsZW1lbnRJbmZvPjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkRhdGFEZXRlY3RvckVsZW1lbnRJbmZvJiBpbmZv
KQogewogICAgIGVuY29kZXIgPDwgaW5mby5yZXN1bHQuZ2V0KCk7CiAgICAgZW5jb2RlciA8PCBp
bmZvLmVsZW1lbnRCb3VuZHM7CiB9CiAKLU9wdGlvbmFsPERhdGFEZXRlY3RvckVsZW1lbnRJbmZv
PiBBcmd1bWVudENvZGVyPERhdGFEZXRlY3RvckVsZW1lbnRJbmZvPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCitzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkRhdGFEZXRlY3RvckVsZW1lbnRJbmZv
PiBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkRhdGFEZXRlY3RvckVsZW1lbnRJbmZvPjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgYXV0byByZXN1bHQgPSBJUEM6OmRlY29kZTxERFNj
YW5uZXJSZXN1bHQ+KGRlY29kZXIsIFBBTDo6Z2V0RERTY2FubmVyUmVzdWx0Q2xhc3MoKSk7CiAg
ICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBPcHRp
b25hbDxJbnRSZWN0PiBlbGVtZW50Qm91bmRzOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
SW50UmVjdD4gZWxlbWVudEJvdW5kczsKICAgICBkZWNvZGVyID4+IGVsZW1lbnRCb3VuZHM7CiAg
ICAgaWYgKCFlbGVtZW50Qm91bmRzKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV9vcHRpb25hbDxEYXRhRGV0ZWN0b3JFbGVtZW50SW5mbz4oeyBX
VEZNb3ZlKCpyZXN1bHQpLCBXVEZNb3ZlKCplbGVtZW50Qm91bmRzKSB9KTsKKyAgICByZXR1cm4g
c3RkOjptYWtlX29wdGlvbmFsPFdlYkNvcmU6OkRhdGFEZXRlY3RvckVsZW1lbnRJbmZvPih7IFdU
Rk1vdmUoKnJlc3VsdCksIFdURk1vdmUoKmVsZW1lbnRCb3VuZHMpIH0pOwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKERBVEFfREVURUNUSU9OKQogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNL
X1RBUkdFVCkKLXZvaWQgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0
Q29udGV4dD46OmVuY29kZVBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBNZWRp
YVBsYXliYWNrVGFyZ2V0Q29udGV4dCYgdGFyZ2V0KQordm9pZCBBcmd1bWVudENvZGVyPFdlYkNv
cmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0Pjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0JiB0
YXJnZXQpCiB7Ci0gICAgaWYgKHRhcmdldC50eXBlKCkgPT0gTWVkaWFQbGF5YmFja1RhcmdldENv
bnRleHQ6OlR5cGU6OkFWT3V0cHV0Q29udGV4dCkgeworICAgIGlmICh0YXJnZXQudHlwZSgpID09
IFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0OjpUeXBlOjpBVk91dHB1dENvbnRl
eHQpIHsKICAgICAgICAgaWYgKFtQQUw6OmdldEFWT3V0cHV0Q29udGV4dENsYXNzKCkgY29uZm9y
bXNUb1Byb3RvY29sOkBwcm90b2NvbChOU1NlY3VyZUNvZGluZyldKQogICAgICAgICAgICAgZW5j
b2RlciA8PCB0YXJnZXQub3V0cHV0Q29udGV4dCgpOwotICAgIH0gZWxzZSBpZiAodGFyZ2V0LnR5
cGUoKSA9PSBNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dDo6VHlwZTo6U2VyaWFsaXplZEFWT3V0
cHV0Q29udGV4dCkgeworICAgIH0gZWxzZSBpZiAodGFyZ2V0LnR5cGUoKSA9PSBXZWJDb3JlOjpN
ZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dDo6VHlwZTo6U2VyaWFsaXplZEFWT3V0cHV0Q29udGV4
dCkgewogICAgICAgICBlbmNvZGVyIDw8IHRhcmdldC5zZXJpYWxpemVkT3V0cHV0Q29udGV4dCgp
OwogICAgICAgICBlbmNvZGVyIDw8IHRhcmdldC5oYXNBY3RpdmVSb3V0ZSgpOwogICAgIH0gZWxz
ZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotYm9vbCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRh
KERlY29kZXImIGRlY29kZXIsIE1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0OjpUeXBlIGNvbnRl
eHRUeXBlLCBNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dCYgdGFyZ2V0KQorYm9vbCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0Pjo6ZGVjb2RlUGxhdGZv
cm1EYXRhKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250
ZXh0OjpUeXBlIGNvbnRleHRUeXBlLCBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4
dCYgdGFyZ2V0KQogewotICAgIEFTU0VSVChjb250ZXh0VHlwZSAhPSBNZWRpYVBsYXliYWNrVGFy
Z2V0Q29udGV4dDo6VHlwZTo6TW9jayk7CisgICAgQVNTRVJUKGNvbnRleHRUeXBlICE9IFdlYkNv
cmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0OjpUeXBlOjpNb2NrKTsKIAotICAgIGlmIChj
b250ZXh0VHlwZSA9PSBNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dDo6VHlwZTo6QVZPdXRwdXRD
b250ZXh0KSB7CisgICAgaWYgKGNvbnRleHRUeXBlID09IFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tU
YXJnZXRDb250ZXh0OjpUeXBlOjpBVk91dHB1dENvbnRleHQpIHsKICAgICAgICAgaWYgKCFbUEFM
OjpnZXRBVk91dHB1dENvbnRleHRDbGFzcygpIGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2wo
TlNTZWN1cmVDb2RpbmcpXSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNjY4LDcg
KzY2Nyw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0
Q29udGV4dD46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIGlmIChjb250ZXh0VHlwZSA9PSBNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4
dDo6VHlwZTo6U2VyaWFsaXplZEFWT3V0cHV0Q29udGV4dCkgeworICAgIGlmIChjb250ZXh0VHlw
ZSA9PSBXZWJDb3JlOjpNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4dDo6VHlwZTo6U2VyaWFsaXpl
ZEFWT3V0cHV0Q29udGV4dCkgewogICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBzZXJpYWxpemVk
T3V0cHV0Q29udGV4dDsKICAgICAgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBzZXJpYWxp
emVkT3V0cHV0Q29udGV4dCkgfHwgIXNlcmlhbGl6ZWRPdXRwdXRDb250ZXh0KQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNjg3LDEyICs2ODYsMTIgQEAgYm9vbCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6Ok1lZGlhUGxheWJhY2tUYXJnZXRDb250ZXh0Pjo6ZGVjb2RlUGxhdGZvcm1EYXRh
KERlY28KIAogI2lmIEVOQUJMRShJTUFHRV9FWFRSQUNUSU9OKSAmJiBFTkFCTEUoREFUQV9ERVRF
Q1RJT04pCiAKLXZvaWQgQXJndW1lbnRDb2RlcjxJbWFnZUV4dHJhY3Rpb25EYXRhRGV0ZWN0b3JJ
bmZvPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEltYWdlRXh0
cmFjdGlvbkRhdGFEZXRlY3RvckluZm8mIGluZm8pCit2b2lkIEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6SW1hZ2VFeHRyYWN0aW9uRGF0YURldGVjdG9ySW5mbz46OmVuY29kZVBsYXRmb3JtRGF0YShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpJbWFnZUV4dHJhY3Rpb25EYXRhRGV0ZWN0
b3JJbmZvJiBpbmZvKQogewogICAgIGVuY29kZXIgPDwgaW5mby5yZXN1bHQuZ2V0KCk7CiB9CiAK
LWJvb2wgQXJndW1lbnRDb2RlcjxJbWFnZUV4dHJhY3Rpb25EYXRhRGV0ZWN0b3JJbmZvPjo6ZGVj
b2RlUGxhdGZvcm1EYXRhKERlY29kZXImIGRlY29kZXIsIEltYWdlRXh0cmFjdGlvbkRhdGFEZXRl
Y3RvckluZm8mIHJlc3VsdCkKK2Jvb2wgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpJbWFnZUV4dHJh
Y3Rpb25EYXRhRGV0ZWN0b3JJbmZvPjo6ZGVjb2RlUGxhdGZvcm1EYXRhKERlY29kZXImIGRlY29k
ZXIsIFdlYkNvcmU6OkltYWdlRXh0cmFjdGlvbkRhdGFEZXRlY3RvckluZm8mIHJlc3VsdCkKIHsK
ICAgICBhdXRvIHNjYW5uZXJSZXN1bHQgPSBJUEM6OmRlY29kZTxERFNjYW5uZXJSZXN1bHQ+KGRl
Y29kZXIsIEBbIFBBTDo6Z2V0RERTY2FubmVyUmVzdWx0Q2xhc3MoKSBdKTsKICAgICBpZiAoIXNj
YW5uZXJSZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FbnRyeVBvaW50
VXRpbGl0aWVzL0NvY29hL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL0NvY29hL1hQQ1NlcnZpY2UvWFBD
U2VydmljZUVudHJ5UG9pbnQubW0KaW5kZXggYzkxZGNmY2IyODY5Yjk3ZWQ2YzEyYWZjMjA3OGJk
MjJiNGQyMzkwNS4uNTVjNWM4MGYwODEyNWQ2MWVlZGQxZjQzNzM5ZGE5OGQ4MGZkZmMxOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9Db2NvYS9Y
UENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvQ29jb2EvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQ
b2ludC5tbQpAQCAtODUsNyArODUsNyBAQCBib29sIFhQQ1NlcnZpY2VJbml0aWFsaXplckRlbGVn
YXRlOjpnZXRDbGllbnRTREtWZXJzaW9uKHVpbnQzMl90JiBjbGllbnRTREtWZXJzaQogewogICAg
IGF1dG8gdmVyc2lvbiA9IHBhcnNlSW50ZWdlcjx1aW50MzJfdD4oeHBjX2RpY3Rpb25hcnlfZ2V0
X3N0cmluZyhtX2luaXRpYWxpemVyTWVzc2FnZSwgImNsaWVudC1zZGstdmVyc2lvbiIpKTsKICAg
ICBjbGllbnRTREtWZXJzaW9uID0gdmVyc2lvbi52YWx1ZV9vcigwKTsKLSAgICByZXR1cm4gdmVy
c2lvbi5oYXNWYWx1ZSgpOworICAgIHJldHVybiB2ZXJzaW9uLmhhc192YWx1ZSgpOwogfQogCiBi
b29sIFhQQ1NlcnZpY2VJbml0aWFsaXplckRlbGVnYXRlOjpnZXRQcm9jZXNzSWRlbnRpZmllcihQ
cm9jZXNzSWRlbnRpZmllciYgaWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IGYxYThhYzg4NWY0NjEwMGZkYzY1NjU4OGJk
YTE3MTkyZWE2NjQzY2IuLjEyOWVmZWYxZDcyOTkxZDE0Y2U1YWIxOWUzNjMxMTJhMDkxODkxOGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApA
QCAtMTA2Niw3ICsxMDY2LDcgQEAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29k
ZUltYWdlKERlY29kZXImIGRlY29kZXIsIFJlZlB0cjxJbWFnZT4mIGltYWcKIHsKICAgICBPcHRp
b25hbDxib29sPiBkaWRDcmVhdGVHcmFwaGljc0NvbnRleHQ7CiAgICAgZGVjb2RlciA+PiBkaWRD
cmVhdGVHcmFwaGljc0NvbnRleHQ7Ci0gICAgaWYgKCFkaWRDcmVhdGVHcmFwaGljc0NvbnRleHQu
aGFzVmFsdWUoKSB8fCAhZGlkQ3JlYXRlR3JhcGhpY3NDb250ZXh0LnZhbHVlKCkpCisgICAgaWYg
KCFkaWRDcmVhdGVHcmFwaGljc0NvbnRleHQgfHwgISpkaWRDcmVhdGVHcmFwaGljc0NvbnRleHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhh
bmRsZTsKQEAgLTExMjEsMzEgKzExMjEsMzEgQEAgT3B0aW9uYWw8UmVmPEZvbnQ+PiBBcmd1bWVu
dENvZGVyPFJlZjxGb250Pj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlv
bmFsPEZvbnQ6Ok9yaWdpbj4gb3JpZ2luOwogICAgIGRlY29kZXIgPj4gb3JpZ2luOwotICAgIGlm
ICghb3JpZ2luLmhhc1ZhbHVlKCkpCisgICAgaWYgKCFvcmlnaW4pCiAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiAKICAgICBPcHRpb25hbDxGb250OjpJbnRlcnN0aXRpYWw+IGlzSW50ZXJz
dGl0aWFsOwogICAgIGRlY29kZXIgPj4gaXNJbnRlcnN0aXRpYWw7Ci0gICAgaWYgKCFpc0ludGVy
c3RpdGlhbC5oYXNWYWx1ZSgpKQorICAgIGlmICghaXNJbnRlcnN0aXRpYWwpCiAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBPcHRpb25hbDxGb250OjpWaXNpYmlsaXR5PiB2aXNp
YmlsaXR5OwogICAgIGRlY29kZXIgPj4gdmlzaWJpbGl0eTsKLSAgICBpZiAoIXZpc2liaWxpdHku
aGFzVmFsdWUoKSkKKyAgICBpZiAoIXZpc2liaWxpdHkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKICAgICBPcHRpb25hbDxGb250OjpPcmllbnRhdGlvbkZhbGxiYWNrPiBpc1RleHRP
cmllbnRhdGlvbkZhbGxiYWNrOwogICAgIGRlY29kZXIgPj4gaXNUZXh0T3JpZW50YXRpb25GYWxs
YmFjazsKLSAgICBpZiAoIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2suaGFzVmFsdWUoKSkKKyAg
ICBpZiAoIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2spCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKICAgICBPcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI+IHJlbmRl
cmluZ1JlcnNvdWNlSWRlbnRpZmllcjsKICAgICBkZWNvZGVyID4+IHJlbmRlcmluZ1JlcnNvdWNl
SWRlbnRpZmllcjsKLSAgICBpZiAoIXJlbmRlcmluZ1JlcnNvdWNlSWRlbnRpZmllci5oYXNWYWx1
ZSgpKQorICAgIGlmICghcmVuZGVyaW5nUmVyc291Y2VJZGVudGlmaWVyKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogCiAgICAgYXV0byBwbGF0Zm9ybURhdGEgPSBkZWNvZGVQbGF0Zm9y
bURhdGEoZGVjb2Rlcik7Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEuaGFzVmFsdWUoKSkKKyAgICBp
ZiAoIXBsYXRmb3JtRGF0YSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIHJl
dHVybiBGb250OjpjcmVhdGUocGxhdGZvcm1EYXRhLnZhbHVlKCksIG9yaWdpbi52YWx1ZSgpLCBp
c0ludGVyc3RpdGlhbC52YWx1ZSgpLCB2aXNpYmlsaXR5LnZhbHVlKCksIGlzVGV4dE9yaWVudGF0
aW9uRmFsbGJhY2sudmFsdWUoKSwgcmVuZGVyaW5nUmVyc291Y2VJZGVudGlmaWVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYUZv
cm1hdFJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFk
ZXIvTWVkaWFGb3JtYXRSZWFkZXIuY3BwCmluZGV4IDliNzYzMDU2MDhhMjBiYWI1NDU0NmY0YzE0
ZWFiMmZlMDYzYTgwMTUuLjliYmIyMmFhNmE2MTE5MTMyMzkyODJjMzBmYjJjMGU1YWI4YmNjMWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYUZvcm1hdFJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL01lZGlhRm9ybWF0UmVhZGVyLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHZv
aWQgTWVkaWFGb3JtYXRSZWFkZXI6OmZpbmlzaFBhcnNpbmcoUmVmPFNvdXJjZUJ1ZmZlclBhcnNl
cj4mJiBwYXJzZXIpCiAgICAgQUxXQVlTX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsK
IAogICAgIExvY2tlciBsb2NrZXIgeyBtX3BhcnNlVHJhY2tzTG9jayB9OwotICAgIEFTU0VSVCht
X3BhcnNlVHJhY2tzU3RhdHVzLmhhc1ZhbHVlKCkpOworICAgIEFTU0VSVChtX3BhcnNlVHJhY2tz
U3RhdHVzLmhhc192YWx1ZSgpKTsKIAogICAgIGZvciAoYXV0byYgdHJhY2tSZWFkZXIgOiBtX3Ry
YWNrUmVhZGVycykKICAgICAgICAgdHJhY2tSZWFkZXItPmZpbmlzaFBhcnNpbmcoKTsKQEAgLTIz
OSw3ICsyMzksNyBAQCBPU1N0YXR1cyBNZWRpYUZvcm1hdFJlYWRlcjo6Y29weVByb3BlcnR5KENG
U3RyaW5nUmVmIGtleSwgQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdAogICAgIExvY2tlciBsb2NrZXIg
eyBtX3BhcnNlVHJhY2tzTG9jayB9OwogICAgIG1fcGFyc2VUcmFja3NDb25kaXRpb24ud2FpdCht
X3BhcnNlVHJhY2tzTG9jaywgWyZdIHsKICAgICAgICAgYXNzZXJ0SXNIZWxkKG1fcGFyc2VUcmFj
a3NMb2NrKTsKLSAgICAgICAgcmV0dXJuIG1fcGFyc2VUcmFja3NTdGF0dXMuaGFzVmFsdWUoKTsK
KyAgICAgICAgcmV0dXJuIG1fcGFyc2VUcmFja3NTdGF0dXMuaGFzX3ZhbHVlKCk7CiAgICAgfSk7
CiAKICAgICBpZiAobV9kdXJhdGlvbi5pc0luZGVmaW5pdGUoKSkKQEAgLTI1OSw3ICsyNTksNyBA
QCBPU1N0YXR1cyBNZWRpYUZvcm1hdFJlYWRlcjo6Y29weVRyYWNrQXJyYXkoQ0ZBcnJheVJlZiog
dHJhY2tBcnJheUNvcHkpCiAgICAgTG9ja2VyIGxvY2tlciB7IG1fcGFyc2VUcmFja3NMb2NrIH07
CiAgICAgbV9wYXJzZVRyYWNrc0NvbmRpdGlvbi53YWl0KG1fcGFyc2VUcmFja3NMb2NrLCBbJl0g
ewogICAgICAgICBhc3NlcnRJc0hlbGQobV9wYXJzZVRyYWNrc0xvY2spOwotICAgICAgICByZXR1
cm4gbV9wYXJzZVRyYWNrc1N0YXR1cy5oYXNWYWx1ZSgpOworICAgICAgICByZXR1cm4gbV9wYXJz
ZVRyYWNrc1N0YXR1cy5oYXNfdmFsdWUoKTsKICAgICB9KTsKIAogICAgIGlmICgqbV9wYXJzZVRy
YWNrc1N0YXR1cyAhPSBub0VycikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dp
bi9XZWJDb3JlQXJndW1lbnRDb2RlcnNXaW4uY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2lu
L1dlYkNvcmVBcmd1bWVudENvZGVyc1dpbi5jcHAKaW5kZXggMDAwM2FiMzdkMTM2NTFmZjg3ZGYz
NjI3YTRmNjUzZmM0YWRlZGJkYS4uMjkyZDcxNDUyYzVjM2E5NDkyYjJmNWI2MTY4MjczNTMwYWMy
ZGQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1bWVu
dENvZGVyc1dpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1dlYkNvcmVBcmd1
bWVudENvZGVyc1dpbi5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPEZv
bnRBdHRyaWJ1dGVzPjo6ZW5jb2RlUGxhdGZvcm1EYXRhKEVuY29kZXImLCBjb25zdCBGb250QXR0
cmkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotT3B0aW9uYWw8Rm9udEF0dHJpYnV0
ZXM+IEFyZ3VtZW50Q29kZXI8Rm9udEF0dHJpYnV0ZXM+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVj
b2RlciYsIEZvbnRBdHRyaWJ1dGVzJikKK3N0ZDo6b3B0aW9uYWw8Rm9udEF0dHJpYnV0ZXM+IEFy
Z3VtZW50Q29kZXI8Rm9udEF0dHJpYnV0ZXM+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYs
IEZvbnRBdHRyaWJ1dGVzJikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwpAQCAtNTMsNyArNTMsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPExPR0ZPTlQ+IHsKICAgICB7CiAgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRM
ZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCZsb2dGb250KSwgc2l6
ZW9mIGxvZ0ZvbnQsIDEpOwogICAgIH0KLSAgICBzdGF0aWMgT3B0aW9uYWw8TE9HRk9OVD4gZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8TE9HRk9OVD4g
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgewogICAgICAgICBMT0dGT05UIGxvZ0ZvbnQ7
CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJmxvZ0ZvbnQpLCBzaXplb2YobG9nRm9udCksIDEpKQpAQCAtODEsNDAg
KzgxLDQwIEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZWY8Rm9udD4+OjplbmNvZGVQbGF0Zm9ybURh
dGEoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVmPEZvCiAgICAgZW5jb2RlciA8PCBsb2dGb250
OwogfQogCi1PcHRpb25hbDxGb250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250
Pj46OmRlY29kZVBsYXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGVyKQorc3RkOjpvcHRpb25hbDxG
b250UGxhdGZvcm1EYXRhPiBBcmd1bWVudENvZGVyPFJlZjxGb250Pj46OmRlY29kZVBsYXRmb3Jt
RGF0YShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPGZsb2F0PiBzaXplOworICAg
IHN0ZDo6b3B0aW9uYWw8ZmxvYXQ+IHNpemU7CiAgICAgZGVjb2RlciA+PiBzaXplOwotICAgIGlm
ICghc2l6ZS5oYXNWYWx1ZSgpKQorICAgIGlmICghc2l6ZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPGJvb2w+IHN5bnRoZXRpY0JvbGQ7CisgICAgc3RkOjpv
cHRpb25hbDxib29sPiBzeW50aGV0aWNCb2xkOwogICAgIGRlY29kZXIgPj4gc3ludGhldGljQm9s
ZDsKLSAgICBpZiAoIXN5bnRoZXRpY0JvbGQuaGFzVmFsdWUoKSkKKyAgICBpZiAoIXN5bnRoZXRp
Y0JvbGQpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBPcHRpb25hbDxib29s
PiBzeW50aGV0aWNPYmxpcXVlOworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc3ludGhldGljT2Js
aXF1ZTsKICAgICBkZWNvZGVyID4+IHN5bnRoZXRpY09ibGlxdWU7Ci0gICAgaWYgKCFzeW50aGV0
aWNPYmxpcXVlLmhhc1ZhbHVlKCkpCisgICAgaWYgKCFzeW50aGV0aWNPYmxpcXVlKQogICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgT3B0aW9uYWw8Ym9vbD4gaW5jbHVkZXNDcmVh
dGlvbkRhdGE7CisgICAgc3RkOjpvcHRpb25hbDxib29sPiBpbmNsdWRlc0NyZWF0aW9uRGF0YTsK
ICAgICBkZWNvZGVyID4+IGluY2x1ZGVzQ3JlYXRpb25EYXRhOwotICAgIGlmICghaW5jbHVkZXND
cmVhdGlvbkRhdGEuaGFzVmFsdWUoKSkKKyAgICBpZiAoIWluY2x1ZGVzQ3JlYXRpb25EYXRhKQog
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZvbnRD
dXN0b21QbGF0Zm9ybURhdGE+IGZvbnRDdXN0b21QbGF0Zm9ybURhdGE7CiAgICAgRm9udFBsYXRm
b3JtRGF0YTo6Q3JlYXRpb25EYXRhKiBjcmVhdGlvbkRhdGEgPSBudWxscHRyOwogCiAgICAgaWYg
KGluY2x1ZGVzQ3JlYXRpb25EYXRhLnZhbHVlKCkpIHsKLSAgICAgICAgT3B0aW9uYWw8UmVmPFNo
YXJlZEJ1ZmZlcj4+IGZvbnRGYWNlRGF0YTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxSZWY8U2hh
cmVkQnVmZmVyPj4gZm9udEZhY2VEYXRhOwogICAgICAgICBkZWNvZGVyID4+IGZvbnRGYWNlRGF0
YTsKLSAgICAgICAgaWYgKCFmb250RmFjZURhdGEuaGFzVmFsdWUoKSkKKyAgICAgICAgaWYgKCFm
b250RmFjZURhdGEpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgICAg
IE9wdGlvbmFsPFN0cmluZz4gaXRlbUluQ29sbGVjdGlvbjsKKyAgICAgICAgc3RkOjpvcHRpb25h
bDxTdHJpbmc+IGl0ZW1JbkNvbGxlY3Rpb247CiAgICAgICAgIGRlY29kZXIgPj4gaXRlbUluQ29s
bGVjdGlvbjsKLSAgICAgICAgaWYgKCFpdGVtSW5Db2xsZWN0aW9uLmhhc1ZhbHVlKCkpCisgICAg
ICAgIGlmICghaXRlbUluQ29sbGVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAKICAgICAgICAgZm9udEN1c3RvbVBsYXRmb3JtRGF0YSA9IGNyZWF0ZUZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEoZm9udEZhY2VEYXRhLnZhbHVlKCksIGl0ZW1JbkNvbGxlY3Rpb24udmFsdWUo
KSk7CkBAIC0xMjMsOSArMTIzLDkgQEAgT3B0aW9uYWw8Rm9udFBsYXRmb3JtRGF0YT4gQXJndW1l
bnRDb2RlcjxSZWY8Rm9udD4+OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYKICAgICAgICAg
Y3JlYXRpb25EYXRhID0gJmZvbnRDdXN0b21QbGF0Zm9ybURhdGEtPmNyZWF0aW9uRGF0YTsKICAg
ICB9CiAKLSAgICBPcHRpb25hbDxMT0dGT05UPiBsb2dGb250OworICAgIHN0ZDo6b3B0aW9uYWw8
TE9HRk9OVD4gbG9nRm9udDsKICAgICBkZWNvZGVyID4+IGxvZ0ZvbnQ7Ci0gICAgaWYgKCFsb2dG
b250Lmhhc1ZhbHVlKCkpCisgICAgaWYgKCFsb2dGb250KQogICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCiAgICAgaWYgKGZvbnRDdXN0b21QbGF0Zm9ybURhdGEpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0
aW9uLm1tCmluZGV4IDczNjdlODgwMjc2ZmE2NDE3YTllNDlmZTg5ODc5Y2ZjZTk4OWMxNDMuLjQ1
NjFjNTY4NjgyYTUyNzc0N2Q2YTUxNWVhM2Y4OGU3OTI5M2EwMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0
aW9uLm1tCkBAIC0zMDIsNyArMzAyLDcgQEAgLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29k
ZXIgKiljb2RlcgogCiAgICAgW2NvZGVyIGVuY29kZUJvb2w6c2VsZi5zdXBwcmVzc2VzSW5jcmVt
ZW50YWxSZW5kZXJpbmcgZm9yS2V5OkAic3VwcHJlc3Nlc0luY3JlbWVudGFsUmVuZGVyaW5nIl07
CiAKLSAgICBpZiAoX2FwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudC5oYXNWYWx1ZSgpKQorICAg
IGlmIChfYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KQogICAgICAgICBbY29kZXIgZW5jb2Rl
T2JqZWN0OnNlbGYuYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50IGZvcktleTpAImFwcGxpY2F0
aW9uTmFtZUZvclVzZXJBZ2VudCJdOwogCiAgICAgW2NvZGVyIGVuY29kZUJvb2w6c2VsZi5hbGxv
d3NBaXJQbGF5Rm9yTWVkaWFQbGF5YmFjayBmb3JLZXk6QCJhbGxvd3NBaXJQbGF5Rm9yTWVkaWFQ
bGF5YmFjayJdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
SW5wdXRNZXRob2RGaWx0ZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
SW5wdXRNZXRob2RGaWx0ZXIuY3BwCmluZGV4IDc2NjBjMDE1ZWNjM2M4NmE2YzMzZWE3M2ZiOWQ0
OGU2NWUxNWViZGYuLmU3YmQ2YTFlMGZmNjczMDg5ZDM3ODI2NGIwZGZiNTg0ZTVlZmVmODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0lucHV0TWV0aG9kRmls
dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JbnB1dE1ldGhv
ZEZpbHRlci5jcHAKQEAgLTgzLDkgKzgzLDkgQEAgdm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6c2V0
Q29udGV4dChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQqIGNvbnRleHQpCiAgICAgICAgIG5vdGlm
eUZvY3VzZWRJbigpOwogfQogCi12b2lkIElucHV0TWV0aG9kRmlsdGVyOjpzZXRTdGF0ZShPcHRp
b25hbDxJbnB1dE1ldGhvZFN0YXRlPiYmIHN0YXRlKQordm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6
c2V0U3RhdGUoc3RkOjpvcHRpb25hbDxJbnB1dE1ldGhvZFN0YXRlPiYmIHN0YXRlKQogewotICAg
IGJvb2wgZm9jdXNDaGFuZ2VkID0gc3RhdGUuaGFzVmFsdWUoKSAhPSBtX3N0YXRlLmhhc1ZhbHVl
KCk7CisgICAgYm9vbCBmb2N1c0NoYW5nZWQgPSBzdGF0ZS5oYXNfdmFsdWUoKSAhPSBtX3N0YXRl
Lmhhc192YWx1ZSgpOwogICAgIGlmIChmb2N1c0NoYW5nZWQgJiYgIXN0YXRlKQogICAgICAgICBu
b3RpZnlGb2N1c2VkT3V0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggZDg2ZjJmMTFi
NTExYmM5ZjRiNTE1YmE0NDAwODIzMjQ4YjIxOWQ2OS4uYjUwMDU4NTk0Y2Q3OTA1NTIyM2UyN2U3
ZjU1ZTAzNDIyMDY5YjUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKQEAgLTYyLDEwICs2Miw5
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogU3RyaW5nIEF1dG9tYXRpb25Db21tYW5kRXJy
b3I6OnRvUHJvdG9jb2xTdHJpbmcoKQogewogICAgIFN0cmluZyBwcm90b2NvbEVycm9yTmFtZSA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZSh0eXBlKTsKLSAgICBpZiAoIW1lc3NhZ2UuaGFzVmFsdWUoKSkKKyAgICBpZiAoIW1lc3Nh
Z2UpCiAgICAgICAgIHJldHVybiBwcm90b2NvbEVycm9yTmFtZTsKLQotICAgIHJldHVybiBtYWtl
U3RyaW5nKHByb3RvY29sRXJyb3JOYW1lLCBlcnJvck5hbWVBbmREZXRhaWxzU2VwYXJhdG9yLCBt
ZXNzYWdlLnZhbHVlKCkpOworICAgIHJldHVybiBtYWtlU3RyaW5nKHByb3RvY29sRXJyb3JOYW1l
LCBlcnJvck5hbWVBbmREZXRhaWxzU2VwYXJhdG9yLCAqbWVzc2FnZSk7CiB9CiAgICAgCiAvLyDC
pzguIFNlc3Npb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQYXN0ZWJvYXJkUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlBhc3RlYm9hcmRQcm94eUNvY29hLm1tCmluZGV4IDBkYWExMWNkMmViNzcyYjcxNjhmNzNl
Y2YxMmVhNzNhZTZjNjA0ODUuLmNlYWY3ZjI4Njc4OGYzZjQ4OWJiODM1MmUwMjJlODY0MTZmODdj
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBhc3RlYm9h
cmRQcm94eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBh
c3RlYm9hcmRQcm94eUNvY29hLm1tCkBAIC05NSw3ICs5NSw3IEBAIGJvb2wgV2ViUGFzdGVib2Fy
ZFByb3h5OjpjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIGNvCiAgICAgcmV0dXJuIHR5cGUgJiYgKnR5cGUgPT0gUGFzdGVib2FyZEFjY2Vzc1R5cGU6
OlR5cGVzQW5kRGF0YTsKIH0KIAotT3B0aW9uYWw8V2ViUGFzdGVib2FyZFByb3h5OjpQYXN0ZWJv
YXJkQWNjZXNzVHlwZT4gV2ViUGFzdGVib2FyZFByb3h5OjphY2Nlc3NUeXBlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgY29uc3QKK3N0
ZDo6b3B0aW9uYWw8V2ViUGFzdGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQWNjZXNzVHlwZT4gV2Vi
UGFzdGVib2FyZFByb3h5OjphY2Nlc3NUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgY29uc3QKIHsKICAgICBNRVNTQUdFX0NIRUNL
X1dJVEhfUkVUVVJOX1ZBTFVFKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCksIHN0ZDo6bnVsbG9w
dCk7CiAKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6ZGlkTW9k
aWZ5Q29udGVudHNPZlBhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aQogICAgIH0K
IH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRUeXBlcyhJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlv
bmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6Z2V0UGFzdGVib2FyZFR5cGVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgc3RkOjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFn
ZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rp
b24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsg
fSk7CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3Rl
Ym9hcmRUeXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFMKICAgICB9KTsK
IH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JU
eXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZp
ZXI+IHBhZ2VJRCwKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkUGF0aG5h
bWVzRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIHN0ZDo6b3B0aW9uYWw8
UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwKICAgICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxTdHJpbmc+JiYgcGF0aG5hbWVzLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYmIHNh
bmRib3hFeHRlbnNpb25zKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBNRVNTQUdFX0NI
RUNLX0NPTVBMRVRJT04oIXBhc3RlYm9hcmRUeXBlLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRs
ZXIoeyB9LCB7IH0pKTsKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6Z2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aQogICAgIH0pOwogfQogCi12b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0
cmluZ0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBPcHRpb25hbDxQYWdl
SWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJk
U3RyaW5nRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIHN0ZDo6b3B0aW9u
YWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcm
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9O
KCFwYXN0ZWJvYXJkVHlwZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOwogCkBA
IC0yMDEsNyArMjAxLDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRT
dHJpbmdGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICB9KTsKIH0KIAot
dm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRTdHJpbmdzRm9yVHlwZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFN0cmluZ3NG
b3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgc3RkOjpvcHRpb25hbDxQYWdl
SWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElP
TighcGFzdGVib2FyZFR5cGUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcih7IH0pKTsKIApA
QCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJk
U3RyaW5nc0ZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uCiAgICAgfSk7CiB9CiAK
LXZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2Fy
ZEJ1ZmZlckZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBzdGQ6Om9wdGlv
bmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVk
TWVtb3J5OjpJUENIYW5kbGUmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgTUVTU0FH
RV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkVHlwZS5pc0VtcHR5KCksIGNvbXBsZXRpb25I
YW5kbGVyKHsgfSkpOwogCkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OmdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwKICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRD
aGFuZ2VDb3VudChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3Rl
Ym9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZENoYW5nZUNvdW50KElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgc3RkOjpvcHRpb25hbDxQYWdl
SWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVi
b2FyZE5hbWUuaXNFbXB0eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CiAKQEAgLTI1Niw3ICsy
NTYsNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZENoYW5nZUNvdW50
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgYwogICAgIH0pOwogfQogCi12b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZENvbG9yKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZp
ZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpDb2xvciYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJk
Q29sb3IoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoV2ViQ29yZTo6Q29sb3ImJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgaWYgKCFjYW5BY2Nlc3NQYXN0ZWJvYXJkRGF0YShjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFt
ZSkpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwpAQCAtMjY5LDcgKzI2
OSw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFz
dGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkVVJMKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkVVJMKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
c3RkOjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghY2Fu
QWNjZXNzUGFzdGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lk
IFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZFVSTChJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIGNvbnN0IFN0cgogICAgIH0pOwogfQogCi12b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6YWRkUGFzdGVib2FyZFR5cGVzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRU
eXBlcywgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFBy
b3h5OjphZGRQYXN0ZWJvYXJkVHlwZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2Fy
ZFR5cGVzLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgTUVTU0FH
RV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCksIGNvbXBsZXRpb25I
YW5kbGVyKDApKTsKIApAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5
OjphZGRQYXN0ZWJvYXJkVHlwZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBT
CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkVHlw
ZXMoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBPcHRpb25hbDxQYWdl
SWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRU
eXBlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIHN0ZDo6b3B0aW9u
YWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04o
IXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogCkBAIC0z
MTgsNyArMzE4LDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRUeXBl
cyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFMKICAgICB9KTsKIH0KIAotdm9p
ZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBjb25zdCBQYXN0ZWJvYXJkVVJMJiBwYXN0ZWJvYXJkVVJMLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBX
ZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRVUkwoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBjb25zdCBQYXN0ZWJvYXJkVVJMJiBwYXN0ZWJvYXJkVVJMLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCksIGNv
bXBsZXRpb25IYW5kbGVyKDApKTsKIApAQCAtMzQyLDcgKzM0Miw3IEBAIHZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkVVJMKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
Y29uc3QgUGFzCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0
ZWJvYXJkQ29sb3IoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IsIE9wdGlvbmFsPFBhZ2VJ
ZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZENv
bG9yKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVu
dGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJk
TmFtZS5pc0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKIApAQCAtMzU3LDcgKzM1Nyw3
IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkQ29sb3IoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBPcHRpb25hbDxQYWdlSWRlbnRpZmll
cj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRTdHJpbmdGb3JU
eXBlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcs
IHN0ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChpbnQ2NF90KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBNRVNTQUdFX0NIRUNL
X0NPTVBMRVRJT04oIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIo
MCkpOwogICAgIE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTighcGFzdGVib2FyZFR5cGUuaXNFbXB0
eSgpLCBjb21wbGV0aW9uSGFuZGxlcigwKSk7CkBAIC0zNzMsNyArMzczLDcgQEAgdm9pZCBXZWJQ
YXN0ZWJvYXJkUHJveHk6OnNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwKICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmNv
bnRhaW5zVVJMU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlkZW50aWZp
ZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpjb250YWluc1VSTFN0cmluZ1N1aXRhYmxl
Rm9yTG9hZGluZyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIHN0ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAo
IWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CkBAIC0zODYsNyArMzg2LDcg
QEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmNvbnRhaW5zVVJMU3RyaW5nU3VpdGFibGVGb3JM
b2FkaW5nKElQQzo6Q29ubmVjdGlvbiYgY28KICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJv
YXJkUHJveHk6OnVybFN0cmluZ1N1aXRhYmxlRm9yTG9hZGluZyhJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVu
dGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYgdXJsLCBTdHJp
bmcmJiB0aXRsZSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6dXJsU3RyaW5nU3VpdGFibGVGb3JMb2FkaW5nKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgc3RkOjpvcHRpb25hbDxQYWdlSWRlbnRp
Zmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmIHVybCwgU3RyaW5n
JiYgdGl0bGUpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghY2FuQWNjZXNzUGFz
dGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0pOwpAQCAtNDAxLDcgKzQwMSw3IEBAIHZvaWQgV2Vi
UGFzdGVib2FyZFByb3h5Ojp1cmxTdHJpbmdTdWl0YWJsZUZvckxvYWRpbmcoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojpz
ZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUs
IGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiBpcGNIYW5kbGUsIE9wdGlvbmFsPFBhZ2VJ
ZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6c2V0UGFzdGVib2FyZEJ1
ZmZlckZvclR5cGUoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZSYgaXBjSGFuZGxlLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVy
PiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoaW50NjRfdCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkTmFtZS5p
c0VtcHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKDApKTsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBM
RVRJT04oIXBhc3RlYm9hcmRUeXBlLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwpA
QCAtNDI3LDcgKzQyNyw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpzZXRQYXN0ZWJvYXJk
QnVmZmVyRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sCiAgICAgfSk7CiB9CiAK
LXZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXROdW1iZXJPZkZpbGVzKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFn
ZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0TnVtYmVyT2ZG
aWxlcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIHN0ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCh1aW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFj
YW5BY2Nlc3NQYXN0ZWJvYXJkVHlwZXMoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5hbWUpKQogICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoMCk7CkBAIC00NDAsNyArNDQwLDcgQEAgdm9p
ZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmdldE51bWJlck9mRmlsZXMoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBjb25zdCBTdHIKICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBvcmlnaW4s
IE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmVjdG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9h
cmRQcm94eTo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIG9y
aWdpbiwgc3RkOjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxTdHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IE1FU1NBR0VfQ0hFQ0tfQ09NUExFVElPTighb3JpZ2luLmlzTnVsbCgpLCBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pKTsKIApAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5
Ojp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZUN1c3RvbURhdGEo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBWZWN0b3I8UGFzdGVib2FyZEN1c3Rv
bURhdGE+JiBkYXRhLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdl
SWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGludDY0X3QpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlQ3VzdG9tRGF0
YShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFZlY3RvcjxQYXN0ZWJvYXJkQ3Vz
dG9tRGF0YT4mIGRhdGEsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIHN0ZDo6b3B0aW9u
YWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChpbnQ2NF90
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04o
IXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoMCkpOwogCkBAIC00
NzAsNyArNDcwLDcgQEAgdm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlQ3VzdG9tRGF0YShJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFZlY3QKICAgICB9KTsKIH0KIAotdm9p
ZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmFsbFBhc3RlYm9hcmRJdGVtSW5mbyhJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGludDY0X3QgY2hh
bmdlQ291bnQsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoT3B0aW9uYWw8VmVjdG9yPFBhc3RlYm9hcmRJdGVtSW5mbz4+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OmFsbFBhc3RlYm9hcmRJdGVt
SW5mbyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGludDY0X3QgY2hhbmdlQ291bnQsIHN0ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFZlY3RvcjxQYXN0
ZWJvYXJkSXRlbUluZm8+PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWNh
bkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwpAQCAtNDgzLDcgKzQ4Myw3IEBAIHZv
aWQgV2ViUGFzdGVib2FyZFByb3h5OjphbGxQYXN0ZWJvYXJkSXRlbUluZm8oSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBjb25zCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVib2FyZFBy
b3h5OjppbmZvcm1hdGlvbkZvckl0ZW1BdEluZGV4KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgc2l6ZV90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBpbnQ2NF90IGNo
YW5nZUNvdW50LCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKE9wdGlvbmFsPFBhc3RlYm9hcmRJdGVtSW5mbz4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6aW5mb3JtYXRpb25Gb3JJdGVtQXRJbmRl
eChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIHNpemVfdCBpbmRleCwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgaW50NjRfdCBjaGFuZ2VDb3VudCwgc3RkOjpvcHRpb25hbDxQYWdl
SWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHN0ZDo6b3B0aW9uYWw8
UGFzdGVib2FyZEl0ZW1JbmZvPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAo
IWNhbkFjY2Vzc1Bhc3RlYm9hcmRUeXBlcyhjb25uZWN0aW9uLCBwYXN0ZWJvYXJkTmFtZSkpCiAg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihzdGQ6Om51bGxvcHQpOwpAQCAtNDk2LDcg
KzQ5Niw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjppbmZvcm1hdGlvbkZvckl0ZW1BdElu
ZGV4KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwKICAgICB9KTsKIH0KIAotdm9pZCBXZWJQ
YXN0ZWJvYXJkUHJveHk6OmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9uYWw8UGFnZUlk
ZW50aWZpZXI+IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6Z2V0UGFzdGVib2FyZEl0
ZW1zQ291bnQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQodWludDY0X3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlm
ICghY2FuQWNjZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkK
ICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKDApOwpAQCAtNTA5LDcgKzUwOSw3IEBA
IHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpnZXRQYXN0ZWJvYXJkSXRlbXNDb3VudChJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVib2Fy
ZFByb3h5OjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBzaXplX3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9p
ZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIHNpemVfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgc3RkOjpvcHRpb25hbDxQYWdlSWRl
bnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBNRVNTQUdFX0NIRUNLX0NPTVBMRVRJT04oIXBhc3RlYm9h
cmRUeXBlLmlzRW1wdHkoKSwgY29tcGxldGlvbkhhbmRsZXIoeyB9KSk7CiAKQEAgLTUyNCw3ICs1
MjQsNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJk
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgcwogICAgIH0pOwogfQogCi12b2lkIFdlYlBh
c3RlYm9hcmRQcm94eTo6cmVhZFVSTEZyb21QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgc2l6ZV90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRp
b25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmlu
ZyYmIHVybCwgU3RyaW5nJiYgdGl0bGUpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJQ
YXN0ZWJvYXJkUHJveHk6OnJlYWRVUkxGcm9tUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIHNpemVfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgc3Rk
OjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFN0cmluZyYmIHVybCwgU3RyaW5nJiYgdGl0bGUpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGlmICghY2FuQWNjZXNzUGFzdGVib2FyZERhdGEoY29ubmVjdGlvbiwgcGFzdGVib2FyZE5h
bWUpKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9LCB7IH0pOwpAQCAtNTM5
LDcgKzUzOSw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5OjpyZWFkVVJMRnJvbVBhc3RlYm9h
cmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBzaXplCiAgICAgfSk7CiB9CiAKLXZvaWQg
V2ViUGFzdGVib2FyZFByb3h5OjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBzaXplX3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVy
PiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUm
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6cmVhZEJ1
ZmZlckZyb21QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgc2l6ZV90IGlu
ZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgTUVTU0FHRV9DSEVDS19DT01QTEVUSU9OKCFwYXN0ZWJvYXJkVHlwZS5pc0Vt
cHR5KCksIGNvbXBsZXRpb25IYW5kbGVyKHsgfSkpOwogCkBAIC01NjcsNyArNTY3LDcgQEAgdm9p
ZCBXZWJQYXN0ZWJvYXJkUHJveHk6OnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZChJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIHMKICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJkUHJv
eHk6OmNvbnRhaW5zU3RyaW5nU2FmZUZvckRPTVRvUmVhZEZvclR5cGUoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6Y29udGFpbnNTdHJpbmdTYWZlRm9yRE9NVG9SZWFkRm9yVHlwZShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgc3RkOjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghY2FuQWNj
ZXNzUGFzdGVib2FyZFR5cGVzKGNvbm5lY3Rpb24sIHBhc3RlYm9hcmROYW1lKSkKICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lk
IFdlYlBhc3RlYm9hcmRQcm94eTo6Y29udGFpbnNTdHJpbmdTYWZlRm9yRE9NVG9SZWFkRm9yVHlw
ZShJUEM6OkNvbm5lY3Rpb24mCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCi12b2lkIFdl
YlBhc3RlYm9hcmRQcm94eTo6d3JpdGVVUkxUb1Bhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBjb25zdCBQYXN0ZWJvYXJkVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQpCit2b2lkIFdlYlBhc3Rl
Ym9hcmRQcm94eTo6d3JpdGVVUkxUb1Bhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBjb25zdCBQYXN0ZWJvYXJkVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIHN0ZDo6b3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkKIHsKICAgICBNRVNTQUdF
X0NIRUNLKCFwYXN0ZWJvYXJkTmFtZS5pc0VtcHR5KCkpOwogCkBAIC01OTgsNyArNTk4LDcgQEAg
dm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlVVJMVG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgY29uc3QKICAgICB9KTsKIH0KIAotdm9pZCBXZWJQYXN0ZWJvYXJk
UHJveHk6OndyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50LCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlE
KQordm9pZCBXZWJQYXN0ZWJvYXJkUHJveHk6OndyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJD
b250ZW50JiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBzdGQ6Om9wdGlv
bmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyghcGFzdGVi
b2FyZE5hbWUuaXNFbXB0eSgpKTsKIApAQCAtNjE0LDcgKzYxNCw3IEBAIHZvaWQgV2ViUGFzdGVi
b2FyZFByb3h5Ojp3cml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uCiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZUlt
YWdlVG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgV2ViQ29y
ZTo6UGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIE9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQpCit2b2lkIFdlYlBhc3Rl
Ym9hcmRQcm94eTo6d3JpdGVJbWFnZVRvUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVy
PiBwYWdlSUQpCiB7CiAgICAgTUVTU0FHRV9DSEVDSyghcGFzdGVib2FyZE5hbWUuaXNFbXB0eSgp
KTsKIApAQCAtNjMwLDcgKzYzMCw3IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZUlt
YWdlVG9QYXN0ZWJvYXJkKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uCiAgICAgfSk7
CiB9CiAKLXZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVN0cmluZ1RvUGFzdGVib2FyZChJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUs
IGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgT3B0aW9u
YWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCkKK3ZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0
ZVN0cmluZ1RvUGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgc3RkOjpvcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlEKQogewog
ICAgIE1FU1NBR0VfQ0hFQ0soIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSk7CiAgICAgTUVTU0FH
RV9DSEVDSyghcGFzdGVib2FyZFR5cGUuaXNFbXB0eSgpIHx8IHRleHQuaXNFbXB0eSgpKTsKQEAg
LTY0NywxNCArNjQ3LDE0IEBAIHZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp3cml0ZVN0cmluZ1Rv
UGFzdGVib2FyZChJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvCiAgICAgfSk7CiB9CiAK
LXZvaWQgV2ViUGFzdGVib2FyZFByb3h5Ojp1cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGlkZW50aWZpZXJzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4pCit2b2lkIFdlYlBhc3RlYm9hcmRQcm94
eTo6dXBkYXRlU3VwcG9ydGVkVHlwZUlkZW50aWZpZXJzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBp
ZGVudGlmaWVycywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgc3RkOjpvcHRpb25hbDxQ
YWdlSWRlbnRpZmllcj4pCiB7CiAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1l
KS51cGRhdGVTdXBwb3J0ZWRUeXBlSWRlbnRpZmllcnMoaWRlbnRpZmllcnMpOwogfQogCiAjZW5k
aWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotT3B0aW9uYWw8RGF0YU93bmVyVHlwZT4gV2Vi
UGFzdGVib2FyZFByb3h5OjpkZXRlcm1pbmVEYXRhT3duZXIoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBPcHRpb25hbDxQYWdlSWRlbnRp
Zmllcj4gcGFnZUlELCBQYXN0ZWJvYXJkQWNjZXNzSW50ZW50IGludGVudCkgY29uc3QKK3N0ZDo6
b3B0aW9uYWw8RGF0YU93bmVyVHlwZT4gV2ViUGFzdGVib2FyZFByb3h5OjpkZXRlcm1pbmVEYXRh
T3duZXIoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBwYWdlSUQsIFBhc3RlYm9hcmRB
Y2Nlc3NJbnRlbnQgaW50ZW50KSBjb25zdAogewogICAgIE1FU1NBR0VfQ0hFQ0tfV0lUSF9SRVRV
Uk5fVkFMVUUoIXBhc3RlYm9hcmROYW1lLmlzRW1wdHkoKSwgc3RkOjpudWxsb3B0KTsKIApAQCAt
NjY1LDcgKzY2NSw3IEBAIE9wdGlvbmFsPERhdGFPd25lclR5cGU+IFdlYlBhc3RlYm9hcmRQcm94
eTo6ZGV0ZXJtaW5lRGF0YU93bmVyKElQQzo6Q29ubmVjdGlvbiYKICAgICAgICAgcmV0dXJuIERh
dGFPd25lclR5cGU6OlVuZGVmaW5lZDsKIAogI2lmIEhBVkUoUEFTVEVCT0FSRF9EQVRBX09XTkVS
KQotICAgIE9wdGlvbmFsPERhdGFPd25lclR5cGU+IHJlc3VsdDsKKyAgICBzdGQ6Om9wdGlvbmFs
PERhdGFPd25lclR5cGU+IHJlc3VsdDsKICAgICBmb3IgKGF1dG8qIHBhZ2UgOiBwcm9jZXNzLT5w
YWdlcygpKSB7CiAgICAgICAgIGlmIChwYWdlLT53ZWJQYWdlSUQoKSA9PSAqcGFnZUlEKSB7CiAg
ICAgICAgICAgICByZXN1bHQgPSBwYWdlLT5kYXRhT3duZXJGb3JQYXN0ZWJvYXJkKGludGVudCk7
CkBAIC02NzQsNyArNjc0LDcgQEAgT3B0aW9uYWw8RGF0YU93bmVyVHlwZT4gV2ViUGFzdGVib2Fy
ZFByb3h5OjpkZXRlcm1pbmVEYXRhT3duZXIoSVBDOjpDb25uZWN0aW9uJgogICAgIH0KICAgICAv
LyBJZiB0aGlzIG1lc3NhZ2UgY2hlY2sgaXMgaGl0LCB0aGVuIHRoZSBpbmNvbWluZyB3ZWIgcGFn
ZSBJRCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IHBhZ2UKICAgICAvLyBjdXJyZW50bHkga25v
d24gdG8gdGhlIFVJIHByb2Nlc3MuCi0gICAgTUVTU0FHRV9DSEVDS19XSVRIX1JFVFVSTl9WQUxV
RShyZXN1bHQuaGFzVmFsdWUoKSwgc3RkOjpudWxsb3B0KTsKKyAgICBNRVNTQUdFX0NIRUNLX1dJ
VEhfUkVUVVJOX1ZBTFVFKHJlc3VsdC5oYXNfdmFsdWUoKSwgc3RkOjpudWxsb3B0KTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaW50ZW50KTsKQEAgLTcwOCw3
ICs3MDgsNyBAQCB2b2lkIFdlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZEFjY2Vzc0luZm9y
bWF0aW9uOjpyZXZva2VBY2Nlc3MoV2ViUHJvY2Vzc1BybwogICAgIH0pOwogfQogCi1PcHRpb25h
bDxXZWJQYXN0ZWJvYXJkUHJveHk6OlBhc3RlYm9hcmRBY2Nlc3NUeXBlPiBXZWJQYXN0ZWJvYXJk
UHJveHk6OlBhc3RlYm9hcmRBY2Nlc3NJbmZvcm1hdGlvbjo6YWNjZXNzVHlwZShXZWJQcm9jZXNz
UHJveHkmIHByb2Nlc3MpIGNvbnN0CitzdGQ6Om9wdGlvbmFsPFdlYlBhc3RlYm9hcmRQcm94eTo6
UGFzdGVib2FyZEFjY2Vzc1R5cGU+IFdlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZEFjY2Vz
c0luZm9ybWF0aW9uOjphY2Nlc3NUeXBlKFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcykgY29uc3QK
IHsKICAgICBhdXRvIG1hdGNoSW5kZXggPSBwcm9jZXNzZXMuZmluZE1hdGNoaW5nKFsmXShhdXRv
JiBwcm9jZXNzQW5kVHlwZSkgewogICAgICAgICByZXR1cm4gcHJvY2Vzc0FuZFR5cGUuZmlyc3Qg
PT0gJnByb2Nlc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKaW5kZXggZThi
OWU5MGY3MzQxMTIxNjc0YjY3M2ViNDZlNDFkM2VkMGQwOWIzOS4uZWI4NTU5ZTBjM2MzYmE2ZDg0
ZDJmMGExMmJhYWI2NDIyYTc1NTA1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50
LmNwcApAQCAtMTIyLDcgKzEyMiw3IEBAIFJlbW90ZUluc3BlY3RvckNsaWVudDo6flJlbW90ZUlu
c3BlY3RvckNsaWVudCgpCiB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2VuZFdlYkluc3Bl
Y3RvckV2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblJ1bkxv
b3AoKSk7Ci0gICAgQVNTRVJUKG1fY29ubmVjdGlvbklELmhhc1ZhbHVlKCkpOworICAgIEFTU0VS
VChtX2Nvbm5lY3Rpb25JRCk7CiAgICAgYXV0byBtZXNzYWdlID0gZXZlbnQudXRmOCgpOwogICAg
IHNlbmQobV9jb25uZWN0aW9uSUQudmFsdWUoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4obWVzc2FnZS5kYXRhKCkpLCBtZXNzYWdlLmxlbmd0aCgpKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHlHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2dsaWIvVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHlHTGliLmNwcAppbmRleCA0ZTFjZWRkOWYz
YjI4MjliY2M0OGYwMzlmZjc4YTM2ZmQ0ZTlmMTM4Li42NWU1YjdlNWFiNzYzNTAzYjJlN2FhMDU4
YWMzNjBhOWZlZmEwZGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9nbGli
L1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5R0xpYi5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvZ2xpYi9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXJQcm94eUdMaWIuY3BwCkBAIC0yOSw4ICsyOSw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiB2b2lkIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5OjpwbGF0Zm9y
bVZhbGlkYXRlVXNlck1lZGlhUmVxdWVzdENvbnN0cmFpbnRzKFJlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXI6OlZhbGlkQ29uc3RyYWludHNIYW5kbGVyJiYgdmFsaWRIYW5kbGVyLCBSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyOjpJbnZhbGlkQ29uc3RyYWludHNIYW5kbGVyJiYgaW52YWxpZEhhbmRs
ZXIsIFN0cmluZyYmIGRldmljZUlESGFzaFNhbHQpCiB7Ci0gICAgbV9wYWdlLnByb2Nlc3MoKS5j
b25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXI6OlZhbGlkYXRlVXNlck1lZGlhUmVxdWVzdENvbnN0cmFpbnRzKG1fY3VycmVudFVz
ZXJNZWRpYVJlcXVlc3QtPnVzZXJSZXF1ZXN0KCksIGRldmljZUlESGFzaFNhbHQpLCBbdmFsaWRI
YW5kbGVyID0gV1RGTW92ZSh2YWxpZEhhbmRsZXIpLCBpbnZhbGlkSGFuZGxlciA9IFdURk1vdmUo
aW52YWxpZEhhbmRsZXIpXShPcHRpb25hbDxTdHJpbmc+IGludmFsaWRDb25zdHJhaW50LCBWZWN0
b3I8V2ViQ29yZTo6Q2FwdHVyZURldmljZT4gYXVkaW9EZXZpY2VzLCBWZWN0b3I8V2ViQ29yZTo6
Q2FwdHVyZURldmljZT4gdmlkZW9EZXZpY2VzLCBPcHRpb25hbDxTdHJpbmc+IGRldmljZUlkZW50
aWZpZXJIYXNoU2FsdCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChpbnZhbGlkQ29uc3RyYWludC5o
YXNWYWx1ZSgpKQorICAgIG1fcGFnZS5wcm9jZXNzKCkuY29ubmVjdGlvbigpLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjpWYWxpZGF0ZVVzZXJN
ZWRpYVJlcXVlc3RDb25zdHJhaW50cyhtX2N1cnJlbnRVc2VyTWVkaWFSZXF1ZXN0LT51c2VyUmVx
dWVzdCgpLCBkZXZpY2VJREhhc2hTYWx0KSwgW3ZhbGlkSGFuZGxlciA9IFdURk1vdmUodmFsaWRI
YW5kbGVyKSwgaW52YWxpZEhhbmRsZXIgPSBXVEZNb3ZlKGludmFsaWRIYW5kbGVyKV0oc3RkOjpv
cHRpb25hbDxTdHJpbmc+IGludmFsaWRDb25zdHJhaW50LCBWZWN0b3I8V2ViQ29yZTo6Q2FwdHVy
ZURldmljZT4gYXVkaW9EZXZpY2VzLCBWZWN0b3I8V2ViQ29yZTo6Q2FwdHVyZURldmljZT4gdmlk
ZW9EZXZpY2VzLCBPcHRpb25hbDxTdHJpbmc+IGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCkgbXV0
YWJsZSB7CisgICAgICAgIGlmIChpbnZhbGlkQ29uc3RyYWludCkKICAgICAgICAgICAgIGludmFs
aWRIYW5kbGVyKCppbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHZhbGlkSGFuZGxlcihXVEZNb3ZlKGF1ZGlvRGV2aWNlcyksIFdURk1vdmUodmlkZW9EZXZpY2Vz
KSwgV1RGTW92ZSgqZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0KSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhU291cmNlUHJpdmF0ZVJlbW90ZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhU291cmNlUHJpdmF0
ZVJlbW90ZS5jcHAKaW5kZXggNGIzMGVkYTkwYzMwNTMyNjQ3NTA4YzJhZDA2ZWQzOTM0ZGRmOGIz
NC4uMjUyOWY5Yjc0ZmI3NDk1ZmVlNTEwMTk4YjQ5NGRjZDY5YzIwNjJjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVNvdXJjZVByaXZhdGVSZW1v
dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFTb3Vy
Y2VQcml2YXRlUmVtb3RlLmNwcApAQCAtOTgsMTEgKzk4LDExIEBAIE1lZGlhU291cmNlUHJpdmF0
ZTo6QWRkU3RhdHVzIE1lZGlhU291cmNlUHJpdmF0ZVJlbW90ZTo6YWRkU291cmNlQnVmZmVyKGNv
bnN0IENvCiAgICAgaWYgKCFtX2dwdVByb2Nlc3NDb25uZWN0aW9uKQogICAgICAgICByZXR1cm4g
c3RhdHVzOwogCi0gICAgT3B0aW9uYWw8UmVtb3RlU291cmNlQnVmZmVySWRlbnRpZmllcj4gcmVt
b3RlU291cmNlQnVmZmVySWRlbnRpZmllcjsKKyAgICBzdGQ6Om9wdGlvbmFsPFJlbW90ZVNvdXJj
ZUJ1ZmZlcklkZW50aWZpZXI+IHJlbW90ZVNvdXJjZUJ1ZmZlcklkZW50aWZpZXI7CiAgICAgbV9n
cHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmRTeW5jKE1lc3NhZ2VzOjpSZW1v
dGVNZWRpYVNvdXJjZVByb3h5OjpBZGRTb3VyY2VCdWZmZXIoY29udGVudFR5cGUpLCBNZXNzYWdl
czo6UmVtb3RlTWVkaWFTb3VyY2VQcm94eTo6QWRkU291cmNlQnVmZmVyOjpSZXBseShzdGF0dXMs
IHJlbW90ZVNvdXJjZUJ1ZmZlcklkZW50aWZpZXIpLCBtX2lkZW50aWZpZXIpOwogCiAgICAgaWYg
KHN0YXR1cyA9PSBBZGRTdGF0dXM6Ok9rKSB7Ci0gICAgICAgIEFTU0VSVChyZW1vdGVTb3VyY2VC
dWZmZXJJZGVudGlmaWVyLmhhc1ZhbHVlKCkpOworICAgICAgICBBU1NFUlQocmVtb3RlU291cmNl
QnVmZmVySWRlbnRpZmllci5oYXNfdmFsdWUoKSk7CiAgICAgICAgIGF1dG8gbmV3U291cmNlQnVm
ZmVyID0gU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6Y3JlYXRlKCptX2dwdVByb2Nlc3NDb25u
ZWN0aW9uLCAqcmVtb3RlU291cmNlQnVmZmVySWRlbnRpZmllciwgKnRoaXMsICptX21lZGlhUGxh
eWVyUHJpdmF0ZSk7CiAgICAgICAgIG91dFByaXZhdGUgPSBuZXdTb3VyY2VCdWZmZXIuY29weVJl
ZigpOwogICAgICAgICBtX3NvdXJjZUJ1ZmZlcnMuYXBwZW5kKFdURk1vdmUobmV3U291cmNlQnVm
ZmVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9XZWJQYWdlQ29jb2EubW0KaW5kZXggYjczYTBkODlkY2QyY2U4ZDFlZTFjOGQ2OTQ2MDkwZGFk
NGQ1YzFkOS4uNjNkYjkxMTBkNDVlMjA1YjRhYzk5YTUzZmU1ZWI1ZjFkMmNjMjgyMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VD
b2NvYS5tbQpAQCAtODcsNyArODcsNyBAQCB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtRGlkUmVjZWl2
ZUxvYWRQYXJhbWV0ZXJzKGNvbnN0IExvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogI2lmIFBM
QVRGT1JNKElPUykKICAgICBpZiAocGFyYW1ldGVycy5jb250ZW50RmlsdGVyRXh0ZW5zaW9uSGFu
ZGxlKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoKnBhcmFt
ZXRlcnMuY29udGVudEZpbHRlckV4dGVuc2lvbkhhbmRsZSk7Ci0gICAgUGFyZW50YWxDb250cm9s
c0NvbnRlbnRGaWx0ZXI6OnNldEhhc0NvbnN1bWVkU2FuZGJveEV4dGVuc2lvbihwYXJhbWV0ZXJz
LmNvbnRlbnRGaWx0ZXJFeHRlbnNpb25IYW5kbGUuaGFzVmFsdWUoKSk7CisgICAgUGFyZW50YWxD
b250cm9sc0NvbnRlbnRGaWx0ZXI6OnNldEhhc0NvbnN1bWVkU2FuZGJveEV4dGVuc2lvbihwYXJh
bWV0ZXJzLmNvbnRlbnRGaWx0ZXJFeHRlbnNpb25IYW5kbGUuaGFzX3ZhbHVlKCkpOwogCiAgICAg
aWYgKHBhcmFtZXRlcnMuZnJvbnRib2FyZFNlcnZpY2VFeHRlbnNpb25IYW5kbGUpCiAgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseSgqcGFyYW1ldGVycy5mcm9udGJv
YXJkU2VydmljZUV4dGVuc2lvbkhhbmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRleCA0MThhNGE1NzMxOTlmZTc3Yjc4YmZj
ZWIzNDRlNDVjNDgzOWMzOWEzLi4xYTdiMTcyYjA3OWRhOTU3NmFiY2E2MWZjZjliNzNhNjg2MDY5
YjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vz
c0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNz
Q29jb2EubW0KQEAgLTExNDIsNyArMTE0Miw3IEBAIHN0YXRpYyB2b2lkIHNldFByZWZlcmVuY2VW
YWx1ZShjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBrZXksIGlkIHZhbHVlCiAK
IHZvaWQgV2ViUHJvY2Vzczo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNvbnN0IFN0cmluZyYg
ZG9tYWluLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgT3B0aW9uYWw8U3RyaW5nPiYgZW5jb2Rl
ZFZhbHVlKQogewotICAgIGlmICghZW5jb2RlZFZhbHVlLmhhc1ZhbHVlKCkpIHsKKyAgICBpZiAo
IWVuY29kZWRWYWx1ZSkgewogICAgICAgICBzZXRQcmVmZXJlbmNlVmFsdWUoZG9tYWluLCBrZXks
IG5pbCk7CiAgICAgICAgIGRpc3BhdGNoU2ltdWxhdGVkTm90aWZpY2F0aW9uc0ZvclByZWZlcmVu
Y2VDaGFuZ2Uoa2V5KTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDhmMzE0Mzc4ZWZlZDgzMjk5NjRiNjM1NjQ3MWY4
MzkyNzM3YWJjZTkuLmMyMzk0ZDFkMjIwN2Y4OTFiNjY0ODQxNDJmZmQ4ZmJhNTA2N2U1NGIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMCBAQAorMjAyMS0wNS0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgQ2xpZW50cyBvZiBvcHRpb25hbCBzaG91bGQgdXNlIGhhc192YWx1ZSBpbnN0ZWFkIG9m
IHJlbHlpbmcgb24gaGFzVmFsdWUgbWFjcm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNjM5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NCT1JSZWFk
ZXJUZXN0LmNwcDogVXNlIGhhc192YWx1ZS4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ0JPUldyaXRlclRlc3QuY3BwOiBEaXR0by4KKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHA6IERpdHRvLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2ViS2l0V2ViVmll
dy5jcHA6CisgICAgICAgIChBdWRpb1JlbmRlcmluZ1dlYlZpZXdUZXN0OjpoYW5kbGVTdGFydCk6
IERpdHRvLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1v
Y2suY3BwOgorICAgICAgICAoV1RSOjpHZW9sb2NhdGlvblByb3ZpZGVyTW9jazo6c2V0UG9zaXRp
b24pOiBEaXR0by4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJX
S1dlYlZpZXcubW06CisgICAgICAgICgtW1Rlc3RSdW5uZXJXS1dlYlZpZXcgY2FuUGVyZm9ybUFj
dGlvbjp3aXRoU2VuZGVyOl0pOiBEaXR0by4KKwogMjAyMS0wNS0yOCAgTWF0dCBHaWxsaWdhbiAg
PG1hdHRoZXdfZ2lsbGlnYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFByZXZlbnQgcmVzZXR0aW5n
IHNjcm9sbCBwb3NpdGlvbiBpbiB1bm5lY2Vzc2FyeSBjYXNlcyBkdXJpbmcgcGFnZSBsb2FkCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ0JPUlJlYWRlclRl
c3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NCT1JSZWFkZXJUZXN0
LmNwcAppbmRleCAzYWI2MDQ3ZmMzMDE4NGZiMDQxN2RjNTQ2NTlkMzg2YTE1YjU2ZjliLi4wYTky
OWEwZjZhNDQ2NWMxYTNmMjU5MzE3NWU5N2EzMmViNGIzNjY5IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ0JPUlJlYWRlclRlc3QuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DQk9SUmVhZGVyVGVzdC5jcHAKQEAgLTYzLDgg
KzYzLDggQEAgVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWRVaW50KQogICAgIH07CiAKICAg
ICBmb3IgKGNvbnN0IFVpbnRUZXN0Q2FzZSYgdGVzdENhc2UgOiBrVWludFRlc3RDYXNlcykgewot
ICAgICAgICBPcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHRlc3RD
YXNlLmNib3JEYXRhKTsKLSAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNWYWx1ZSgpKTsKKyAg
ICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHRl
c3RDYXNlLmNib3JEYXRhKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7
CiAgICAgICAgIEFTU0VSVF9UUlVFKGNib3IudmFsdWUoKS50eXBlKCkgPT0gQ0JPUlZhbHVlOjpU
eXBlOjpVbnNpZ25lZCk7CiAgICAgICAgIEVYUEVDVF9FUShjYm9yLnZhbHVlKCkuZ2V0SW50ZWdl
cigpLCB0ZXN0Q2FzZS52YWx1ZSk7CiAgICAgfQpAQCAtMTA4LDggKzEwOCw4IEBAIFRFU1QoQ0JP
UlJlYWRlclRlc3QsIFRlc3RVaW50RW5jb2RlZFdpdGhOb25NaW5pbXVtQnl0ZUxlbmd0aCkKIAog
ICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvckNvZGU7CiAgICAgZm9yIChjb25zdCBh
dXRvJiBub25NaW5pbWFsVWludCA6IG5vbk1pbmltYWxVaW50RW5jb2RpbmdzKSB7Ci0gICAgICAg
IE9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQobm9uTWluaW1hbFVp
bnQsICZlcnJvckNvZGUpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoY2Jvci5oYXNWYWx1ZSgpKTsK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFk
KG5vbk1pbmltYWxVaW50LCAmZXJyb3JDb2RlKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNib3Iu
aGFzX3ZhbHVlKCkpOwogICAgICAgICBFWFBFQ1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRl
cjo6RGVjb2RlckVycm9yOjpOb25NaW5pbWFsQ0JPUkVuY29kaW5nKTsKICAgICB9CiB9CkBAIC0x
MzQsOCArMTM0LDggQEAgVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWROZWdhdGl2ZUludCkK
ICAgICB9OwogCiAgICAgZm9yIChjb25zdCBOZWdhdGl2ZUludFRlc3RDYXNlJiB0ZXN0Q2FzZSA6
IGtOZWdhdGl2ZUludFRlc3RDYXNlcykgewotICAgICAgICBPcHRpb25hbDxDQk9SVmFsdWU+IGNi
b3IgPSBDQk9SUmVhZGVyOjpyZWFkKHRlc3RDYXNlLmNib3JEYXRhKTsKLSAgICAgICAgQVNTRVJU
X1RSVUUoY2Jvci5oYXNWYWx1ZSgpKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+
IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHRlc3RDYXNlLmNib3JEYXRhKTsKKyAgICAgICAgQVNT
RVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CiAgICAgICAgIEFTU0VSVF9UUlVFKGNib3IudmFs
dWUoKS50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpOZWdhdGl2ZSk7CiAgICAgICAgIEVYUEVD
VF9FUShjYm9yLnZhbHVlKCkuZ2V0SW50ZWdlcigpLCB0ZXN0Q2FzZS5uZWdhdGl2ZUludCk7CiAg
ICAgfQpAQCAtMTU0LDggKzE1NCw4IEBAIFRFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RSZWFkQnl0
ZXMpCiAgICAgfTsKIAogICAgIGZvciAoY29uc3QgQnl0ZVRlc3RDYXNlJiB0ZXN0Q2FzZSA6IGtC
eXRlU3RyaW5nVGVzdENhc2VzKSB7Ci0gICAgICAgIE9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9
IENCT1JSZWFkZXI6OnJlYWQodGVzdENhc2UuY2JvckRhdGEpOwotICAgICAgICBBU1NFUlRfVFJV
RShjYm9yLmhhc1ZhbHVlKCkpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2Jv
ciA9IENCT1JSZWFkZXI6OnJlYWQodGVzdENhc2UuY2JvckRhdGEpOworICAgICAgICBBU1NFUlRf
VFJVRShjYm9yLmhhc192YWx1ZSgpKTsKICAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci52YWx1ZSgp
LnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6OkJ5dGVTdHJpbmcpOwogICAgICAgICBFWFBFQ1Rf
VFJVRShjYm9yLnZhbHVlKCkuZ2V0Qnl0ZVN0cmluZygpID09IHRlc3RDYXNlLnZhbHVlKTsKICAg
ICB9CkBAIC0xNzksOCArMTc5LDggQEAgVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdFJlYWRTdHJp
bmcpCiAgICAgfTsKIAogICAgIGZvciAoY29uc3QgU3RyaW5nVGVzdENhc2UmIHRlc3RDYXNlIDog
a1N0cmluZ1Rlc3RDYXNlcykgewotICAgICAgICBPcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBD
Qk9SUmVhZGVyOjpyZWFkKHRlc3RDYXNlLmNib3JEYXRhKTsKLSAgICAgICAgQVNTRVJUX1RSVUUo
Y2Jvci5oYXNWYWx1ZSgpKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3Ig
PSBDQk9SUmVhZGVyOjpyZWFkKHRlc3RDYXNlLmNib3JEYXRhKTsKKyAgICAgICAgQVNTRVJUX1RS
VUUoY2Jvci5oYXNfdmFsdWUoKSk7CiAgICAgICAgIEFTU0VSVF9UUlVFKGNib3IudmFsdWUoKS50
eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpTdHJpbmcpOwogICAgICAgICBFWFBFQ1RfVFJVRShj
Ym9yLnZhbHVlKCkuZ2V0U3RyaW5nKCkgPT0gdGVzdENhc2UudmFsdWUpOwogICAgIH0KQEAgLTIw
Nyw4ICsyMDcsOCBAQCBURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0UmVhZFN0cmluZ1dpdGhOVUwp
CiAgICAgfTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgdGVzdENhc2UgOiBrU3RyaW5nVGVzdENh
c2VzKSB7Ci0gICAgICAgIE9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJl
YWQodGVzdENhc2UuY2JvckRhdGEpOwotICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc1ZhbHVl
KCkpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6
OnJlYWQodGVzdENhc2UuY2JvckRhdGEpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192
YWx1ZSgpKTsKICAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci52YWx1ZSgpLnR5cGUoKSA9PSBDQk9S
VmFsdWU6OlR5cGU6OlN0cmluZyk7CiAgICAgICAgIEVYUEVDVF9UUlVFKGNib3IudmFsdWUoKS5n
ZXRTdHJpbmcoKSA9PSB0ZXN0Q2FzZS52YWx1ZSk7CiAgICAgfQpAQCAtMjI0LDggKzIyNCw4IEBA
IFRFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RSZWFkU3RyaW5nV2l0aEludmFsaWRCeXRlU2VxdWVu
Y2VBZnRlck5VTCkKICAgICAgICAgMHg2MywgMHgwMCwgMHgwMCwgMHhBNgogICAgIH07CiAgICAg
Q0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yQ29kZTsKLSAgICBPcHRpb25hbDxDQk9SVmFs
dWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHN0cmluZ1dpdGhJbnZhbGlkQ29udGludWF0aW9u
Qnl0ZSwgJmVycm9yQ29kZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzVmFsdWUoKSk7Cisg
ICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHN0cmlu
Z1dpdGhJbnZhbGlkQ29udGludWF0aW9uQnl0ZSwgJmVycm9yQ29kZSk7CisgICAgRVhQRUNUX0ZB
TFNFKGNib3IuaGFzX3ZhbHVlKCkpOwogICAgIEVYUEVDVF9UUlVFKGVycm9yQ29kZSA9PSBDQk9S
UmVhZGVyOjpEZWNvZGVyRXJyb3I6OkludmFsaWRVVEY4KTsKIH0KIApAQCAtMjM4LDggKzIzOCw4
IEBAIFRFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RSZWFkQXJyYXkpCiAgICAgICAgIDB4MTgsIDB4
MTgsIDB4MTksCiAgICAgfTsKIAotICAgIE9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JS
ZWFkZXI6OnJlYWQoa0FycmF5VGVzdENhc2VDQk9SKTsKLSAgICBBU1NFUlRfVFJVRShjYm9yLmhh
c1ZhbHVlKCkpOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRl
cjo6cmVhZChrQXJyYXlUZXN0Q2FzZUNCT1IpOworICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzX3Zh
bHVlKCkpOwogICAgIGNvbnN0IENCT1JWYWx1ZSBjYm9yQXJyYXkgPSBXVEZNb3ZlKGNib3IudmFs
dWUoKSk7CiAgICAgQVNTRVJUX1RSVUUoY2JvckFycmF5LnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5
cGU6OkFycmF5KTsKICAgICBBU1NFUlRfRVEoY2JvckFycmF5LmdldEFycmF5KCkuc2l6ZSgpLCAy
NXUpOwpAQCAtMjY4LDggKzI2OCw4IEBAIFRFU1QoQ0JPUlJlYWRlclRlc3QsIFRlc3RSZWFkTWFw
V2l0aE1hcFZhbHVlKQogICAgICAgICAweDYyLCAweDQxLCAweDQxLCAvLyAiQUEiCiAgICAgfTsK
IAotICAgIE9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQoa01hcFRl
c3RDYXNlQ0JPUik7Ci0gICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNWYWx1ZSgpKTsKKyAgICBzdGQ6
Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQoa01hcFRlc3RDYXNl
Q0JPUik7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CiAgICAgY29uc3QgQ0JP
UlZhbHVlIGNib3JWYWwgPSBXVEZNb3ZlKGNib3IudmFsdWUoKSk7CiAgICAgQVNTRVJUX1RSVUUo
Y2JvclZhbC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpNYXApOwogICAgIEFTU0VSVF9FUShj
Ym9yVmFsLmdldE1hcCgpLnNpemUoKSwgNHUpOwpAQCAtMzEyLDggKzMxMiw4IEBAIFRFU1QoQ0JP
UlJlYWRlclRlc3QsIFRlc3RSZWFkTWFwV2l0aEludGVnZXJLZXlzKQogICAgICAgICAweDYxLCAw
eDY0LCAvLyB2YWx1ZSA6ICJkIgogICAgIH07CiAKLSAgICBPcHRpb25hbDxDQk9SVmFsdWU+IGNi
b3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtNYXBXaXRoSW50ZWdlcktleUNCT1IpOwotICAgIEFTU0VS
VF9UUlVFKGNib3IuaGFzVmFsdWUoKSk7CisgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNi
b3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtNYXBXaXRoSW50ZWdlcktleUNCT1IpOworICAgIEFTU0VS
VF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOwogICAgIGNvbnN0IENCT1JWYWx1ZSBjYm9yVmFsID0g
V1RGTW92ZShjYm9yLnZhbHVlKCkpOwogICAgIEFTU0VSVF9UUlVFKGNib3JWYWwudHlwZSgpID09
IENCT1JWYWx1ZTo6VHlwZTo6TWFwKTsKICAgICBBU1NFUlRfRVEoY2JvclZhbC5nZXRNYXAoKS5z
aXplKCksIDR1KTsKQEAgLTM1Miw4ICszNTIsOCBAQCBURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0
UmVhZE1hcFdpdGhBcnJheSkKICAgICAgICAgMHgwMywKICAgICB9OwogCi0gICAgT3B0aW9uYWw8
Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6cmVhZChrTWFwQXJyYXlUZXN0Q2FzZUNCT1Ip
OwotICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzVmFsdWUoKSk7CisgICAgc3RkOjpvcHRpb25hbDxD
Qk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtNYXBBcnJheVRlc3RDYXNlQ0JPUik7
CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CiAgICAgY29uc3QgQ0JPUlZhbHVl
IGNib3JWYWwgPSBXVEZNb3ZlKGNib3IudmFsdWUoKSk7CiAgICAgQVNTRVJUX1RSVUUoY2JvclZh
bC50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpNYXApOwogICAgIEFTU0VSVF9FUShjYm9yVmFs
LmdldE1hcCgpLnNpemUoKSwgMnUpOwpAQCAtMzkxLDggKzM5MSw4IEBAIFRFU1QoQ0JPUlJlYWRl
clRlc3QsIFRlc3RSZWFkTmVzdGVkTWFwKQogICAgICAgICAweDAzLAogICAgIH07CiAKLSAgICBP
cHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtOZXN0ZWRNYXBUZXN0
Q2FzZSk7Ci0gICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNWYWx1ZSgpKTsKKyAgICBzdGQ6Om9wdGlv
bmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQoa05lc3RlZE1hcFRlc3RDYXNl
KTsKKyAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKICAgICBjb25zdCBDQk9SVmFs
dWUgY2JvclZhbCA9IFdURk1vdmUoY2Jvci52YWx1ZSgpKTsKICAgICBBU1NFUlRfVFJVRShjYm9y
VmFsLnR5cGUoKSA9PSBDQk9SVmFsdWU6OlR5cGU6Ok1hcCk7CiAgICAgQVNTRVJUX0VRKGNib3JW
YWwuZ2V0TWFwKCkuc2l6ZSgpLCAydSk7CkBAIC00MjgsMTIgKzQyOCwxMiBAQCBURVNUKENCT1JS
ZWFkZXJUZXN0LCBUZXN0SW50ZWdlclJhbmdlKQogICAgICAgICAweDNiLCAweDdGLCAweEZGLCAw
eEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGCiAgICAgfTsKIAotICAgIE9wdGlvbmFs
PENCT1JWYWx1ZT4gbWF4UG9zaXRpdmVJbnQgPSBDQk9SUmVhZGVyOjpyZWFkKGtNYXhQb3NpdGl2
ZUludCk7Ci0gICAgQVNTRVJUX1RSVUUobWF4UG9zaXRpdmVJbnQuaGFzVmFsdWUoKSk7CisgICAg
c3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IG1heFBvc2l0aXZlSW50ID0gQ0JPUlJlYWRlcjo6cmVh
ZChrTWF4UG9zaXRpdmVJbnQpOworICAgIEFTU0VSVF9UUlVFKG1heFBvc2l0aXZlSW50Lmhhc192
YWx1ZSgpKTsKICAgICBFWFBFQ1RfRVEobWF4UG9zaXRpdmVJbnQudmFsdWUoKS5nZXRJbnRlZ2Vy
KCksIElOVDY0X01BWCk7CiAKLSAgICBPcHRpb25hbDxDQk9SVmFsdWU+IG1pbk5lZ2F0aXZlSW50
ID0gQ0JPUlJlYWRlcjo6cmVhZChrTWluTmVnYXRpdmVJbnQpOwotICAgIEFTU0VSVF9UUlVFKG1p
bk5lZ2F0aXZlSW50Lmhhc1ZhbHVlKCkpOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBt
aW5OZWdhdGl2ZUludCA9IENCT1JSZWFkZXI6OnJlYWQoa01pbk5lZ2F0aXZlSW50KTsKKyAgICBB
U1NFUlRfVFJVRShtaW5OZWdhdGl2ZUludC5oYXNfdmFsdWUoKSk7CiAgICAgRVhQRUNUX0VRKG1p
bk5lZ2F0aXZlSW50LnZhbHVlKCkuZ2V0SW50ZWdlcigpLCBJTlQ2NF9NSU4pOwogfQogCkBAIC00
NDgsMTEgKzQ0OCwxMSBAQCBURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0SW50ZWdlck91dE9mUmFu
Z2VFcnJvcikKICAgICB9OwogCiAgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yQ29k
ZTsKLSAgICBPcHRpb25hbDxDQk9SVmFsdWU+IHBvc2l0aXZlSW50T3V0T2ZSYW5nZUNCT1IgPSBD
Qk9SUmVhZGVyOjpyZWFkKGtPdXRPZlJhbmdlUG9zaXRpdmVJbnQsICZlcnJvckNvZGUpOworICAg
IHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBwb3NpdGl2ZUludE91dE9mUmFuZ2VDQk9SID0gQ0JP
UlJlYWRlcjo6cmVhZChrT3V0T2ZSYW5nZVBvc2l0aXZlSW50LCAmZXJyb3JDb2RlKTsKICAgICBF
WFBFQ1RfRkFMU0UocG9zaXRpdmVJbnRPdXRPZlJhbmdlQ0JPUik7CiAgICAgRVhQRUNUX1RSVUUo
ZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6T3V0T2ZSYW5nZUludGVnZXJW
YWx1ZSk7CiAKLSAgICBPcHRpb25hbDxDQk9SVmFsdWU+IG5lZ2F0aXZlSW50T3V0T2ZSYW5nZUNC
T1IgPSBDQk9SUmVhZGVyOjpyZWFkKGtPdXRPZlJhbmdlTmVnYXRpdmVJbnQsICZlcnJvckNvZGUp
OworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBuZWdhdGl2ZUludE91dE9mUmFuZ2VDQk9S
ID0gQ0JPUlJlYWRlcjo6cmVhZChrT3V0T2ZSYW5nZU5lZ2F0aXZlSW50LCAmZXJyb3JDb2RlKTsK
ICAgICBFWFBFQ1RfRkFMU0UobmVnYXRpdmVJbnRPdXRPZlJhbmdlQ0JPUik7CiAgICAgRVhQRUNU
X1RSVUUoZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6T3V0T2ZSYW5nZUlu
dGVnZXJWYWx1ZSk7CiB9CkBAIC00NzAsOCArNDcwLDggQEAgVEVTVChDQk9SUmVhZGVyVGVzdCwg
VGVzdFJlYWRTaW1wbGVWYWx1ZSkKICAgICB9OwogCiAgICAgZm9yIChjb25zdCBhdXRvJiB0ZXN0
Q2FzZSA6IGtTaW1wbGVWYWx1ZVRlc3RDYXNlcykgewotICAgICAgICBPcHRpb25hbDxDQk9SVmFs
dWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHRlc3RDYXNlLmNib3JEYXRhKTsKLSAgICAgICAg
QVNTRVJUX1RSVUUoY2Jvci5oYXNWYWx1ZSgpKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9S
VmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHRlc3RDYXNlLmNib3JEYXRhKTsKKyAgICAg
ICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CiAgICAgICAgIEFTU0VSVF9UUlVFKGNi
b3IudmFsdWUoKS50eXBlKCkgPT0gQ0JPUlZhbHVlOjpUeXBlOjpTaW1wbGVWYWx1ZSk7CiAgICAg
ICAgIEFTU0VSVF9UUlVFKGNib3IudmFsdWUoKS5nZXRTaW1wbGVWYWx1ZSgpID09IHRlc3RDYXNl
LnZhbHVlKTsKICAgICB9CkBAIC00OTAsOCArNDkwLDggQEAgVEVTVChDQk9SUmVhZGVyVGVzdCwg
VGVzdFJlYWRVbnN1cHBvcnRlZEZsb2F0aW5nUG9pbnROdW1iZXJzKQogCiAgICAgZm9yIChjb25z
dCBhdXRvJiB1bnN1cHBvcnRlZF9mbG9hdGluZ19wb2ludCA6IGZsb2F0aW5nUG9pbnRDYm9ycykg
ewogICAgICAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JDb2RlOwotICAgICAgICBP
cHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHVuc3VwcG9ydGVkX2Zs
b2F0aW5nX3BvaW50LCAmZXJyb3JDb2RlKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFz
VmFsdWUoKSk7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJl
YWRlcjo6cmVhZCh1bnN1cHBvcnRlZF9mbG9hdGluZ19wb2ludCwgJmVycm9yQ29kZSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsKICAgICAgICAgRVhQRUNUX1RSVUUo
ZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6VW5zdXBwb3J0ZWRGbG9hdGlu
Z1BvaW50VmFsdWUpOwogICAgIH0KIH0KQEAgLTUxNiw4ICs1MTYsOCBAQCBURVNUKENCT1JSZWFk
ZXJUZXN0LCBUZXN0SW5jb21wbGV0ZUNCT1JEYXRhRXJyb3IpCiAKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGluY29tcGxldGVfZGF0YSA6IGluY29tcGxldGVDYm9yTGlzdCkgewogICAgICAgICBDQk9S
UmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JDb2RlOwotICAgICAgICBPcHRpb25hbDxDQk9SVmFs
dWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGluY29tcGxldGVfZGF0YSwgJmVycm9yQ29kZSk7
Ci0gICAgICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc1ZhbHVlKCkpOworICAgICAgICBzdGQ6Om9w
dGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQoaW5jb21wbGV0ZV9kYXRh
LCAmZXJyb3JDb2RlKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOwog
ICAgICAgICBFWFBFQ1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9y
OjpJbmNvbXBsZXRlQ0JPUkRhdGEpOwogICAgIH0KIH0KQEAgLTUzNyw4ICs1MzcsOCBAQCBURVNU
KENCT1JSZWFkZXJUZXN0LCBUZXN0VW5zdXBwb3J0ZWRNYXBLZXlGb3JtYXRFcnJvcikKICAgICB9
OwogCiAgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yQ29kZTsKLSAgICBPcHRpb25h
bDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtNYXBXaXRoVWludEtleSwgJmVy
cm9yQ29kZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzVmFsdWUoKSk7CisgICAgc3RkOjpv
cHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtNYXBXaXRoVWludEtl
eSwgJmVycm9yQ29kZSk7CisgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVlKCkpOwogICAg
IEVYUEVDVF9UUlVFKGVycm9yQ29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6OkluY29y
cmVjdE1hcEtleVR5cGUpOwogfQogCkBAIC01NjYsOCArNTY2LDggQEAgVEVTVChDQk9SUmVhZGVy
VGVzdCwgVGVzdFVua25vd25BZGRpdGlvbmFsSW5mb0Vycm9yKQogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBpbmNvcnJlY3RfY2JvciA6IGtVbmtub3duQWRkaXRpb25hbEluZm9MaXN0KSB7CiAgICAg
ICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvckNvZGU7Ci0gICAgICAgIE9wdGlvbmFs
PENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQoaW5jb3JyZWN0X2Nib3IsICZlcnJv
ckNvZGUpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoY2Jvci5oYXNWYWx1ZSgpKTsKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGluY29ycmVj
dF9jYm9yLCAmZXJyb3JDb2RlKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzX3ZhbHVl
KCkpOwogICAgICAgICBFWFBFQ1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6RGVjb2Rl
ckVycm9yOjpVbmtub3duQWRkaXRpb25hbEluZm8pOwogICAgIH0KIH0KQEAgLTU4OSw4ICs1ODks
OCBAQCBURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0VG9vTXVjaE5lc3RpbmdFcnJvcikKIAogICAg
IGZvciAoY29uc3QgYXV0byYgemVyb0RlcHRoRGF0YSA6IGtaZXJvRGVwdGhDQk9STGlzdCkgewog
ICAgICAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JDb2RlOwotICAgICAgICBPcHRp
b25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKHplcm9EZXB0aERhdGEsICZl
cnJvckNvZGUsIDApOwotICAgICAgICBFWFBFQ1RfVFJVRShjYm9yLmhhc1ZhbHVlKCkpOworICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQoemVy
b0RlcHRoRGF0YSwgJmVycm9yQ29kZSwgMCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNib3IuaGFz
X3ZhbHVlKCkpOwogICAgICAgICBFWFBFQ1RfVFJVRShlcnJvckNvZGUgPT0gQ0JPUlJlYWRlcjo6
RGVjb2RlckVycm9yOjpDQk9STm9FcnJvcik7CiAgICAgfQogCkBAIC02MDksMTIgKzYwOSwxMiBA
QCBURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0VG9vTXVjaE5lc3RpbmdFcnJvcikKICAgICB9Owog
CiAgICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yQ29kZTsKLSAgICBPcHRpb25hbDxD
Qk9SVmFsdWU+IGNib3JTaW5nbGVMYXllck1heCA9IENCT1JSZWFkZXI6OnJlYWQoa05lc3RlZENC
T1JEYXRhLCAmZXJyb3JDb2RlLCAxKTsKLSAgICBFWFBFQ1RfRkFMU0UoY2JvclNpbmdsZUxheWVy
TWF4Lmhhc1ZhbHVlKCkpOworICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yU2luZ2xl
TGF5ZXJNYXggPSBDQk9SUmVhZGVyOjpyZWFkKGtOZXN0ZWRDQk9SRGF0YSwgJmVycm9yQ29kZSwg
MSk7CisgICAgRVhQRUNUX0ZBTFNFKGNib3JTaW5nbGVMYXllck1heC5oYXNfdmFsdWUoKSk7CiAg
ICAgRVhQRUNUX1RSVUUoZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6VG9v
TXVjaE5lc3RpbmcpOwogCi0gICAgT3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yRG91YmxlTGF5ZXJN
YXggPSBDQk9SUmVhZGVyOjpyZWFkKGtOZXN0ZWRDQk9SRGF0YSwgJmVycm9yQ29kZSwgMik7Ci0g
ICAgRVhQRUNUX1RSVUUoY2JvckRvdWJsZUxheWVyTWF4Lmhhc1ZhbHVlKCkpOworICAgIHN0ZDo6
b3B0aW9uYWw8Q0JPUlZhbHVlPiBjYm9yRG91YmxlTGF5ZXJNYXggPSBDQk9SUmVhZGVyOjpyZWFk
KGtOZXN0ZWRDQk9SRGF0YSwgJmVycm9yQ29kZSwgMik7CisgICAgRVhQRUNUX1RSVUUoY2JvckRv
dWJsZUxheWVyTWF4Lmhhc192YWx1ZSgpKTsKICAgICBFWFBFQ1RfVFJVRShlcnJvckNvZGUgPT0g
Q0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpDQk9STm9FcnJvcik7CiB9CiAKQEAgLTY0Niw5ICs2
NDYsOSBAQCBURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0T3V0T2ZPcmRlcktleUVycm9yKQogCiAg
ICAgQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yIGVycm9yQ29kZTsKICAgICBmb3IgKGNvbnN0IGF1
dG8mIHVuc29ydGVkTWFwIDoga01hcHNXaXRoVW5zb3J0ZWRLZXlzKSB7Ci0gICAgICAgIE9wdGlv
bmFsPENCT1JWYWx1ZT4gY2JvciA9CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q0JPUlZhbHVlPiBj
Ym9yID0KICAgICAgICAgQ0JPUlJlYWRlcjo6cmVhZCh1bnNvcnRlZE1hcCwgJmVycm9yQ29kZSk7
Ci0gICAgICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc1ZhbHVlKCkpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoY2Jvci5oYXNfdmFsdWUoKSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKGVycm9yQ29kZSA9
PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6Ok91dE9mT3JkZXJLZXkpOwogICAgIH0KIH0KQEAg
LTY3OCw4ICs2NzgsOCBAQCBURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0RHVwbGljYXRlS2V5RXJy
b3IpCiAKICAgICBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JDb2RlOwogCi0gICAgT3B0
aW9uYWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6cmVhZChrTWFwV2l0aER1cGxpY2F0
ZUtleSwgJmVycm9yQ29kZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzVmFsdWUoKSk7Cisg
ICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNib3IgPSBDQk9SUmVhZGVyOjpyZWFkKGtNYXBX
aXRoRHVwbGljYXRlS2V5LCAmZXJyb3JDb2RlKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2Jvci5oYXNf
dmFsdWUoKSk7CiAgICAgRVhQRUNUX1RSVUUoZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29k
ZXJFcnJvcjo6RHVwbGljYXRlS2V5KTsKIH0KIApAQCAtNjk4LDE0ICs2OTgsMTQgQEAgVEVTVChD
Qk9SUmVhZGVyVGVzdCwgVGVzdEluY29ycmVjdFN0cmluZ0VuY29kaW5nRXJyb3IpCiAKICAgICBD
Qk9SUmVhZGVyOjpEZWNvZGVyRXJyb3IgZXJyb3JDb2RlOwogICAgIGZvciAoY29uc3QgYXV0byYg
Y2Jvcl9ieXRlIDogdXRmOENoYXJhY3RlckVuY29kaW5ncykgewotICAgICAgICBPcHRpb25hbDxD
Qk9SVmFsdWU+IGNvcnJlY3RseUVuY29kZWRDYm9yID0gQ0JPUlJlYWRlcjo6cmVhZChjYm9yX2J5
dGUsICZlcnJvckNvZGUpOwotICAgICAgICBFWFBFQ1RfVFJVRShjb3JyZWN0bHlFbmNvZGVkQ2Jv
ci5oYXNWYWx1ZSgpKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGNvcnJlY3Rs
eUVuY29kZWRDYm9yID0gQ0JPUlJlYWRlcjo6cmVhZChjYm9yX2J5dGUsICZlcnJvckNvZGUpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShjb3JyZWN0bHlFbmNvZGVkQ2Jvci5oYXNfdmFsdWUoKSk7CiAg
ICAgICAgIEVYUEVDVF9UUlVFKGVycm9yQ29kZSA9PSBDQk9SUmVhZGVyOjpEZWNvZGVyRXJyb3I6
OkNCT1JOb0Vycm9yKTsKICAgICB9CiAKICAgICAvLyBJbmNvcnJlY3QgVVRGOCBlbmNvZGluZyBy
ZWZlcmVuY2VkIGJ5IHNlY3Rpb24gMy41LjMgb2YgdGhlIHN0cmVzcyB0ZXN0LgogICAgIFZlY3Rv
cjx1aW50OF90PiBpbXBvc3NpYmxlX3V0Zl9ieXRlIHsgMHg2NCwgMHhmZSwgMHhmZSwgMHhmZiwg
MHhmZiB9OwotICAgIE9wdGlvbmFsPENCT1JWYWx1ZT4gaW5jb3JyZWN0bHlFbmNvZGVkQ2JvciA9
IENCT1JSZWFkZXI6OnJlYWQoaW1wb3NzaWJsZV91dGZfYnl0ZSwgJmVycm9yQ29kZSk7CisgICAg
c3RkOjpvcHRpb25hbDxDQk9SVmFsdWU+IGluY29ycmVjdGx5RW5jb2RlZENib3IgPSBDQk9SUmVh
ZGVyOjpyZWFkKGltcG9zc2libGVfdXRmX2J5dGUsICZlcnJvckNvZGUpOwogICAgIEVYUEVDVF9G
QUxTRShpbmNvcnJlY3RseUVuY29kZWRDYm9yKTsKICAgICBFWFBFQ1RfVFJVRShlcnJvckNvZGUg
PT0gQ0JPUlJlYWRlcjo6RGVjb2RlckVycm9yOjpJbnZhbGlkVVRGOCk7CiB9CkBAIC03MjcsOCAr
NzI3LDggQEAgVEVTVChDQk9SUmVhZGVyVGVzdCwgVGVzdEV4dHJhbmVvdXNDQk9SRGF0YUVycm9y
KQogCiAgICAgZm9yIChjb25zdCBhdXRvJiBleHRyYW5lb3VzX2Nib3JEYXRhIDogemVyb1BhZGRl
ZENib3JMaXN0KSB7CiAgICAgICAgIENCT1JSZWFkZXI6OkRlY29kZXJFcnJvciBlcnJvckNvZGU7
Ci0gICAgICAgIE9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENCT1JSZWFkZXI6OnJlYWQoZXh0
cmFuZW91c19jYm9yRGF0YSwgJmVycm9yQ29kZSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShjYm9y
Lmhhc1ZhbHVlKCkpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPENCT1JWYWx1ZT4gY2JvciA9IENC
T1JSZWFkZXI6OnJlYWQoZXh0cmFuZW91c19jYm9yRGF0YSwgJmVycm9yQ29kZSk7CisgICAgICAg
IEVYUEVDVF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsKICAgICAgICAgRVhQRUNUX1RSVUUoZXJy
b3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJvcjo6RXh0cmFuZW91c0RhdGEpOwogICAg
IH0KIH0KQEAgLTc1OCw4ICs3NTgsOCBAQCBURVNUKENCT1JSZWFkZXJUZXN0LCBUZXN0VW5zdXBw
b3J0ZWRTaW1wbGV2YWx1ZSkKIAogICAgIGZvciAoY29uc3QgYXV0byYgdW5zdXBwb3J0ZWRTaW1w
bGVWYWwgOiB1bnN1cHBvcnRlZFNpbXBsZVZhbHVlcykgewogICAgICAgICBDQk9SUmVhZGVyOjpE
ZWNvZGVyRXJyb3IgZXJyb3JDb2RlOwotICAgICAgICBPcHRpb25hbDxDQk9SVmFsdWU+IGNib3Ig
PSBDQk9SUmVhZGVyOjpyZWFkKHVuc3VwcG9ydGVkU2ltcGxlVmFsLCAmZXJyb3JDb2RlKTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKGNib3IuaGFzVmFsdWUoKSk7CisgICAgICAgIHN0ZDo6b3B0aW9u
YWw8Q0JPUlZhbHVlPiBjYm9yID0gQ0JPUlJlYWRlcjo6cmVhZCh1bnN1cHBvcnRlZFNpbXBsZVZh
bCwgJmVycm9yQ29kZSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShjYm9yLmhhc192YWx1ZSgpKTsK
ICAgICAgICAgRVhQRUNUX1RSVUUoZXJyb3JDb2RlID09IENCT1JSZWFkZXI6OkRlY29kZXJFcnJv
cjo6VW5zdXBwb3J0ZWRTaW1wbGVWYWx1ZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NCT1JXcml0ZXJUZXN0LmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DQk9SV3JpdGVyVGVzdC5jcHAKaW5kZXggM2U5YmRk
MjZiNTk3ZDczNGI5NjBhYWIzYTY2MDE0YjdmNDI5NTFjMi4uMTk2MWE2Y2YzOWRlMDFmMTMxNjM1
YjBlMDlhZGJjNzIzYjA2OGNhNiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0NCT1JXcml0ZXJUZXN0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ0JPUldyaXRlclRlc3QuY3BwCkBAIC04MSw3ICs4MSw3IEBAIFRFU1QoQ0JP
UldyaXRlclRlc3QsIFRlc3RXcml0ZVVpbnQpCiAKICAgICBmb3IgKGNvbnN0IFVpbnRUZXN0Q2Fz
ZSYgdGVzdENhc2UgOiBrVWludFRlc3RDYXNlcykgewogICAgICAgICBhdXRvIGNib3IgPSBDQk9S
V3JpdGVyOjp3cml0ZShDQk9SVmFsdWUodGVzdENhc2UudmFsdWUpKTsKLSAgICAgICAgQVNTRVJU
X1RSVUUoY2Jvci5oYXNWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFs
dWUoKSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKGVxKGNib3IudmFsdWUoKSwgdGVzdENhc2UuY2Jv
cikpOwogICAgIH0KIH0KQEAgLTEwOCw3ICsxMDgsNyBAQCBURVNUKENCT1JXcml0ZXJUZXN0LCBU
ZXN0V3JpdGVOZWdhdGl2ZUludGVnZXIpCiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRlc3RDYXNl
IDoga05lZ2F0aXZlSW50VGVzdENhc2VzKSB7CiAgICAgICAgIGF1dG8gY2JvciA9IENCT1JXcml0
ZXI6OndyaXRlKENCT1JWYWx1ZSh0ZXN0Q2FzZS5uZWdhdGl2ZUludCkpOwotICAgICAgICBBU1NF
UlRfVFJVRShjYm9yLmhhc1ZhbHVlKCkpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192
YWx1ZSgpKTsKICAgICAgICAgRVhQRUNUX1RSVUUoZXEoY2Jvci52YWx1ZSgpLCB0ZXN0Q2FzZS5j
Ym9yKSk7CiAgICAgfQogfQpAQCAtMTI3LDcgKzEyNyw3IEBAIFRFU1QoQ0JPUldyaXRlclRlc3Qs
IFRlc3RXcml0ZUJ5dGVzKQogCiAgICAgZm9yIChjb25zdCBCeXRlc1Rlc3RDYXNlJiB0ZXN0Q2Fz
ZSA6IGtCeXRlc1Rlc3RDYXNlcykgewogICAgICAgICBhdXRvIGNib3IgPSBDQk9SV3JpdGVyOjp3
cml0ZShDQk9SVmFsdWUodGVzdENhc2UuYnl0ZXMpKTsKLSAgICAgICAgQVNTRVJUX1RSVUUoY2Jv
ci5oYXNWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CiAg
ICAgICAgIEVYUEVDVF9UUlVFKGVxKGNib3IudmFsdWUoKSwgdGVzdENhc2UuY2JvcikpOwogICAg
IH0KIH0KQEAgLTE1MSw3ICsxNTEsNyBAQCBURVNUKENCT1JXcml0ZXJUZXN0LCBUZXN0V3JpdGVT
dHJpbmcpCiAKICAgICBmb3IgKGNvbnN0IFN0cmluZ1Rlc3RDYXNlJiB0ZXN0Q2FzZSA6IGtTdHJp
bmdUZXN0Q2FzZXMpIHsKICAgICAgICAgYXV0byBjYm9yID0gQ0JPUldyaXRlcjo6d3JpdGUoQ0JP
UlZhbHVlKHRlc3RDYXNlLnN0cmluZykpOwotICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc1Zh
bHVlKCkpOworICAgICAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKICAgICAgICAg
RVhQRUNUX1RSVUUoZXEoY2Jvci52YWx1ZSgpLCB0ZXN0Q2FzZS5jYm9yKSk7CiAgICAgfQogfQpA
QCAtMTY4LDcgKzE2OCw3IEBAIFRFU1QoQ0JPUldyaXRlclRlc3QsIFRlc3RXcml0ZUFycmF5KQog
ICAgIGZvciAoaW50NjRfdCBpID0gMTsgaSA8PSAyNTsgaSsrKQogICAgICAgICBhcnJheS5hcHBl
bmQoQ0JPUlZhbHVlKGkpKTsKICAgICBhdXRvIGNib3IgPSBDQk9SV3JpdGVyOjp3cml0ZShDQk9S
VmFsdWUoYXJyYXkpKTsKLSAgICBBU1NFUlRfVFJVRShjYm9yLmhhc1ZhbHVlKCkpOworICAgIEFT
U0VSVF9UUlVFKGNib3IuaGFzX3ZhbHVlKCkpOwogICAgIEVYUEVDVF9UUlVFKGVxKGNib3IudmFs
dWUoKSwga0FycmF5VGVzdENhc2VDYm9yLCBzaXplb2Yoa0FycmF5VGVzdENhc2VDYm9yKSkpOwog
fQogCkBAIC0yNzgsNyArMjc4LDcgQEAgVEVTVChDQk9SV3JpdGVyVGVzdCwgVGVzdFdyaXRlTWFw
V2l0aE1hcFZhbHVlKQogICAgIG1hcFtDQk9SVmFsdWUoaW50NjRfdCg0Mjk0OTY3Mjk2KSldID0g
Q0JPUlZhbHVlKCJpIik7CiAgICAgbWFwW0NCT1JWYWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDY0X3Q+OjptYXgoKSldID0gQ0JPUlZhbHVlKCJqIik7CiAgICAgYXV0byBjYm9yID0gQ0JPUldy
aXRlcjo6d3JpdGUoQ0JPUlZhbHVlKG1hcCkpOwotICAgIEFTU0VSVF9UUlVFKGNib3IuaGFzVmFs
dWUoKSk7CisgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CiAgICAgRVhQRUNUX1RS
VUUoZXEoY2Jvci52YWx1ZSgpLCBrTWFwVGVzdENhc2VDYm9yLCBzaXplb2Yoa01hcFRlc3RDYXNl
Q2JvcikpKTsKIH0KIApAQCAtMzAxLDcgKzMwMSw3IEBAIFRFU1QoQ0JPUldyaXRlclRlc3QsIFRl
c3RXcml0ZU1hcFdpdGhBcnJheSkKICAgICBhcnJheS5hcHBlbmQoQ0JPUlZhbHVlKDMpKTsKICAg
ICBtYXBbQ0JPUlZhbHVlKCJiIildID0gQ0JPUlZhbHVlKGFycmF5KTsKICAgICBhdXRvIGNib3Ig
PSBDQk9SV3JpdGVyOjp3cml0ZShDQk9SVmFsdWUobWFwKSk7Ci0gICAgQVNTRVJUX1RSVUUoY2Jv
ci5oYXNWYWx1ZSgpKTsKKyAgICBBU1NFUlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKICAgICBF
WFBFQ1RfVFJVRShlcShjYm9yLnZhbHVlKCksIGtNYXBBcnJheVRlc3RDYXNlQ2Jvciwgc2l6ZW9m
KGtNYXBBcnJheVRlc3RDYXNlQ2JvcikpKTsKIH0KIApAQCAtMzI3LDcgKzMyNyw3IEBAIFRFU1Qo
Q0JPUldyaXRlclRlc3QsIFRlc3RXcml0ZU5lc3RlZE1hcCkKICAgICBuZXN0ZWRNYXBbQ0JPUlZh
bHVlKCJkIildID0gQ0JPUlZhbHVlKDMpOwogICAgIG1hcFtDQk9SVmFsdWUoImIiKV0gPSBDQk9S
VmFsdWUobmVzdGVkTWFwKTsKICAgICBhdXRvIGNib3IgPSBDQk9SV3JpdGVyOjp3cml0ZShDQk9S
VmFsdWUobWFwKSk7Ci0gICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNWYWx1ZSgpKTsKKyAgICBBU1NF
UlRfVFJVRShjYm9yLmhhc192YWx1ZSgpKTsKICAgICBFWFBFQ1RfVFJVRShlcShjYm9yLnZhbHVl
KCksIGtOZXN0ZWRNYXBUZXN0Q2FzZSwgc2l6ZW9mKGtOZXN0ZWRNYXBUZXN0Q2FzZSkpKTsKIH0K
IApAQCAtMzQ1LDcgKzM0NSw3IEBAIFRFU1QoQ0JPUldyaXRlclRlc3QsIFRlc3RXcml0ZVNpbXBs
ZVZhbHVlKQogCiAgICAgZm9yIChjb25zdCBhdXRvJiB0ZXN0Q2FzZSA6IGtTaW1wbGVUZXN0Q2Fz
ZSkgewogICAgICAgICBhdXRvIGNib3IgPSBDQk9SV3JpdGVyOjp3cml0ZShDQk9SVmFsdWUodGVz
dENhc2Uuc2ltcGxlVmFsdWUpKTsKLSAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNWYWx1ZSgp
KTsKKyAgICAgICAgQVNTRVJUX1RSVUUoY2Jvci5oYXNfdmFsdWUoKSk7CiAgICAgICAgIEVYUEVD
VF9UUlVFKGVxKGNib3IudmFsdWUoKSwgdGVzdENhc2UuY2JvcikpOwogICAgIH0KIH0KQEAgLTM3
MCwxOCArMzcwLDE4IEBAIFRFU1QoQ0JPUldyaXRlclRlc3QsIFRlc3RXcml0ZVNpbmdsZUxheWVy
KQogICAgIGNvbnN0IENCT1JWYWx1ZSBzaW5nbGVMYXllckNib3JNYXAgPSBDQk9SVmFsdWUoc2lt
cGxlTWFwKTsKICAgICBjb25zdCBDQk9SVmFsdWUgc2luZ2xlTGF5ZXJDYm9yQXJyYXkgPSBDQk9S
VmFsdWUoc2ltcGxlQXJyYXkpOwogCi0gICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6d3JpdGUo
c2ltcGxlVWludCwgMCkuaGFzVmFsdWUoKSk7Ci0gICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6
d3JpdGUoc2ltcGxlU3RyaW5nLCAwKS5oYXNWYWx1ZSgpKTsKLSAgICBFWFBFQ1RfVFJVRShDQk9S
V3JpdGVyOjp3cml0ZShzaW1wbGVCeXRlc3RyaW5nLCAwKS5oYXNWYWx1ZSgpKTsKKyAgICBFWFBF
Q1RfVFJVRShDQk9SV3JpdGVyOjp3cml0ZShzaW1wbGVVaW50LCAwKS5oYXNfdmFsdWUoKSk7Cisg
ICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6d3JpdGUoc2ltcGxlU3RyaW5nLCAwKS5oYXNfdmFs
dWUoKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6d3JpdGUoc2ltcGxlQnl0ZXN0cmlu
ZywgMCkuaGFzX3ZhbHVlKCkpOwogCi0gICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6d3JpdGUo
ZW1wdHlBcnJheVZhbHVlLCAwKS5oYXNWYWx1ZSgpKTsKLSAgICBFWFBFQ1RfVFJVRShDQk9SV3Jp
dGVyOjp3cml0ZShlbXB0eU1hcFZhbHVlLCAwKS5oYXNWYWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJV
RShDQk9SV3JpdGVyOjp3cml0ZShlbXB0eUFycmF5VmFsdWUsIDApLmhhc192YWx1ZSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjp3cml0ZShlbXB0eU1hcFZhbHVlLCAwKS5oYXNfdmFs
dWUoKSk7CiAKLSAgICBFWFBFQ1RfRkFMU0UoQ0JPUldyaXRlcjo6d3JpdGUoc2luZ2xlTGF5ZXJD
Ym9yQXJyYXksIDApLmhhc1ZhbHVlKCkpOwotICAgIEVYUEVDVF9UUlVFKENCT1JXcml0ZXI6Ondy
aXRlKHNpbmdsZUxheWVyQ2JvckFycmF5LCAxKS5oYXNWYWx1ZSgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoQ0JPUldyaXRlcjo6d3JpdGUoc2luZ2xlTGF5ZXJDYm9yQXJyYXksIDApLmhhc192YWx1ZSgp
KTsKKyAgICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjp3cml0ZShzaW5nbGVMYXllckNib3JBcnJh
eSwgMSkuaGFzX3ZhbHVlKCkpOwogCi0gICAgRVhQRUNUX0ZBTFNFKENCT1JXcml0ZXI6OndyaXRl
KHNpbmdsZUxheWVyQ2Jvck1hcCwgMCkuaGFzVmFsdWUoKSk7Ci0gICAgRVhQRUNUX1RSVUUoQ0JP
UldyaXRlcjo6d3JpdGUoc2luZ2xlTGF5ZXJDYm9yTWFwLCAxKS5oYXNWYWx1ZSgpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoQ0JPUldyaXRlcjo6d3JpdGUoc2luZ2xlTGF5ZXJDYm9yTWFwLCAwKS5oYXNf
dmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6d3JpdGUoc2luZ2xlTGF5ZXJD
Ym9yTWFwLCAxKS5oYXNfdmFsdWUoKSk7CiB9CiAKIC8vIE1ham9yIHR5cGUgNSBuZXN0ZWQgQ0JP
UiBtYXAgdmFsdWUgd2l0aCBmb2xsb3dpbmcgc3RydWN0dXJlLgpAQCAtMzk2LDggKzM5Niw4IEBA
IFRFU1QoQ0JPUldyaXRlclRlc3QsIE5lc3RlZE1hcHMpCiAgICAgbmVzdGVkTWFwW0NCT1JWYWx1
ZSgiYyIpXSA9IENCT1JWYWx1ZSgyKTsKICAgICBuZXN0ZWRNYXBbQ0JPUlZhbHVlKCJkIildID0g
Q0JPUlZhbHVlKDMpOwogICAgIGNib3JNYXBbQ0JPUlZhbHVlKCJiIildID0gQ0JPUlZhbHVlKG5l
c3RlZE1hcCk7Ci0gICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6d3JpdGUoQ0JPUlZhbHVlKGNi
b3JNYXApLCAyKS5oYXNWYWx1ZSgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoQ0JPUldyaXRlcjo6d3Jp
dGUoQ0JPUlZhbHVlKGNib3JNYXApLCAxKS5oYXNWYWx1ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRShD
Qk9SV3JpdGVyOjp3cml0ZShDQk9SVmFsdWUoY2Jvck1hcCksIDIpLmhhc192YWx1ZSgpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UoQ0JPUldyaXRlcjo6d3JpdGUoQ0JPUlZhbHVlKGNib3JNYXApLCAxKS5o
YXNfdmFsdWUoKSk7CiB9CiAKIC8vIFRlc3RpbmcgV3JpdGUoKSBmdW5jdGlvbiBmb3IgZm9sbG93
aW5nIENCT1Igc3RydWN0dXJlIHdpdGggZGVwdGggb2YgMy4KQEAgLTQyMiw4ICs0MjIsOCBAQCBU
RVNUKENCT1JXcml0ZXJUZXN0LCBVbmJhbGFuY2VkTmVzdGVkQ29udGFpbmVycykKICAgICBjYm9y
QXJyYXkuYXBwZW5kKENCT1JWYWx1ZSgzKSk7CiAgICAgY2JvckFycmF5LmFwcGVuZChDQk9SVmFs
dWUoY2Jvck1hcCkpOwogCi0gICAgRVhQRUNUX1RSVUUoQ0JPUldyaXRlcjo6d3JpdGUoQ0JPUlZh
bHVlKGNib3JBcnJheSksIDMpLmhhc1ZhbHVlKCkpOwotICAgIEVYUEVDVF9GQUxTRShDQk9SV3Jp
dGVyOjp3cml0ZShDQk9SVmFsdWUoY2JvckFycmF5KSwgMikuaGFzVmFsdWUoKSk7CisgICAgRVhQ
RUNUX1RSVUUoQ0JPUldyaXRlcjo6d3JpdGUoQ0JPUlZhbHVlKGNib3JBcnJheSksIDMpLmhhc192
YWx1ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoQ0JPUldyaXRlcjo6d3JpdGUoQ0JPUlZhbHVlKGNi
b3JBcnJheSksIDIpLmhhc192YWx1ZSgpKTsKIH0KIAogLy8gVGVzdGluZyBXcml0ZSgpIGZ1bmN0
aW9uIGZvciBmb2xsb3dpbmcgQ0JPUiBzdHJ1Y3R1cmUuCkBAIC00NTYsOCArNDU2LDggQEAgVEVT
VChDQk9SV3JpdGVyVGVzdCwgT3Zlcmx5TmVzdGVkQ0JPUikKICAgICBuZXN0ZWRNYXBbQ0JPUlZh
bHVlKCJoIildID0gQ0JPUlZhbHVlKGlubmVyTmVzdGVkTWFwKTsKICAgICBtYXBbQ0JPUlZhbHVl
KCJiIildID0gQ0JPUlZhbHVlKG5lc3RlZE1hcCk7CiAKLSAgICBFWFBFQ1RfVFJVRShDQk9SV3Jp
dGVyOjp3cml0ZShDQk9SVmFsdWUobWFwKSwgNSkuaGFzVmFsdWUoKSk7Ci0gICAgRVhQRUNUX0ZB
TFNFKENCT1JXcml0ZXI6OndyaXRlKENCT1JWYWx1ZShtYXApLCA0KS5oYXNWYWx1ZSgpKTsKKyAg
ICBFWFBFQ1RfVFJVRShDQk9SV3JpdGVyOjp3cml0ZShDQk9SVmFsdWUobWFwKSwgNSkuaGFzX3Zh
bHVlKCkpOworICAgIEVYUEVDVF9GQUxTRShDQk9SV3JpdGVyOjp3cml0ZShDQk9SVmFsdWUobWFw
KSwgNCkuaGFzX3ZhbHVlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktp
dFBvbGljeUNsaWVudC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdFdlYktpdFBvbGljeUNsaWVudC5jcHAKaW5kZXggNmY2ZWRkMTFmNmY4ZTVlM2Y5Y2Y3NzZl
YjEzYWNlNDI5OWM4Yzc3Mi4uMDdlMzY0MGJjNGJiMmE3ZmMxNGZlYWE5MzU3ZjE2NDg4ZGRkMzk2
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RX
ZWJLaXRQb2xpY3lDbGllbnQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R0xpYi9UZXN0V2ViS2l0UG9saWN5Q2xpZW50LmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHB1
YmxpYzoKIAogICAgICAgICAvLyBTcGluIHVudGlsIGF1dG9wbGF5IHN0YXR1cyBpcyByZXBvcnRl
ZCwgdGhlIHJ1biBKUyBBUEkgY2FuCiAgICAgICAgIC8vIGNvbXBsZXRlIGl0cyBtYWluIGxvb3Ag
YmVmb3JlIHRoZSBwcm9taXNlcyBpbiBhdXRvcGxheS1jaGVjayBmaXJlLgotICAgICAgICB3aGls
ZSAoIW1fYXV0b3BsYXllZC5oYXNWYWx1ZSgpKQorICAgICAgICB3aGlsZSAoIW1fYXV0b3BsYXll
ZC5oYXNfdmFsdWUoKSkKICAgICAgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsK
IAogICAgICAgICByZXR1cm4gKm1fYXV0b3BsYXllZDsKQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJs
aWM6CiAgICAgaW50IG1fcG9saWN5RGVjaXNpb25UeXBlRmlsdGVyIHsgMCB9OwogICAgIGJvb2wg
bV9yZXNwb25kVG9Qb2xpY3lEZWNpc2lvbkFzeW5jaHJvbm91c2x5IHsgZmFsc2UgfTsKICAgICBi
b29sIG1faGFsdE1haW5Mb29wQWZ0ZXJNYWtpbmdEZWNpc2lvbiB7IGZhbHNlIH07Ci0gICAgT3B0
aW9uYWw8Ym9vbD4gbV9hdXRvcGxheWVkOworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbV9hdXRv
cGxheWVkOwogICAgIEdSZWZQdHI8V2ViS2l0UG9saWN5RGVjaXNpb24+IG1fcHJldmlvdXNQb2xp
Y3lEZWNpc2lvbjsKICAgICBHUmVmUHRyPFdlYktpdFdlYnNpdGVQb2xpY2llcz4gbV93ZWJzaXRl
UG9saWNpZXM7CiB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHTGliL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R0xpYi9UZXN0V2ViS2l0V2ViVmlldy5jcHAKaW5kZXggOWQzZGM2MmM0ODY0ZGYyZWM3
YTY0YTAzMTY3ODVhNTI0ZjhmNmE4OC4uZDYwYzBiNjM3ZDNjOGE1MGNiZGU4MWY5MWYxY2E2Njdj
NTBkZmZkZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGli
L1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEdMaWIvVGVzdFdlYktpdFdlYlZpZXcuY3BwCkBAIC0xNDM3LDcgKzE0MzcsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBoYW5kbGVTdGFydCh1aW50MzJfdCBpZCwgaW50MzJfdCBjaGFubmVscywg
Y29uc3QgY2hhciogbGF5b3V0LCBpbnQzMl90IHNhbXBsZVJhdGUpCiAgICAgewogICAgICAgICBn
X2Fzc2VydChtX3N0YXRlID09IFJlbmRlcmluZ1N0YXRlOjpVbmtub3duKTsKLSAgICAgICAgZ19h
c3NlcnRfZmFsc2UobV9zdHJlYW1JZC5oYXNWYWx1ZSgpKTsKKyAgICAgICAgZ19hc3NlcnRfZmFs
c2UobV9zdHJlYW1JZC5oYXNfdmFsdWUoKSk7CiAgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoaWQs
ID09LCAwKTsKICAgICAgICAgbV9zdHJlYW1JZCA9IGlkOwogICAgICAgICBtX3N0YXRlID0gUmVu
ZGVyaW5nU3RhdGU6OlN0YXJ0ZWQ7CkBAIC0xNTEzLDcgKzE1MTMsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd3BlX2F1ZGlvX3JlY2VpdmVyIG1fYXVkaW9S
ZWNlaXZlcjsKICAgICBSZW5kZXJpbmdTdGF0ZSBtX3N0YXRlIHsgUmVuZGVyaW5nU3RhdGU6OlVu
a25vd24gfTsKLSAgICBPcHRpb25hbDx1aW50MzJfdD4gbV9zdHJlYW1JZDsKKyAgICBzdGQ6Om9w
dGlvbmFsPHVpbnQzMl90PiBtX3N0cmVhbUlkOwogfTsKIAogY29uc3Qgc3RydWN0IHdwZV9hdWRp
b19yZWNlaXZlciBBdWRpb1JlbmRlcmluZ1dlYlZpZXdUZXN0OjptX2F1ZGlvUmVjZWl2ZXIgPSB7
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0dlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2su
Y3BwCmluZGV4IGMyYTYzYjM4YjU1NzhkODRiNmUyMDRmNzQwYjM0YzViM2NhYTg2YjEuLmY3NzI0
N2I4Y2QwZTg4MTQ4N2IzYWM2YzYzNmFiNmU2M2FjMTM2MDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvR2VvbG9jYXRpb25Qcm92aWRlck1vY2suY3BwCkBAIC02Myw5ICs2Myw5
IEBAIEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjp+R2VvbG9jYXRpb25Qcm92aWRlck1vY2soKQog
ICAgIFdLR2VvbG9jYXRpb25NYW5hZ2VyU2V0UHJvdmlkZXIobV9nZW9sb2NhdGlvbk1hbmFnZXIs
IDApOwogfQogCi12b2lkIEdlb2xvY2F0aW9uUHJvdmlkZXJNb2NrOjpzZXRQb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgT3B0aW9uYWw8
ZG91YmxlPiBhbHRpdHVkZSwgT3B0aW9uYWw8ZG91YmxlPiBhbHRpdHVkZUFjY3VyYWN5LCBPcHRp
b25hbDxkb3VibGU+IGhlYWRpbmcsIE9wdGlvbmFsPGRvdWJsZT4gc3BlZWQsIE9wdGlvbmFsPGRv
dWJsZT4gZmxvb3JMZXZlbCkKK3ZvaWQgR2VvbG9jYXRpb25Qcm92aWRlck1vY2s6OnNldFBvc2l0
aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBz
dGQ6Om9wdGlvbmFsPGRvdWJsZT4gYWx0aXR1ZGUsIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBhbHRp
dHVkZUFjY3VyYWN5LCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gaGVhZGluZywgc3RkOjpvcHRpb25h
bDxkb3VibGU+IHNwZWVkLCBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gZmxvb3JMZXZlbCkKIHsKLSAg
ICBtX3Bvc2l0aW9uLmFkb3B0KFdLR2VvbG9jYXRpb25Qb3NpdGlvbkNyZWF0ZV9jKFdhbGxUaW1l
Ojpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgbGF0aXR1ZGUsIGxvbmdpdHVk
ZSwgYWNjdXJhY3ksIGFsdGl0dWRlLmhhc1ZhbHVlKCksIGFsdGl0dWRlLnZhbHVlX29yKDApLCBh
bHRpdHVkZUFjY3VyYWN5Lmhhc1ZhbHVlKCksIGFsdGl0dWRlQWNjdXJhY3kudmFsdWVfb3IoMCks
IGhlYWRpbmcuaGFzVmFsdWUoKSwgaGVhZGluZy52YWx1ZV9vcigwKSwgc3BlZWQuaGFzVmFsdWUo
KSwgc3BlZWQudmFsdWVfb3IoMCksIGZsb29yTGV2ZWwuaGFzVmFsdWUoKSwgZmxvb3JMZXZlbC52
YWx1ZV9vcigwKSkpOworICAgIG1fcG9zaXRpb24uYWRvcHQoV0tHZW9sb2NhdGlvblBvc2l0aW9u
Q3JlYXRlX2MoV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpLCBs
YXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgYWx0aXR1ZGUuaGFzX3ZhbHVlKCksIGFsdGl0
dWRlLnZhbHVlX29yKDApLCBhbHRpdHVkZUFjY3VyYWN5Lmhhc192YWx1ZSgpLCBhbHRpdHVkZUFj
Y3VyYWN5LnZhbHVlX29yKDApLCBoZWFkaW5nLmhhc192YWx1ZSgpLCBoZWFkaW5nLnZhbHVlX29y
KDApLCBzcGVlZC5oYXNfdmFsdWUoKSwgc3BlZWQudmFsdWVfb3IoMCksIGZsb29yTGV2ZWwuaGFz
X3ZhbHVlKCksIGZsb29yTGV2ZWwudmFsdWVfb3IoMCkpKTsKIAogICAgIG1faGFzRXJyb3IgPSBm
YWxzZTsKICAgICBtX2Vycm9yTWVzc2FnZS5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCmluZGV4IDhkNGQ4ZjI0YzVi
MmVjMjUxYTk1ZWQyNDM3ODdjMzdlYTBmOGJkOGMuLjZlM2Q1MmZiYzc0OGNmYmNiOWYxNDUzMzEz
M2ZiMjZkMWVhNGY2MzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VGVzdFJ1bm5lcldLV2ViVmlldy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29h
L1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KQEAgLTY4LDcgKzY4LDcgQEAgQGludGVyZmFjZSBUZXN0
UnVubmVyV0tXZWJWaWV3ICgpIDxXS1VJRGVsZWdhdGVQcml2YXRlCiAgICAgUmV0YWluUHRyPE5T
TnVtYmVyPiBtX3N0YWJsZVN0YXRlT3ZlcnJpZGU7CiAgICAgQk9PTCBfaXNJbnRlcmFjdGluZ1dp
dGhGb3JtQ29udHJvbDsKICAgICBCT09MIF9zY3JvbGxpbmdVcGRhdGVzRGlzYWJsZWQ7Ci0gICAg
T3B0aW9uYWw8Q3VzdG9tTWVudUFjdGlvbkluZm8+IF9jdXN0b21NZW51QWN0aW9uSW5mbzsKKyAg
ICBzdGQ6Om9wdGlvbmFsPEN1c3RvbU1lbnVBY3Rpb25JbmZvPiBfY3VzdG9tTWVudUFjdGlvbklu
Zm87CiAgICAgUmV0YWluUHRyPE5TQXJyYXk8TlNTdHJpbmcgKj4+IF9hbGxvd2VkTWVudUFjdGlv
bnM7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5QdHI8VUlUYXBHZXN0dXJl
UmVjb2duaXplcj4gX3dpbmRvd1RhcEdlc3R1cmVSZWNvZ25pemVyOwpAQCAtMzE1LDcgKzMxNSw3
IEBAIC0gKEJPT0wpY2FuUGVyZm9ybUFjdGlvbjooU0VMKWFjdGlvbiB3aXRoU2VuZGVyOihpZClz
ZW5kZXIKICAgICBCT09MIGlzQ3VzdG9tQWN0aW9uID0gYWN0aW9uID09IEBzZWxlY3RvcihwZXJm
b3JtQ3VzdG9tQWN0aW9uOik7CiAgICAgQk9PTCBjYW5QZXJmb3JtQWN0aW9uQnlEZWZhdWx0ID0g
W3N1cGVyIGNhblBlcmZvcm1BY3Rpb246YWN0aW9uIHdpdGhTZW5kZXI6c2VuZGVyXTsKICAgICBp
ZiAoaXNDdXN0b21BY3Rpb24pCi0gICAgICAgIGNhblBlcmZvcm1BY3Rpb25CeURlZmF1bHQgPSBf
Y3VzdG9tTWVudUFjdGlvbkluZm8uaGFzVmFsdWUoKTsKKyAgICAgICAgY2FuUGVyZm9ybUFjdGlv
bkJ5RGVmYXVsdCA9IF9jdXN0b21NZW51QWN0aW9uSW5mby5oYXNfdmFsdWUoKTsKIAogICAgIGlm
IChjYW5QZXJmb3JtQWN0aW9uQnlEZWZhdWx0ICYmIF9hbGxvd2VkTWVudUFjdGlvbnMgJiYgc2Vu
ZGVyID09IFVJTWVudUNvbnRyb2xsZXIuc2hhcmVkTWVudUNvbnRyb2xsZXIpIHsKICAgICAgICAg
Qk9PTCBpc0FsbG93ZWQgPSBOTzsK
</data>
<flag name="review"
          id="451417"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>